Как исправить ошибку программирования реквизита 1230 (неверный номер поля) при печати чека в 1С

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет Торговля и дистрибуция
← На главную

При оформлении торговых операций пользователи 1С часто сталкиваются с технической проблемой: при попытке пробить чек на ККТ (чаще всего марки АТОЛ) возникает системное сообщение «Ошибка программирования реквизита 1230 (неверный номер поля)». Примечательно, что ошибка может проявляться избирательно — например, только при оформлении документов предоплаты, в то время как авансовые платежи проходят успешно. Рассмотрим детально, почему это происходит и как устранить проблему в различных конфигурациях, таких как Управление нашей фирмой (УНФ) и Управление торговлей (УТ).

Природа возникновения ошибки и тег 1230

Для начала проанализируем, что именно представляет собой реквизит 1230. Согласно формату фискальных данных (ФФД), тег 1230 — это «Код страны происхождения товара». Он неразрывно связан с тегом 1231 — «Номер таможенной декларации» (ГТД). По закону эти данные должны передаваться в электронном чеке при расчетах между организациями и/или индивидуальными предпринимателями (B2B-сектор) в рамках ФФД 1.05 и выше.

Ошибка возникает в тот момент, когда драйвер кассового аппарата получает команду записать значение в поле, которое либо не соответствует формату, либо передается в ситуации, когда касса его не ожидает. Выясним причину, почему это происходит именно при предоплате. В режиме «Аванс» в чеке не указывается конкретный товарный состав, следовательно, программа не пытается выгрузить данные о ГТД и стране. Однако при «Предоплате» (когда товар уже выбран) 1С формирует детальный список позиций и пытается заполнить все доступные атрибуты, включая страну происхождения.

Разберем по шагам: почему ошибка появляется в ПКО, но отсутствует в РМК

Одной из интересных особенностей, отмеченных пользователями, является разница в поведении программы при пробитии чека из разных рабочих мест. Рассмотрим ситуацию: если оформлять продажу через Рабочее место кассира (РМК), чек печатается без проблем. Но если использовать документ Приходный кассовый ордер (ПКО), созданный на основании Заказа или Реализации, возникает ошибка.

Это связано с тем, что в РМК используются упрощенные алгоритмы формирования фискального пакета, которые зачастую «очищают» лишние теги для физических лиц. В то же время механизмы печати из ПКО могут принудительно подтягивать данные из регистров накопления (видов запасов), считая, что раз в документе указан товар с ГТД, то эти данные обязательны для передачи в драйвер.

Способ 1: Проверка и корректировка номера ГТД

Первым делом проанализируем данные в справочнике «Номера ГТД». Драйверы АТОЛ версии 10.х крайне чувствительны к лишним символам. Проделаем следующие действия:

  1. Перейдем в карточку товара, на котором происходит сбой.
  2. Откроем связанный с ним номер ГТД.
  3. Проверим наличие лишних пробелов в начале или в конце строки. Часто при копировании номера из внешних файлов в поле попадают невидимые символы переноса строки или пробелы.
  4. Убедимся, что код страны (тег 1230) заполнен корректно и представляет собой трехзначное числовое значение по классификатору ОКСМ (например, 643 для России, 156 для Китая), а не буквенный код.

Способ 2: Редактирование видов запасов (для УТ 11 и ERP)

Если ошибка сохраняется, а расчет производится с физическим лицом (которому данные ГТД в чеке не требуются), можно воспользоваться механизмом корректировки «Видов запасов». Рассмотрим, как это сделать:

В документе «Реализация товаров и услуг», на основании которого вы пробиваете ПКО, выполните следующие действия:

  1. Нажмите кнопку «Еще» в верхней части документа.
  2. Выберите пункт «Открыть виды запасов».
  3. В открывшемся окне найдите колонку «Номер ГТД» и «Страна происхождения».
  4. Если для физлица эти поля заполнены, попробуйте временно очистить их или убедиться, что там нет некорректных данных.

После очистки данных в видах запасов 1С перестанет передавать теги 1230 и 1231 в драйвер ККТ, и чек будет пробит успешно.

Способ 3: Проверка типа контрагента

Выясним еще одну важную деталь: не считает ли система вашего покупателя юридическим лицом? Если в карточке физического лица по ошибке заполнен ИНН или установлен флаг «Юр. лицо», программа 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 работают более корректно.

← На главную