Как правильно передать артикул товара из 1С 7.7 во Frontol

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

В процессе интеграции 1С 7.7 с кассовым программным обеспечением Frontol (использующим стандартный текстовый формат обмена АТОЛ) часто возникает ситуация, когда стандартных полей (код, штрихкод, наименование, цена) становится недостаточно. Одной из наиболее распространенных задач является передача артикула товара. Рассмотрим подробно, почему простое добавление колонки в таблицу значений 1С не решает проблему и как правильно настроить выгрузку, чтобы данные корректно отобразились на кассе.

Анализируем причину проблемы: почему данные не попадают во Frontol

Проанализируем ситуацию, представленную в коде. Разработчик добавил новую колонку в объект ТаблицаЗначений и заполнил её данными из справочника номенклатуры:


СписокТоваров.НоваяКолонка("Код");
СписокТоваров.НоваяКолонка("Артикул");    
СписокТоваров.НоваяКолонка("Штрихкод");
// ... заполнение
СписокТоваров.Артикул = СокрЛП(Товар.Артикул);

Однако при просмотре сформированного файла загрузки (сообщение №3) мы видим, что структура строк осталась прежней. Это происходит потому, что во Frontol данные передаются не в виде таблицы, а в виде строго структурированного текстового файла, где каждое поле отделено символом точки с запятой ;. Выясним причину: за формирование этой строки отвечает либо глобальный модуль, либо внешняя обработка обслуживания ККМ (например, atol_kkm.ert).

Если мы просто добавили колонку в таблицу, но не изменили алгоритм «сборки» строки из этой таблицы, функция формирования файла просто проигнорирует новые данные. Разберем по шагам, что нужно сделать для исправления ситуации.

Шаг 1: Изучение формата обмена АТОЛ

Для начала рассмотрим структуру команды $$$ADDWARES или простого перечня товаров в формате АТОЛ. Каждое поле имеет свой строго определенный порядковый номер. Посмотрим на типичную строку из файла:

33532;4620006784146;Грунт-З Кокосовая смесь;...;00031;0;2;0;;;;;

Согласно документации «Интегратор» от компании АТОЛ, артикул товара обычно передается в 20-м поле. Это означает, что в текстовой строке перед артикулом должно стоять ровно 19 знаков разделителя (с учетом того, что некоторые поля могут быть пустыми).

Важный нюанс: Если мы сдвинем поля или добавим артикул не на свое место, Frontol либо выдаст ошибку при загрузке, либо запишет артикул в другое поле (например, в поле «Налог» или «Минимальный остаток»).

Шаг 2: Поиск места формирования строки в 1С

Перейдем к программному коду. Нам необходимо найти функцию, которая превращает наш СписокТоваров в текстовый файл. Чаще всего это происходит в процедуре глККМЗагрузитьТовары. Проанализируем, как строится цикл обхода таблицы:


СписокТоваров.ВыбратьСтроки();
Пока СписокТоваров.ПолучитьСтроку() = 1 Цикл
    // Здесь формируется строка для файла
    ТекстСтр = СокрЛП(СписокТоваров.Код) + ";" + СокрЛП(СписокТоваров.Штрихкод) + ";" + СокрЛП(СписокТоваров.Наименование) + ";";
    // ... далее идут другие поля
КонецЦикла;

Чтобы артикул попал в файл, нам нужно добавить его именно в этот цикл. Но нельзя просто приклеить его в конец. Нужно сосчитать количество разделителей ; и вставить СписокТоваров.Артикул на 20-ю позицию.

Шаг 3: Модернизация кода формирования файла

Рассмотрим пример правильной модификации алгоритма. Допустим, мы используем внешнюю обработку обслуживания. Нам нужно найти участок кода, отвечающий за сборку строки товара, и дополнить его. Выглядеть это должно примерно так:


// Пример формирования строки с учетом артикула (поле №20)
СтрОбмена = "";
СтрОбмена = СтрОбмена + СписокТоваров.Код + ";";          // 1. Код
СтрОбмена = СтрОбмена + СписокТоваров.Штрихкод + ";";     // 2. Штрихкод
СтрОбмена = СтрОбмена + СписокТоваров.Наименование + ";"; // 3. Наименование
// ... пропускаем поля с 4 по 19, вставляя просто ";"
Для НомерПоля = 4 По 19 Цикл
    СтрОбмена = СтрОбмена + ";";
КонецЦикла;
СтрОбмена = СтрОбмена + СписокТоваров.Артикул + ";";      // 20. Артикул

Обратите внимание: Для групп товаров (директорий) артикул, как правило, не передается. Выясним это в коде, используя проверку ЭтоГруппа(). Если мы выгружаем иерархию, для группы поле артикула должно остаться пустым, но количество разделителей должно сохраниться, чтобы не нарушить структуру последующих полей.

Шаг 4: Проверка типов данных и лишних символов

Frontol чувствителен к спецсимволам внутри полей. Проанализируем содержимое артикула перед выгрузкой. Если артикул содержит кавычки или точки с запятой, это может «развалить» структуру файла. Рекомендуем всегда использовать функцию СокрЛП() и, при необходимости, функцию очистки строки от недопустимых символов.


ЧистыйАртикул = СтрЗаменить(СписокТоваров.Артикул, ";", " "); // Заменяем точки с запятой на пробелы
СтрОбмена = СтрОбмена + СокрЛП(ЧистыйАртикул) + ";";

Шаг 5: Настройка во Frontol

Даже если файл сформирован верно, артикул может не появиться в интерфейсе кассира автоматически. Разберем, что нужно проверить в самой программе Frontol:

  1. Загрузка справочника: После загрузки файла зайдите в карточку любого товара во Frontol и убедитесь, что поле «Артикул» заполнено. Если оно пустое — возвращаемся к шагу 3 и проверяем позицию разделителей в 1С.
  2. Макет экрана: Если в карточке артикул есть, но кассир его не видит, нужно зайти в «Настройки» -> «Интерфейсы» -> «Макеты экрана». Там необходимо добавить колонку «Артикул» в список отображаемых полей для визуального поиска товаров.
  3. Версия формата: Убедитесь, что в настройках обмена 1С и Frontol выбрана одна и та же версия формата (например, АТОЛ 4.0 или 5.0). В разных версиях позиции полей могут незначительно отличаться.

Резюме для реализации

Подведем итог нашей совместной работы. Чтобы артикул начал передаваться:

  1. Убедитесь, что в 1С при формировании СписокТоваров колонка «Артикул» заполняется корректно (используйте Товар.Артикул для элементов).
  2. Найдите место в коде (обработка обслуживания или глобальный модуль), где формируется итоговая текстовая строка для записи в файл .txt.
  3. Добавьте переменную артикула в строку, строго соблюдая порядковый номер поля (обычно 20-е поле).
  4. Проверьте файл выгрузки обычным «Блокнотом» — вы должны увидеть артикул после большого количества пустых полей (точек с запятой).

Такой системный подход гарантирует, что данные попадут по назначению, а интеграция будет работать стабильно.

← На главную