Как в 1С:ERP и КА программно управляется доступность табличной части Распределение по счетам в Заявке на расходование денежных средств?

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

В конфигурациях 1С:ERP Управление предприятием 2 и 1С:Комплексная автоматизация 2 программисты часто сталкиваются с ситуацией, когда стандартная настройка ролей в метаданных не дает полного понимания того, почему конкретное поле или табличная часть документа ведут себя определенным образом. Типичный пример — табличная часть РаспределениеПоСчетам в документе ЗаявкаНаРасходованиеДенежныхСредств. Даже если у пользователя есть права на редактирование документа, эта вкладка может оставаться в режиме "Только просмотр". В этой статье мы разберем, как система управляет этой доступностью на программном уровне.

Бизнес-логика и ролевая модель казначейства

Прежде чем переходить к коду, проанализируем ситуацию с точки зрения методологии 1С. Документ ЗаявкаНаРасходованиеДенежныхСредств (ЗнРДС) предполагает разделение ответственности между инициатором платежа и казначеем:

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

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

Где искать программное управление доступностью

Если вы попробуете найти обращение к табличной части РаспределениеПоСчетам через глобальный поиск по конфигурации, вы можете не обнаружить прямых присвоений Элементы.РаспределениеПоСчетам.ТолькоПросмотр = Истина. Это связано с тем, что в современных конфигурациях на базе УТ 11 (включая ERP и КА) используется механизм динамического управления свойствами формы.

Основная логика в данном случае скрыта в модуле менеджера документа. Выясним причину такого поведения, изучив механизмы формирования настроек формы.

Анализ кода в модуле менеджера

Для управления видимостью и доступностью полей в ERP часто используется специализированная структура настроек, которая передается в общие модули казначейства. Разберем фрагмент кода, который отвечает за установку признака "Только просмотр" для элементов формы:


// Пример логики из модуля менеджера документа
Финансы.НовыйОтбор(ГруппаИ2, "Дополнительно.ПравоСогласования", Ложь);
Финансы.НовыйОтбор(ГруппаИ2, "Дополнительно.ПравоУтверждения", Ложь);
Элемент.Свойства.Вставить("ТолькоПросмотр");

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

Механизм Настройки формы и общие модули

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

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

Как проверить доступность конкретной роли

Если вам необходимо изменить это поведение или понять, почему ваша роль не дает доступа, выполните следующие шаги:

  1. Проверьте, включена ли в профиль пользователя роль ПланированиеДенежныхСредств. Часто именно она, наряду с ролью Казначей, открывает доступ к распределению.
  2. Проанализируйте процедуру ПриСозданииНаСервере в модуле формы документа. Ищите вызовы, связанные с настройкой прав, например:
    
    ДенежныеСредстваКлиентСервер.УстановитьСостояниеПолейФормы(ЭтотОбъект, Элементы);
    
  3. Используйте отладчик в модуле менеджера, найдя функцию, отвечающую за описание настроек формы. Посмотрите, какие значения принимают флаги ПравоСогласования и ПравоУтверждения.

Влияние функциональных опций

Не забывайте, что в 1С:ERP доступность многих механизмов зависит от функциональных опций. Если в системе отключен расширенный казначейский контроль или не используются заявки как обязательный инструмент управления лимитами, логика работы формы может существенно меняться. Проверьте настройки в разделе НСИ и администрирование -> Казначейство и взаиморасчеты.

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

Резюме

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

Именно такое разделение позволяет системе 1С:ERP обеспечивать высокую надежность финансового контроля, предотвращая несанкционированное изменение платежных реквизитов на разных стадиях жизненного цикла документа.

← На главную