Рассмотрим ситуацию, с которой сталкиваются многие пользователи при обновлении кассового программного обеспечения. Вы обновляете Frontol, например, с версии 6.27.x до 6.28.x, и внезапно на кассе перестают пробиваться некоторые группы маркированных товаров, такие как корма для животных или БАДы. При этом другие маркированные товары (например, табак или обувь) продаются без проблем. Разберемся, почему так происходит и как исправить эту проблему в учетной системе на платформе 1С 7.7.
Основная причина такого поведения кроется в изменениях самого кассового ПО. Более ранние версии Frontol были менее требовательны к данным, получаемым из учетной системы. Они могли корректно обработать маркированный товар, даже если в файле обмена для него был указан общий тип, например, «Иная маркированная продукция».
С выходом новых версий, в частности 6.28.1 и выше, разработчики ужесточили контроль передаваемых данных. Теперь для каждой товарной группы, подлежащей обязательной маркировке, Frontol требует передачи точного числового кода, соответствующего этой группе. Система больше не "проглатывает" общие или неверные коды, что и приводит к ошибке на кассе.
Таким образом, проблема не в 1С как таковой, а в том, что старый формат выгрузки данных из 1С перестал соответствовать новым требованиям Frontol. Наша задача — привести выгрузку в соответствие с актуальной документацией.
Вероятно, в вашей конфигурации 1С 7.7 код для определения типа маркировки выглядел примерно так:
СпТиповМарк = СоздатьОбъект("СписокЗначений");
СпТиповМарк.ДобавитьЗначение(0, " <нет маркировки> ");
СпТиповМарк.ДобавитьЗначение(2, "2. Изделия из меха ");
СпТиповМарк.ДобавитьЗначение(3, "3. Лекарств.препараты");
СпТиповМарк.ДобавитьЗначение(4, "4. Обувь ");
// ... и так далее для других групп
СпТиповМарк.ДобавитьЗначение(14,"14.Биологически активные добавки к пище");
СпТиповМарк.ДобавитьЗначение(15,"15.Антисептики и дезинфицирующие средства");
СпТиповМарк.ДобавитьЗначение(16,"16.Корма для животных");
// ...
// Попытка получить строковое представление, но числовой код может быть неверным
СпТиповМарк.ПолучитьЗначение(макс(1,СпТиповМарк.НайтиЗначение(аисТипМаркировкиГИСМ)), ТипМаркировкиСтр);
Проблема этого подхода в том, что числовые значения (14, 16 и т.д.) могли быть актуальны для старых версий Frontol, но в новой версии они изменились. Чтобы получить правильные коды, необходимо обратиться к первоисточнику — «Руководству интегратора» для вашей версии Frontol.
Для корректной работы необходимо жестко задать соответствие между типом маркировки, указанным в карточке номенклатуры в 1С, и числовым кодом, который ожидает Frontol. Для этого изменим код выгрузки, используя конструкцию Если ... ИначеЕсли. Это гарантирует, что для каждой товарной группы будет передан правильный код.
Важный момент: в примере ниже переменная ТекТовар.аисТипМаркировкиГИСМ — это реквизит справочника «Номенклатура», в котором хранится тип маркировки товара. У вас он может называться иначе. Главное — получить из него значение, которое мы будем анализировать.
Вот пример исправленного кода:
ТекТовар = Спр.ТекущийЭлемент();
ПР = 1; // По умолчанию признак предмета расчета "Товар"
ТипМарк = 0; // По умолчанию нет маркировки
Если ТекТовар.аисТипМаркировкиГИСМ <= 3 Тогда // Алкоголь, меха, ЛП (коды могут совпадать)
ТипМарк = ТекТовар.аисТипМаркировкиГИСМ;
ИначеЕсли ТекТовар.аисТипМаркировкиГИСМ = 5 Тогда // Обувь
ТипМарк = 5;
ИначеЕсли ТекТовар.аисТипМаркировкиГИСМ = 4 Тогда // Табак
ПР = 2; // Для табака устанавливаем признак "Подакцизный товар"
ТипМарк = 4;
ИначеЕсли ТекТовар.аисТипМаркировкиГИСМ = 7 Тогда // Иная маркированная продукция
ТипМарк = 7;
ИначеЕсли ТекТовар.аисТипМаркировкиГИСМ = 9 Тогда // Парфюм
ТипМарк = 9;
ИначеЕсли ТекТовар.аисТипМаркировкиГИСМ = 10 Тогда // Шины
ТипМарк = 10;
ИначеЕсли ТекТовар.аисТипМаркировкиГИСМ = 11 Тогда // Легкая промышленность
ТипМарк = 11;
ИначеЕсли ТекТовар.аисТипМаркировкиГИСМ = 19 Тогда // БАДы
ТипМарк = 19;
ИначеЕсли ТекТовар.аисТипМаркировкиГИСМ = 20 Тогда // Антисептики
ТипМарк = 20;
ИначеЕсли ТекТовар.аисТипМаркировкиГИСМ = 21 Тогда // Медицинские изделия
ТипМарк = 21;
ИначеЕсли ТекТовар.аисТипМаркировкиГИСМ = 27 Тогда // Велосипеды
ТипМарк = 27;
ИначеЕсли ТекТовар.аисТипМаркировкиГИСМ = 28 Тогда // Ветеринарные препараты
ТипМарк = 28;
ИначеЕсли ТекТовар.аисТипМаркировкиГИСМ = 29 Тогда // Корма для животных
ТипМарк = 29;
ИначеЕсли ТекТовар.аисТипМаркировкиГИСМ = 34 Тогда // Моторные масла
ТипМарк = 34;
ИначеЕсли ТекТовар.аисТипМаркировкиГИСМ = 36 Тогда // Детские товары
ТипМарк = 36;
КонецЕсли;
// Далее переменные ПР и ТипМарк используются для формирования строки в файле выгрузки для Frontol.
Такой код явно сопоставляет каждый тип товара с его правильным кодом для Frontol, решая проблему выборочной неработоспособности маркировки.
Чтобы избежать путаницы в будущем и упростить работу пользователей при заведении новых товаров, рекомендуется обновить список выбора типов маркировки в самой карточке номенклатуры. Вместо старых названий и кодов укажите новые, актуальные.
Пример обновленного объекта СписокЗначений для формы элемента справочника «Номенклатура»:
СпТиповМарк = СоздатьОбъект("СписокЗначений");
СпТиповМарк.ДобавитьЗначение(0, " <нет маркировки>");
СпТиповМарк.ДобавитьЗначение(5, "5 - Обувь");
СпТиповМарк.ДобавитьЗначение(7, "7 – Иная маркированная продукция");
СпТиповМарк.ДобавитьЗначение(9, "9 – Парфюмерная продукция");
СпТиповМарк.ДобавитьЗначение(10, "10 - Шины");
СпТиповМарк.ДобавитьЗначение(11, "11 – Товары легкой промышленности");
СпТиповМарк.ДобавитьЗначение(19, "19 - БАДы");
СпТиповМарк.ДобавитьЗначение(20, "20 - Антисептики");
СпТиповМарк.ДобавитьЗначение(21, "21 – Медицинские изделия");
СпТиповМарк.ДобавитьЗначение(27, "27 – Велосипеды");
СпТиповМарк.ДобавитьЗначение(28, "28 – Ветеринарные препараты");
СпТиповМарк.ДобавитьЗначение(29, "29 – Корма для животных");
СпТиповМарк.ДобавитьЗначение(34, "34 – Моторные масла");
СпТиповМарк.ДобавитьЗначение(36, "36 – Детские товары");
// ... и другие используемые вами группы
Теперь пользователи будут видеть правильные коды прямо в интерфейсе, что снизит вероятность ошибок.
Ниже приведен полный список кодов, актуальный на момент появления подобных проблем. Настоятельно рекомендуется сверять этот список с последней версией «Руководства интегратора» от разработчика АТОЛ, так как он может дополняться с введением маркировки для новых товарных групп.
0 – Обычный товар1 – Алкогольная продукция2 – Изделия из меха3 – Лекарственные препараты4 – Табачная продукция5 – Обувь6 – Лотерея7 – Иная маркированная продукция8 – Фототовары9 – Парфюмерная продукция10 – Шины11 – Товары легкой промышленности12 – Альтернативная табачная продукция13 – Молочная продукция14 – Ювелирные изделия15 – Вода16 – Никотиносодержащая продукция17 – Фасованное пиво18 – Разливное пиво19 – БАДы20 – Антисептики21 – Медицинские изделия22 – Кресла-коляски23 – Безалкогольные напитки24 – Средства реабилитации25 – Безалкогольное пиво26 – Икра осетровых и лососевых рыб27 – Велосипеды28 – Ветеринарные препараты29 – Корма для животных30 – Растительные масла31 – Слабоалкогольные напитки32 – Консервированные продукты33 – Бакалея34 – Моторные масла35 – Спортивное питание36 – Детские товарыТаким образом, для решения проблемы необходимо обновить логику формирования файла обмена в 1С 7.7, обеспечив передачу точных числовых кодов для каждой маркируемой товарной группы в соответствии с требованиями вашей версии Frontol.