Вступление
Здравствуйте.
Организации, сопровождающие решения 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).
На КДПВ же хаски 🙈
(1) «Сибирская лайка или хаски – выходец из восточного района Сибири», не?
(2) Ну, по сути, все они оттуда.
Но лайки, при ближайшем рассмотрении разительно отличаются от хаски.
В инете вы найдёте очень много противоречивой инфы, поэтому я думаю, что это мог бы быть довольно стрёмный спор.
Просто собака на картинке традиционно узнаётся, скорее, как хаски, нежели лайка.
Соединение с базой установил, написал что ОК, но при попытке обновления данных, выпадает везде где проверяет :
IIKOObject = like_CommonServer.GetIIKOObject(ObjectFields);
>>If IIKOObject.success Then
Тут выпадает с ошибкой свойства:
Лайка ОбщийМодуль.like_EntitiesAtServer.Модуль(174)}: Значение не является значением объектного типа (success)
If IIKOObject.success Then
(4) Да, судя по всему IIKOObject = Undefined и по всей видимости из-за
Смотрите, какой HTTP-код возвращается
(3) Не разбираюсь в породах собак. Надеюсь, что теперь более лайковая лайка
День добрый. Бух. хочет получать данные из Iiko для сдачи отчетности в Налоговые органы и Рос алкоголь регулирование. Достаточно будет этой обработки?
(7) Здравствуйте. Для сдачи отчетности в контролирующие органы, как правило, достаточно типовой выгрузки. Детали уточняйте у обслуживающей организации
Добрый день,
у нас айко <version>6.4.3013.0</version>.
при подключении получаю ответ 200 с телом
ition><version>6.4.3013.0</version><computerName>ХХХХХХХХХХХХХ</computerName><server State>STARTED_SUCCESSFULLY</serverState><protocol null=»1″></protocol><serverAddr null=»1″></serverAddr><serverSubUrl null=»1″></serverSubUrl><port>0</port><isPresent>false</isPr esent>
<serverName>ХХХХХХХХХХХХХХХ</serverName><edition>default</ed
но при запуске «Обновить объекты»
получаю ответ: код=403, WRONG_EDITION
версия расширения 0.1. Возможно есть новее версия Лайки ???
или какой-то другой способ заставить работать с нашей айко ??
спасибо
(9) Здравствуйте.
Да, существует более свежая версия Лайки, но она распространяется на других условиях.
В вашей версии можно исправить процедуру InitServerInfo() в модуле like_ConnectionAtServer:
Заменить строку:
на строки:
(10) Здравствуйте,
спасибо за реакцию, но уже вчера сам разобрался.
помимо корректировок в коде, необходимо увеличить еще и длину соответствущего
поля edition справочника Подключения (даже значение «IIKO_DEFAULT» не всмещалось).
А где можно почитать/посмотреть функционал, реализованный в новой версии ?
и условия распространения ?
спасибо
(11) Вследующем посте опубликована версия 0.2 с просмотром накладных. Текущая версия 0.3.5, но она не распространяется через Infostart