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