Одной из самых распространенных и в то же время запутанных проблем в программах 1С:Управление торговлей 11, ERP 2 или Комплексная автоматизация 2 является отказ системы проводить документ «Заказ клиента» из-за якобы отсутствующего товара. При этом пользователь видит товар на складе в отчетах, но программа упорно выдает ошибку проведения. Разберем по шагам, как диагностировать эту ситуацию и где искать «скрытые» причины нехватки.
Первым делом нам необходимо понять, что 1С оперирует несколькими понятиями остатков. То, что товар физически лежит на полке, не означает, что он доступен для отгрузки по новому заказу. Проанализируем основные регистры накопления, которые отвечают за это состояние:
Рассмотрим ситуацию: в регистрах СО в наличии 41 единица, а в ТнС — 48. Разница в 7 единиц — это прямой индикатор того, что товар находится в резерве. Чтобы выяснить, под какие именно заказы зарезервированы эти позиции, воспользуемся отчетом «Остатки и доступность товаров». В нем следует обратить внимание на колонку «В резерве» и расшифровать ее по документам-регистраторам.
Часто проблема кроется в настройках самой табличной части «Заказа клиента». Выясним причину, проверив колонку «Действие». Возможны следующие варианты, влияющие на проведение:
СвободныеОстатки) в момент проведения. Если товар есть на складе, но зарезервирован под другой заказ, проведение будет заблокировано.Проанализируем ситуацию: если вы пытаетесь установить действие Отгрузить, но товар на складе имеет назначение (закуплен под конкретную сделку или проект), он не будет считаться свободным, даже если физически он лежит в ячейке. В таком случае необходимо либо менять назначение товара, либо корректировать заказ.
Если визуальный анализ отчетов не дает ответа, перейдем к технической диагностике. В крупных конфигурациях процесс проведения документа — это длинная цепочка процедур. Разберем, где именно происходит контроль остатков. Рассмотрим фрагмент кода, который часто встречается в обработчиках записи объекта в форме:
Функция ОбработатьЗаписьОбъектаВФорме(Форма, ПараметрыЗаписи, Отказ = Ложь) Экспорт
Результат = Ложь;
Если Отказ Тогда
Возврат Результат;
КонецЕсли;
// Подготовка параметров
Форма.НеВыполнятьПроверкуПередЗаписью = Истина;
Отказ = Истина;
ПараметрыЗаписи.Вставить("НовыйОбъект", Не ЗначениеЗаполнено(Форма.Объект.Ссылка));
// Попытка записи и проведения
Результат = Форма.Записать(ПараметрыЗаписи);
Форма.НеВыполнятьПроверкуПередЗаписью = Ложь;
Возврат Результат;
КонецФункции
Как правило, ошибка возникает внутри вызова Форма.Записать(ПараметрыЗаписи). Чтобы найти конкретную причину, установим точку останова в общем модуле ПроведениеСерверУТ (или аналогичном в вашей версии ERP) в процедуре ВыполнитьКонтрольРезультатовПроведения(ЭтотОбъект, Отказ). Пройдем отладчиком этот участок кода и посмотрим, какая временная таблица содержит данные о нехватке. Обычно система формирует запрос к регистрам и выводит результат в таблицу ТаблицаОшибок, где четко указано: по какой характеристике, складу или организации не хватило товара.
В современных версиях конфигураций появился новый механизм — регистр сведений «Распределения запасов». Рассмотрим его особенности. Система может выдавать ошибку нехватки, если данные в этом регистре не актуальны или «зависли» из-за сбоя регламентных заданий. Посмотрим на алгоритм исправления:
Исправление ошибок в распределении запасов. Запустим его вручную.Этот регистр является «промежуточным слоем» между документами и регистрами накопления. Если в нем числится потребность, которая фактически уже удовлетворена, он может блокировать новые отгрузки.
Проанализируем еще одну неочевидную причину — время документа. В 1С время имеет значение до секунды. Выясним, не случилось ли так, что поступление товара (Приобретение товаров и услуг) записано той же секундой, что и Заказ клиента, или на секунду позже. В момент проведения «Заказа» система смотрит остатки «на начало секунды» или «включая текущий момент» в зависимости от настроек, и товара может формально еще не быть. Попробуем сдвинуть время «Заказа клиента» на несколько минут вперед относительно документа поступления и повторить проведение.
Если в программе включен учет по характеристикам или сериям, ошибка может возникнуть из-за пересортицы. Например, на складе есть 100 единиц товара «Кроссовки», но 50 из них — 42-го размера, а 50 — 44-го. Если в заказе указан 43-й размер, система выдаст ошибку нехватки, несмотря на общий остаток в 100 штук. Аналогично работает и обособленное обеспечение: если товар закуплен под «Заказ №1», вы не сможете отгрузить его по «Заказу №2», пока не снимете резерв или не сделаете корректировку назначения.
Резюмируем: при возникновении ошибки нехватки товара в первую очередь проверяйте разницу между регистрами ТоварыНаСкладах и СвободныеОстатки, используйте отчет «Остатки и доступность» с максимальной детализацией и не забывайте про влияние времени документа и механизмов распределения запасов в новых версиях 1С.