Как правильно пробить чек при зачете аванса в 1С?

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

При работе с контрольно-кассовой техникой (ККТ) в программах 1С, особенно в самописных решениях на базе 1С:Бухгалтерия 3.0, часто возникает вопрос: как правильно оформить закрывающий чек, если клиент ранее уже внес аванс? Распространенная ошибка заключается в том, что при попытке «зачесть» аванс, сумма в отчетах ККТ (X-отчет и Z-отчет) удваивается, создавая иллюзию повторного прихода денег. Рассмотрим подробно, как реализовать эту логику в коде и правильно настроить фискальные признаки.

Понимание двухэтапной схемы расчетов

Согласно требованиям 54-ФЗ и форматам фискальных данных (ФФД), продажа по авансовой схеме должна состоять из двух этапов, на каждом из которых пробивается отдельный чек:

  1. Первый чек (Получение денег): Мы берем деньги у клиента, но услугу еще не оказываем. В чеке указывается признак «Аванс» или «Предоплата», а тип оплаты — «Наличные» или «Безналичные».
  2. Второй чек (Оказание услуги/отгрузка товара): Мы выполняем свои обязательства. В этом чеке мы должны указать номенклатуру (за что именно списывается аванс), признак «Полный расчет», а вместо реальных денег указать тип оплаты «Зачет аванса».

Разберем, как это реализовать программно, используя механизмы БПО (Библиотеки подключаемого оборудования).

Настройка признаков способа расчета

Проанализируем структуру данных, которая передается в модуль ПечатьФискальныхДокументов. Для каждой позиции чека (строки таблицы товаров или услуг) необходимо правильно установить ПризнакСпособаРасчета. Это тег 1214 в терминах ФФД.

В коде 1С мы используем перечисление ПризнакиСпособаРасчета. Для второго чека (когда услуга оказана) значение должно быть следующим:


// Для каждой строки позиции чека
СтрокаПозиции.ПризнакСпособаРасчета = Перечисления.ПризнакиСпособаРасчета.ПередачаСПолнойОплатой; 
// Или значение 4 для ФФД

Если же мы только получаем деньги, то используем Перечисления.ПризнакиСпособаРасчета.Аванс (значение 3). Важно помнить: если в момент получения денег вы точно знаете, за какой товар платит клиент — это Предоплата. Если перечень товаров не определен — это Аванс.

Корректное заполнение таблицы оплаты

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

Для зачета аванса в ТаблицеОплат (теги 1215-1217) нужно передать специальный тип. Посмотрим на пример формирования структуры оплаты в 1С:


СтруктураОплаты = Новый Структура;
СтруктураОплаты.Вставить("Сумма", СуммаЗачета);
СтруктураОплаты.Вставить("ТипОплаты", Перечисления.ТипыОплатыККТ.Предоплата); 
// В некоторых версиях БПО это может быть индекс 2 или 3, 
// соответствующий «Зачету аванса»
МассивОплат.Добавить(СтруктураОплаты);

Когда ККТ получает тип оплаты Предоплата (или «Зачет аванса»), она понимает, что физического движения денег в кассе сейчас нет. Сумма чека пойдет в выручку, но не увеличит остаток наличности в ящике.

Анализ X-отчета и Z-отчета

Проанализируем ситуацию, которая пугает многих бухгалтеров: почему сумма зачета отображается в строке «Предварительная оплата (аванс)» в отчете о закрытии смены? Рассмотрим это на примере:

День 1: Клиент внес 100 рублей.
В отчете ККТ: Приход (Наличные) = 100, Авансы (полученные) = 100. В кассе лежит 100 рублей.

День 2: Мы оказали услугу на 30 рублей в счет аванса.
В чеке указано: «Полный расчет», сумма 30 руб., тип оплаты «Зачет аванса».
В отчете ККТ за этот день: В строке «Предварительная оплата (аванс)» появится сумма 30 рублей. Это не новый приход денег! Это показатель того, какая часть выручки за сегодня была сформирована за счет ранее полученных авансов. Наличных в кассе при этом будет 0 рублей (если других продаж не было).

Таким образом, налоговая видит: вчера вы получили деньги, а сегодня вы «отработали» часть этих денег, превратив обязательство в реальную выручку.

Особенности реализации в самописных конфигурациях

Если вы работаете с модулем МенеджерОборудованияВызовСервера или напрямую с объектом Драйвер, убедитесь, что при формировании XML-пакета для чека вы правильно передаете узлы оплаты. Рассмотрим пример структуры XML для зачета аванса:


// Пример упрощенной структуры для передачи в драйвер
<Payments>
    <Payment TypeClose="2" Sum="30.00" /> 
    <!-- Где TypeClose="2" обычно соответствует зачету аванса -->
</Payments>

Важно помнить, что коды типов оплаты (0, 1, 2, 3...) могут незначительно отличаться в зависимости от модели ККТ (Атол, Штрих-М) и версии используемого драйвера, однако в рамках БПО 1С эти различия нивелируются использованием стандартных перечислений.

Работа с НДС при зачете

Не забудем про налоговый учет. При получении аванса НДС рассчитывается по ставке 20/120 (или 10/110). В момент зачета аванса (второй чек) НДС в чеке должен быть указан уже по обычной ставке — 20% или 10%. Это критически важно для корректного сопоставления данных в декларации по НДС и данных, ушедших в ОФД.

Выясним причину возможных расхождений: если вы укажете во втором чеке расчетную ставку (дробную), это будет методологической ошибкой, так как происходит факт реализации товара или услуги, а не получение авансового платежа.

Частичный зачет и доплата

Рассмотрим более сложный случай: услуга стоит 150 рублей, а аванс был всего 100. Как пробить такой чек? В этом случае у нас будет одна позиция номенклатуры на 150 рублей, но в таблице оплат будет две строки:

  1. Первая строка: Тип оплаты «Зачет аванса» — 100 рублей.
  2. Вторая строка: Тип оплаты «Наличные» (или «Электронные») — 50 рублей.

Программа 1С при правильной настройке автоматически распределит эти суммы, и в чеке клиент увидит, что часть суммы он оплатил ранее, а часть вносит сейчас. Это обеспечит полное соответствие физического остатка денег в кассе и данных в фискальном накопителе.

← На главную