Доброго дня, господа!
Сложилась такая ситуация, что нужно в базу 8, перегрузить справочник номенклатура, из базы на 7.7, причем делать это в регламентном задании на стороне 8 (клиент-серверная), после первоначальной загрузки в последующих "синхронизациях" нужно проверять на изменение наименования / полного наименования. Честно говоря раньше с такими задачами не сталкивался.
накидал вот такой код
V77 = Новый COMОбъект("V77.Application");
Запрос = V77.CreateObject("Запрос");
ТекстЗапроса=
"//{{ЗАПРОС(Сформировать)
|Обрабатывать НеПомеченныеНаУдаление;
|Номенклатура = Справочник.Номенклатура.ТекущийЭлемент;
|Код = Справочник.Номенклатура.Код;
|Наименование = Справочник.Номенклатура.Наименование;
|Родитель = Справочник.Номенклатура.Родитель.Наименование;
|РодительКод = Справочник.Номенклатура.Родитель.Код;
|Группировка Номенклатура;
|";//}}ЗАПРОС
Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
ОбщегоНазначения.СообщитьОбОшибке("Ошибка выпонения запроса номенклатуры в базе-источнике");
Возврат;
КонецЕсли;
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Код",,,15);
Таблица.Колонки.Добавить("Наименование",,,50);
Таблица.Колонки.Добавить("Родитель",,,50);
Таблица.Колонки.Добавить("РодительКод",,,15);
Таблица.Колонки.Добавить("ЭтоГруппа",,,1);
Пока Запрос.Группировка() Цикл
Строка = Таблица.Добавить();
Строка.ЭтоГруппа = Запрос.Номенклатура.ЭтоГруппа();
Строка.Код = Запрос.Код;
Строка.Наименование = Запрос.Наименование;
Строка.Родитель = Запрос.Родитель;
Строка.РодительКод = Запрос.РодительКод;
КонецЦикла;
V77 = "";
Но это только заполнение таблицы для последующей ее обработки, 36 тысяч элементов, заполняется почти 4 минуты, можно ли как то ускорить, хотя как, я особо не понимаю, но все же. Плюс может есть-какой то другой путь решения задачи ?
Группировка номенклатура без групп без упорядочивания
.
Тз = создатьобьект("таблицазначений")
Запрос.выгрузить(таблицазначений,....)
Н хрена непонятно про изменение наименования. Где может происходить - только на стороне 77? Если номенклатура в 77 изменяется !!! Только интерактивно!!! Заведи в спр. Номенклатура флаг с сортировка=1, при изменении взводи его, в запросе фильтруй по условию флаг=взведен, после отработки регзадания в конце его сбрасывай в 77 флаг. Первый регламент отработает медленно, остальные будут быстро.
При сбросе флага делай в транзакции по например 10 элементов, чтобы если какой дятел держит номенклатуру открытой - чтобы не сломалось. Сброс флага делай в попытке. Если очередная порция не прошла в транзакции - да и хрен с ней, при следующем регламенте пройдёт.
.
Или контроль изменений номенклатуры регистрируй штатно с использованием УРБД. Регламент будет подчищать таблицу изменений. Можно без урбд, служебный справочник изменений куда писать ссылку на номенклатуру которая изменилась и запрос только по этому списку.
.
Ну или проще всего прямым запросом
Если база файловая - с использованием 1sqlite прямой запрос. Ну и скульную базу тоже можно прямым запросом.
Ускорение на 1-2 порядка будет.
А если еще между регламентами закешировать verstamp элементов справочника и в прямом запросе фильтровать к отбору по несовпадающим верстамп (он у элемента меняется при каждой модификации) то вообще время мизер будет
В 77 поставить по умолчанию режим открытия "для просмотра" ибо нехер открыть, посмотреть и жать ОК.
Это я так, в порядке дежурного бреда накидал, топая пешком домой.
Гуры и сенсейбабаи поправят.
Изменения наименования/полного наименования я бы вообще контролировать забил. Чек только на изменение элемента как факт.
Если номенклатура (наименования) может меняться на двух сторонах - ССЗБ.
Схемы примерно те же самые с добавкой контроля изменений на снеговике
ВЫбросить нафиг ком соединение, делать через файл, самое простое dbf. На стороне 7.7 выгружаешь роботом по расписанию каждую ночь к примеру, а на стороне 8-ки загружаешь из файла. Работает такое фиг знает сколько лет и хлеба не просит. Чтобы уменьшить объем, у нас в номенклатуре 7.7 есть спецполе дата последнего редактирования, и в выгрузку выгружаем только измененные за последние несколько дней
ЗЛОП - спасибо за ответы.
Базы обе SQL правда лежат на разных серверах, прямые запросы в клюшках умею, а как из снеговика добраться до базы SQL 7.7 не умею...буду благодарен за пример.
А почему Группировка номенклатура без групп без упорядочивания - как тогда структуру справочника повторить если групп не будет ?
vladmenleo - чета dbf - совсем как то по олдскульному, но тоже как вариант.
Ну не хочешь по олдскульному, юзай xml к примеру. Хозяин барин ;D
Цитата: SnakePlisskin от 30 августа 2025, 08:39ЗЛОП - спасибо за ответы.
чета dbf - совсем как то по олдскульному, но тоже как вариант.
Дбф читается очень быстро