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