При обновлении конфигурации 1С:Управление торговлей с версии 11.4.1 на более свежие релизы (например, 11.4.5 или 11.4.6) многие пользователи и разработчики сталкиваются с тем, что в формах выбора номенклатуры исчезает привычная колонка «В наличии остаток». Особенно остро эта проблема проявляется в складских документах, таких как Пересортица товаров, где оперативное понимание текущих запасов критически важно для корректного оформления операций.
В рамках данной статьи мы разберем, почему это происходит с точки зрения архитектуры платформы 1С, и рассмотрим несколько способов решения задачи: от использования штатных механизмов до программной доработки через расширения.
Разберем причину таких изменений. Фирма «1С» в новых релизах ветки 11.4 целенаправленно оптимизирует производительность системы. Вывод остатков непосредственно в Динамический список (которым является форма списка номенклатуры) — это ресурсозатратная операция. Для каждой строки списка системе приходится выполнять левое соединение с таблицами остатков регистров накопления в реальном времени. При большом количестве номенклатуры и активной работе пользователей это приводит к существенным задержкам при прокрутке списка.
Посмотрим, какие альтернативы предлагает типовой функционал:
Справочник.Номенклатура.Форма.ФормаПодбора, в которой механизмы получения остатков оптимизированы и работают через временные таблицы.Проанализируем ситуацию с документом Пересортица товаров. В старых релизах этот документ мог использовать упрощенную форму выбора из списка, где ранее (возможно, прошлым программистом) была добавлена колонка остатков. После обновления типовые механизмы перекрыли изменения, и колонка исчезла.
Самым грамотным и надежным решением будет добавление стандартной кнопки «Подбор» в табличную часть документа. Рассмотрим, как это реализовать программно через расширение.
Для начала нам необходимо перехватить команду подбора или добавить новую кнопку на форму документа. В модуле формы документа ПересортицаТоваров добавим процедуру вызова формы подбора:
&НаКлиенте
Процедура Подбор(Команда)
ПараметрыПодбора = Новый Структура;
ПараметрыПодбора.Вставить("Склад", Объект.Склад);
ПараметрыПодбора.Вставить("Дата", Объект.Дата);
ПараметрыПодбора.Вставить("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС);
// Добавляем другие необходимые параметры контекста документа
ПродажиКлиент.ОткрытьФормуПодбораТоваров(ЭтаФорма, ПараметрыПодбора);
КонецПроцедуры
При использовании этого метода мы задействуем штатную форму подбора 1С, которая по умолчанию содержит колонки «В наличии» и «Доступно», корректно учитывая настройки склада и характеристики товаров. Это избавляет нас от необходимости «рисовать» свои колонки в обычном списке.
Если бизнес-процесс требует видеть остатки именно в форме выбора (без открытия подбора), нам придется модифицировать запрос динамического списка. Важно понимать, что в современных версиях УТ текст запроса формы списка часто формируется динамически в процедуре ПриСозданииНаСервере или в модуле менеджера.
Разберем шаги по добавлению колонки через расширение:
Номенклатура.Список (тип ДинамическийСписок).ПриСозданииНаСервере нам нужно модифицировать текст запроса, добавив соединение с регистром ТоварыНаСкладахОстатки.Пример модификации запроса:
&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
ТекстЗапроса = Список.ТекстЗапроса;
// ВАЖНО: Текст запроса в УТ 11 может быть очень сложным.
// Рекомендуется использовать СтрЗаменить для вставки левого соединения.
НовоеСоединение = "ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, ) КАК ОстаткиТоваров
|ПО Список.Ссылка = ОстаткиТоваров.Номенклатура";
// Добавляем поле в выборку
Список.ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ", "ВЫБРАТЬ ОстаткиТоваров.ВНаличииОстаток КАК ОстатокНаСкладе, ");
// Не забываем добавить параметры, если они используются в виртуальной таблице
Список.Параметры.УстановитьЗначениеПараметра("Период", ТекущаяДата());
КонецПроцедуры
Внимание: При таком подходе обязательно убедитесь, что вы индексируете поля и ограничиваете выборку по складу, иначе при большом объеме данных форма будет открываться крайне медленно.
Иногда проблема кроется не в коде, а в слетевших настройках интерфейса после обновления. Выясним причину, проверив пользовательские настройки.
Проанализируем следующие действия:
НСИ и администрирование — Настройка НСИ и разделов — Продажи — Оптовые продажи. Убедитесь, что флаг «Остатки товаров в формах подбора» включен. Хотя это настройка подбора, она влияет на инициализацию многих общих модулей, отвечающих за вывод данных о запасах.При реализации собственного решения (как в Решении 2) важно выбрать правильный источник данных. В УТ 11.4 существует два основных регистра для учета остатков:
ТоварыНаСкладах — содержит информацию о физическом наличии товара на конкретных складах. Используйте его, если вам нужно видеть фактический остаток (поле ВНаличии).РаспределениеЗапасов — этот регистр появился в последних версиях вместо СвободныеОстатки. Он сложнее, так как учитывает резервы, графики поступления и отгрузки. Если пользователям важно видеть, сколько товара можно реально зарезервировать, данные нужно брать отсюда.Подведем итог: если после обновления в 1С:УТ 11.4 пропали остатки, наиболее правильным путем будет внедрение штатной формы подбора в те документы, где она отсутствует (например, в Пересортицу). Это сохранит производительность системы и обеспечит пользователей актуальными данными без риска «повесить» базу тяжелыми запросами в динамических списках.