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