Почему возникает ошибка «Не удалось провести Перемещение товаров» и как ее исправить

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

При работе в конфигурации 1С:Управление торговлей (начиная с версии 11) пользователи часто сталкиваются с ситуацией, когда при попытке проведения документа Перемещение товаров система выдает общую ошибку: Ошибка при вызове метода контекста (Записать) Результат = Форма.Записать(ПараметрыЗаписи). Эта ошибка является лишь «верхушкой айсберга», скрывающей под собой глубокие противоречия в данных регистров накопления или настройках обеспечения заказа.

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

Анализ ошибки в контексте управляемых форм

Прежде всего, проанализируем само сообщение об ошибке. Текст Форма.Записать(ПараметрыЗаписи) в общем модуле ОбщегоНазначенияУТКлиент говорит нам о том, что отказ произошел на стороне сервера во время транзакции записи. Система попыталась выполнить процедуру ОбработкаПроведения, но столкнулась с условием, при котором переменная Отказ приняла значение Истина.

Для того чтобы понять истинную причину, нам необходимо заглянуть «под капот» механизмов проведения УТ. Чаще всего проблема кроется в несоответствии данных в документе-распоряжении (например, Заказ на перемещение) и фактическом наличии товара на складе с учетом аналитики.

1. Механизм назначений и обособленный учет

Одной из самых частых причин ошибки является использование Назначений. В 1С:УТ реализован мощный механизм обособленного учета запасов. Если перемещение создается на основании заказа, система ожидает, что товар на складе-отправителе числится не просто «в свободном остатке», а под конкретное назначение (под этот самый заказ).

Разберем ситуацию: на складе физически лежит 10 штук товара. В документе Перемещение товаров указано 6 штук. Однако в колонке «Назначение» может быть указан конкретный заказ клиента. Если эти 10 штук на складе не привязаны к данному заказу (не зарезервированы под него), система выдаст ошибку проведения, так как с точки зрения программы «под данное назначение товара нет».

Для диагностики проанализируем движения по регистру Товары на складах. Нам нужно убедиться, что аналитика Назначение в остатках совпадает с аналогичной колонкой в табличной части документа перемещения. Если в документе назначение заполнено, а на остатках товар висит с пустым назначением, необходимо либо сделать корректировку назначений, либо убрать привязку в самом перемещении.

2. Проверка регистра «Товары к оформлению документов перемещения»

Этот регистр является связующим звеном между планированием (заказом) и фактом (перемещением). Рассмотрим алгоритм его работы. Когда мы проводим Заказ на перемещение, в этом регистре увеличивается остаток «к оформлению». Когда проводим Перемещение товаров — остаток уменьшается.

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

3. Статусы и действия в табличной части заказа

Проанализируем настройки самого Заказа на перемещение. В современных версиях УТ проведение документа перемещения жестко зависит от колонки Действие в заказе. Рассмотрим основные варианты:

  1. К обеспечению — товар нельзя переместить, система только планирует его закупку или перемещение.
  2. Резервировать на складе — товар закрепляется за заказом, но еще не готов к отгрузке.
  3. Отгрузить — только при этом статусе разрешается проведение фактического документа Перемещение товаров.

Если в заказе на снабжение указано «Резервировать», а вы пытаетесь провести перемещение, программа выдаст ошибку. Необходимо убедиться, что для всех строк установлен статус Отгрузить.

4. Контроль остатков по организациям (Интеркампани)

В 1С:УТ контроль остатков может срабатывать не только по складам, но и по организациям. Если в базе включена функциональность «Передачи между организациями», система проверяет наличие товара на конкретном юридическом лице. Разберем пример: товар есть на складе «Основной», но числится он на организации «Торговый дом», а перемещение вы пытаетесь оформить от лица организации «Складской комплекс». Без оформленной передачи между организациями (или настройки автоматической передачи) документ не проведется, даже если склад указан верно.

Проверим регистр накопления Товары организаций. В нем должны быть остатки именно по той организации, которая указана в шапке документа перемещения.

5. Отладка программного кода проведения

Если визуальный анализ регистров не помог, перейдем к технической части — отладке. Нам нужно найти место, где переменная Отказ становится равной Истина. Рассмотрим, как это сделать в модуле объекта Документ.ПеремещениеТоваров.

Основные процедуры, которые стоит проверить:

Посмотрим на пример того, как может выглядеть типовой код контроля остатков, который инициирует ошибку:


Процедура ПроверитьОстаткиТоваров(Отказ, ПараметрыПроведения)
    // Формирование временных таблиц с остатками по регистрам
    // Если КоличествоВДокументе > КоличествоНаСкладе Тогда
    //     ТекстСообщения = НСтр("ru = 'Недостаточно товара на складе...'");
    //     ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , , Отказ);
    // КонецЕсли;
КонецПроцедуры

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

6. Проблема единиц измерения

Разница в 6 штук может возникнуть из-за неправильного коэффициента в упаковках. Выясним, используются ли в документе упаковки. Если в Заказе указаны «Коробки» (в которых, например, по 10 штук), а в Перемещении — «Штуки», при малейшей ошибке в карточке номенклатуры (неверный коэффициент пересчета) возникнет количественное расхождение, которое не позволит закрыть потребность заказа корректно.

7. Работа с регистром «Запасы и потребности»

Этот регистр является «сердцем» обеспечения в УТ 11. Он объединяет данные о текущих остатках, ожидаемых поступлениях и потребностях заказов. Рассмотрим ситуацию, когда записи в этом регистре стали некорректными (например, из-за сбоя при записи или «битых» ссылок).

Рекомендуется выполнить следующие действия:

  1. Проверить регистр через Консоль запросов, отобрав записи по конкретной номенклатуре и складу из перемещения.
  2. Обратить внимание на пустые значения в измерениях Назначение или Склад.
  3. Если обнаружены расхождения, может потребоваться пересчет итогов или использование типовой обработки «Исправление ошибок в регистре Запасы и потребности».

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

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

Для решения проблемы выполним следующие шаги:

Последовательное выполнение этих действий позволит локализовать ошибку и успешно провести документ перемещения.

← На главную