Многие специалисты, переходящие с системы «1С:Управление производственным предприятием» (УПП) на 1С:ERP 2.5, сталкиваются с отсутствием привычного функционала — отображения остатков товаров непосредственно в форме списка или выбора номенклатуры. В управляемых формах разработчики фирмы «1С» намеренно отказались от этого механизма в пользу производительности и специализированных рабочих мест. Однако бизнес-задачи часто требуют видеть «картину в целом» без лишних кликов. В этой статье мы разберем, какие «подводные камни» скрывает эта задача и как реализовать ее наиболее эффективно.
Разберем фундаментальные причины, по которым простое добавление колонки с остатком в динамический список 1С:ERP может привести к проблемам. В отличие от обычных форм, где выборка данных происходила иначе, управляемый функционал завязан на запросах к базе данных в реальном времени при прокрутке списка.
LEFT JOIN с таблицами остатков. Если в списке тысячи позиций, а в регистрах — миллионы записей, система начнет «подтормаживать».ТоварыОрганизаций (финансовый учет);ТоварыНаСкладах (складской учет, остатки в наличии);ТоварыВЯчейках (адресное хранение).Проанализируем ситуацию с правами доступа. Механизм RLS (Record Level Security) в ERP работает значительно сложнее, чем в старых конфигурациях. Когда вы выводите остатки в список, система обязана проверить права пользователя на каждый склад и каждую организацию, участвующую в расчете остатка для конкретной строки. Для администратора список будет работать быстро, но рядовой менеджер с ограниченными правами столкнется с тем, что форма открывается по несколько секунд, а прокрутка становится прерывистой.
Наиболее правильным и современным подходом является вывод данных не в колонку списка, а в отдельную область (панель) справа или снизу от основного списка. Рассмотрим, как это работает по шагам.
Вместо того чтобы мучить динамический список сложными соединениями, мы будем получать данные только для текущей строки. Для этого проанализируем событие формы ПриАктивизацииСтроки.
Пример реализации получения данных:
&НаСервере
Функция ПолучитьОстаткиНаСервере(АктуальнаяНоменклатура, ТекущийСклад)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличии,
| ТоварыНаСкладахОстатки.ВНаличииОстаток - ТоварыНаСкладахОстатки.КОтгрузкеОстаток КАК Доступно
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура = &Номенклатура И Склад = &Склад) КАК ТоварыНаСкладахОстатки";
Запрос.УстановитьПараметр("Номенклатура", АктуальнаяНоменклатура);
Запрос.УстановитьПараметр("Склад", ТекущийСклад);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат СтрШаблон("В наличии: %1 | Доступно: %2", Выборка.ВНаличии, Выборка.Доступно);
КонецЕсли;
Возврат "Остатков нет";
КонецФункции
Важный совет: Чтобы избежать «зависания» интерфейса при быстром перемещении стрелками по списку, используйте обработчик ожидания. Не вызывайте сервер сразу. Запустите таймер на 0.5 секунды, и если за это время пользователь не переключился на другую строку — только тогда обновляйте панель остатков.
Если бизнес-процесс жестко требует наличия колонки именно в списке (например, для быстрой визуальной оценки дефицита), рассмотрим вариант с фоновым кэшированием. Выясним причину, почему это работает быстрее:
РегистрСведений, например, КэшОстатковДляСписка.Плюсы метода: Список «летает», RLS практически не влияет на скорость, данные выводятся колонкой. Минусы: Потеря оперативной точности (задержка обновления данных на время работы регламентного задания).
Не забудем про учет по характеристикам. Если в вашей базе активно используются характеристики, то остаток в общем списке без разреза по характеристикам будет бесполезен. Менеджер увидит 100 единиц товара «Футболка», но не поймет, есть ли в наличии нужный размер «XL». Вывод характеристик в список превратит его в бесконечную таблицу. В этом случае использование Формы подбора (которая в ERP уже содержит остатки и доступность) является более рациональным решением, чем доработка формы списка.
Подведем итоги нашего анализа. Добавление оперативных остатков в список номенклатуры 1С:ERP 2.5 технически возможно, но требует осторожности:
ТоварыНаСкладах, ТоварыОрганизаций).Помните, что в типовом решении 1С:ERP для этих целей предусмотрено РабочееМестоОтгрузки и специализированные формы подбора, которые уже оптимизированы под высокие нагрузки и сложные алгоритмы резервирования.