В начало

Справочник «Договоры» со списком сканов

 

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

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

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

 

            По поводу реквизитов: реквизит «Сумма» это число, «Контрагент» имеет тип «СправочникСсылка.Контрагенты», реквизит «Файл» ссылается на справочник «ФайлыПДФ» и имеет соответствующий ссылочный тип.

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

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

 

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

Рис. Обрабатываемые события табличной части «СканыДоговоров»

 

            Далее привожу список процедур и функций в модуле формы элемента справочника «Договоры».

 

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

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

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

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

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

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

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

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

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

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

                                   Ном=Ном-1; 

                        Иначе

                                   Прервать;

                        КонецЕсли;

            КонецЦикла;

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

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

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

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

 

 

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

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

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

&НаКлиенте

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

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

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

           

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

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

            КонецЕсли;               

           

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

 

&НаСервере

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

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

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

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

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

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

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

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

           

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

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

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

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

 

 

&НаСервере

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

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

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

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

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

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

            КонецЕсли;

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

 

 

&НаКлиенте

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

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

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

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

 

            Далее запускаем отладку и проверяем добавление сканов договоров и открытие добавленных.

Рис. Открытие ранее добавленного скана «Договора 1»

 

            Тестовые сканы договоров  успешно записаны в справочник «ФайлыПДФ».

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

 

            Таким образом, задача по созданию справочника, позволяющего хранить список сканов договоров в виде списка выполнена, чего и вам желаю.