Вступление
Здравствуйте.
Организации, сопровождающие решения IIKO, предлагают своим клиентам не только типовой механизм обмена данных (выгрузка из IIKO в 1С), но и получение данных, отсутствующих в типовых файлах обмена с расширением .csv, а также выгрузку данных из 1С в IIKO.
В частности, на счету нашей организации уже имеются проекты как по доработке типовой выгрузки (к примеру с получением недостающей информации из OLAP-отчета), так и разработка решения "с нуля" под задачи конкретного клиента.
В ходе выполнения проектов наша команда не только автоматизирует бизнес-процессы клиентов, но и регулярно ищет оптимальные пути решения технических вопросов.
Одним из таких вопросов было использование механизма SQL-запросов при получении справочных сведений IIKO (Наблюдение 3 из статьи //infostart.ru/public/839723/)
Настройка типовой выгрузки из IIKO в 1С
Минусы запросов
Итак, чем же плох способ получения данных SQL-запросами?
- Для каждого типа СУБД нужно писать свой запрос (на данный момент их два: MSSQL Server и PostgreSQL). В качестве частичного решения данного вопроса нашей командой разработана "прослойка" из набора функций, позволяющих абстрагироваться от версии СУБД. Однако с изменением состава поддерживаемых систем потребуется также переработка такого решения;
- У пользователя может не быть прав на исполнение служебных скриптов, в том числе sql.jsp;
- Восстановление иерархии из "плоского списка" при выгрузке номенклатуры;
- Долгое выполнение и значительная нагрузка на сервер при запросах с фильтром по полю, содержащемуся в XML (да-да, практически все типозависимые данные справочника хранятся в поле ntext в экранированном XML. При отборе по таким полям сервер сначала преобразуем XML для всех полей и уже потом происходит отбор);
- Запрос по XML полю раз от раза будет оставаться "тяжелым";
- Низкоуровневое решение, которое может прийти в неработоспособное состояние при обновлении версии ПО
Что предлагается взамен?
А взамен предлагается вновь воспроизвести работу BackOffice - получать обновления справочных сведений, обращаясь к сервису Update сервера IIKO.
Лайка, что это за зверь такой?
Лайка - расширение 1С для интеграции с конфигурациями на управляемых формах с режимом совместимости 8.3.12. В расширении отражен концепт получения и обработки справочной информации из IIKO и занесение в справочники 1С: Номенклатура (like_products), Поставщики (like_users) и Склады (like_stores). Справочники имеют упрощенную структуру, но содержат необходимый минимум для обмена.
В Лайке реализован ряд служебных функций, которые позволяют взаимодействовать с данными IIKO, не углубляясь в особенности структуры данных: получение и обработка информации о сервере; возможность ведения нескольких подключений к разным серверам с фильтрацией отображаемых данных в зависимости от активного подключения; фоновое обновление данных; получение ответа сервера IIKO в виде объектаXDTO и др.
К примеру, процедура получения данных с сервера IIKO выглядит следующим образом:
Procedure Update(Parameters, ResultLink, Interactive = False) Export
ActiveConnection = like_ConnectionAtServer.GetActiveConnecton();
If ActiveConnection = Undefined Then
Return;
EndIf;
ConnectionObject = ActiveConnection.GetObject();
If Not (Interactive Or ConnectionObject.backgroundUpdate) Then
Return;
EndIf;
XMLPackage = getXMLEntitiesUpdate(ActiveConnection);
ConnectionFields = like_ConnectionAtServer.GetConnectionFields(ActiveConnection);
ObjectFields = like_CommonServer.GetObjectFieldsStructure();
ObjectFields.ConProps = ConnectionFields;
ObjectFields.Resource = "/resto/services/update";
ObjectFields.Namespace = "https://izi.cloud/iiko/reading/entitiesUpdateResponse";
ObjectFields.TypeName = "result";
ObjectFields.RequestType = "POST";
Params = New Map;
Params.Insert("methodName", "waitEntitiesUpdate");
ObjectFields.Parameters = Params;
ObjectFields.Headers = like_Common.getIIKOHeaders(ConnectionFields);
ObjectFields.Body = XMLPackage;
ObjectFields.isGZIP = True;
IIKOObject = like_CommonServer.GetIIKOObject(ObjectFields);
If IIKOObject.success Then
iiko_items = IIKOObject.entitiesUpdate.items.i;
For each item In iiko_items Do
ExeItem(ActiveConnection, item);
EndDo;
FillParents();
SetEntititesVersion(ActiveConnection, IIKOObject.entitiesUpdate.revision);
EndIf;
EndProcedure
Фоновое выполнение достигается путем вызова данной процедуры функцией ВыполнитьВФоне модуля ДлительныеОперации БСП.
Как стартануть?
- Скачать и установить расширение через раздел "Администрирование" (БСП) или "Все функции";
- Отключить у расширения "Безопасный режим" (необходимо для отправки HTTP-запросов);
- Перезапустить конфигурацию;
- В панели разделов появится Лайка.
- Далее создаем новое подключение ("Обновлять в фоне" означает, что метод выгрузки обновлений будет происходит с периодичностью в отдельном процессе) или сразу идем в обработку "Активирование подключения", откуда также можно его создать.
- Выбираем созданное подключение и жмем "Подключиться".
- Далее данные подгружаются автоматически (если у подключения установлена опция "Обновлять в фоне"), либо это можно сделать вручную, нажав "Обновить объекты".
- После загрузки сведений с сервера IIKO в справочниках должны появится соответствующие данные.
- Данные в справочниках фильтруются при отображении в зависимости от активного подключения.
- Первая загрузка может быть довольно длительной (при объемных справочниках Номенклатура сотни мегабайт в XML-представлении), но последующие (дельты) грузятся весьма быстро.
- Функция "Очистить данные IIKO" позволяет пометить на удаление все данные справочников, очистить служебный регистр сведений и сбросить активное подключение. Справочник "Подключения" остается невредимым.
Версии программного обеспечения
Платформа - 1С:Предприятие 8.3 (8.3.13.1690). По идее подойдет и гораздо старше, начиная с появления методов для работы с HTTP, строковые функции типа СтрРазделить.
Конфигурации - Бухгалтерия предприятия, редакция 3.0 (3.0.70.50), Управление нашей фирмой, редакция 1.6 (1.6.16.178), Управление торговлей, редакция 11 (11.4.6.166). По идее взлетит на любой конфигурации со свежей БСП с режимом совместимости 8.3.12.
IIKO - работа проверена на версиях, начиная с 5.5.4014 по 6.2.4011 (как Chain, так и RMS).