При оформлении торговых операций пользователи 1С часто сталкиваются с технической проблемой: при попытке пробить чек на ККТ (чаще всего марки АТОЛ) возникает системное сообщение «Ошибка программирования реквизита 1230 (неверный номер поля)». Примечательно, что ошибка может проявляться избирательно — например, только при оформлении документов предоплаты, в то время как авансовые платежи проходят успешно. Рассмотрим детально, почему это происходит и как устранить проблему в различных конфигурациях, таких как Управление нашей фирмой (УНФ) и Управление торговлей (УТ).
Для начала проанализируем, что именно представляет собой реквизит 1230. Согласно формату фискальных данных (ФФД), тег 1230 — это «Код страны происхождения товара». Он неразрывно связан с тегом 1231 — «Номер таможенной декларации» (ГТД). По закону эти данные должны передаваться в электронном чеке при расчетах между организациями и/или индивидуальными предпринимателями (B2B-сектор) в рамках ФФД 1.05 и выше.
Ошибка возникает в тот момент, когда драйвер кассового аппарата получает команду записать значение в поле, которое либо не соответствует формату, либо передается в ситуации, когда касса его не ожидает. Выясним причину, почему это происходит именно при предоплате. В режиме «Аванс» в чеке не указывается конкретный товарный состав, следовательно, программа не пытается выгрузить данные о ГТД и стране. Однако при «Предоплате» (когда товар уже выбран) 1С формирует детальный список позиций и пытается заполнить все доступные атрибуты, включая страну происхождения.
Одной из интересных особенностей, отмеченных пользователями, является разница в поведении программы при пробитии чека из разных рабочих мест. Рассмотрим ситуацию: если оформлять продажу через Рабочее место кассира (РМК), чек печатается без проблем. Но если использовать документ Приходный кассовый ордер (ПКО), созданный на основании Заказа или Реализации, возникает ошибка.
Это связано с тем, что в РМК используются упрощенные алгоритмы формирования фискального пакета, которые зачастую «очищают» лишние теги для физических лиц. В то же время механизмы печати из ПКО могут принудительно подтягивать данные из регистров накопления (видов запасов), считая, что раз в документе указан товар с ГТД, то эти данные обязательны для передачи в драйвер.
Первым делом проанализируем данные в справочнике «Номера ГТД». Драйверы АТОЛ версии 10.х крайне чувствительны к лишним символам. Проделаем следующие действия:
Если ошибка сохраняется, а расчет производится с физическим лицом (которому данные ГТД в чеке не требуются), можно воспользоваться механизмом корректировки «Видов запасов». Рассмотрим, как это сделать:
В документе «Реализация товаров и услуг», на основании которого вы пробиваете ПКО, выполните следующие действия:
После очистки данных в видах запасов 1С перестанет передавать теги 1230 и 1231 в драйвер ККТ, и чек будет пробит успешно.
Выясним еще одну важную деталь: не считает ли система вашего покупателя юридическим лицом? Если в карточке физического лица по ошибке заполнен ИНН или установлен флаг «Юр. лицо», программа 1С будет формировать пакет данных согласно требованиям для B2B-расчетов. Проверьте реквизиты контрагента в документе оплаты. Если ИНН заполнен, драйвер обязан передать теги 1227 (покупатель) и 1228 (ИНН покупателя), а вместе с ними могут «подтянуться» и требования к заполнению 1230/1231.
Проанализируем ситуацию с точки зрения программного обеспечения кассы. В сообщениях форума упоминается драйвер версии 10.8.1.0. В этой и последующих версиях компания АТОЛ реализовала строгую валидацию полей. Если конфигурация 1С (например, старый релиз УНФ 1.6.25.152) передает тег 1230, но не передает 1231, или передает их пустыми строками, драйвер возвращает ошибку «неверный номер поля».
В некоторых случаях помогает обновление драйвера до версии 10.9+ или, наоборот, откат на более стабильную версию 10.6.3.0, если конфигурация 1С давно не обновлялась. Однако наиболее правильным решением будет установка патчей для 1С или обновление конфигурации до актуальной версии (в случае УНФ — до 1.6.27 и выше), так как разработчики 1С выпускали специальные исправления для фильтрации тегов 1230/1231 в документах ПКО.
Если вы являетесь разработчиком и имеете доступ к модификации кода, можно посмотреть, как формируется XML-пакет для кассы. В модулях интеграции с библиотекой подключаемого оборудования (БПО) за формирование позиции чека отвечает объект ОписаниеПозиций. Проанализируем фрагмент логики, который может приводить к ошибке:
// Пример логики в типовых решениях
Если ЗначениеЗаполнено(СтрокаТаблицы.НомерГТД) Тогда
ДанныеПозиции.СтранаПроисхожденияКод = СтрокаТаблицы.СтранаПроисхожденияКод;
ДанныеПозиции.НомерТаможеннойДекларации = СтрокаТаблицы.НомерГТД;
КонецЕсли;
Чтобы избежать ошибки, можно добавить дополнительную проверку на тип покупателя. Если покупатель — физическое лицо, передачу этих тегов следует блокировать программно. Рассмотрим пример условия:
Если ЭтоРасчетМеждуОрганизациями Тогда
// Передаем ГТД и страну только для B2B
ПараметрыРегистрации.Вставить("КодСтраныПроисхождения", КодСтраны);
ПараметрыРегистрации.Вставить("НомерГТД", НомерГТД);
Иначе
// Для физлиц очищаем эти поля во избежание ошибки 1230
ПараметрыРегистрации.Удалить("КодСтраныПроисхождения");
ПараметрыРегистрации.Удалить("НомерГТД");
КонецЕсли;
Подводя итоги, отметим, что ошибка программирования реквизита 1230 — это следствие избыточной или некорректной передачи данных о импортном товаре в кассовый аппарат при расчетах с розничными покупателями. Для оперативного решения проблемы достаточно очистить номера ГТД в табличной части или в видах запасов документа реализации. Для долгосрочного решения рекомендуется обновить конфигурацию 1С и драйвер ККТ до актуальных версий, где механизмы разделения чеков на B2B и B2C работают более корректно.