Вход | Регистрация


Форумы на Кубань.Ру


1С:Предприятие ::

Метки:

Как получить данные 1С непоследственно из dbf файлов

Ø
Я
   Oksiel
26.11.04 - 12:43
Необходима синхронизация данных 1С и другой БД (Delphy).
Получение данных из 1С (OLE) за месяц занимает 3,5 часа. Всего 950 документов по 10 - 20 строк.
Очень долго.
Было бы быстрее скопировать нужные dbf файлы и запросом получить то что нужно. Но как?
Кто нибудь делал что-то подобное?
 
  Рекламное место пустует
   Человек дождя
1 - 26.11.04 - 12:50
1С-ка хранит в dbf-ках информацию не совсем пригодную для непосредственной работы. Лучше выгрузить из 1С-ки обработкой то что нужно. А потом тащить из них то что нужно. Процедура не сложная. См. описание встроенного языка
   SiAl
2 - 26.11.04 - 12:54
(0) А точно OLE виновато, может запрос не оптимизирован? Попробуй одн и тот же алгоритм при формировании файла импорта через OLE, и напрямую из 1С. С OLE работаю нечасто так что сказанно мной не аксиома, меня всегда устраивало скорость через OLE.
   Oksiel
3 - 26.11.04 - 13:02
(1) Пригодна или нет - это дело вкуса. Пока нет времени вникнуть, но кажется, что все данные можно получить анализируя файлы DD и MD.
.
(2) сначала пытался получить значение табличной части документов за месяц запросом. И обработкой и OLE, но запрс выполнялся очень долго. Прождал 1 час и снял задачу.
   Человек дождя
4 - 26.11.04 - 13:10
(3) Какие данные можно получить из MD и DD? Только структуру метаданных и код. А тебе нужна структура dbf-ок с данными.
* * *
Еще раз скажу - не стоит работать со служебными dbf-ками. Лучше из 1С-ки выгрузить только то что нужно в специально созданную dbf-ку.
* * *
Что-то не так с запросом если он данные за месяц не может получить за час. Покажи код запроса, разберемся
   zooz
5 - 26.11.04 - 13:12
1 описание языка работа с дбф(все довольно шустро)
2 в .dd есть описание всех dbf и полей бери и пользуй
   Человек дождя
6 - 26.11.04 - 13:16
(5) Да не нужно работать с 1С на физическом уровне. Она сама способна достаточно быстро все выгрузить, и не придется выполнять ту работу которую хорошо выполняет платформа
   SiAl
7 - 26.11.04 - 13:17
(3) Выложи текст запроса и при обработке запроса обращаешься к базе данных или пользуешься результатами запроса. Обычно еще существует такая фишка, что идет перебор документов, хотя, ИМХО, стоило перебирать движения регистра, порожденные этими документами.
   zooz
8 - 26.11.04 - 13:27
(6)да я бы тоже не рекомендовал, только в ряде редких случаев,
а так похоже что у (0) обработка не оптимизирована, ну или были случаи
когда люди ПРОСТО даже про монопольный режим не знали
   Oksiel
9 - 26.11.04 - 13:29
(4)(7) Первоначальный текст запроса не сохранился. Опишу по памяти.
3 группировки - реквизит шапки
12 группировок - реквизиты ТЧ
Если реквизит - элемент справочника - получаю код (через OLE трудно с объектами работать)
Всего должно выгрузится порядка 35000 строк. Так что не удивительно, что такое большое время.
Сейчас делаю перебор документов. Так лучше видно процесс. Раньше прога уйдет на выполнение запроса и не понятно висит или что-то делает.
(8) МОНОПОЛКА не годится - синхронизация параллельно с работой других юзеров.
   zooz
10 - 26.11.04 - 13:34
(9)не понял у тебя синхрон в текущем времени что-ли
 
  Рекламное место пустует
   Oksiel
11 - 26.11.04 - 13:36
(10) Да. Просто одна БД ведущая, другая ведомая (в некоторой области данных).
   zooz
12 - 26.11.04 - 13:37
 и на каких русурсах ты это тянешь?
   SiAl
13 - 26.11.04 - 13:38
(4) М-да. Понимаешь, даже запросом при проверке условий постоянно обращаться к базе, да еще после выполнения обрабатывать запрос и опять лезть в базу за недостающим, хотя лучше было бы все это включить в запрос. Но нужен был текст, а не твои намерения каким должен быть его результат.
   zooz
14 - 26.11.04 - 13:41
раз в ночь это делать нереал?
1с туеву хучу времмени тратит на проверку доступа
из практики в моно бывает 7-8 раз быстрее
   Oksiel
15 - 26.11.04 - 13:44
(12) Пока отлаживаю программу на VB6 на локалке (1С на серваке). Позже обещают выделить отдельный комп. Пробовал запускать на принтерном серваке - тормозит печать.
Речь не идет о мгновенной синхронизации. Но хотелось бы уложиться в 1 час. НО пока приходится планировать только ночную обработку :)
   alexd
16 - 26.11.04 - 13:44
> (0) Если ты хорошо помнишь, что такое Primary key и Foreign key, а также хорошо разобрался, как в 1с реализованы 3УНФ и 5НФ, то может есть смысл начать составлять таблицу отношений твоей БД. Если у тебя получится сделать это без ошибок, то останется с какой-нибудь быстрой СУБД для dBase (например Visual FoxPro или СА Visual Objects) написать все, что тебе нужно. Но, я думаю, обработка с использованием OLE сделает все горазда раньше, чем ты проделаешь все перечисленное. Удачи:)
   NS
17 - 26.11.04 - 13:45
(1)
Ничего не понимаю...
Самый быстрый способ - как раз напрямую из ДБФ-ов базы вытаскивать данные.
Структура - очень простая - какие там могут быть проблемы?
   DES
18 - 26.11.04 - 13:53
Дело тебе говорят.
Не заморачивайся.
Запускай свой прогой 1С под юзером, который автоматом делает выгрузку во внешний файл нужной тебе структуры и выходит из 1С.
После этого уже грузи прогой это файл.
И прозрачно и быстро и красиво и самое главное легко модернизируется в дальнейшем.
   Oksiel
19 - 26.11.04 - 13:57
(17) Вот и я о том-же. Конечно в начале придется повозиться.
Пробовал просмотреть dbf файлы. И видет те данные (не все пока), которые нужны. Получить по запросу подключив dbf к mdb - (мне кажется) можно за несколько секунд. По крайней мере из БД Delphy я получаю данные так (подключив файлы db).
Но проблема в том, что структура и имена в 1С формируется динамически. А у меня еще 2 филиала и нет гарантии что имена файлов и полей везде одинакова.
Хотя модет и это и не так...
   Oksiel
20 - 26.11.04 - 14:01
(13) Текст запроса (здесь только нет периода):
ОбрабатыватьДокументы все;Обрабатывать НеПомеченныеНаУдаление;
Doc = Документ.МойДокумент.ТекущийДокумент;
Predpr = Документ.МойДокумент.Контрагент.КодА;
Agent = Документ.МойДокумент.Агент.Код;
DateP = Документ.МойДокумент.ДатаП;
NumG = Документ.МойДокумент.НомерИ;
Ga = Документ.МойДокумент.Из.Код;
Gor = Документ.МойДокумент.Город.Код;
Zak = Документ.МойДокумент.НомерЗаказа;
Nar = Документ.МойДокумент.НомерНаряда;
Tip = Документ.МойДокумент.Номенклатура.КодА;
Ru = Документ.МойДокумент.Ру;
Kol = Документ.МойДокумент.Количество;
CenaFirst = Документ.МойДокумент.ЦенаПредварительно;
Cena = Документ.МойДокумент.Цена;
CenaIno = Документ.МойДокумент.ЦенаПоОплате;
Группировка Doc;Группировка Predpr Без Групп;Группировка Agent;Группировка DateP;Группировка NumG;
Группировка Ga;Группировка Gor;Группировка Zak;Группировка Nar;Группировка Tip;
Группировка Ru;Группировка Kol;Группировка CenaFirst;Группировка Cena;
Группировка CenaIno;
********
(18) Я уже пробовал получить данные запросом, но обработка более 1 часа.
Даже если запускал этот запрос из внешней обработки (ert).
   DES
21 - 26.11.04 - 14:06
Ну, группировки убери
Выгрузи все.
Надыбай ВК, которая сохраняет ТЗ в DBF.
Своей прогой потом группируй.
P.S. И слушайся старших.
   Oksiel
22 - 26.11.04 - 14:11
(21) Если убрать группировки, то ни чего не получим.
.
На счет ВК стоит подумать. Но опыта 0. И будет ли ВК быстрее работать чем обычная обработка (процедура в 1С)?
   DES
23 - 26.11.04 - 14:23
(22) Как это ничего? Проверял ;-)
Запрос.Выгрузить(ТЗ);
ТЗ.ВыбратьСтроку();
Проверь, ка.
---
ВК нужна (ли) только для выгрузки ТЗ в DBF.
Можно и без нее обойтись. Но ты же хочешь быстрее.
   Oksiel
24 - 26.11.04 - 14:32
(23) Я о запросе...
Если в запросе нет группировок (а формул и условий у меня и так нет), то получим пустой запрос.
Как потом с данными запроса поступить - нет проблем. НО сам запрос выполняется больше часа!
Вот где собака порылась (с) Горбачев.
   DES
25 - 26.11.04 - 14:42
|Группировка Док Без Групп ;-)
   DES
26 - 26.11.04 - 14:45
и
|Без Итогов;
   Oksiel
27 - 26.11.04 - 14:54
(25, 26) Согласен, но это не ускорит в разы. По большому счету нет разницы будет ли формироваться запрос 2 ч 10 м или 1 ч 50 м. Все таки непосредственное получение из dbf - самое быстрое.
Просто хотел найти единомышленников. И может кто-то поделится своим опытом. Но видимо не судьба...
   DES
28 - 26.11.04 - 14:57
ну, если проверять лень - то ...
   NS
29 - 26.11.04 - 14:58
(27) А чего там делиться?
Отчет-то простой, как и любая загрузка из ДБФ-ов
   Oksiel
30 - 26.11.04 - 15:18
(28) Проверю. Но позже.
(29) Я о том, что бы получить данные из dbf файлов самой 1С, а не сформированного обработкой или еще как-то.
   NS
31 - 26.11.04 - 15:19
(30) А что, у 1С какой-то особенный ДБФ?
Формат ДБФ-1С-ТМ?
   Человек дождя
32 - 26.11.04 - 15:22
И еще один момент. Как было замечено выше - особенного смысле делать перебор по документам нет. Ведь представляют интерес бухгалтерские и оперативные итоги которые эти документы формируют. Значит проще и быстрее сделать запрос например по регистрам.
* * *
Вот это действительно ускорит процесс в разы
   Oksiel
33 - 26.11.04 - 15:28
(31) Да нет же. Просто имя таблицы и имя поля 1С формирует самостоятельно и я не уверен, что запрос будет работать на всх БД 1С (в филиалах). Поэтому придется создавать запрос на основе анализа MD и DD. А это не просто (ИМХО).
(32) Как раз регистры меня не волнуют. Необходима инфа ТЧ. А итоги это бухам. Мне важно что бы первичная информация перетекала автоматом.
 
 
   Человек дождя
34 - 26.11.04 - 15:32
Обращаю внимание на то что именно из регистров (ну или из бух итогов) возможно самым быстрым образом получить информацию о документах породивших движения нужного вида.
* * *
   Человек дождя
35 - 26.11.04 - 15:34
Перебирать же первичную информацию (документы) нет никакого смысла. Нужно знать принципы работы платформы чтобы не делать таких ошибок
   Oksiel
36 - 26.11.04 - 15:38
(34) А вот это МЫСЛЬ. Если хорошо сделать движения регистров, то все можно получить и там. Есть о чем подумать.
*****
Итак выводы:
1. Попробовать оптимизировать запрос (немного побыстрее будет)
2. Получать инфу из регистров
.
Докумет добавляю новый и регистры еще не прописывал. Видимо из-за этого и зашел не с того конца :)
.
Всем спасибо.




Список тем форума

Форум Территория 1С

Рекламное место пустует   Рекламное место пустует
Миста — веселый ресурс со своими эксклюзивными тараканами Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует