Skip to content
No description, website, or topics provided.
1C Enterprise
Branch: master
Clone or download
shcherbakov-vadim Добавлена проверка на повторное определение действий/свойств
Добавлена проверка на изменение определенного в конфигураторе
обработчика события
Оптимизирован повторный вызов
Latest commit 7f8c9aa Feb 17, 2020
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.settings Initial commit Jun 25, 2019
DT-INF Initial commit Jun 25, 2019
src Добавлена проверка на повторное определение действий/свойств Feb 17, 2020
.gitignore Игнорирование группы колонок при использования символа подстановки для Sep 2, 2019
.project
LICENSE.md
README.md Добавлена возможно уточнения родителя Sep 6, 2019

README.md

1. Модификации управляемых форм

Подсистема модификации управляемых форм позволяет изменять свойства формы с помощью макета, который создается для каждой формы объекта метаданных или общего макета для общих форм. Для использования подсистемы необходимо перенести в свою конфигурацию модуль: ОбщийМодуль.МодификацияУправляемыхФорм Для применения к форме макета изменений, необходимо сделать вызов МодификацияУправляемыхФорм.ПрименитьМакетИзменений(Форма) перед первым использованием добавленных объектов формы. Если в конфигурации предусмотрена процедура общего модуля, которая вызывается из всех форм (например ОбщийМодуль.МодификацияКонфигурацииПереопределяемый.ПриСозданииНаСервере для конфигурации 1C:ERP) – следует добавить вызов в нее, чтобы не добавлять во все модифицируемые формы. Если для формы не предусмотрен вызов общей процедуры или вызов происходит слишком поздно - необходимо добавить следующий фрагмент в раздел инициализации модуля формы (после определения всех процедур и фунций):

#Если Сервер Тогда
МодификацияУправляемыхФорм.ПрименитьМакетИзменений(ЭтаФорма);
#КонецЕсли

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

1.1. Формат описания изменений формы

Пример можно посмотреть в макете: Документ.Приход.Макет.МОД_Модификация_ФормаДокумента

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

  • Реквизиты – описывается добавление новых или корректировка существующих реквизитов формы. К добавленным реквизитам в модуле формы нужно обращаться с помощью ЭтаФорма.<имя реквизита>
    • Колонки
      • Имя – имя нового или существующего реквизита. Для имени может использоваться несколько подряд идущих колонок с таким именем, либо с объединенной шапкой. С помощью нескольких колонок имени можно добавлять колонки в коллекции данных формы.
      • ОписаниеТипов(ТипЗначения) – тип значения нового реквизита
      • <описание имени свойства> - свойство реквизита
    • Описание каждого реквизита выполняется в отдельной строке. В ячейках указывается <описание значения свойства>
  • Команды – описывается добавление новых или корректировка существующих команд формы
    • Колонки
      • Имя – имя новой или существующей команды
      • <описание имени свойства> - свойство команды
    • Описание каждой команды выполняется в отдельной строке. В ячейках указывается <описание значение свойства>
  • Элементы – описывается добавление новых или корректировка существующих команд формы
    • Колонки
      • Имя – имя нового или существующего элемента. Если Имя = Форма, колонки описывают изменения свойств формы.
        • Для новых элементов типа ПолеФормы вид поля формы зависит от типа реквизита, с которым связан элемент
          • Для реквизита с единственным типом «Булево»: Вид = ВидПоляФормы.ПолеФлажка
          • В остальных случаях Вид = ВидПоляФормы.ПолеВвода
        • Для новых элементов типа ГруппаФормы, которые расположены в других группах или на страницах по-умолчанию устанавливаются следующие значения свойств: Вид = ВидГруппыФормы.ОбычнаяГруппа, Отображение = ОтображениеОбычнойГруппы.Нет, ОтображатьЗаголовок = Ложь
      • Тип – имя типа элемента формы
      • ПутьКДанным – заполнение является обязательным для элементов типа «ПолеФормы». При необходимости вывода на форму полей ссылочного реквизита с вложенностью более 1 необходимо свойство «ПутьКДанным» указать в следующем формате <путь к реквизиту>/<путь к данным реквизита>
      • <описание имени свойства> - свойство элемента
    • Описание каждого элемента выполняется в отдельной строке. В ячейках указывается <описание значения свойства>

Допускаются следующие варианты <описание имени свойства>:

  • <имя свойства> - в качестве значения свойства используется строка из ячейки.
    • Если в ячейке есть символ %, то он заменяется на значение ячейки родителя
  • (<имя свойства>) – в качестве значения свойства устанавливается результат выражения из ячейки, выполняемого с помощью функции Вычислить()
  • <имя конструктора>(<имя свойства>) – для вычисления значения свойства используется специальный конструктор. Поддерживаются следующие конструкторы
    • ОписаниеТипов – в ячейке перечисляются типы через запятую, также как они передаются в конструктор объекта ОписаниеТипов. Для примитивных типов поддерживается указание квалификаторов
      • Число(<длина>, <точность>, <имя значения перечисления ДопустимаяДлина>)
      • Строка(<длина>, <имя значения перечисления ДопустимаяДлина >)
      • Дата(<имя значения перечисления ЧастиДаты>)
    • ПараметрыВыбора – в ячейке определяется список параметров выбора, разделенный запятыми <имя параметра выбора>(<значение параметра выбора>), где <значение параметра выбора> это вычисляемое выражение на языке 1С
      • Если <имя параметра выбора> = "*" добавляются параметры выбора, заданные в конфигураторе, и с помощью префиксов "+" и "-" можно добавить новые / удалить существующие
    • СвязиПараметровВыбора – в ячейке определяется список параметров выбора, разделенный запятыми <имя параметра выбора>(<путь к данным формы>).
      • Если <имя параметра выбора> = "*" добавляются связи параметров выбора, заданные в конфигураторе, и с помощью префиксов "+" и "-" можно добавить новые / удалить существующие
  • <имя операции>() – необходимо выполнить операцию над объектом формы. Поддерживаются следующие операции:
    • МестоРасположения – в ячейке задается имя элемента формы, перед которым необходимо разместить текущий элемент. Родитель указанного элемента должен находится в одной из подгрупп родителя текущего элемента
    • Родитель – в ячейке задается имя элемента, которые необходимо установить в качестве родителя для текущего элемента. Новый родитель должен находится в одной из подгрупп родителя текущего элемента. Игнорируется если для текущего элемента указана операция МестоРасположения
  • <имя перечисления>(<имя свойства>) – строка из ячейки используется как имя значения системного перечисления <имя перечисления>
  • [<имя действия>] – в ячейке указывается имя процедуры, которая устанавливается для действия <имя действия>.
    • Если в ячейке установлено значение %, оно заменяется на <имя элемента><имядействия>.
    • Если в ячейке есть значение % оно заменяется на <имя действия> Если <имя свойства> начинается с точки (.), то описывается изменение свойств значения реквизита формы. Например для динамического списка можно менять свойства объекта ДинамическийСписок

1.2. Существующие ограничения:

  • невозможно изменить свойства реквизитов формы добавленных в конфигураторе. В том числе такое важное свойство как ТипЗначения

2. Ограничение изменения реквизитов управляемой формы

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

Для работы с механизмом необходимо добавить следующий фрагмент в раздел инициализации формы (после всех процедур и функций)

#Если Сервер Тогда
МодификацияУправляемыхФорм.ИнициализироватьОграничениеИзмененияРеквизитов(ЭтаФорма);
#КонецЕсли

Ограничение выполняется с помощью вызова на клиенте:

МодификацияУправляемыхФорм.ОграничитьИзменениеРеквизитов(ЭтаФорма, <описание ограничений>)

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

МодификацияУправляемыхФорм.ОграничитьИзменениеРеквизитов(ЭтаФорма, "Утвержден")

По-умолчанию кнопки формы связанные с командами, у которых не установлен признак "ИзменяетСохраняемыеДанные" ограничиваться не будут, для их ограничения необходимо явно указать запрет, либо на кнопку, либо на все командную панель, например:

МодификацияУправляемыхФорм.ОграничитьИзменениеРеквизитов(ЭтаФорма, "-ФормаКоманднаяПанель.*")

Для предоставления доступа ко всем элементам таблицы "Товары", сроме колонки "Цена" цена необходимо выполнить

МодификацияУправляемыхФорм.ОграничитьИзменениеРеквизитов(ЭтаФорма, "Товары.*,-ТоварыЦена")

Для предоставления доступа только к таблице "Проверка" необходимо выполнить

МодификацияУправляемыхФорм.ОграничитьИзменениеРеквизитов(ЭтаФорма, "*,-Проверка")

В общем случае каждый элемент описания ограничений имеет следующий формат (<префикс>)<имя элемента>(.*) где <префикс> - если не указан или "+" - предоставить доступ, если "-" - ограничить доступ .* означает, что описание ограничения влияет в том числе на подчиненные элементы, при этом * означает все элементы Ограничение, установленное на более высоком уровне дерева элементов, имеет приоритет ниже, чем у ограничения, установленных на более низком уровне уровне.

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

МодификацияУправляемыхФорм.ВосстановитьОграничениеИзмененияРеквизитов(ЭтаФорма)

Для отмены ограничения доступа необходимо выполнить на клиенте

МодификацияУправляемыхФорм.ОтменитьОграничениеИзмененияРеквизитов(ЭтаФорма)
You can’t perform that action at this time.