Имя: Пароль:
1C
1С v8
Прямой запрос к SQL. ВыбратьИерархически возможно?
0 extrim-style
 
14.05.12
11:30
Необходимо сделать автоматическую синхронизацию справочников между 7-кой SQL-ной и 8-кой файловой. Делаю прямой запрос к справочнику в SQL. В SQL есть поля ID (элемент, группа) и PARENTID (id родителя). Возможно ли получить выборку из SQL, аналогичную ВыбратьИерархически?
1 fisher
 
14.05.12
11:34
Возможно. Но проще работать через COM
2 extrim-style
 
14.05.12
11:42
(1) а как возможно, знаешь? Сильно сложно? Хотелось бы прямым запросом обойтись.
Проблема в установке родителей. Впринципе есть вариант перебирать сначала группы, потом элементы. Т.е. для элементов уже однозначно будут родители, но тогда с группами нужно повозиться.
3 extrim-style
 
14.05.12
11:49
Через COM-соединение нужен регламентный пользователь. Не хотелось бы его заводить.
4 extrim-style
 
14.05.12
12:03
Подскажите как лучше синхронизировать справочник на 50 тыс элементов в каждом новом сеансе? Может завести реквизит ДатаСоздания элемента в 7-ке?
5 Vakhrin
 
14.05.12
12:05
нужны доп функция получения уровня элемента - и будет тебе счастье... относительное, т.к. замедляет достаточно сильно )
6 Vakhrin
 
14.05.12
12:06
(4) дату создания и дату редактирования можно добавить средствами 1С, а потом в скуле на триггерах заполнять
7 extrim-style
 
14.05.12
12:06
(5) групп не много, думаю рекурсивной функцией обойтись
8 extrim-style
 
14.05.12
12:09
(6) а триггер зачем? у меня 8-ка файловая
9 fisher
 
14.05.12
12:10
(2) В лоб - функции сиквельные внедрять.
(3) Поверь, это решение намного проще. А главное - легче сопровождается и масштабируется.
(4) Интереснее всего использовать для этого механизм регистрации УРБД (табличку изменений после обмена чистить самому). Через триггера чуть хуже (они слетают после изменения конфы). Я бы делал именно через COM и УРБД. А еще лучше - прикрутил бы еще и КД.
10 fisher
 
14.05.12
12:11
(8) А первоисточник кто? Или двунаправленный обмен надо?
11 extrim-style
 
14.05.12
12:13
(10) Источник 7-ка. В 8-ке все 7-шные + свои.
12 rs_trade
 
14.05.12
12:15
(0) я просто сортировал по ЭтоГруппа и коду. И верхние группы шли и загружались-создавались первыми. Это не супер универсально конечно, но просто и работает.
13 extrim-style
 
14.05.12
12:15
(9) У меня немного групп - порядка ста. Если я сделаю сначала синхронизацию групп через рекурсивную функцию, а затем синхронизацию элементов. Как такой подход? Если будет медленно, добавлю в 7-ку дату создания элемента и добавлю отбор в SQL.
COM не хочу из-за необходимости создания регламентного пользователя.
14 extrim-style
 
14.05.12
12:18
Кстати, подскажите, а имена таблиц в 7-ке со временем не меняются? Регламентные процедуры типа реиндексации и реструктуризации не влияют? А то привяжусь, а потом абзац.
15 rs_trade
 
14.05.12
12:19
(14) нет
16 extrim-style
 
14.05.12
12:21
(15) спс
17 КонецЦикла
 
14.05.12
12:38
Тупое, но работает: левые соединения в кол-ве столько штук сколько уровней (по id родителя)
Зато нет функций уровня, полного кода и проч.
18 fisher
 
14.05.12
12:40
(13) Что сказать... Работать будет. Но это решение далеко не лучшее и по масштабируемости и по удобству сопровождения. Лучше всего регистрировать изменения и синхронизировать средствами 1С.
19 FN
 
14.05.12
13:39
(0) тяни только элементы + функция ПолучитьРодителя(АйДи), которая запускается рекурсивно и при отсутствии родителя отдельными запросами перетягивает иерархию
20 extrim-style
 
14.05.12
13:53
(19) В таком случае придется просматривать родителей для всех элементов. Не думаю, что это оптимально.
21 FN
 
14.05.12
14:23
(20) если родитель есть в 8-ке то просто возврат Родитель.Ссылка, а если нет - то запрос к 7-ке + создание родителя в 8-ке.
загрузка родителей произойдет только один раз, дальнейшей синхронизации/загрузки родителей происходить не будет
22 extrim-style
 
14.05.12
14:57
(21) вариант
23 КонецЦикла
 
17.05.12
00:30
(22) Угу, только не учтен перенос родителей в другую группу :)