Прямой запрос к SQL. ВыбратьИерархически возможно? #610472


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

В этой группе 1С

Back to top