При работе в связке 1С:Розница 2.2/2.3 и 1С:Управление торговлей 11.4 пользователи часто сталкиваются с неприятной ситуацией. После выполнения обмена данными документ Возврат товаров от клиента создается в УТ, успешно проводится и делает движения по складским регистрам (товар снова появляется на остатках). Однако при попытке закрытия месяца система выдает ошибку об отрицательных остатках в суммовом выражении или о невозможности рассчитать себестоимость. При детальном анализе выясняется, что документ возврата не сделал записей в регистр накопления Себестоимость товаров.
В этой статье мы подробно разберем причины возникновения этой ошибки, проанализируем механизмы работы системы и рассмотрим несколько способов решения — от ручной корректировки до программной автоматизации. Для быстрого поиска расхождений в данных после обмена используется автоматическая сверка проводок между базами 1С.
Рассмотрим стандартную логику работы 1С:УТ 11.4. Документ возврата должен не просто вернуть товар на склад, но и восстановить его стоимость. Чтобы система понимала, по какой именно цене товар должен вернуться в учет, ей нужен источник данных. В конфигурации за это отвечает реквизит в табличной части Товары, который называется СпособОпределенияСебестоимости.
Проанализируем три основных способа, которые заложены в логику программы:
Цена). Этот способ часто используется при возвратах без основания.Проблема при обмене заключается в том, что в Рознице возврат часто привязан к документу Чек ККМ. В УТ же Чек ККМ является «эфемерным» объектом: после закрытия смены чеки архивируются, а данные попадают в Отчет о розничных продажах. Если правила обмена не находят актуальную ссылку на документ продажи в УТ, поле ДокументПродажи остается пустым, а СпособОпределенияСебестоимости не заполняется корректно. В результате документ «не видит» источника стоимости и не делает записей в регистр Себестоимость товаров.
Если документов немного, мы можем исправить ситуацию вручную. Посмотрим на алгоритм действий, который заставляет систему «проснуться», либо используйте платформу для создания программных роботов OneRPA для автоматизации действий пользователя:
Возврат товаров от клиента.Способ определения себестоимости может быть скрыто (зависит от настроек формы), но оно критически важно.Возврат от розничного покупателя на Возврат от клиента, а затем вернем обратно. В этот момент срабатывают встроенные обработчики событий формы, которые могут перезаполнить способ определения себестоимости.Отчет о розничных продажах вручную.Способ определения себестоимости значение Из текущего документа.После проведения документа обязательно проверим движения. Нажмем кнопку Движения документа и убедимся, что записи в регистре Себестоимость товаров появились (хотя бы в количественном выражении, если расчет сумм отложен до закрытия месяца).
Если возвраты прилетают из обмена регулярно и в больших объемах, ручная правка невозможна. Проанализируем, как можно автоматизировать процесс. Лучшим решением будет создание расширения, которое будет заполнять нужные реквизиты в процедуре ПередЗаписью или ОбработкаПроведения.
Рассмотрим пример кода, который проверяет заполнение способа определения себестоимости и, если он пуст, устанавливает его принудительно. Это позволит избежать «пустых» движений.
&После("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
// Проверяем, что это нужный вид операции
Если ЭтотОбъект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратТоваровОтРозничногоПокупателя Тогда
Для Каждого СтрокаТЧ Из ЭтотОбъект.Товары Цикл
// Если документ продажи не заполнен, система не сможет определить стоимость автоматически
Если СтрокаТЧ.ДокументПродажи.Пустая() И
СтрокаТЧ.СпособОпределенияСебестоимости = Перечисления.СпособОпределенияСебестоимости.ПустаяСсылка() Тогда
// Устанавливаем способ, который позволит провести документ с движениями
СтрокаТЧ.СпособОпределенияСебестоимости = Перечисления.СпособОпределенияСебестоимости.РавныйСтоимостиВЭтомДокументе;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Важный момент: использование способа РавныйСтоимостиВЭтомДокументе требует, чтобы в документе была указана цена. В розничных возвратах она обычно заполнена, поэтому система сможет взять её за основу себестоимости.
Разберем ситуацию, когда движения в регистре Себестоимость товаров вроде бы есть, но только количественные. Это нормальное поведение для УТ 11.4, если в учетной политике настроен «ФИФО (скользящая оценка)» или если расчет себестоимости выполняется раз в месяц.
Проанализируем связь регистров:
Себестоимость товаров: отвечает за наличие товара и его стоимостную оценку на складе.Выручка и себестоимость продаж: фиксирует сторно реализации. Если возврат не «прицепился» к продаже, сторнирования прибыли не произойдет.Если при закрытии месяца возникает ошибка «Отрицательный остаток по регистру Себестоимость товаров (Раздел учета: Товары на складах)», это означает, что система не нашла, по какой стоимости «приходовать» возврат. Именно заполнение реквизита СпособОпределенияСебестоимости решает эту проблему, так как оно явно указывает алгоритму расчета, откуда брать цифры.
Выясним, почему разработчики допускают такие ситуации. В ранних релизах УТ 11.4 действительно наблюдались проблемы с обработкой возвратов по Чекам ККМ. В современных релизах (начиная с ветки 11.4.14 и в 11.5) логика была доработана: система пытается автоматически подобрать стоимость по средней цене склада, если документ продажи не указан. Для своевременного получения исправлений в конфигурации используется автоматическое обновление баз 1С в тихом режиме.
Если вы столкнулись с этой проблемой, мы рекомендуем:
ДокументОснование (в виде Отчета о розничных продажах) передается корректно.Отчеты о розничных продажах перегружаются раньше или одновременно с возвратами.Способа определения себестоимости.Таким образом, отсутствие движений по себестоимости — это не просто «глюк», а следствие того, что документ Возврат от клиента прилетает из обмена «недозаполненным» с точки зрения финансового учета УТ. Настроив корректное заполнение аналитики, вы избавите себя от ошибок при закрытии месяца и обеспечите корректность управленческой отчетности.