В практике работы с 1С:Управление торговлей 11 (релизы 11.4 и выше) часто встречается странная на первый взгляд ситуация: документ Реализация товаров и услуг помечен на удаление или не проведен, но при этом в регистре накопления Резервы товаров организаций (сокращенно РТО) по нему продолжают числиться движения. Ситуация осложняется тем, что в движениях могут присутствовать товары, которых не было в самом документе, или суммы, которые не обнуляются после удаления. Разберем детально, почему так происходит, как проанализировать эти движения и какими инструментами привести учет в порядок — для этого есть отчет контроля остатков товаров и организаций.
Для начала проанализируем ситуацию: почему типовой механизм платформы, который обычно очищает движения при отмене проведения, здесь дает сбой? Дело в том, что регистр Резервы товаров организаций является частью сложного механизма Интеркампани (продажи товаров между собственными организациями). В УТ 11 реализована концепция «Интеркампани 2.0», где движения по этому регистру управляются не только самим документом-регистратором, но и фоновыми заданиями распределения запасов.
Регистр РТО предназначен для фиксации разрывов в цепочке владения товаром. Когда одна организация продает товар, принадлежащий другой, система делает запись в этот регистр. Эта запись — своего рода «обещание», что позже будет оформлен документ Передача товаров, который закроет этот долг. Если мы просто пометим реализацию на удаление, но по этой цепочке уже были сформированы другие документы или запущены процессы распределения, система может оставить сторнирующие или корректирующие записи, чтобы не «развалить» остатки по другим организациям.
Если нам нужно выяснить, каким именно документом сделаны движения и что именно там записано, воспользуемся стандартными инструментами отладки и анализа. Рассмотрим шаги для детального просмотра:
Резервы товаров организаций.Регистратор, выбрав наш проблемный документ Реализация товаров и услуг. Также можно сформировать отчет движения товаров с резервами, чтобы увидеть картину нарастающим итогом.Период установлен на конец месяца (например, 31.08.2022 23:59:59), а регистратором выступает документ от 29.08.2022 — это явный признак работы механизма автоматического распределения Интеркампани.Важно понимать, что в 1С запись в таблице движений — это просто строка, где в колонке Регистратор указана ссылка на документ. Платформа технически позволяет существовать записи в регистре, даже если документ-регистратор не проведен. Это «дурно пахнущее решение» (как было отмечено в обсуждении) используется разработчиками для обеспечения целостности данных в условиях сложного фонового расчета.
Выясним причину, по которой движения не исчезают (иногда это требует выравнивания остатков, особенно после обновления конфигурации) — решить эту проблему поможет обработка исправления зависших движений по запасам. Основных факторов несколько:
Очередь распределения запасов. Когда вы меняете или удаляете реализацию, в этот регистр попадает запись о необходимости пересчета. Если фоновое задание еще не отработало, движения в РТО будут оставаться старыми.Передача товаров между организациями, то движения резервов блокируются. Система не может просто удалить резерв, так как он подтвержден фактом передачи.Рассмотрим подробнее методы решения проблемы, от самых простых к радикальным.
Самый правильный путь — дождаться или инициировать процедуру Закрытия месяца — в этом поможет обработка исправления ошибок учета для закрытия периода. В рамках этой процедуры запускается задание «Оформление передач товаров». Система проанализирует все реализации (включая удаленные) и должна корректно «схлопнуть» записи в регистре РТО. Если реализации помечены на удаление, потребность в передаче исчезнет, и регистр очистится.
В типовых конфигурациях существует инструмент для поиска подобных аномалий. Проанализируем ситуацию через раздел «Склад и доставка» — «Отчеты по складу» — Контроль передач товаров между организациями. Если там висят минусы или плюсы по удаленным документам, воспользуемся помощником оформления передач, который предложит создать корректирующие документы.
Если движения «зависли», мы можем заставить систему пересчитать их заново. Для этого:
Очередь распределения запасов через функции тех. специалиста.Расчет резервов товаров организаций.В крайних случаях, когда типовые средства не помогают из-за ошибок в коде конкретного релиза, можно воспользоваться обработкой для очистки движений. Рассмотрим пример кода, который позволяет очистить движения по конкретному регистратору:
НаборЗаписей = РегистрыНакопления.РезервыТоровОрганизаций.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаУдаленныйДокумент);
НаборЗаписей.Записать(); // Записываем пустой набор, что фактически удаляет все движения
Внимание! Использование данного метода может привести к рассогласованию данных в Интеркампани. После такой очистки обязательно нужно перепровести документы Передача товаров за этот месяц или выполнить полное закрытие месяца.
Разберем важный теоретический момент, затронутый в дискуссии: отсутствие в 1С регистра накопления с «неотрицательным остатком». В случае с резервами товаров организаций, отрицательный остаток — это критическая ошибка учета. Поэтому архитекторы 1С реализовали логику так: документ не просто «делает движения», он участвует в распределении. Если документ удаляется, система пытается найти, чем «закрыть» образовавшуюся дыру в резервах. Отсюда и появляются странные записи с кучей ИП-шников и организаций — система пытается перераспределить остатки между всеми участниками схемы Интеркампани, чтобы общий баланс сошелся.
Подводя итог, отметим: наличие движений у помеченного на удаление документа в УТ 11 — это не всегда «глюк», часто это работа механизма обеспечения целостности Интеркампани. Чтобы минимизировать такие проблемы, рекомендуем:
Передача товаров всегда были позже дат Реализаций, либо строго в конце месяца.