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