В начало

Справочник «Контрагенты» со сканами договоров

 

            Нужно создать справочник «Контрагенты» с возможностью хранить в нем сканы договоров.

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

Рис. Структура справочника «Контрагенты»

 

            Далее переходим к форме элемента справочника, создаем ее, размещаем на ней элементы формы. Создаем несколько групп элементов, по которым распределяем реквизиты справочника. Для удобства сканы договоров будут в таблице справа. Для элемента «СканыДоговоров» устанавливаем свойство «ВариантУправленияВысотой = По содержимому» и «РежимВыделенияСтроки = Строка».

Рис. Форма элемента справочника «Контрагенты»

 

            Затем добавляем обработчики событий: «Выбор» и «ПередНачаломДобавления». Первое событие «Выбор» нужно для открытия собственно самого скана договора в просмоторщике ПДФ-файлов. А второе событие «ПередНачаломДобавления» нужно для вызова диалога и выбора файла ПДФ на локальном диске.

 

Листинг. Модуль формы элемента

/////////////////////////////////////////////////////////

//Разные процедуры

/////////////////////////////////////////////////////////

Функция КороткоеИмяФайла(ПолноеИмяФайла)

            КаталогФ = "";

            Ном=СтрДлина(ПолноеИмяФайла);

            Пока Ном>0 Цикл

                        Символ=Сред(ПолноеИмяФайла,Ном,1);

                        Если Символ<>"\"  Тогда

                                   Ном=Ном-1; 

                        Иначе

                                   Прервать;

                        КонецЕсли;

            КонецЦикла;

            ИмяФайла=Прав(ПолноеИмяФайла,СтрДлина(ПолноеИмяФайла)-Ном);

            //КаталогФ=Лев(ПолноеИмяФайла,Ном);

            Возврат ИмяФайла;   

КонецФункции

 

 

///////////////////////////////////////////////////////////

//Обработчики событий

///////////////////////////////////////////////////////////

&НаКлиенте

Процедура СканыДоговоровПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)

            ПолноеИмяФайла = "";

            ПолноеИмяФайлаФайлаВХранилище = "";

           

            Если ПоместитьФайл(ПолноеИмяФайлаФайлаВХранилище, , ПолноеИмяФайла, Истина) = Истина Тогда

                        СканыДоговоровПередНачаломДобавленияНаСервере(ПолноеИмяФайлаФайлаВХранилище, ПолноеИмяФайла);

            КонецЕсли;               

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

 

&НаСервере

Процедура СканыДоговоровПередНачаломДобавленияНаСервере(ПолноеИмяФайлаФайлаВХранилище, ПолноеИмяФайла)

            //создаем новый элемент в спр. "ФайлыПДФ"

            Элем = Справочники.ФайлыПДФ.СоздатьЭлемент();

            ДвоичныеДанные = ПолучитьИзВременногоХранилища(ПолноеИмяФайлаФайлаВХранилище);

            Элем.Файл = Новый ХранилищеЗначения(ДвоичныеДанные);

            Элем.Наименование = КороткоеИмяФайла(ПолноеИмяФайла);

            Элем.Дата = ТекущаяДата();

            Элем.Записать();

           

            //Добавляем строку в список сканов

            Стр = Объект.СканыДоговоров.Добавить();

            Стр.Файл = Элем.Ссылка;

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

 

 

&НаСервере

Процедура СканыДоговоровВыборНаСервере(СсылкаНаТекДоговор) 

            ДвоичныеДанные = СсылкаНаТекДоговор.Файл.Получить();

            Если ДвоичныеДанные <> Неопределено Тогда

                        ИмяФайла = КаталогВременныхФайлов()+ "темп" + ".pdf";

                        ДвоичныеДанные.Записать(ИмяФайла);

                        ЗапуститьПриложение(ИмяФайла);

            КонецЕсли;

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

 

 

&НаКлиенте

Процедура СканыДоговоровВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)

            СсылкаНаТекДоговор = Элементы.СканыДоговоров.ТекущиеДанные.Файл;

            СканыДоговоровВыборНаСервере(СсылкаНаТекДоговор);

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

 

            Вспомогательный справочник «ФайлыПДФ» имеет два реквизита, один из которых «Дата» с типом «Дата», а другой «Файл» с типом «ХранилищеЗначения».

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

 

Листинг. Модуль формы элемента вспомогательного справочника «ФайлыПДФ»

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

            ДвоичныеДанные = Объект.Ссылка.Файл.Получить();

            ИмяФайла = КаталогВременныхФайлов()+ "темп" + ".pdf";

            ДвоичныеДанные.Записать(ИмяФайла);

            ЗапуститьПриложение(ИмяФайла);

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

 

            Запускаем пользовательский режим и проверяем работу. При нажатии на кнопку «Добавить» можно выбрать и добавить ПДФ-файл со сканом договора контрагента.

Рис. Добавление договоров в табличную часть «СканыДоговоров»

 

            Также проверяем, как срабатывает событие «Выбор», дважды кликая на скане договора.

Рис. Проверка открытия файла со сканом при двойном клике на договоре

 

            Все вроде работает, договора открываются.

            При добавлении файлов со сканами, они будут размещены в справочнике «ФайлыПДФ».

Рис. Справочник «ФайлыПДФ» с добавленными сканами договоров

            Таким образом, теперь в справочнике «Контрагенты» можно хранить сканы договоров в формате ПДФ.