Почему не получается программно отобразить счет учета в документе Списание с расчетного счета?

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

В процессе разработки расширений или модификации типовой конфигурации 1С:Бухгалтерия предприятия 3.0 (включая версию КОРП), программисты часто сталкиваются с ситуацией, когда стандартная команда Элементы.ИмяРеквизита.Видимость = Истина; не дает никакого результата. Особенно остро эта проблема проявляется в документе Списание с расчетного счета при попытке отобразить реквизиты, связанные со счетами учета, такими как СчетРасчетаСКонтрагентом или колонки в табличной части РасшифровкаПлатежа.

Разберем детально, почему платформа игнорирует ваши команды и как все же добиться отображения нужного поля, пройдя через все уровни "защиты" интерфейса 1С.

Уровень 1: Персональные настройки пользователя

Прежде чем искать ошибку в коде или проверять функциональные опции, мы должны проанализировать настройки самого интерфейса программы. В конфигурации Бухгалтерия предприятия 3.0 реализован глобальный механизм управления видимостью бухгалтерских счетов. Если этот механизм отключен на уровне пользователя, никакие программные манипуляции с объектом ЭлементФормы не помогут.

Проверим этот момент по шагам:

  1. Перейдем в раздел Главное.
  2. Выберем пункт Персональные настройки.
  3. Найдем флаг Показывать счета учета в документах.

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

Уровень 2: Функциональные опции и их программная проверка

Проанализируем ситуацию с функциональными опциями (ФО). Часто реквизит может быть привязан к ФО, которая в данный момент выключена. Однако в случае со счетами учета в БП 3.0 ситуация сложнее. Даже если у самого реквизита СчетУчетаСКонтрагентом в метаданных не стоит конкретная Функциональная опция, он может управляться через программный интерфейс проверки опций.

Рассмотрим, как найти место, где система "прячет" реквизит:

  1. Откроем модуль формы документа СписаниеСРасчетногоСчета.
  2. Выполним поиск по строке УстановитьВидимость или УправлениеФормами.
  3. Обратим внимание на вызовы процедур из общих модулей, например, СчетаУчетаВДокументах.ПриЧтенииНаСервере.

Если мы работаем через расширение, нам необходимо убедиться, что наша модификация видимости происходит ПОСЛЕ того, как отработали все типовые механизмы. Оптимально использовать обработчик ПриОткрытии на клиенте или подключаться к процедурам обновления формы "После" (в терминах расширений).

Уровень 3: Условное оформление формы

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

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

Чтобы программно отключить такое поведение в коде, мы должны найти нужный элемент в коллекции УсловноеОформление. Пример логики:


Для Каждого ЭлементОформления Из ЭтаФорма.УсловноеОформление.Элементы Цикл
    Если ЭлементОформления.Оформление.УстановитьФакт("Видимость") Тогда
        // Проверяем, относится ли это правило к нашему счету учета
        Для Каждого ОформляемоеПоле Из ЭлементОформления.Поля.Элементы Цикл
            Если Строка(ОформляемоеПоле.Поле) = "РасшифровкаПлатежаСчетУчетаСКонтрагентом" Тогда
                ЭлементОформления.Использование = Ложь;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
КонецЦикла;

Уровень 4: Влияние вида операции документа

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

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

Уровень 5: Группировка элементов на форме

Проанализируем структуру элементов в дереве формы. Реквизит СчетРасчетаСКонтрагентом обычно находится внутри группы (например, ГруппаБухгалтерскийУчет или ГруппаСчетаУчета).

Важный момент: если у родительской группы установлено свойство Видимость = Ложь, то изменение видимости дочернего элемента не выведет его на экран. Более того, в БП 3.0 группы часто имеют свойство Отображение, установленное в значение Нет, что делает их чисто логическими контейнерами, но их программная видимость все равно влияет на вложенные элементы.

Рассмотрим пример кода для расширения, который гарантированно пытается "пробить" видимость счета учета:


&НаСервере
Процедура ИмяРасширения_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    
    // 1. Принудительно включаем видимость самого элемента
    ЭтаФорма.Элементы.РасшифровкаПлатежаСчетУчетаСКонтрагентом.Видимость = Истина;
    
    // 2. Проверяем родительскую группу
    РодительЭлемента = ЭтаФорма.Элементы.РасшифровкаПлатежаСчетУчетаСКонтрагентом.Родитель;
    Пока РодительЭлемента <> Неопределено И ТипЗнч(РодительЭлемента) = Тип("ГруппаФормы") Цикл
        РодительЭлемента.Видимость = Истина;
        РодительЭлемента = РодительЭлемента.Родитель;
    КонецЦикла;
    
    // 3. Отключаем влияние персональных настроек (если нужно для конкретной формы)
    // Внимание: это может нарушить единообразие интерфейса!
    ЭтаФорма.ПоказыватьСчетаУчета = Истина; 
    
КонецПроцедуры

Итоги и рекомендации

Подводя итог, если вы столкнулись с невозможностью отобразить счет учета в банковских документах, действуйте по следующему алгоритму:

  1. Проверьте настройки пользователя: Включен ли флаг "Показывать счета учета" в персональных настройках. В 90% случаев проблема именно в этом.
  2. Исследуйте Условное оформление: Проверьте вкладку "Условное оформление" в конфигураторе для этой формы. Если там есть правила для нужного поля, их нужно программно деактивировать.
  3. Анализируйте Вид операции: Убедитесь, что для текущего вида операции использование счета учета в принципе предусмотрено логикой конфигурации.
  4. Используйте правильное событие: В расширениях всегда используйте перехват процедур ПриСозданииНаСервере или ОбновитьОтображениеСчетовУчета с типом вызова После.

Таким образом, комплексный подход к анализу всех слоев управления интерфейсом (метаданные, функциональные опции, программный код и настройки пользователя) позволит вам успешно решить задачу отображения любых "капризных" реквизитов в 1С.

← На главную