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