Вступление
Здравствуйте, друзья. Меня зовут Тян Семен. Я отвечаю в Лемме за обмен между Айко и 1С:Бухгалтерия.
Прежде чем приступить к обсуждению обозначенной темы, хотелось бы сделать небольшое отступление. Автор данной публикации открыт для всевозможной критики и не претендует на безупречность решений, которые будут далее в повествовании.
В цикле публикаций, посвященному обмену данными между IIKO и 1С:Бухгалтерия, рассматриваются альтернативные варианты обмена данными между учетными системами с целью решить вопросы, которые выходят за рамки типового решения.
В прошлой публикации были описаны основные альтернативные варианты взаимодействия с Айко из 1С. Большое спасибо за вопросы, отклик, замечания и комментарии. Практически сразу было высказано пожелание рассмотреть теоретические раскладки хотя бы на одном реальном примере. В данном повествовании постараюсь исправить ситуацию и рассмотреть вариант создания номенклатурной позиции в Айко средствами 1С.
От теории к практике
Прежде чем приступить к реализации, неплохо бы составить если не алгоритм, то хотя бы план выполнения обработки:
- Выбираем позицию из справочника «Номенклатура»
- Жмем на кнопку «Создать в Айко«
- Заполняем служебные параметры: адрес и порт сервера, идентификаторы группы и единиц измерения
- Формируем XML для отправки на сервер
- Отправляем данные и обрабатываем ответ от Айко
Вряд ли есть смысл останавливаться на первых двух пунктах. А вот в третьем есть некоторые особенности (все их конечно же можно рассмотреть детальней в прикрепляемой обработке).
Нюансы с кодировкой
В процессе реализации очередного проекта пришлось столкнуться с неприятным моментом — система обработки запросов к Айкоупорно возвращала пустое значение вместо ожидаемого. На поверку оказалось, что все дело в кодировках. По заверению технарей, работающих плотно с системой, подрихтовать кодировку — задача нетривиальная. По этой причине было принято решение не морочить голову системным администраторам с перенастройкой окружения, а попросту скопом грузить все сведения по единицам измерения (дабы их немного) и выбирать непосредственно в 1С.
Формируем XML
Далее следует пункт формирования XML-файла для отправки на сервер Айко. Да простят меня присутствующие — XDTO я не одолел. Изучил тематический цикл статей уважаемого Evil Beaver и статьи по обменам с Хабра, пытался набросать простую схему в различных редакторах, делал эксперименты с отдельными фрагментами и думал, думал, думал… все тщетно (буду рад, если все-таки научите делать как положено). Возможно в поставленной задаче использование XDTO — никому ненужное усложнение, но хотелось сделать «по красоте». На деле — в обработке большая и страшная портянка из RAW XML с вкраплениями значений переменных 1С (я предупредил).
Путем многочисленных проб и ошибок удалось получить минимально пригодный для передачи текст XML:
здесь
- entities-version — версия объект, получается каждый раз с сервера запросом
- параметр eid тэга product — уникальный идентификатор номенклатурной позиции (дублируется в id)
- mainUnit — УИд единицы измерения
- type — тип номенклатуры (перечисление, GOODS — товары)
- num — артикул номенклатуры в Айко
- parent — УИд родителя (папки) создаваемой позиции
Последние два параметра — формировать ли автоматически код быстрого доступа и артикул в Айко соответственно.
Обрабатываем ответ сервера
В прилагаемом решении используется функция РасшифроватьGZIP(ДвоичныеДанные) из публикации //infostart.ru/public/844121/ . Конечно работать будет и без сжатия, достаточно в заголовках HTTP-запроса установить соответствующий параметр в none. Ответ никак не обрабатывается, однако никто не мешает сделать это для конкретного проекта (здесь и обработка сведений об ошибке и просто возможность получить информацию для уведомления о прохождении процесса).
Как пользоваться
Перед началом необходимо заполнить параметры в процедуре ИнициализацияНастроек() Помимо параметров подключения в данной процедуре можно включить флаг ведения лога и указать директорию для записи служебной информации. Параметр КодГруппы это артикул папки номенклатуры в Айко, куда будут помещены вновь созданные позиции. Отдельный функционал по обработке ответа от сервера не реализовывался. Результат можно увидеть в Айко.
Спасибо за внимание. Буду рад ответить на вопросы. Конструктивная критика приветствуется.
Версия конфигурации и платформы
Разработка велась на следующих версиях
Платформа — 1С:Предприятие 8.3 (8.3.11.2867). По идее подойдет и гораздо старше, начиная с появления методов для работы с HTTP, строковые функции типа СтрРазделить. Требования к РасшифроватьGZIP имеются на странице публикации.
Конфигурация — Бухгалтерия предприятия, редакция 3.0 (3.0.63.15), особо не роляет, возможности БСП не задействовались.
Айко — работа проверена на версиях, начиная с 4,5 (как Chain, так и RMS)