1с форма только просмотр доступность некоторых элементов

Гибкое управление свойствами доступности элементов управления в обычных формах 1С: Предприятия 8.х

Наверное, одной из самых непростых и скучных задач при проектировании обычной формы в «1С: Предприятии» является управление доступностью элементов в зависимости от того или иного набора данных. Мне встречалось очень много решений: от процедуры вроде УстановитьВидимостьДоступность() с включением в нее всех правил для элементов управления, до совершенно хаотично разбросанных по всему коду обращений к указанным свойствам.

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

Все началось с того, что поиск решения для этой задачи натолкнул меня на статью из «Методик разработки» под названием «Организация управления доступом в форме». Ключевым моментом в статье является то, что управление доступом сосредотачивается в одной лишь процедуре УстановитьДоступ(). И если необходимо изменить состояния элементов управления, вызывается только эта процедура. Сама процедура не занимается определением доступа, а работает с данными из списков, которые формируются следующими функциями:

То есть сами условия доступности устанавливаются в этих функциях, а уже процедура УстановитьДоступ() присваивает соответствующим свойствам элементов управления эти заранее установленные значения.

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

Например, у нас есть табличное поле Товары, в котором присутствует колонка СкидкаПоДисконтнойКарте. Колонка видна только тогда, когда дисконтная карта проставлена в документ, т.е. реквизит ДисконтнаяКарта является заполненным. Соответственно, условие списока управления видимостью для колонки СкидкаПоДисконтнойКарте будет следующим:

Вторая часть когда — это функции, которые отвечают за формирование списков доступности. Они располагаются непосредственно в форме и являются экспортируемыми. Я немного отошел от стандарта 1С и заменил метод ПолучитьСписокДоступаКУправлениюВидимостью() на ПолучитьСписокУправлениеРедактированиемТекста(). Просто мне кажется, что так удобнее и логичнее. Ниже приведен шаблон кода с этими функциями:

И, наконец, третья часть — это процедура УстановитьДоступ(), которая тоже расположена в модуле формы. Именно эту процедуру мы вызываем в любом месте кода нашей формы, чтобы переопределить доступность элементов формы.

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

Теперь достаточно вызвать процедуру формы УстановитьДоступ(), и мы получим то состояние элементов, которые задали.

Хочется выделить следующий момент. В списки можно можно добавлять пути к элементам формы. Например, для вышеприведенного примера с таблицей Товары имя элемента определяем как «Товары.Колонки.СкидкаПоДисконтнойКарте». Или путь к кнопке ПробитьЧек. Можно использовать множественные вложения, вроде «ИмяКоманднойПанели.Кнопки.ИмяПодменю.Кнопки.ИмяКнопки».

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

Источник

Открытие документов «Только просмотр» с дополнительной кнопкой «Изменить»

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

С помощью минимального изменения конфигурации можно данный недостаток устранить.

Формы документа будут открываться по умолчанию «Только просмотр», а для редактирования документа, пользователю требуется нажать доп. кнопку в командной панели документа. (см. скрин)

Как реализовать этот функционал?

В конфигурациях от 1С (БП, УТ, ЗУП, УПП и т.д.), при открытие формы документа всегда вызывается какая либо процедура которая проверяет дату запрета редактирования данных.

в конфигурации Бухгалтерия предприятия, редакция 2.0 во всех формах документа ПриОткрытии вызывается:

// Установить доступность формы с учетом даты запрета редактирования

в конфигурации «Управление торговлей», редакция 10.3

Также в конфигурациях от 1С, во всех формах документов присутствует процедура ДействияФормыРедактироватьНомер(Кнопка)

Эту процедуру мы будем использовать для обработки действия по нажатию кнопки «Изменить».

Эти процедуры нам и нужны. Дальше, для примера, разберем, как это реализовать в конфигурации Бухгалтерия предприятия, редакция 2.0.

1. Создать новый общий модуль «лМодульДоработок» содержащий всего 1 процедуру:

Процедура ДобавитьКнопкуВКоманднуюПанельФормы(_Метаданные,_Форма) Экспорт

КП =_Форма.ЭлементыФормы.ДействияФормы; ТипКнопки = ТипКнопкиКоманднойПанели.Действие;

Если КП.Кнопки.Найти(«РедактированиеДокумента») = Неопределено Тогда

2. Изменить стандартную процедуру УстановитьДоступностьФормыДляРедактирования общего модуля РаботаСДиалогами. Добавить в конец процедуры (после всех проверок даты редактирования) текст:

//Если после проверки даты запрета, форма доступна для редактирования, откроем ее на просмотр,

//но добавим кнопочку в панель для возможности редактирования

если НЕ ФормаДокумента.ТолькоПросмотр и ДокументОбъект.Проведен тогда

3. Процедура форм документов «ДействияФормыРедактироватьНомер» состоит из 1 строчки и вызывает процедуру «ИзменениеВозможностиРедактированияНомера» общего модуля «МеханизмНумерацииОбъектов»

МеханизмНумерацииОбъектов.ИзменениеВозможностиРедактированияНомера(ЭтотОбъект.Метаданные(), ЭтаФорма, ЭлементыФормы.ДействияФормы.Кнопки.Подменю, ЭлементыФормы.Номер);

Изменить процедуру следующим образом:

Процедура ИзменениеВозможностиРедактированияНомера(МетаданныеОбъекта, ФормаОбъекта, ПодменюДействия, ПолеВводаНомера, ПолеВводаНомераДубль = Неопределено, ТекстВопроса = «») Экспорт

//Если при вызове процедуры форма документа не доступна для редактирования, то вызов процедуры произошел по нажатию кнопки «Изменить»

Если ФормаОбъекта.ТолькоПросмотр тогда

ФормаОбъекта.ТолькоПросмотр = ложь;

ФормаОбъекта.ЭлементыФормы.ДействияФормы.Кнопки.РедактированиеДокумента.Доступность = ложь;

ФормаОбъекта.Обновить();

иначе //иначе на самом деле хотят редактировать номер документа

Кнопка = ПодменюДействия.Кнопки.РедактироватьКодНомер;
Если НЕ Кнопка.Пометка Тогда

Если ПустаяСтрока(ТекстВопроса) Тогда
Если ВРЕГ(ПолеВводаНомера.Данные) = ВРЕГ(«Код») Тогда
ТекстВопроса = «Код присваивается автоматически при записи элемента, самостоятельное его редактирование может привести к нарушению в нумерации в системе. Вы действительно хотите установить код вручную?»
Иначе
ТекстВопроса = «Номер документу присваивается автоматически при записи, самостоятельное его редактирование может привести к нарушению в нумерации в системе. Вы действительно хотите установить номер вручную?»
КонецЕсли;
КонецЕсли;

Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Если Ответ <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
КонецЕсли;
Кнопка.Пометка = Не Кнопка.Пометка;
ПолеВводаНомера.ТолькоПросмотр = НЕ Кнопка.Пометка;
ПолеВводаНомера.ПропускатьПриВводе = ПолеВводаНомера.ТолькоПросмотр;
ОбновитьПодсказкуКодНомерОбъекта(МетаданныеОбъекта, ПодменюДействия, ПолеВводаНомера);

Если ПолеВводаНомераДубль <> Неопределено Тогда
ПолеВводаНомераДубль.ТолькоПросмотр = ПолеВводаНомера.ТолькоПросмотр;
ПолеВводаНомераДубль.ПропускатьПриВводе = ПолеВводаНомераДубль.ТолькоПросмотр;
ОбновитьПодсказкуКодНомерОбъекта(МетаданныеОбъекта, ПодменюДействия, ПолеВводаНомераДубль);
КонецЕсли;

//конец проверки Если ФормаОбъекта.ТолькоПросмотр тогда

конецесли;

//конец изменений

Стандартный функционал сохраняется. Изменений минимум. Легко поддерживать (переносить) при обновление.

Источник

Видимость, доступность элементов форм (управляемые формы)

В разделе «Администрирование» добавляется пункт «ВДЭФ настройки».

f08b6e3d53231c165ce66c4671dca0de

В список форм добавлены формы Справочников, Документов, Регистров сведений, Обработок и бизнеспроцессов с задачами.
В список ролей все возможные роли из основной конфигурации и расширений(если такие есть).

1. Выбираем форму, далее подгружаются все элементы формы.

2. Выбираем необходимый элемент.

3. Из списка ролей выбираем роль, по доступности которой правило не работает (допустим, ПолныеПрава, чтобы у всех кроме администраторов.

4. Устанавливаем флажок, Видимость, Доступность, ТолькоПросмотр.

Также, если будет заполнено поле Произвольный код, то он выполнится после всех выбранных действий.

На каждый элемент формы создаётся отдельная строка регистра.

Есть небольшие баги(допустим, правило которое создаётся, применяется так же и на форму записи ВДЭФ_Настройки, т.к. форма на которую «вешаются» ограничения получается через «ПолучитьФорму()». Следовательно, может получиться так, что правило, которое вы создали не откроется на редактирование, его достаточно будет удалить и создать заново), которые, возможно, исправлю, но они мало влияют на суть.

UPD: Если какая-то форма не работает, значит в модуле этой формы, в обработчике ПриСозданииНаСервере не добавлено:

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

Хоть механизм и типовой, но не на всех формах добавлен.

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

Источник

Кнопка «Только просмотр» для печатной формы документа

В 8.1 это решалось установкой:
ТабДокумент.ТолькоПросмотр = Ложь;

а тут табличный документ и так имеет свойство ТолькоПросмотр = Ложь, и Защита = Ложь,
пробовала обращаться и к полю на форме и к самому табличному документу.
Задачка простая, но никак не пойму что надо сделать. :o

З.Ы. пробовала и на стандартной форме (ОбщиеФормы-ПечатьДокументов) и на собственной форме отчета.

Процедура КоманднаяПанельФормыТолькоПросмотр(Кнопка)
ЭлементыФормы.ПолеТабличногоДокумента.ТолькоПросмотр = НЕ ЭлементыФормы.ПолеТабличногоДокумента.ТолькоПросмотр;
ЭлементыФормы.КоманднаяПанельФормы.Кнопки.ТолькоПросмотр.Пометка = НЕ ЭлементыФормы.КоманднаяПанельФормы.Кнопки.ТолькоПросмотр.Пометка;
КонецПроцедуры

Кажется в 1 сообщении я написала, что так:
>ЭлементыФормы.ПолеТабличногоДокумента.ТолькоПросмотр = НЕ ЭлементыФормы.ПолеТабличногоДокумента.ТолькоПросмотр;
НЕ РАБОТАЕТ.
Тем более, что приведенный пример относится к 8.1, а тут 8.2, принцип другой.
У табличного поля режим ТолькоПросмотр УЖЕ равно ЛОЖЬ, но тем не менее поле редактировать нельзя.

>И отладчиком тыкнись, когда все таки ТолькоПросмотр становится истиной.
ну я же уже сказала, что не становится оно истиной.

Так, давайте сначала:
Я захожу под Администратором, у меня полные права.
Вывожу печатную форму на печать, и у табличного поля, повторяюсь:
>а тут табличный документ и так имеет свойство ТолькоПросмотр = Ложь, и Защита = Ложь,
То есть ТолькоПросмотр = ЛОЖЬ И редактировать НЕЛЬЗЯ.

Отладчиком проходила все, и свойство ТолькоПросмотр как было ложь так и осталось.

ВОПРОС: что делает стандартный пункт в меню и как это повторить на действии в кнопке.

Источник

1С форма только просмотр

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

Поделиться с друзьями

Области

Реклама

Продукт

Новые обсуждения форума

Статистика

Авторское право

Права на информацию в разделе «Справка УПП», «Справка БП» и «Справка ЗУП» принадлежат фирме 1С (http://1c.ru)

Права на информацию в разделе «Практический опыт» принадлежат Мутовкину А.М.

Перепечатка разрешена только с активной ссылкой на правообладателя.

Установить только просмотр для всей формы кроме списка элементов

Submitted by admin on вт, 06/15/2010 – 13:17

Ошибка

выдает ошибку
: Итератор для значения не определен
Для Каждого ЭлФормы Из ЭлементыФормы Цикл

Наверное, одной из самых непростых и скучных задач при проектировании обычной формы в «1С: Предприятии» является управление доступностью элементов в зависимости от того или иного набора данных. Мне встречалось очень много решений: от процедуры вроде УстановитьВидимостьДоступность() с включением в нее всех правил для элементов управления, до совершенно хаотично разбросанных по всему коду обращений к указанным свойствам.

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

Все началось с того, что поиск решения для этой задачи натолкнул меня на статью из «Методик разработки» под названием «Организация управления доступом в форме». Ключевым моментом в статье является то, что управление доступом сосредотачивается в одной лишь процедуре УстановитьДоступ(). И если необходимо изменить состояния элементов управления, вызывается только эта процедура. Сама процедура не занимается определением доступа, а работает с данными из списков, которые формируются следующими функциями:

То есть сами условия доступности устанавливаются в этих функциях, а уже процедура УстановитьДоступ() присваивает соответствующим свойствам элементов управления эти заранее установленные значения.

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

Например, у нас есть табличное поле Товары, в котором присутствует колонка СкидкаПоДисконтнойКарте. Колонка видна только тогда, когда дисконтная карта проставлена в документ, т.е. реквизит ДисконтнаяКарта является заполненным. Соответственно, условие списока управления видимостью для колонки СкидкаПоДисконтнойКарте будет следующим:

Вторая часть когда — это функции, которые отвечают за формирование списков доступности. Они располагаются непосредственно в форме и являются экспортируемыми. Я немного отошел от стандарта 1С и заменил метод ПолучитьСписокДоступаКУправлениюВидимостью() на ПолучитьСписокУправлениеРедактированиемТекста(). Просто мне кажется, что так удобнее и логичнее. Ниже приведен шаблон кода с этими функциями:

И, наконец, третья часть — это процедура УстановитьДоступ(), которая тоже расположена в модуле формы. Именно эту процедуру мы вызываем в любом месте кода нашей формы, чтобы переопределить доступность элементов формы.

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

Тогда для нашего примера функции определения списков примут следующий вид:

Теперь достаточно вызвать процедуру формы УстановитьДоступ(), и мы получим то состояние элементов, которые задали.

Хочется выделить следующий момент. В списки можно можно добавлять пути к элементам формы. Например, для вышеприведенного примера с таблицей Товары имя элемента определяем как «Товары.Колонки.СкидкаПоДисконтнойКарте». Или путь к кнопке ПробитьЧек. Можно использовать множественные вложения, вроде «ИмяКоманднойПанели.Кнопки.ИмяПодменю.Кнопки.ИмяКнопки».

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

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • 1с форма только для чтения
  • 1с форма списка текущая строка