Открытие документов «Только просмотр» с дополнительной кнопкой «Изменить»
С помощью минимального изменения конфигурации можно данный недостаток устранить.
Формы документа будут открываться по умолчанию «Только просмотр», а для редактирования документа, пользователю требуется нажать доп. кнопку в командной панели документа. (см. скрин)
С помощью минимального изменения конфигурации можно данный недостаток устранить.
Формы документа будут открываться по умолчанию «Только просмотр», а для редактирования документа, пользователю требуется нажать доп. кнопку в командной панели документа. (см. скрин)
Как реализовать этот функционал?
В конфигурациях от 1С (БП, УТ, ЗУП, УПП и т.д.), при открытие формы документа всегда вызывается какая либо процедура которая проверяет дату запрета редактирования данных.
в конфигурации Бухгалтерия предприятия, редакция 2.0 во всех формах документа ПриОткрытии вызывается:
// Установить доступность формы с учетом даты запрета редактирования
в конфигурации «Управление торговлей», редакция 10.3
Также в конфигурациях от 1С, во всех формах документов присутствует процедура ДействияФормыРедактироватьНомер(Кнопка)
Эту процедуру мы будем использовать для обработки действия по нажатию кнопки «Изменить».
Эти процедуры нам и нужны. Дальше, для примера, разберем, как это реализовать в конфигурации Бухгалтерия предприятия, редакция 2.0.
1. Создать новый общий модуль «лМодульДоработок» содержащий всего 1 процедуру:
Процедура ДобавитьКнопкуВКоманднуюПанельФормы(_Метаданные,_Форма) Экспорт
КП =_Форма.ЭлементыФормы.ДействияФормы; ТипКнопки = ТипКнопкиКоманднойПанели.Действие;
Если КП.Кнопки.Найти(«РедактированиеДокумента») = Неопределено Тогда
2. Изменить стандартную процедуру УстановитьДоступностьФормыДляРедактирования общего модуля РаботаСДиалогами. Добавить в конец процедуры (после всех проверок даты редактирования) текст:
//Если после проверки даты запрета, форма доступна для редактирования, откроем ее на просмотр,
//но добавим кнопочку в панель для возможности редактирования
если НЕ ФормаДокумента.ТолькоПросмотр и ДокументОбъект.Проведен тогда
3. Процедура форм документов «ДействияФормыРедактироватьНомер» состоит из 1 строчки и вызывает процедуру «ИзменениеВозможностиРедактированияНомера» общего модуля «МеханизмНумерацииОбъектов»
МеханизмНумерацииОбъектов.ИзменениеВозможностиРедактированияНомера(ЭтотОбъект.Метаданные(), ЭтаФорма, ЭлементыФормы.ДействияФормы.Кнопки.Подменю, ЭлементыФормы.Номер);
Изменить процедуру следующим образом:
Процедура ИзменениеВозможностиРедактированияНомера(МетаданныеОбъекта, ФормаОбъекта, ПодменюДействия, ПолеВводаНомера, ПолеВводаНомераДубль = Неопределено, ТекстВопроса = «») Экспорт
//Если при вызове процедуры форма документа не доступна для редактирования, то вызов процедуры произошел по нажатию кнопки «Изменить»
Если ФормаОбъекта.ТолькоПросмотр тогда
ФормаОбъекта.ТолькоПросмотр = ложь;
ФормаОбъекта.ЭлементыФормы.ДействияФормы.Кнопки.РедактированиеДокумента.Доступность = ложь;
ФормаОбъекта.Обновить();
иначе //иначе на самом деле хотят редактировать номер документа
Кнопка = ПодменюДействия.Кнопки.РедактироватьКодНомер;
Если НЕ Кнопка.Пометка Тогда
Если ПустаяСтрока(ТекстВопроса) Тогда
Если ВРЕГ(ПолеВводаНомера.Данные) = ВРЕГ(«Код») Тогда
ТекстВопроса = «Код присваивается автоматически при записи элемента, самостоятельное его редактирование может привести к нарушению в нумерации в системе. Вы действительно хотите установить код вручную?»
Иначе
ТекстВопроса = «Номер документу присваивается автоматически при записи, самостоятельное его редактирование может привести к нарушению в нумерации в системе. Вы действительно хотите установить номер вручную?»
КонецЕсли;
КонецЕсли;
Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Если Ответ <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
КонецЕсли;
Кнопка.Пометка = Не Кнопка.Пометка;
ПолеВводаНомера.ТолькоПросмотр = НЕ Кнопка.Пометка;
ПолеВводаНомера.ПропускатьПриВводе = ПолеВводаНомера.ТолькоПросмотр;
ОбновитьПодсказкуКодНомерОбъекта(МетаданныеОбъекта, ПодменюДействия, ПолеВводаНомера);
Если ПолеВводаНомераДубль <> Неопределено Тогда
ПолеВводаНомераДубль.ТолькоПросмотр = ПолеВводаНомера.ТолькоПросмотр;
ПолеВводаНомераДубль.ПропускатьПриВводе = ПолеВводаНомераДубль.ТолькоПросмотр;
ОбновитьПодсказкуКодНомерОбъекта(МетаданныеОбъекта, ПодменюДействия, ПолеВводаНомераДубль);
КонецЕсли;
//конец проверки Если ФормаОбъекта.ТолькоПросмотр тогда
конецесли;
//конец изменений
Стандартный функционал сохраняется. Изменений минимум. Легко поддерживать (переносить) при обновление.
Источник
Кнопка «Только просмотр» для печатной формы документа
В 8.1 это решалось установкой:
ТабДокумент.ТолькоПросмотр = Ложь;
а тут табличный документ и так имеет свойство ТолькоПросмотр = Ложь, и Защита = Ложь,
пробовала обращаться и к полю на форме и к самому табличному документу.
Задачка простая, но никак не пойму что надо сделать.
З.Ы. пробовала и на стандартной форме (ОбщиеФормы-ПечатьДокументов) и на собственной форме отчета.
Процедура КоманднаяПанельФормыТолькоПросмотр(Кнопка)
ЭлементыФормы.ПолеТабличногоДокумента.ТолькоПросмотр = НЕ ЭлементыФормы.ПолеТабличногоДокумента.ТолькоПросмотр;
ЭлементыФормы.КоманднаяПанельФормы.Кнопки.ТолькоПросмотр.Пометка = НЕ ЭлементыФормы.КоманднаяПанельФормы.Кнопки.ТолькоПросмотр.Пометка;
КонецПроцедуры
Кажется в 1 сообщении я написала, что так:
>ЭлементыФормы.ПолеТабличногоДокумента.ТолькоПросмотр = НЕ ЭлементыФормы.ПолеТабличногоДокумента.ТолькоПросмотр;
НЕ РАБОТАЕТ.
Тем более, что приведенный пример относится к 8.1, а тут 8.2, принцип другой.
У табличного поля режим ТолькоПросмотр УЖЕ равно ЛОЖЬ, но тем не менее поле редактировать нельзя.
>И отладчиком тыкнись, когда все таки ТолькоПросмотр становится истиной.
ну я же уже сказала, что не становится оно истиной.
Так, давайте сначала:
Я захожу под Администратором, у меня полные права.
Вывожу печатную форму на печать, и у табличного поля, повторяюсь:
>а тут табличный документ и так имеет свойство ТолькоПросмотр = Ложь, и Защита = Ложь,
То есть ТолькоПросмотр = ЛОЖЬ И редактировать НЕЛЬЗЯ.
Отладчиком проходила все, и свойство ТолькоПросмотр как было ложь так и осталось.
ВОПРОС: что делает стандартный пункт в меню и как это повторить на действии в кнопке.
Источник
v8.3: ТолькоПросмотр для программно созданных элементов формы
8.3.5, УФ. На форме программно создаются реквизиты формы и элементы, связанные с ними. После программного создания на форме этих динамически формируемых элементов для формы в модуле формы делаю
после чего признак невозможности редактирования устанавливается на все реквизиты, кроме программно созданных. В чем может быть причина? Спасибо.
Я извиняюсь, вопрос никак не по Бухгалтерии), пренести в «Управляемое приложение» не смог
потому что ты блокируешь объект, а надо форму
Да, забыл написать, режим совместимости с 8.2 отключен, т.е. работаю с чистой 8.3, поэтому используя ЭтотОбъект в модуле формы я блокирую данную управляемую форму.
в управляемой ты можешь блокировать элементы
не помню точно, но вроде как возможно
Код 1C v 8.2 УП
proGAll | 23.09.2014 16:46 Ответ № 5 | | | | proGAll | 23.09.2014 16:46 Ответ № 5 | | | Нашелся ответ, если элемент не связан с основным реквизитом формы или у реквизита, с которым он связан не установлена СохраняемыеДанные, то он не блокируется. Спасибо. Источник Гибкое управление свойствами доступности элементов управления в обычных формах 1С: Предприятия 8.х Наверное, одной из самых непростых и скучных задач при проектировании обычной формы в «1С: Предприятии» является управление доступностью элементов в зависимости от того или иного набора данных. Мне встречалось очень много решений: от процедуры вроде УстановитьВидимостьДоступность() с включением в нее всех правил для элементов управления, до совершенно хаотично разбросанных по всему коду обращений к указанным свойствам. Признаюсь честно, я тоже перепробовал различные способы, но в один прекрасный момент дошел до очень удобного и логичного (как мне кажется), который и будет описан в этом посте. Все началось с того, что поиск решения для этой задачи натолкнул меня на статью из «Методик разработки» под названием «Организация управления доступом в форме». Ключевым моментом в статье является то, что управление доступом сосредотачивается в одной лишь процедуре УстановитьДоступ(). И если необходимо изменить состояния элементов управления, вызывается только эта процедура. Сама процедура не занимается определением доступа, а работает с данными из списков, которые формируются следующими функциями: То есть сами условия доступности устанавливаются в этих функциях, а уже процедура УстановитьДоступ() присваивает соответствующим свойствам элементов управления эти заранее установленные значения. Я разделил код на три составляющих. Первая — это методы, которые как раз выполняют изменения значений свойств доступности элементов формы. Вынес их в общий модуль. Назовем его условно УправлениеДоступом. Ниже расположен код, который размещается в нем. Я постарался максимально прокомментировать малопонятные участки кода. Например, у нас есть табличное поле Товары, в котором присутствует колонка СкидкаПоДисконтнойКарте. Колонка видна только тогда, когда дисконтная карта проставлена в документ, т.е. реквизит ДисконтнаяКарта является заполненным. Соответственно, условие списока управления видимостью для колонки СкидкаПоДисконтнойКарте будет следующим: Вторая часть когда — это функции, которые отвечают за формирование списков доступности. Они располагаются непосредственно в форме и являются экспортируемыми. Я немного отошел от стандарта 1С и заменил метод ПолучитьСписокДоступаКУправлениюВидимостью() на ПолучитьСписокУправлениеРедактированиемТекста(). Просто мне кажется, что так удобнее и логичнее. Ниже приведен шаблон кода с этими функциями: И, наконец, третья часть — это процедура УстановитьДоступ(), которая тоже расположена в модуле формы. Именно эту процедуру мы вызываем в любом месте кода нашей формы, чтобы переопределить доступность элементов формы. Чтобы было все нагляднее и понятнее, давайте рассмотрим следующий пример. Допустим, что у нас есть форма. На ней расположен флажок НаличнаяПродажа (булево), флажок ПробиватьФискальныйЧек (булево), поле ввода ДисконтнаяКарта (ссылка на справочник ДисконтныеКарты), поле ввода Комментарий (строка) и табличное поле Товары. Все связаны с одноименными реквизитами. У табличного поля есть колонка с именем СкидкаПоДисконтнойКарте (число). Кроме этого, есть командная панель ОсновныеДействияФормы, на которой размещена кнопка ПробитьЧек. Определим некоторые условия: Теперь достаточно вызвать процедуру формы УстановитьДоступ(), и мы получим то состояние элементов, которые задали. Хочется выделить следующий момент. В списки можно можно добавлять пути к элементам формы. Например, для вышеприведенного примера с таблицей Товары имя элемента определяем как «Товары.Колонки.СкидкаПоДисконтнойКарте». Или путь к кнопке ПробитьЧек. Можно использовать множественные вложения, вроде «ИмяКоманднойПанели.Кнопки.ИмяПодменю.Кнопки.ИмяКнопки». Предлагаемый вариант не конечный. Можно внести множество мелких дополнений, вроде указаний, какие списки обрабатывать, а какие нет. Но это уже зависит от точечных потребностей разработчика. Источник Настройка ролей и прав доступа Область применения: управляемое приложение, обычное приложение. Действует для конфигураций УП (ERP), УТ 11 и входящих в них библиотек. Для других конфигураций рекомендуется к использованию. Содержит уточнения к требованиям других стандартов. 1.1. Роли создаются «атомарными», т.е. дающими права на доступ к элементарным функциям программы. Из этих элементарных ролей создаются профили пользователей, которые уже и назначаются пользователям средствами БСП. Деление прав на доступ к объектам между функциями должно быть таким, чтобы на типовом внедрении не возникало необходимости в создании новых ролей. Исключение: для ролей, назначаемых внешним пользователям, задается исчерпывающий набор прав к необходимым объектам. 1.2. Роль ПолныеПрава (англ. FullAccess ) совместно с ролью АдминистраторСистемы (англ. SystemAdministrator ) дает неограниченный доступ (без RLS) ко всем объектам. См. стандартные роли. 1.3. Ни одна роль (в т.ч. ПолныеПрава и АдминистраторСистемы ) не должна давать право на интерактивное удаление ссылочных объектов. 1.4. Только роль ПолныеПрава и АдминистраторСистемы должна давать право на удаление ссылочных объектов. 1.5. Только для роли ПолныеПрава должен быть установлен флаг «Устанавливать права для новых объектов». Для всех остальных ролей этот флаг должен быть снят. 1.7. Во всех документах, предполагающих проведение, должны быть выставлены флаги «Привилегированный режим при проведении» и «Привилегированный режим при отмене проведения», поэтому не нужно создавать роли, дающие права на изменение регистров, подчиненных регистраторам. Исключение: документы, предназначенные для непосредственной корректировки записей регистров, могут проводиться с проверкой прав доступа, но в этом случае необходимо предусмотреть роли, дающие права на изменение регистров. 1.8. Во всех функциональных опциях должны быть выставлены флаги «Привилегированный режим при получении». 1.11. Не допускается, чтобы одна роль давала права на объекты, которые относятся к другим подсистемам. Например, в хранилище УП (ERP) нельзя, чтобы одна роль давала права на объекты, которые есть в УТ 11 и на объекты, которых в УТ 11 нет. См. также: Разработка ролей в библиотеках. 2. Правила создания ролей к элементарным функциям 2.1. Объекты, при проектировании прав доступа, необходимо объединить в элементарные функции. Если объекты входят в одну функцию, то это означает, что не может быть задачи, когда доступ к этим объектам может быть разный. Пример: Есть документ «Заказ клиента» и связанный с ним регистр накопления «Заказы клиентов», который хранит остатки неотгруженных товаров и неоплаченных сумм. По сути этот регистр является отражением текущего состояния табличной части заказа. Если пользователь имеет права на документ, то будет странно, что он не будет иметь прав на регистр. Поэтому документ «Заказ клиента» и регистр накопления «Заказы клиентов» можно объединить в одну элементарную функцию. Если есть отчет, отображающий в удобном виде остатки регистра «Заказы клиентов», то логично его тоже включить в эту функцию. Противоположный пример: Есть документ «Реализация товаров и услуг», выступающий в роли распоряжения на отгрузку товаров. Остатки по распоряжениям на отгрузку товаров хранит регистр накопления «Товары к отгрузке». Объединять «Реализацию товаров и услуг» и регистр «Товары к отгрузке» в рамках одной функции было бы не правильно, т.к., например, кладовщик, вполне может иметь права на чтение регистра «Товары к отгрузке», но может не иметь прав на чтение документа «Реализация товаров и услуг». 2.2. В случае если возникают сомнения в том, что два объекта могут быть отнесены к одной элементарной функции, лучше выделить их в разные. 2.3. Каждый объект должен быть отнесен к элементарной функции, и только к одной. 2.4. Объекты, относящиеся к разным библиотекам не могут быть отнесены к одной элементарной функции. 3. Ссылочные объекты и регистры 3.1. Для функций, включающих в себя ссылочные объекты и независимые регистры сведений, должно быть создано две роли Роли должны содержать следующие права (когда они имеются у объекта метаданных): Источник Понравилась статья? Поделить с друзьями: Как сделать успешный бизнес на ритуальных услугах Выездной кейтеринг в России Риски бизнеса: без чего не обойтись на пути к успеху 1с тоир мобильное приложение 1с тис новая счет фактура | | |