Как запретить изменение и выбор организации в документах 1С

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

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

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

Причины изменения поведения системы после переноса данных

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

  1. Активация функциональной опции учета по нескольким организациям. В типовых конфигурациях, если в справочнике Организации присутствует только один элемент, система автоматически скрывает выбор организации из шапки документов. Если при переносе через «Конвертацию данных» перенеслись помеченные на удаление, архивные или дублирующие организации, программа включает признак многофирменного учета и отображает кнопку выбора.
  2. Сброс настроек прав доступа и RLS. При переносе данных через правила обмена не переносятся служебные регистры и таблицы разграничения доступа. Если в старой базе действовали ограничения на уровне записей, в новой базе они могли оказаться отключенными.
  3. Сброс персональных настроек форм. Настройки видимости и доступности элементов форм, заданные через системное меню администратора, хранятся в системных таблицах и не переносятся стандартными правилами выгрузки справочников и документов.

Способ 1. Проверка справочника организаций и параметров учета (без доработки)

Если в информационной базе учет ведется фактически только по одному юридическому лицу, восстановим автоматическое скрытие реквизита типовыми средствами конфигурации.

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

Способ 2. Настройка типового механизма RLS через группы доступа

Если в базе зарегистрировано несколько организаций, но конкретный пользователь или группа пользователей должны работать строго с одной из них, используем типовое ограничение прав на уровне записей (RLS):

  1. В разделе администрирования перейдем в настройки пользователей и прав и включим признак Ограничивать доступ на уровне записей.
  2. Откроем профили групп доступа или группы доступа пользователей. Для нужного профиля включим ограничение по виду доступа Организации.
  3. Зададим значение доступа: переключим режим в состояние Все запрещены, исключения назначаются в группах доступа и укажем в списке исключений только разрешенную организацию.
  4. Дождемся обновления прав доступа. В результате при попытке нажать кнопку выбора в поле Организация пользователю будет доступна только назначенная ему организация, а выбор чужих организаций платформа заблокирует на уровне СУБД.

Способ 3. Отключение кнопки выбора через пользовательские настройки формы

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

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

Способ 4. Программный контроль при записи (подписка на событие или расширение)

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

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


Процедура ЗапретитьСменуОрганизацииПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт

    Если Источник.ЭтоНовый() Тогда
        Возврат;
    КонецЕсли;

    // Считываем исходную организацию из базы данных
    ОрганизацияВБазе = Источник.Ссылка.Организация;

    Если ЗначениеЗаполнено(ОрганизацияВБазе) И Источник.Организация <> ОрганизацияВБазе Тогда
        Отказ = Истина;
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
            "Запрещено изменять организацию в ранее созданном документе!",
            Источник,
            "Организация"
        );
    КонецЕсли;

КонецПроцедуры

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

Способ 5. Программное отключение кнопки выбора в расширении формы

Чтобы скрыть саму кнопку «...» непосредственно в интерфейсе документа, добавим форму документа в расширение конфигурации и настроим свойства элемента в обработчике ПриСозданииНаСервере:


&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // Блокируем интерактивный выбор организации
    ЭлементОрганизация = Элементы.Организация;
    ЭлементОрганизация.КнопкаВыбора = Ложь;
    ЭлементОрганизация.БыстрыйВыбор = Ложь;
    ЭлементОрганизация.РежимРедактированияТекста = РежимРедактированияТекста.Недоступен;

КонецПроцедуры

Разберем параметры этого обработчика: отключение свойства КнопкаВыбора скрывает троеточие, отключение БыстрыйВыбор исключает выпадение списка последних выбранных значений, а блокировка режима редактирования текста предотвращает ввод названия сторонней организации с клавиатуры по строке.

← На главную