Создаем номенклатурную позицию в IIKO (Айко) по данным из 1С

От теории к практике: создаем номенклатурную позицию в Айко средствами 1С.

Вступление

Здравствуйте, друзья. Меня зовут Тян Семен. Я отвечаю в Лемме за обмен между Айко и 1С:Бухгалтерия.

Прежде чем приступить к обсуждению обозначенной темы, хотелось бы сделать небольшое отступление. Автор данной публикации открыт для всевозможной критики и не претендует на безупречность решений, которые будут далее в повествовании.

В цикле публикаций, посвященному обмену данными между IIKO и 1С:Бухгалтерия, рассматриваются альтернативные варианты обмена данными между учетными системами с целью решить вопросы, которые выходят за рамки типового решения.

В прошлой публикации были описаны основные альтернативные варианты взаимодействия с Айко из . Большое спасибо за вопросы, отклик, замечания и комментарии. Практически сразу было высказано пожелание рассмотреть теоретические раскладки хотя бы на одном реальном примере. В данном повествовании постараюсь исправить ситуацию и рассмотреть вариант создания номенклатурной позиции в Айко средствами .

От теории к практике

Прежде чем приступить к реализации, неплохо бы составить если не алгоритм, то хотя бы план выполнения обработки:

  • Выбираем позицию из справочника «Номенклатура»
  • Жмем на кнопку «Создать в Айко«
  • Заполняем служебные параметры: адрес и порт сервера, идентификаторы группы и единиц измерения
  • Формируем XML для отправки на сервер
  • Отправляем данные и обрабатываем ответ от Айко

Вряд ли есть смысл останавливаться на первых двух пунктах. А вот в третьем есть некоторые особенности (все их конечно же можно рассмотреть детальней в прикрепляемой обработке).

Нюансы с кодировкой

В процессе реализации очередного проекта пришлось столкнуться с неприятным моментом — система обработки запросов к Айкоупорно возвращала пустое значение вместо ожидаемого. На поверку оказалось, что все дело в кодировках. По заверению технарей, работающих плотно с системой, подрихтовать кодировку — задача нетривиальная. По этой причине было принято решение не морочить голову системным администраторам с перенастройкой окружения, а попросту скопом грузить все сведения по единицам измерения (дабы их немного) и выбирать непосредственно в .

Формируем XML

Далее следует пункт формирования XML-файла для отправки на сервер Айко. Да простят меня присутствующие — XDTO я не одолел. Изучил тематический цикл статей уважаемого Evil Beaver и статьи по обменам с Хабра, пытался набросать простую схему в различных редакторах, делал эксперименты с отдельными фрагментами и думал, думал, думал… все тщетно (буду рад, если все-таки научите делать как положено). Возможно в поставленной задаче использование XDTO — никому ненужное усложнение, но хотелось сделать «по красоте». На деле — в обработке большая и страшная портянка из RAW XML с вкраплениями значений переменных  (я предупредил).

Путем многочисленных проб и ошибок удалось получить минимально пригодный для передачи текст 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)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *