Как убрать зависшие движения в регистре «Резервы товаров организаций» при отмене проведения Передачи товаров?

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

В процессе работы с конфигурациями 1С:Управление торговлей 11, ERP Управление предприятием 2 или Комплексная автоматизация 2 пользователи часто сталкиваются с ситуацией, когда документ Передача товаров между организациями ведет себя некорректно при попытке отмены его проведения или удаления. Основная проблема заключается в том, что после распроведения документа в регистре накопления Резервы товаров организаций остаются записи, которые блокируют дальнейшую работу, мешают изменить тип хозяйственной операции или не позволяют повторно провести документ из-за ложного сообщения о нехватке остатков.

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

Почему возникают фантомные движения в регистре «Резервы товаров организаций»?

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

  1. Документ Реализация товаров и услуг от имени «Организации А» (в которой товара нет) делает запись в регистр Резервы товаров организаций с видом «К передаче». Это означает, что «Организация Б» (владелец товара) должна передать этот товар «Организации А».
  2. Документ Передача товаров между организациями закрывает эту потребность, заменяя записи «К передаче» на записи «Передано».

Проблема «зависания» возникает из-за сложной логики алгоритмов проведения. При отмене проведения Передачи товаров система пытается восстановить исходное состояние резервов, которое было до ввода документа. Если за это время были изменены первичные реализации, изменены настройки схемы обеспечения или в систему были внесены исправления задним числом, типовой механизм очистки движений может сработать некорректно. В результате документ становится непроведенным, но его записи в регистре продолжают числиться за ним как за регистратором.

Способ №1: Предварительная очистка табличной части

Этот метод считается наиболее мягким и часто помогает, если документ еще не был окончательно «сломан» программными ошибками. Рассмотрим пошагово, как это сделать:

  1. Откройте проблемный документ Передача товаров между организациями.
  2. Перейдите на вкладку Товары.
  3. Выделите все строки (Ctrl+A) и удалите их из табличной части документа.
  4. Попробуйте нажать кнопку «Провести». Если система позволит провести пустой документ, он перезапишет свои наборы записей в регистрах пустыми значениями.
  5. После этого выполните отмену проведения.

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

Способ №2: Временное отключение контроля остатков

Иногда система блокирует проведение или отмену проведения из-за того, что на момент записи документа «остатки не сходятся» именно в разрезе резервов. Мы можем временно «ослепить» систему, чтобы она позволила нам выполнить нужные манипуляции.

Для этого выполним следующие действия:

  1. Зайдите в раздел НСИ и администрирование — Настройка НСИ и разделов — Финансовый результат и контроллинг.
  2. В подразделе Себестоимость временно снимите флаг Контролировать остатки товаров организаций.
  3. Вернитесь к документу и попробуйте сделать его непроведенным или пометить на удаление.
  4. После успешного завершения операции обязательно верните настройку контроля остатков в исходное состояние.

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

Способ №3: Программное удаление движений (Хирургический метод)

Если типовые методы не помогают, и документ «мертво» держит свои записи в регистре, необходимо воспользоваться внешней обработкой или написать небольшой фрагмент кода в консоли кода. Нам нужно принудительно очистить набор записей регистра РезервыТоваровОрганизаций, где регистратором выступает наш проблемный документ. Для этой задачи подойдёт обработка для выборочного удаления движений документов по регистрам.

Рассмотрим пример кода, который решает эту задачу:


// СсылкаНаДокумент - это ссылка на вашу проблемную Передачу товаров
НаборЗаписей = РегистрыНакопления.РезервыТоваровОрганизаций.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаДокумент);

// Записываем пустой набор, тем самым удаляя все старые движения
НаборЗаписей.Записать();

Сообщить("Движения документа " + СсылкаНаДокумент + " успешно очищены.");

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

Способ №4: Использование документа «Корректировка регистров»

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

  1. Создайте новый документ Корректировка регистров.
  2. В настройке состава регистров выберите Резервы товаров организаций.
  3. Заполните таблицу записями, идентичными тем, что «зависли» в регистре, но с противоположным знаком (если был приход — делайте расход, и наоборот) или просто введите записи, обнуляющие остаток по данному регистратору.
  4. Проведите корректировку. Это выровняет остатки в отчетах, хотя «грязные» записи от исходного документа технически останутся в базе. Поэтому данный метод рекомендуется использовать только как крайнюю меру для выравнивания Ведомости по товарам организаций.

Анализ ситуации в версиях 11.5 и выше

Проанализируем поведение системы в новых релизах (например, 11.5.22). Разработчики внесли множество изменений в механизм Интеркампани, включая фоновое выполнение расчетов. Если вы видите, что движения не уходят, проверьте:

  1. Фоновые задания: Не висит ли задание по расчету передач между организациями?
  2. Связанные реализации: Проверьте отчет «Оформление передач и выкупов». Если там висит потребность, которую вы пытаетесь отменить, сначала нужно разобраться с документом-основанием (реализацией).

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

Итоги и рекомендации

Мы рассмотрели проблему «фантомных» движений и убедились, что наиболее эффективным и быстрым способом является программная очистка набора записей. Она гарантирует результат и не требует изменения глобальных настроек системы, влияющих на других пользователей.

Алгоритм действий при возникновении проблемы:

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

← На главную