Как программно разрешить редактирование цены в 1С:КА, ERP или УТ 11 при выбранном виде цен

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

Часто при работе с современными конфигурациями на платформе 1С:Предприятие 8.3 программисты сталкиваются с ситуацией, когда стандартные свойства элемента формы в конфигураторе (такие как Доступность или ТолькоПросмотр) установлены корректно, но в режиме «Предприятие» поле остается заблокированным. Типичный пример — поле Цена в документах реализации или актах. Если выбран конкретный вид цен, система жестко запрещает его ручную правку, разрешая редактирование только при выборе «Произвольной цены».

В этой статье мы подробно разберем, какими механизмами платформа и типовые конфигурации (УТ 11, КА 2, ERP 2) ограничивают доступ к полям, и как программно обойти эти ограничения, сохранив при этом поддержку конфигурации.

Выясняем причину: почему поле «Цена» недоступно

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

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

Рассмотрим подробнее каждый из способов управления доступностью и способы их изменения.

Способ 1. Анализ условного оформления

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

Система может добавлять правило, которое звучит так: «Если поле ВидЦен заполнено, то для колонки Цена установить ТолькоПросмотр = Истина». Чтобы обойти это, нам потребуется найти индекс этого правила и отключить его или изменить условие.

Способ 2. Настройка прав и функциональных опций

В типовых решениях (КА 2, ERP) логика управления ценой часто завязана на праве пользователя отклоняться от условий соглашений. Выясним, включена ли соответствующая возможность в НСИ. Перейдите в раздел НСИ и администрирование — Настройка разделов — Продажи. Проверьте флаг «Допускать отклонение от условий продаж».

Если этот флаг снят, никакие манипуляции с формой не помогут, так как проверка будет срабатывать в модуле менеджера или объекта при попытке записи. Если же флаг стоит, необходимо убедиться, что у пользователя есть роль ОтклонениеОтУсловийПродаж. Обратите внимание, что в типовых конфигурациях даже «Полные права» иногда проверяются через явное наличие этой роли в профиле доступа.

Способ 3. Программное переопределение через расширение

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

Разберем пример создания программной «заплатки» в расширении. Нам нужно перехватить событие после того, как типовой код уже отработал и заблокировал поле.

Создадим в расширении процедуру-перехватчик с аннотацией &После:


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

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

Способ 4. Изменение логики в модуле формы

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

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


&НаКлиенте
&После("ВидЦенПриИзменении")
Процедура ИмяПрефикса_ВидЦенПриИзмененииПосле(Элемент)
    // Вызываем процедуру, которая принудительно открывает доступ к колонке
    ИмяПрефикса_РазблокироватьЦену();
КонецПроцедуры

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

Особенности справочника «Виды цен»

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

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

Резюме

Мы проанализировали основные способы ограничения редактирования цены в 1С:КА и ERP. Подытожим алгоритм действий:

  1. Проверяем настройки Функциональных опций и наличие роли на отклонение от условий продаж.
  2. Изучаем настройки самого Вида цены в справочнике.
  3. Ищем правила Условного оформления на форме документа.
  4. Если типовые настройки не помогают, используем расширение конфигурации с перехватом процедур ПриЧтенииНаСервере или ПриИзменении для принудительной установки ТолькоПросмотр = Ложь.

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

← На главную