gifts2017

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

Опубликовал Анатолий Цыцельский (anatoliy_gt) в раздел Программирование - Практика программирования

В стандартных конфигурациях, написанных на обычных формах, нет возможности, по умолчанию, открывать документы на просмотр. И при закрытие документа, пользователь частенько  нажимает кнопку «ОК» а не «Закрыть» . При этом происходит запись и перепроведение документа. Что не всегда есть правильно.

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

 

В стандартных конфигурациях, написанных на обычных формах, нет возможности, по умолчанию, открывать документы на просмотр. И при закрытие документа, пользователь частенько  нажимает кнопку «ОК» а не «Закрыть» . При этом происходит запись и перепроведение документа. Что не всегда есть правильно.

 

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

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

 

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

 

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

 

Например:

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

 

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

РаботаСДиалогами.УстановитьДоступностьФормыДляРедактирования(ЭтотОбъект, ЭтаФорма);

 

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

НастройкаПравДоступа.ОпределитьДоступностьВозможностьИзмененияДокументаПоДатеЗапрета(ДокументОбъект, ЭтаФорма);

и т.д.

 

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

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

 

 

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

 

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

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

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

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

            НоваяКнопка = КП.Кнопки.Добавить("РедактированиеДокумента", ТипКнопки, "Изменить" , Новый Действие("ДействияФормыРедактироватьНомер"));

      конецесли;

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

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

 

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

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

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

      ФормаДокумента.ТолькоПросмотр = Истина;

      лМодульДоработок.ДобавитьКнопкуВКоманднуюПанельФормы(ДокументОбъект.Метаданные(),ФормаДокумента);

конецесли;

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

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

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

 

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

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

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

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

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

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

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

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

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

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

    конецесли;

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

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

 

Это все изменения.

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

 

См. также

Подписаться Добавить вознаграждение

Комментарии

1. mosAdm (mosAdm) 11.04.13 11:48
А в УТ 11.1 кнопку "Изменить" из форм документов убрали. Идею признали немного мёртвой.
2. Анатолий Цыцельский (anatoliy_gt) 12.04.13 06:06
Ну это как всегда. 1С убрала. А пользователи, кто к ней привык, начнут терроризировать франчев и своих программистов - "вертайте в зад все как было".

Соглашусь что применять режим "ТолькоЧтение" по умолчанию для всех пользователей не всегда удобно и правильно.
Но как вариант, можно создать доп.роль в конфигурации лПросмортПоумолчанию
И сделать доп. проверку:
если НЕ ФормаДокумента.ТолькоПросмотр и ДокументОбъект.Проведен и РольДоступна("лПросмортПоумолчанию") тогда
   ФормаДокумента.ТолькоПросмотр = Истина;

      лМодульДоработок.ДобавитьКнопкуВКоманднуюПанельФормы(ДокументОбъект.Метаданные(),ФормаДокумента);

конецесли;
...Показать Скрыть
3. Константин (fort13) 02.08.13 16:07
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа