gifts2017

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

Опубликовал Olga Kazakevich (ok521) в раздел Обработки - Обработка документов

Внешняя обработка подключается, как печатная форма. Вызвать ее можно по кнопке Печать. Сохраняет для каждого пользователя вариант заполнения указанных реквизитов документа.
  • Зачем это было нужно


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


    Как это работает


    СОЗДАТЬ ШАБЛОН КОМИССИИ


        Чтобы создать шаблон комиссии нужно

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

    • отметить нужную настройку (создать по кнопке +, если ни одной настройки не создано),
    • нажать кнопку Выбрать,

    • закрыть документ.

    Настройка сохранена.



    ЗАПОЛНИТЬ КОМИССИЮ ИЗ ШАБЛОНА


        Чтобы в документе заполнить комиссию из шаблона нужно:


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

    • отметить ранее сохраненную настройку,
    • нажать кнопку Выбрать,

    • записать документ.


    Как создать обработку



    Обработка создается аналогично внешней печатной форме:
    Внешняя обработка с реквизитом СсылкаНаОбъект типа ДокументСсылка.ПринятиеКУчетуОС
    В модуле обработки код:


     
    //ПЕРЕМЕННЫЕ

    Перем мТекущаяНастройка Экспорт;
    Перем мСохраняемыеРеквизиты;

    Функция Печать() Экспорт
    // Что сохраняем в настройках



    мСохраняемыеРеквизиты = Новый Структура;
    мСохраняемыеРеквизиты.Вставить("ПредседательКомиссии");
    мСохраняемыеРеквизиты.Вставить("ЧленКомиссии1");
    мСохраняемыеРеквизиты.Вставить("ЧленКомиссии2");
    мСохраняемыеРеквизиты.Вставить("ДолжностьПредседателя");
    мСохраняемыеРеквизиты.Вставить("ДолжностьЧлКомиссии1");
    мСохраняемыеРеквизиты.Вставить("ДолжностьЧлКомиссии2");

    Если ДополнительныеПараметры = Неопределено Тогда
    СохраняемНастройки = Ложь;
    Иначе
    СохраняемНастройки = ДополнительныеПараметры.Сохранение;
    КонецЕсли;

    Если СохраняемНастройки Тогда
    СохранитьНастройки();
    Иначе
    ВосстановитьНастройки();
    Форма=СсылкаНаОбъект.ПолучитьФорму("ФормаДокумента");
    Для каждого ОднаНастройка Из мТекущаяНастройка.СохраненнаяНастройка Цикл
    Форма.ЭлементыФормы[ОднаНастройка.Ключ].Значение = ОднаНастройка.Значение;
    КонецЦикла;
    КонецЕсли;


    КонецФункции
    //Печать


    //////////////////////////////////////////////////////////////
    // ПРОЦЕДУРЫ И ФУНКЦИИ СОХРАНЕНИЯ И ВОССТАНОВЛЕНИЯ НАСТРОЕК //
    //////////////////////////////////////////////////////////////


    Функция ВосстановитьНастройки() Экспорт


    Перем СохраненнаяНастройка;

    СтруктураНастройки = Новый Структура;
    СтруктураНастройки.Вставить("Пользователь", глЗначениеПеременной("глТекущийПользователь"));
    СтруктураНастройки.Вставить("ИмяОбъекта", "ДокументОбъект." + СсылкаНаОбъект.Метаданные().Имя);
    СтруктураНастройки.Вставить("НаименованиеНастройки", ?(мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка.НаименованиеНастройки));

    Результат = УниверсальныеМеханизмы.ВосстановлениеНастроек(СтруктураНастройки);

    Если Результат <> Неопределено Тогда

    мТекущаяНастройка = Результат;
    ВосстановитьНастройкиИзСтруктуры(Результат.СохраненнаяНастройка);

    Иначе

    мТекущаяНастройка = СтруктураНастройки;

    КонецЕсли;


    КонецФункции
    // ВосстановитьНастройки()


    Процедура СохранитьНастройки() Экспорт


    Перем СохраненнаяНастройка;

    СформироватьСтруктуруДляСохраненияНастроек(СохраненнаяНастройка);

    СтруктураНастройки = Новый Структура;
    СтруктураНастройки.Вставить("Пользователь", глЗначениеПеременной("глТекущийПользователь"));
    СтруктураНастройки.Вставить("ИмяОбъекта", "ДокументОбъект." + СсылкаНаОбъект.Метаданные().Имя);
    СтруктураНастройки.Вставить("НаименованиеНастройки", ?(мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка.НаименованиеНастройки));
    СтруктураНастройки.Вставить("СохраненнаяНастройка", СохраненнаяНастройка);
    СтруктураНастройки.Вставить("ИспользоватьПриОткрытии", Истина);
    СтруктураНастройки.Вставить("СохранятьАвтоматически", Истина);

    Результат = УниверсальныеМеханизмы.СохранениеНастроек(СтруктураНастройки);

    Если Результат <> Неопределено Тогда

    мТекущаяНастройка = Результат;

    Иначе

    мТекущаяНастройка = СтруктураНастройки;

    КонецЕсли;


    КонецПроцедуры
    // СохранитьНастройки()


    Процедура СформироватьСтруктуруДляСохраненияНастроек(СтруктураСНастройками) Экспорт


    Если ТипЗнч(СтруктураСНастройками) <> Тип("Структура") Тогда

    СтруктураСНастройками = Новый Структура;

    КонецЕсли;
    Для каждого ОдинРеквизит Из мСохраняемыеРеквизиты Цикл
    СтруктураСНастройками.Вставить(ОдинРеквизит.Ключ, СсылкаНаОбъект[ОдинРеквизит.Ключ]);
    КонецЦикла;


    КонецПроцедуры
    // СформироватьСтруктуруДляСохраненияНастроек()


    Функция ВосстановитьНастройкиИзСтруктуры(СтруктураСНастройками) Экспорт


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


    Возврат Истина;


    КонецФункции
    // ВосстановитьНастройкиИзСтруктуры()

    Как подключить обработку





    Внешняя обработка подключается, как печатная форма: Сервис - дополнительные внешние отчеты и обработки - Печатные формы.

    Обработка имеет два режима работы:
    Наименование Вид обработки Код Комментарий  
    Комиссия Восстановить настройки Печатная форма 000000108 Документ Принятие к учету ОС заполнить состав комиссии пользовательскими настройками
    Комисси
    Сохранить настройки
    Печатная форма 000000107 Документ Принятие к учету ОС сохранить пользовательский состав комиссии


    Комиссия Восстановить настройки
    N Представление объекта Отбор Файл печатной формы Заменяемая печатная форма Параметры обработки
    1 Документ "Принятие к учету ОС"        

    параметры
    Имя Значение
    Сохранение Нет

    Комиссия Сохранить настройки
    N Представление объекта Отбор Файл печатной формы Заменяемая печатная форма Параметры обработки
    1 Документ "Принятие к учету ОС"        

    параметры
    Имя Значение
    Сохранение Да
  •  

Скачать файлы

Наименование Файл Версия Размер
Внешняя обработка на кнопке Печать для сохранения пользовательских настроек документа 2
.epf 132,87Kb
04.10.13
2
.epf 132,87Kb Скачать

См. также

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

Комментарии

1. mikhailovaew (mikhailovaew) 23.10.13 10:11
Комиссию можно было зашить в константы - никаких проблем при обновлении.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа