Как вернуть колонку с остатками в списке номенклатуры после обновления 1С:УТ 11.4?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При обновлении конфигурации 1С:Управление торговлей с версии 11.4.1 на более свежие релизы (например, 11.4.5 или 11.4.6) многие пользователи и разработчики сталкиваются с тем, что в формах выбора номенклатуры исчезает привычная колонка «В наличии остаток». Особенно остро эта проблема проявляется в складских документах, таких как Пересортица товаров, где оперативное понимание текущих запасов критически важно для корректного оформления операций.

В рамках данной статьи мы разберем, почему это происходит с точки зрения архитектуры платформы 1С, и рассмотрим несколько способов решения задачи: от использования штатных механизмов до программной доработки через расширения.

Почему пропадают остатки: архитектурные изменения в УТ 11.4

Разберем причину таких изменений. Фирма «1С» в новых релизах ветки 11.4 целенаправленно оптимизирует производительность системы. Вывод остатков непосредственно в Динамический список (которым является форма списка номенклатуры) — это ресурсозатратная операция. Для каждой строки списка системе приходится выполнять левое соединение с таблицами остатков регистров накопления в реальном времени. При большом количестве номенклатуры и активной работе пользователей это приводит к существенным задержкам при прокрутке списка.

Посмотрим, какие альтернативы предлагает типовой функционал:

  1. Панель сведений: В правой части формы списка можно включить панель «Информация о номенклатуре» (кнопка с буквой «i»), которая показывает остатки только для текущей выделенной строки. Это значительно быстрее, чем расчет по всему списку.
  2. Форма подбора: Специализированная форма Справочник.Номенклатура.Форма.ФормаПодбора, в которой механизмы получения остатков оптимизированы и работают через временные таблицы.

Решение 1: Внедрение формы подбора в документ

Проанализируем ситуацию с документом Пересортица товаров. В старых релизах этот документ мог использовать упрощенную форму выбора из списка, где ранее (возможно, прошлым программистом) была добавлена колонка остатков. После обновления типовые механизмы перекрыли изменения, и колонка исчезла.

Самым грамотным и надежным решением будет добавление стандартной кнопки «Подбор» в табличную часть документа. Рассмотрим, как это реализовать программно через расширение.

Для начала нам необходимо перехватить команду подбора или добавить новую кнопку на форму документа. В модуле формы документа ПересортицаТоваров добавим процедуру вызова формы подбора:


&НаКлиенте
Процедура Подбор(Команда)
    
    ПараметрыПодбора = Новый Структура;
    ПараметрыПодбора.Вставить("Склад", Объект.Склад);
    ПараметрыПодбора.Вставить("Дата", Объект.Дата);
    ПараметрыПодбора.Вставить("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС);
    // Добавляем другие необходимые параметры контекста документа
    
    ПродажиКлиент.ОткрытьФормуПодбораТоваров(ЭтаФорма, ПараметрыПодбора);
    
КонецПроцедуры

При использовании этого метода мы задействуем штатную форму подбора 1С, которая по умолчанию содержит колонки «В наличии» и «Доступно», корректно учитывая настройки склада и характеристики товаров. Это избавляет нас от необходимости «рисовать» свои колонки в обычном списке.

Решение 2: Программное добавление колонки в Динамический список

Если бизнес-процесс требует видеть остатки именно в форме выбора (без открытия подбора), нам придется модифицировать запрос динамического списка. Важно понимать, что в современных версиях УТ текст запроса формы списка часто формируется динамически в процедуре ПриСозданииНаСервере или в модуле менеджера.

Разберем шаги по добавлению колонки через расширение:

  1. Создадим расширение и добавим в него форму списка (или форму выбора) справочника Номенклатура.
  2. Найдем основной реквизит формы — Список (тип ДинамическийСписок).
  3. В обработчике ПриСозданииНаСервере нам нужно модифицировать текст запроса, добавив соединение с регистром ТоварыНаСкладахОстатки.

Пример модификации запроса:


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

Внимание: При таком подходе обязательно убедитесь, что вы индексируете поля и ограничиваете выборку по складу, иначе при большом объеме данных форма будет открываться крайне медленно.

Решение 3: Проверка функциональных опций и настроек формы

Иногда проблема кроется не в коде, а в слетевших настройках интерфейса после обновления. Выясним причину, проверив пользовательские настройки.

Проанализируем следующие действия:

Регистры остатков: «Товары на складах» vs «Распределение запасов»

При реализации собственного решения (как в Решении 2) важно выбрать правильный источник данных. В УТ 11.4 существует два основных регистра для учета остатков:

  1. ТоварыНаСкладах — содержит информацию о физическом наличии товара на конкретных складах. Используйте его, если вам нужно видеть фактический остаток (поле ВНаличии).
  2. РаспределениеЗапасов — этот регистр появился в последних версиях вместо СвободныеОстатки. Он сложнее, так как учитывает резервы, графики поступления и отгрузки. Если пользователям важно видеть, сколько товара можно реально зарезервировать, данные нужно брать отсюда.

Подведем итог: если после обновления в 1С:УТ 11.4 пропали остатки, наиболее правильным путем будет внедрение штатной формы подбора в те документы, где она отсутствует (например, в Пересортицу). Это сохранит производительность системы и обеспечит пользователей актуальными данными без риска «повесить» базу тяжелыми запросами в динамических списках.

← На главную