Как загрузить оплаты с сайта в 1С:Управление торговлей 11 без повторного пробития чеков?

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

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

Постановка задачи и анализ рисков

Основная цель — отразить движение денежных средств в регистрах 1С (чтобы менеджер видел оплату и мог отгрузить товар), но при этом полностью исключить взаимодействие с торговым оборудованием. Если мы просто создадим документ Операция по платежной карте или Приходный кассовый ордер, типовое регламентное задание по рассылке чеков или действия пользователя могут привести к двойному пробитию. Это является нарушением 54-ФЗ, так как выручка в отчетах ИФНС будет задвоена. Проанализируем ситуацию и найдем способы предотвращения этой ошибки.

Способ 1: Имитация пробитого чека через реквизиты документа

В большинстве конфигураций на базе БСП (Библиотеки стандартных подсистем), к которым относится и 1С:УТ 11, существует логическая проверка: если у документа уже заполнен номер чека, система считает его фискализированным. Рассмотрим простейший пример, как это можно использовать при программной загрузке.

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


// Пример заполнения документа при загрузке
НовыйДокумент = Документы.ОперацияПоПлатежнойКарте.СоздатьДокумент();
// ... заполнение основных реквизитов (контрагент, сумма, договор) ...
НовыйДокумент.НомерЧекаККМ = "12345"; // Указываем, что чек якобы уже пробит
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);

В дальнейшем, если пользователь попытается нажать кнопку «Пробить чек», система выполнит проверку, подобную этой:


Если Объект.НомерЧекаККМ <> 0 Тогда
    Предупреждение("Чек уже пробит на фискальном устройстве!");
    Возврат;
КонецЕсли;

Способ 2: Работа с регистром «Фискальные операции»

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

Проанализируем структуру данных: нам необходимо создать запись, связанную с нашим документом оплаты. Это наиболее надежный метод, так как он блокирует любые попытки повторной отправки в ОФД.


// Программное создание записи о фискальной операции
МенеджерЗаписи = РегистрыСведений.ФискальныеОперации.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Период = ТекущаяДата();
МенеджерЗаписи.ДокументОснование = СсылкаНаНашДокументОплаты;
МенеджерЗаписи.Организация = ОрганизацияДокумента;
МенеджерЗаписи.ТипДокумента = Перечисления.ТипыДокументовККТ.ЧеК; // Указываем тип операции
МенеджерЗаписи.НомерЧекаККМ = "777";
МенеджерЗаписи.Статус = Перечисления.СтатусыЧековККМ.Пробит; // Критически важный статус
МенеджерЗаписи.Записать();

После такой записи система будет считать, что документ успешно прошел через кассу. При попытке пробития 1С выдаст сообщение, что оплата уже принята и зафиксирована в журнале фискальных операций.

Способ 3: Использование корректировки задолженности

Если ваша задача — исключительно выравнивание баланса покупателя в 1С и на сайте, и вы не планируете использовать этот документ для сверки с банковской выпиской (например, выписка грузится отдельно), рассмотрим альтернативный вариант. Можно использовать документ Корректировка задолженности (или Взаимозачет задолженности).

Этот документ делает движения по регистрам Расчеты с клиентами, но по своей сути он не является платежным. Подсистема работы с торговым оборудованием в 1С:УТ 11 игнорирует такие документы. Это самый безопасный способ с точки зрения налоговых рисков: данные о корректировке никогда не попадут в очередь на печать чеков. Выясним, как это реализовать:

  1. Создаем документ Взаимозачет задолженности.
  2. Указываем вид операции «Произвольный взаимозачет» или «Списание задолженности».
  3. В качестве дебитора указываем клиента, в качестве кредитора — вспомогательную статью или виртуального контрагента (в зависимости от вашей методологии учета).

Способ 4: Отключение автоматической фискализации через настройки

Проанализируем настройки самой программы. В 1С:УТ 11 за автоматическую отправку чеков отвечает функциональная опция в разделе НСИ и администрирование — Продажи — Розничные продажи — Сформировать чеки после оплаты по безналичному расчету. Если эта опция включена, система будет пытаться фискализировать все входящие безналичные платежи.

Если вы загружаете оплаты как Поступление безналичных денежных средств, убедитесь, что в коде загрузки вы не устанавливаете признаки, инициирующие печать. Также проверьте настройки используемых эквайринговых терминалов в справочнике Эквайринговые терминалы. Можно создать отдельный виртуальный терминал для загрузки с сайта, у которого будет отключена связь с ККТ.

Программный флаг «Отказ от пробития чека»

В некоторых версиях типовых решений 1С при программном создании объекта можно использовать структуру ДополнительныеСвойства. Это позволяет передать в процедуру ПередЗаписью или ПриЗаписи сигнал о том, что документ не требует стандартной обработки. Посмотрим на пример:


ОбъектОплаты = Документы.ОперацияПоПлатежнойКарте.СоздатьДокумент();
// Заполнение данных...
ОбъектОплаты.ДополнительныеСвойства.Вставить("ПерезаписатьБезФискализации", Истина);
ОбъектОплаты.Записать(РежимЗаписиДокумента.Проведение);

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

Рекомендация по «Матчасти»

Для глубокого понимания работы с кассовой техникой в 1С рекомендуем изучить следующие материалы:

Резюмируя, наиболее правильным техническим решением для программиста будет комбинированный подход: заполнение реквизита НомерЧекаККМ в самом документе и создание соответствующей записи в регистре сведений ФискальныеОперации. Это обеспечит целостность данных и гарантирует отсутствие претензий со стороны налоговых органов из-за дублирования выручки.

← На главную