При работе в устаревших, но все еще активно используемых конфигурациях на платформе 1С 7.7 пользователи часто сталкиваются с жесткими ограничениями механизмов интеграции с онлайн-кассами. Одним из таких препятствий является печать фискального чека напрямую из документа ПриходныйКассовыйОрдер (ПКО). В типовом функционале программа принудительно ищет документ-основание (например, накладную или реализацию) и пытается «вытащить» оттуда перечень номенклатуры. Если ПКО создан вручную, у него нет табличной части товаров, и попытка напечатать чек вызывает системную ошибку.
В этой статье мы подробно разберем, как обойти это ограничение технически, как система формирует данные по умолчанию в конфигурации «1С:Бухгалтерия 7.7», и что необходимо доработать в коде программно для обхода проверки товарной части.
Прежде чем приступать к технической реализации обхода, важно понимать требования законодательства. Согласно Федеральному закону № 54-ФЗ, начиная с 1 февраля 2021 года, абсолютно все организации и индивидуальные предприниматели обязаны указывать в кассовом чеке точное наименование товара, работы или услуги, их количество и цену за единицу.
Передача обобщенных понятий (таких как «Товар», «Услуги по договору» или просто «Оплата по ПКО») признается налоговыми органами нарушением порядка применения ККТ. Единственным легитимным исключением является получение аванса или предоплаты, когда в момент расчета точный перечень товаров определить невозможно. В таком случае в чеке указывается признак способа расчета «Аванс», но при последующей отгрузке обязательно пробивается второй чек с полной детализацией номенклатуры.
С технической стороны ККМ все равно требует передать структуру с товарными позициями, поэтому в коде 1С 7.7 нам в любом случае придется сформировать виртуальную таблицу товаров, даже если физически в ПКО ее нет.
Давайте проанализируем, как разработчики фирмы «1С» решили эту проблему в последних обновлениях конфигурации. В типовом решении при печати чека из ПКО система пытается компенсировать отсутствие товарной сетки динамическим сбором информации.
В качестве наименования товара в обработку обслуживания ККМ передается текстовая строка, которая склеивается из реквизитов шапки ПКО:
ПринятоОт (ФИО или наименование контрагента).Основание (текст основания платежа).Например, в чек может уйти позиция: «Принято от ООО "Вектор" на основании Оплата услуг по договору №15» с количеством «1» и суммой, равной общей сумме ПКО. Фискальный регистратор примет этот текст как наименование одной товарной позиции и успешно пропечатает чек.
Если используемая вами обработка обслуживания ККМ или измененная конфигурация наотрез отказываются печатать чек без явной таблицы товаров, мы можем решить эту задачу программно. Для этого в модуле документа ПКО или во внешней обработке печати чека создадим временный объект типа ТаблицаЗначений, вручную заполним его одной строкой и передадим кассовому аппарату.
Рассмотрим по шагам, как реализовать этот алгоритм в коде 1С 7.7. Нам потребуется модифицировать процедуру, которая отвечает за отправку данных на ККМ:
// Создаем временную таблицу товаров
ТабТоваров = СоздатьОбъект("ТаблицаЗначений");
ТабТоваров.НоваяКолонка("Товар", "Строка");
ТабТоваров.НоваяКолонка("Количество", "Число");
ТабТоваров.НоваяКолонка("Цена", "Число");
ТабТоваров.НоваяКолонка("Сумма", "Число");
ТабТоваров.НоваяКолонка("СтавкаНДС", "Строка");
// Добавляем одну строку с данными из ПКО
ТабТоваров.НоваяСтрока();
// Формируем наименование товара из реквизитов ПКО
Если ПустаяСтрока(СокрЛП(Основание)) = 0 Тогда
ТабТоваров.Товар = "Оплата: " + СокрЛП(Основание);
Иначе
ТабТоваров.Товар = "Оплата по ПКО № " + СокрЛП(НомерДок);
КонецЕсли;
ТабТоваров.Количество = 1;
ТабТоваров.Цена = СуммаДокумента; // Сумма из реквизитов ПКО
ТабТоваров.Сумма = СуммаДокумента;
// Задаем ставку НДС в зависимости от учета (например, "Без НДС")
ТабТоваров.СтавкаНДС = "БЕЗ НДС";
// Передаем сформированную таблицу в метод печати чека ККМ
ОткрытьФорму("Отчет.ПечатьЧекаККМ", ТабТоваров);
Этот простой прием позволяет обмануть жесткие алгоритмы проверки и напечатать чек на любую сумму без привязки к справочнику номенклатуры.
В процессе обновления конфигураций под требования онлайн-касс фирма «1С» внедрила специальный механизм валидации — обработку ПредупреждениеОнлайнКассы. Эта обработка принудительно анализирует структуру чека перед отправкой на фискальный регистратор. Если она обнаруживает, что чек пробивается без заполненной номенклатуры или нарушаются другие правила ФЗ-54, печать полностью блокируется.
Для того чтобы обойти эту блокировку и разрешить печать чеков из ПКО напрямую, программисту часто приходится деактивировать вызов этой обработки. Проанализируем, где именно в конфигурации происходит этот вызов.
Обычно вызов располагается в глобальном модуле или непосредственно в модуле формы документа ПКО. Вам необходимо найти строку запуска этой обработки и закомментировать ее:
// Блокируем вызов предупреждений онлайн-кассы для ручных ПКО
// ОткрытьФорму("Обработка.ПредупреждениеОнлайнКассы", КонтекстПараметров);
Важное предупреждение: Отключая эту обработку, вы берете на себя ответственность за корректность передаваемых в налоговую данных. Убедитесь, что формируемые «ручные» чеки соответствуют требованиям вашего оператора фискальных данных (ОФД).
При ручном формировании чека из ПКО критически важно передать на кассу правильные значения признаков расчета. Очень часто разработчики путают два схожих реквизита: «Признак расчета» и «Признак способа расчета».
Выясним разницу между ними:
Приход (получение денег от покупателя). При возврате средств по РКО используется Возврат прихода.Предоплата или Аванс. Если же ПКО оформляется одновременно с передачей услуг/товаров, устанавливайте значение Полный расчет.Правильное комбинирование этих реквизитов в кодовой таблице параметров гарантирует, что к вашей организации не возникнет вопросов со стороны налоговых органов при проверке кассовой дисциплины.