Почему в 1С:УТ 11.5 слетают настройки ширины колонок в заказе клиента и как это исправить?

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

При работе в современных конфигурациях на платформе 1С:Предприятие 8.3 пользователи часто сталкиваются с досадным поведением интерфейса: после тщательной ручной настройки ширины колонок в табличной части документа все настройки сбрасываются к значениям по умолчанию. Особенно остро эта проблема проявилась в 1С:Управление торговлей версии 11.5 (начиная с релизов 11.5.8 и выше). Рассмотрим детально, почему это происходит и как программно стабилизировать интерфейс.

Суть проблемы и сценарий возникновения

Проанализируем типичную ситуацию. Пользователь открывает документ Заказ клиента, заходит в табличную часть Товары и с помощью мышки настраивает удобную для себя ширину полей: Номенклатура, Количество, Цена. После этого он может открывать существующие документы, и настройки сохраняются. Однако, как только создается новый документ и в нем заполняется поле Клиент (или Контрагент), все настроенные колонки моментально «прыгают», возвращаясь к дефолтному состоянию или непредсказуемо растягиваясь.

Выясним причину такого поведения. В платформе 8.3.21 и 8.3.22 механизмы отрисовки управляемых форм стали более чувствительны к программному изменению свойств элементов. Когда в коде формы происходит изменение свойства Видимость для какой-либо колонки или группы, платформа инициирует полный пересчет макета таблицы. Если у колонок установлено свойство Автоопределение ширины, клиентское приложение может «забыть» пользовательские правки и применить настройки из метаданных.

Поиск виновника: анализ серверных вызовов

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

  1. Откроем форму нового документа Заказ клиента.
  2. Включим замер производительности в конфигураторе.
  3. В пользовательском режиме выберем контрагента в поле Клиент.
  4. Остановим замер и проанализируем стек вызовов.

Проанализировав ситуацию, мы увидим, что при изменении партнера срабатывает обработчик ПартнерПриИзмененииСервер(). Внутри него вызывается множество процедур, отвечающих за заполнение цен, условий оплаты и налогообложения. Но наиболее критичным для интерфейса оказывается блок, связанный с подсистемой Государственных контрактов и Электронного актирования (ЕИС).

Технический разбор причины в коде УТ 11.5

Выясняется, что в типовом решении при каждом изменении партнера вызывается процедура из общего модуля: ЭлектронноеАктированиеЕИСУТ.ДоговорПриИзмененииЭлектронноеАктированиеЕИС. Внутри этой процедуры безусловно вызывается метод УстановкаВидимостиГруппыГосконтракта.

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

Программное решение через расширение

Чтобы побороть это поведение, нам необходимо изменить логику вызова управления видимостью. Рассмотрим пример кода, который нужно внедрить в расширение. Основная идея — вызывать установку видимости только тогда, когда это действительно необходимо (например, если договор действительно связан с госконтрактом).

Посмотрим на пример модифицированной процедуры в общем модуле ЭлектронноеАктированиеЕИСУТ:


Процедура ДоговорПриИзмененииЭлектронноеАктированиеЕИС(Форма, Объект, НаименованиеТЧТовары = "Товары") Экспорт
    
    // Вместо безусловного вызова установки видимости, проверяем наличие контракта
    ГосконтрактДоговора = ЭлектронноеАктированиеЕИС.ГосударственныйКонтрактДоговора(Объект.Договор);
    
    Если ЗначениеЗаполнено(ГосконтрактДоговора) И ЗначениеЗаполнено(ГосконтрактДоговора.ВнутреннийИдентификаторЕИС) Тогда 
        
        // Только если это реально госконтракт, управляем видимостью
        УстановкаВидимостиГруппыГосконтракта(Форма, , НаименованиеТЧТовары); 
        
        Форма.ЭтоГосконтрактЕИС = Истина;
        ГосКонтракт = ГосконтрактДоговора;
        ЭтапГосконтрактаЕИС = Неопределено;
        ПолучитьЭтапГосконтракта(Объект.Договор, ЭтапГосконтрактаЕИС);
        
        Если ЗначениеЗаполнено(ЭтапГосконтрактаЕИС) Тогда
            Объект.ЭтапГосконтрактаЕИС = ЭтапГосконтрактаЕИС;
        Иначе
            Объект.ЭтапГосконтрактаЕИС = "";
        КонецЕсли;
    Иначе
        // Если это обычный договор, просто ставим флаг, не трогая структуру колонок без нужды
        Форма.ЭтоГосконтрактЕИС = Ложь;
        Объект.ЭтапГосконтрактаЕИС = "";
    КонецЕсли;
    
КонецПроцедуры

Таким образом, для 99% обычных отгрузок процедура перестанет менять свойства элементов формы при каждом выборе клиента, и пользовательские настройки ширины колонок останутся неизменными.

Альтернативные и дополнительные способы решения

Если вы не хотите вносить изменения в программный код, можно рассмотреть административные методы настройки интерфейса. Разберем их подробнее:

1. Настройка свойств колонок в Конфигураторе или через «Изменить форму»

Для наиболее важных полей табличной части (таких как Номенклатура или Количество) рекомендуется принудительно отключить автоматические механизмы растяжения:

Когда у колонки жестко задана ширина и отключено авто-растяжение, платформа гораздо реже сбрасывает её параметры при обновлении макета формы.

2. Очистка кэша настроек формы

Иногда «слетание» настроек связано с накопленными ошибками в кэше пользователя. Выполним следующие действия:

  1. Перейдем в раздел Администрирование — Настройки пользователей и прав.
  2. Выберем пункт Настройки пользователей.
  3. Найдем нужного пользователя и перейдем на вкладку Внешний вид.
  4. Найдем в списке форму документа Заказ клиента и удалим её настройки.

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

3. Влияние других подсистем (Маркировка и Прослеживаемость)

Проанализируем ситуацию шире: не только ЕИС влияет на видимость. В современных версиях УТ 11 аналогичное поведение могут вызывать подсистемы Честный знак (маркировка) и Прослеживаемость товаров. При выборе номенклатуры система проверяет, является ли товар маркированным, и динамически выводит колонки с кодами маркировки или номерами ГТД.

Если вы заметили, что колонки «прыгают» не при выборе клиента, а при добавлении товара, значит, причина кроется в вызове процедур управления видимостью в обработчике НоменклатураПриИзменении. Логика исправления будет аналогичной: минимизировать количество вызовов, изменяющих свойство Видимость, через проверку условий необходимости показа этих полей.

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

← На главную