В процессе работы с конфигурациями 1С:Управление торговлей 11, ERP Управление предприятием 2 или Комплексная автоматизация 2 пользователи часто сталкиваются с ситуацией, когда документ Передача товаров между организациями ведет себя некорректно при попытке отмены его проведения или удаления. Основная проблема заключается в том, что после распроведения документа в регистре накопления Резервы товаров организаций остаются записи, которые блокируют дальнейшую работу, мешают изменить тип хозяйственной операции или не позволяют повторно провести документ из-за ложного сообщения о нехватке остатков.
В этой статье мы подробно разберем причины возникновения этой ошибки, проанализируем механику работы «Интеркампани» и рассмотрим несколько эффективных способов очистки «зависших» движений.
Прежде всего, давайте выясним причину такого поведения системы. Регистр Резервы товаров организаций является ключевым звеном в схеме обеспечения продаж между собственными организациями (Intercompany). В нормальной ситуации цепочка выглядит так:
Реализация товаров и услуг от имени «Организации А» (в которой товара нет) делает запись в регистр Резервы товаров организаций с видом «К передаче». Это означает, что «Организация Б» (владелец товара) должна передать этот товар «Организации А».Передача товаров между организациями закрывает эту потребность, заменяя записи «К передаче» на записи «Передано».Проблема «зависания» возникает из-за сложной логики алгоритмов проведения. При отмене проведения Передачи товаров система пытается восстановить исходное состояние резервов, которое было до ввода документа. Если за это время были изменены первичные реализации, изменены настройки схемы обеспечения или в систему были внесены исправления задним числом, типовой механизм очистки движений может сработать некорректно. В результате документ становится непроведенным, но его записи в регистре продолжают числиться за ним как за регистратором.
Этот метод считается наиболее мягким и часто помогает, если документ еще не был окончательно «сломан» программными ошибками. Рассмотрим пошагово, как это сделать:
Передача товаров между организациями.Важное примечание: Как показывает практика, иногда даже после удаления строк и попытки проведения система может выдать ошибку контроля остатков. Это происходит потому, что контроль срабатывает до фактической записи движений. В этом случае переходите к следующим методам.
Иногда система блокирует проведение или отмену проведения из-за того, что на момент записи документа «остатки не сходятся» именно в разрезе резервов. Мы можем временно «ослепить» систему, чтобы она позволила нам выполнить нужные манипуляции.
Для этого выполним следующие действия:
Также в некоторых релизах доступна возможность отключения контроля только для текущего сеанса через специальные обработки (например, «Панель администрирования»), что более безопасно в многопользовательской среде.
Если типовые методы не помогают, и документ «мертво» держит свои записи в регистре, необходимо воспользоваться внешней обработкой или написать небольшой фрагмент кода в консоли кода. Нам нужно принудительно очистить набор записей регистра РезервыТоваровОрганизаций, где регистратором выступает наш проблемный документ. Для этой задачи подойдёт обработка для выборочного удаления движений документов по регистрам.
Рассмотрим пример кода, который решает эту задачу:
// СсылкаНаДокумент - это ссылка на вашу проблемную Передачу товаров
НаборЗаписей = РегистрыНакопления.РезервыТоваровОрганизаций.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаДокумент);
// Записываем пустой набор, тем самым удаляя все старые движения
НаборЗаписей.Записать();
Сообщить("Движения документа " + СсылкаНаДокумент + " успешно очищены.");
После выполнения этого кода документ останется в системе, но у него полностью исчезнут движения в указанном регистре. Теперь вы сможете беспрепятственно менять в нем любые реквизиты (например, тип хозяйственной операции) или пометить его на удаление.
Если вы не хотите использовать программирование, можно воспользоваться стандартным инструментом Корректировка регистров. Этот метод позволяет вручную «сторнировать» зависшие записи.
Корректировка регистров.Резервы товаров организаций.Проанализируем поведение системы в новых релизах (например, 11.5.22). Разработчики внесли множество изменений в механизм Интеркампани, включая фоновое выполнение расчетов. Если вы видите, что движения не уходят, проверьте:
Выясним причину, почему даже при пустой табличной части записи могут восстанавливаться. В 11.5 алгоритм проведения часто обращается к состоянию других регистров (например, ТоварыОрганизацийКПередаче). Если там остались данные о необходимости передачи, система при проведении (даже пустого документа) может попытаться «подтянуть» эти данные обратно.
Мы рассмотрели проблему «фантомных» движений и убедились, что наиболее эффективным и быстрым способом является программная очистка набора записей. Она гарантирует результат и не требует изменения глобальных настроек системы, влияющих на других пользователей.
Алгоритм действий при возникновении проблемы:
РегистрыНакопления.РезервыТоваровОрганизаций по конкретному регистратору.Помните, что любые манипуляции с регистрами напрямую лучше производить на копии базы данных или в периоде, когда в системе не работают другие пользователи, чтобы избежать конфликтов блокировок.