gifts2017

Доработка стандартного механизма ВПФ для отраслевой конфигурации ВДГБ: Ломбард 3.3.36.1 + сами печатные формы договоров и залогового билета.

Опубликовал Константин Юрин (kostyaomsk) в раздел Печать - Печатные формы документов

Решил выложить начатые и не доведенные до ума в свое время наработки по данному релизу ВДГБ: Ломбард, редакция 3.3 (3.3.36.1). Надеюсь, кому-то могут быть полезными данные внешние печатные формы и методика внесения изменений в конфигурацию (да и вообще работе с этой конфигурацией).
Также тема была поднята на форуме ранее "Правильная модификация решения: механизм учета доп. характеристик и свойств, надстройки к механизму ВПФ Залоговый билет". Для хранения списка вещей конфигурацию пришлось править...

В продолжении темы поднятой ранее на форуме "Правильная модификация решения: механизм учета доп. характеристик и свойств, надстройки к механизму ВПФ Залоговый билет" по данному отраслевому решению выкладываю свои наработки (требующие серьезной отладки под Ваше решение). Камнем преткновения стала печатная форма Залогового билета. Особенность в том, что сам документ содержит очень много специфических данных, рассчитываемых по алгоритмам самого документа. Естественно, что все это дело вытащить без потерь функциональности без ошибок проблематично. Я поступил так:

1. Создал панель кнопок в документе (см рисунок 1).

Рисунок 1 - кнопки документа

 

2. Вставил в конфигурацию нижеприведенный код: 

//###Дор+

//Описание доработки: Вызов ВПФ для печати:
Процедура ДействияФормыпДоговорЗалога(Кнопка)
	ПечатьИзВПФ("ВДГБ_ВПФ_ДоговорЗалога"); // Приходится передавать ДокументОбъект!
КонецПроцедуры

Процедура ДействияФормыпЗалоговыйБилет(Кнопка)	
	ПечатьИзВПФ("ВДГБ_ВПФ_ЗалоговыйБилет"); // Приходится передавать ДокументОбъект!
КонецПроцедуры

Процедура ДействияФормыпДоговорЗайма2014(Кнопка)	
	ПечатьИзВПФ("ВДГБ_ВПФ_ДоговорЗайма2014"); // Приходится передавать ДокументОбъект!
КонецПроцедуры

Процедура ДействияФормыпДоговорЗалогаПТС(Кнопка)
	ПечатьИзВПФ("ВДГБ_ВПФ_ДоговорЗалогаПТС"); // Приходится передавать ДокументОбъект!
КонецПроцедуры


// Описание доработки: Вызывает данные функции из справочника ВПФ по строгому соответствию имени и передает им объект.
Процедура ПечатьИзВПФ(ИмяВПФ);
	СсылкаНаВПФ = Справочники.ВнешниеОбработки.НайтиПоНаименованию(ИмяВПФ);
	Если СсылкаНаВПФ.Пустая() Тогда
		Сообщить("В справочнике 'Внешние обработки' не нашли внешнюю печатную форму с наименованием '"+ИмяВПФ+"'");
		Возврат;
	КонецЕсли;
		
	Попытка
		ИмяВременногоФайла = КаталогВременныхФайлов()+"тмп_впф.epf";
	Исключение
		Сообщить ("Невозможно создать файл обработке в каталоге временных файлов <<"+
		+КаталогВременныхФайлов()+">>. Возможно, не хватает прав доступа в Windows в папку для данного сеанса 1С ");
		Возврат;
	КонецПопытки;	
	
	ДвоичныеДанные = СсылкаНаВПФ.ХранилищеВнешнейОбработки.Получить();		
	ДвоичныеДанные.Записать(ИмяВременногоФайла);
	
	Попытка
		ОбрОбъект = ВнешниеОбработки.Создать(ИмяВременногоФайла);
		ОбрОбъект.ДокОбъект = ЭтотОбъект; // НЕ исп. метод скопировать. Передать ТАК - особенности ВДГБ;
	Исключение
		Сообщить("Ошибка создания объекта из временного файла обработки "+ИмяВременногоФайла);
		Возврат;
	КонецПопытки;
	
	// Проба печати
	Попытка
		ТаблДок = ОбрОбъект.Печать();
		ТаблДок.Вывести();
	Исключение
		А=1; // Точка останова для отладки!
		Сообщить(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке() )); // ВНЕШНЮЮ печатную форму из справончика ВПФ можно спокойно поправить!
	КонецПопытки;	
			
КонецПроцедуры	
//###Дор- 

3. Создал "с нуля" ВПФ для залогового билета (и параллельно обычные ВПФ договоров ПТС и прочих без использования данного механизма (фрагменты тут в статье и приложениях в виде объектов конфигурации в *.cf и внешних отчетов и обработок. 

4. По залоговым вещам (вроде) добавил регистр сведений и еще что-то(см рисунки 2 и 3 по объектам учета)...


Рисунок 2 - вариант 1 с регистором сведений

Рисунок 3 - вариант 2 с регистром сведений

Далее, фрагменты кода из конфигурации:

 
Перем мУчетнаяПолитикаЛомбарда Экспорт; // Хранит настройки учетной политики ломбарда.

Перем мДокументОбъект Экспорт; // Хранит объект вызвавшего документа. СЮДА передадим для ЗалоговогоБИЛЕТА!

Перем мВалютаРегламентированногоУчета; // Хранит значение константы "Валюта регламентированного учета"

Перем мДанныеКредитования; 

Перем мСхема;

///Перем СсылкаНаОбъект;

//---------------

//---------------


Функция ПолучитьУсловияПоСхемеКредитования()
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.Период,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.СхемаКредитования,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ИзмерениеКредита,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ИзмерениеХранения,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ИзмерениеПросрочки,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ИзмерениеОценки,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ИзмерениеСнятияСРеализации,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ПериодКредита,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ПериодХранения,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ПериодПросрочки,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ВариантРасчетаСуммыЗаКредит,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ВариантРасчетаСуммыЗаХранение,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ВариантРасчетаСуммыЗаОценку,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ВариантРасчетаСуммыЗаПросрочку,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ЗаКредит,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ЗаХранение,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ЗаПросрочку,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ЗаОценку,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ЗаСнятиеСРеализации,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ОграничениеНачисленияЗаКредит,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.МинимальныйСрокКредит,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.МинимальныйСрокХранение,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.МинимальнаяСуммаКредит,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.МинимальнаяСуммаХранение,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ОснованиеРасчетаКредита,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ОснованиеРасчетаХранения,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ОснованиеРасчетаПросрочки,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ОснованиеРасчетаОценки,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.ОснованиеРасчетаСнятияСРеализации,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.УдалитьОтСуммыСсудыКредит,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.УдалитьОтСуммыСсудыХранение,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.УдалитьОтСуммыСсудыПросрочку,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.УдалитьОтСуммыСсудыОценку,
	|	ЛМБ_УсловияПредоставленияКредитаСрезПоследних.УдалитьОтСуммыСсудыСнятиеСРеализации
	|ИЗ
	|	РегистрСведений.ЛМБ_УсловияПредоставленияКредита.СрезПоследних(&ДатаДок, СхемаКредитования = &Схема) КАК ЛМБ_УсловияПредоставленияКредитаСрезПоследних";
	Запрос.УстановитьПараметр("ДатаДок", ДокОбъект.Дата);
	Запрос.УстановитьПараметр("Схема", ДокОбъект.СхемаКредитования);
	
	Результат = Запрос.Выполнить();
	Если Результат.Пустой() Тогда
		Сообщить("Ошибка получения схемы кредитования для документа (схема не установлена в документе) "+ДокОбъект);
		ВызватьИсключение("Ошибка получения схемы кредитования для документа"+ДокОбъект);
		Возврат Неопределено;
	КонецЕсли;
	
	Выборка = Результат.Выбрать();
	Выборка.Следующий(); // Точно есть один!
	
	Возврат Выборка;
	
КонецФункции	

Функция ПолучитьПроцентПоКредиту()
	Возврат мСхема.ЗаКредит;       
КонецФункции	

Функция ПолучитьПроцентЗаХранение()
	Возврат мСхема.ЗаХранение;
КонецФункции


Функция ПолучитьСтруктуруХарактеристикВещи (Вещь)
	Стр = Новый Структура("Имя, Значение"); // Имя и значение характерискик АВТО (если они есть)
	Если ТипЗнч(Вещь) <> Тип("СправочникСсылка.ЛМБ_ЗалоговыеВещи") Тогда
		Возврат Стр; // не тот тип 
	КонецЕсли;	
	
	Если Вещь.ПустаяСсылка() Тогда
		Возврат Стр; // пустая
	КонецЕсли;	
	
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ЗначенияСвойствОбъектов.Значение,
	|	ЗначенияСвойствОбъектов.Свойство КАК ДопРеквизит
	|ИЗ
	|	РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
	|ГДЕ
	|	ЗначенияСвойствОбъектов.Объект = &Вещь
	|	И НЕ ЗначенияСвойствОбъектов.Свойство.ПометкаУдаления";
	Запрос.УстановитьПараметр("Вещь", Вещь);
	Результат = Запрос.Выполнить();
	Если Результат.Пустой() Тогда
		Возврат Стр; // Пусто или прав не хватило для прочтения(маловероятно) - тогда для ошибки периода исп. убрать РАЗРЕШЕННЫЕ
	КонецЕсли;	
	
	Выборка = Результат.Выбрать();
	Пока Выборка.Следующий() Цикл
		Стр.Вставить(Выборка.ДопРеквизит, Выборка.Значение);
	КонецЦикла;	
	
	Возврат Стр;
	
КонецФункции	

Функция ХарактеристикиВещиТекстомВВидеСписка (Вещь)
	стр = ""; // На выходе Марка машины: ГАЗ + переносСтроки и.т.д.
	Структ = ПолучитьСтруктуруХарактеристикВещи(Вещь);
	
	Если Структ.Количество() = 0 Тогда
		Возврат стр; // Вернем пустую строку
	КонецЕсли;
	
	Для каждого ЭлемСтр Из Структ Цикл
		Стр = Стр + ЭлемСтр.Ключ +": "+ЭлемСтр.Значение+Символы.ПС;
	КонецЦикла;	
	
	Возврат Стр;
	
КонецФункции	
 

Зачем ТАК спросите Вы? ВПФ все-таки проще править и заменить, чем лезть в конфигурацию. Хотя именно залоговый билет с глюками и пригодится как строительный материал программистам, которым по долгу службы в принудительном порядке или уже добровольно придется дорабатывать ТАКОЕ отраслевое решение.  Печатные формы кроме залогового билета (по ней основная сложность) могут быть работоспособны. 

Надеюсь, данная методика и материалы могут пригодиться.

P.S. Ниже буду приводить редкие материалы, посвященные разработе по данной тематике

- интересное решение http://infostart.ru/public/205109/ - Подбор залоговых вещей в документ "Подготовка к продаже" в конфигурации "ВДГБ: Ломбард 3"

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

Наименование Файл Версия Размер Кол. Скачив.
ВДГБ_ВПФ_ЗалоговыйБилет
.epf 24,03Kb
02.06.15
7
.epf 1.0 24,03Kb 7 Скачать
ТестВДГБ_Ломбард_3_3_ВПФ_ЗАЯВЛЕНИЕ_ОБ_ОТКАЗЕ
.epf 11,46Kb
02.06.15
0
.epf 1.0 11,46Kb 0 Скачать
ТестВДГБ_Ломбард_3_3_ВПФ_ПРОЧИЕ_УСЛОВИЯ_ДОГОВОРА_ЗАЙМА
.epf 11,96Kb
02.06.15
0
.epf 1.0 11,96Kb 0 Скачать
Стандартная форма БО-7 (панель с кнопками обработка конфигурации)
.erf 24,11Kb
02.06.15
2
.erf 1.0 24,11Kb 2 Скачать
Служебная - для отладки ВПФ
.epf 8,11Kb
02.06.15
0
.epf 1.0 8,11Kb 0 Скачать
Договор займа 2014 (версия)
.epf 11,45Kb
02.06.15
2
.epf 1.0 11,45Kb 2 Скачать
Договор залога
.epf 21,94Kb
02.06.15
2
.epf 1.0 21,94Kb 2 Скачать
Договор залога ПТС
.epf 11,49Kb
02.06.15
1
.epf 1.0 11,49Kb 1 Скачать
Измененные и добавленные объекты в отраслевую конфигурацию ВДГБ ломбард 3.3
.cf 309,96Kb
02.06.15
1
.cf 1.0 309,96Kb 1 Скачать

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа