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