В начало

Печать квитанции на текущее начисление

 

            Нужно сформировать печатную форму на текущее начисление.

 

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

 

Рис. Форма элемента справочника

 

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

&НаКлиенте

Процедура КвитанцияНаТекущееНачисление(Команда)

           

            Для Каждого ТекПлатеж Из Элементы.ДСНачисления.ВыделенныеСтроки Цикл               

                        ПарТекПлатежа = Новый Структура("ТекПлатеж", ТекПлатеж);

                        ПарТекПлатежа.Вставить("ЛС", Объект.Ссылка);

                        ПарТекПлатежа.Вставить("ТипКвитанции", "На текущее начисление");                     

                        ОткрытьФорму("Справочник.Партнеры.Форма.ПромежуточнаяФормаДляНачислений", ПарТекПлатежа, ЭтаФорма);

                        Возврат;

            КонецЦикла;

           

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

 

            Добавляем новую промежуточную форму, на которой размещаем реквизиты: ЛС, Получатель, ТекущееНачисление и ТипКвитанции.

            На промежуточную форму через Параметры передаем информацию по текущему платежу.

Рис. Промежуточная форма для выбора получателя платежа

 

            При открытии промежуточной формы читаем переданные параметры с формы элемента справочника.

            Печатную форму будем вызывать через обработчик события кнопки «Выбрать получателя».

 

Листинг. Модуль промежуточной формы

&НаСервере

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

           

            //Читаем РС по ключу

            Запись = РегистрыСведений.УК_СостояниеРасчетов.СоздатьМенеджерЗаписи();

            ЗаполнитьЗначенияСвойств(Запись, Параметры.ТекПлатеж);

            Запись.Прочитать();

 

            //Заполняем параметры

            ЛС = Параметры.ЛС;

            ТекущееНачисление = Запись.Сумма;

            ТипКвитанции = Параметры.ТипКвитанции;

           

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

 

 

&НаСервере

Процедура ПечатьКвитанцииНаТекущееНачисление(ТабДок, ТекЛС, Получатель, СуммаПлатежа)

            ТабДок.АвтоМасштаб = Истина;

            ТабДок.ОриентацияСтраницы       = ОриентацияСтраницы.Портрет;

            ТабДок.ИмяПараметровПечати      = "ПАРАМЕТРЫ_ПЕЧАТИ_ПечатьКвитанцииНаДолгБезБПнаСервере";

            Макет = Справочники.Партнеры.ПолучитьМакет("КвитанцияНаОплату");

           

            Запрос = Новый Запрос();

            Запрос.Текст = "ВЫБРАТЬ

                           |        УК_ПоставщикиУслуг.Ссылка КАК Ссылка,

                           |        УК_ПоставщикиУслуг.Наименование КАК Наименование,

                           |        УК_ПоставщикиУслуг.НаименованиеКраткое КАК НаименованиеКраткое,

                           |        УК_ПоставщикиУслуг.НаименованиеПолное КАК НаименованиеПолное,

                           |        УК_ПоставщикиУслуг.ИНН КАК ИНН,

                           |        УК_ПоставщикиУслуг.ОГРН КАК ОГРН,

                           |        УК_ПоставщикиУслуг.КПП КАК КПП,

                           |        УК_ПоставщикиУслуг.Банк КАК Банк,

                           |        УК_ПоставщикиУслуг.РасчетныйСчет КАК РасчетныйСчет,

                           |        УК_ПоставщикиУслуг.КорСчет КАК КорСчет,

                           |        УК_ПоставщикиУслуг.БИК КАК БИК

                           |ИЗ

                           |        Справочник.УК_ПоставщикиУслуг КАК УК_ПоставщикиУслуг

                           |ГДЕ

                           |        УК_ПоставщикиУслуг.Ссылка = &Получатель";

            Запрос.УстановитьПараметр("Получатель", Получатель);

            Результат = Запрос.Выполнить();

            Выборка = Результат.Выбрать(); 

           

            НедостаточноДанныхДляQRКода = 0;

                                  

            Если Выборка.Следующий() Тогда

                        //=========================

                        // Область "Шапка"

                        //==========================                     

                        ОШ = Макет.ПолучитьОбласть("Шапка"); 

                       

                        Если НЕ ЗначениеЗаполнено(Выборка.Наименование) Тогда

                                   ОШ.Параметры.Истец = "Получатель не заполнен в справочнике";

                                   НедостаточноДанныхДляQRКода = 1;

                        ИначеЕсли НЕ ЗначениеЗаполнено(Выборка.НаименованиеКраткое) Тогда

                                   ОШ.Параметры.Истец = "Не заполнено краткое наименование получателя";

                        Иначе 

                                   ОШ.Параметры.Истец = Выборка.НаименованиеКраткое;

                        КонецЕсли;   

                       

                        Если НЕ ЗначениеЗаполнено(Выборка.ИНН) Тогда

                                   ОШ.Параметры.ИстецИНН = "Не заполнен ИНН получателя в справочнике";

                                   НедостаточноДанныхДляQRКода = 1;

                        Иначе    

                                   ОШ.Параметры.ИстецИНН = Выборка.ИНН;

                        КонецЕсли;   

                       

                        Если НЕ ЗначениеЗаполнено(Выборка.РасчетныйСчет) Тогда

                                   ОШ.Параметры.ИстецРасчетныйСчет = "Не заполнен р/с получателя в справочнике";

                                   НедостаточноДанныхДляQRКода = 1;

                        Иначе

                                   ОШ.Параметры.ИстецРасчетныйСчет = Выборка.РасчетныйСчет;

                        КонецЕсли;   

                       

                        Если НЕ ЗначениеЗаполнено(Выборка.Банк) Тогда

                                   ОШ.Параметры.ИстецБанк = "Не заполнент банк получателя в справочнике";

                                   НедостаточноДанныхДляQRКода = 1;

                        Иначе

                                   ОШ.Параметры.ИстецБанк = Выборка.Банк;

                        КонецЕсли;

                       

                        Если НЕ ЗначениеЗаполнено(Выборка.БИК) Тогда

                                   ОШ.Параметры.ИстецБИК = "Не заполнен БИК получателя в справочнике";

                                   НедостаточноДанныхДляQRКода = 1;

                        Иначе

                                   ОШ.Параметры.ИстецБИК = Выборка.БИК;

                        КонецЕсли;

                       

                        Если НЕ ЗначениеЗаполнено(Выборка.КорСчет) Тогда

                                    ОШ.Параметры.ИстецКорСчет = "Не заполнен к/с банка получателя в справочнике";

                                   НедостаточноДанныхДляQRКода = 1;

                        Иначе

                                   ОШ.Параметры.ИстецКорСчет = Выборка.КорСчет;

                        КонецЕсли;

                       

                        ОШ.Параметры.НаименованиеПлатежа = "Оплата долга по ЛС " + ТекЛС.УК_ЛицевойСчетЕИРЦ;

                       

                        //Лицевой счет плательщика

                        Если НЕ ЗначениеЗаполнено(ТекЛС.УК_ЛицевойСчетЕИРЦ) Тогда

                                   ОШ.Параметры.ЛсЕирц = "л/с ЕИРЦ не заполнен";

                                   НедостаточноДанныхДляQRКода = 1;

                        Иначе

                                   ОШ.Параметры.ЛсЕирц = ТекЛС.УК_ЛицевойСчетЕИРЦ;

                        КонецЕсли;

                       

                       

                        Если НЕ ЗначениеЗаполнено(ТекЛС.F1_ФИО) Тогда

                                   ОШ.Параметры.ФиоПлательщика = "Не заполнено ФИО на карточке ЛС";

                                   НедостаточноДанныхДляQRКода = 1;

                        Иначе

                                   ОШ.Параметры.ФиоПлательщика = ТекЛС.F1_ФИО;

                        КонецЕсли;

                       

                        ОШ.Параметры.АдресПлательщика = БизнесПроцессы.CRM_БизнесПроцесс.ЧисткаАдреса(БизнесПроцессы.CRM_БизнесПроцесс.АдресИзЛСдляБалашихи(ТекЛС));   

                                  

                        Если НЕ ЗначениеЗаполнено(СуммаПлатежа) Тогда

                                   ОШ.Параметры.СуммаПлатежаРуб = "Сумма долга не расчитана в справочнике";

                                   НедостаточноДанныхДляQRКода = 1;

                        Иначе 

                                   ОШ.Параметры.СуммаПлатежаРуб = Цел(СуммаПлатежа);

                                   ОШ.Параметры.СуммаПлатежаКоп = Формат((СуммаПлатежа - Цел(СуммаПлатежа)) * 100, "ЧЦ=2; ЧН=00");

                        КонецЕсли;

           

                        ТабДок.Вывести(ОШ);

 

                       

                        //=================

                        //Область ПОДВАЛ

                        //=================

                        ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");

                       

                        QRСтрока = "ST00011|Name=" + ОШ.Параметры.Истец +

                                   "|PersonalAcc=" + ОШ.Параметры.ИстецРасчетныйСчет +

                                   "|BankName=" + ОШ.Параметры.ИстецБанк +

                                   "|BIC=" + ОШ.Параметры.ИстецБИК +

                                                  "|CorrespAcc=" + ОШ.Параметры.ИстецРасчетныйСчет +

                                                  "|PayeeINN=" + ОШ.Параметры.ИстецИНН +

                                   "|LastName=" + ТекЛС.УК_ФизЛицо.Фамилия +

                                                  "|FirstName=" + ТекЛС.УК_ФизЛицо.Имя +

                                                  "|MiddleName=" + ТекЛС.УК_ФизЛицо.Отчество +

                                                  "|Purpose=" +  ОШ.Параметры.НаименованиеПлатежа +

                                          "|PersAcc=" + ОШ.Параметры.ЛсЕирц +                   

                                   "|PayerAddress=" + ОШ.Параметры.АдресПлательщика +

                                                  "|Sum=" + ?(ЗначениеЗаполнено(СуммаПлатежа), Формат(СуммаПлатежа * 100, "ЧГ="), 0);//Сумма в копейках и без пробела!

                       

                       

        ТекстОшибки = "";

                        ДанныеQRКода = УправлениеПечатью.ДанныеQRКода(QRСтрока, 0, 190);

                        Если Не ПустаяСтрока(ТекстОшибки) Тогда

                        ОбщегоНазначения.СообщитьПользователю(ТекстОшибки);

                        КонецЕсли;

                        КартинкаQRКода = Новый Картинка(ДанныеQRКода);

                        ОбластьПодвал.Рисунки.QRКод.Картинка = КартинкаQRКода; 

                       

                        Если НедостаточноДанныхДляQRКода = 0 Тогда

                                   ТабДок.Вывести(ОбластьПодвал);

                        Иначе                            

                                   //Если данные неполные в бланке, то QR-код вообще не формируем

                                   ОбластьСОшибкой = Макет.ПолучитьОбласть("СообщениеОбОшибке");        

                                   ТабДок.Вывести(ОбластьСОшибкой);

                        КонецЕсли;              

                                              

                                                          

            КонецЕсли;

КонецПроцедуры//ПечатьКвитанцииНаТекущееНачисление

 

&НаКлиенте

Процедура ВыбратьПолучателя(Команда)

            ТабДок = Новый ТабличныйДокумент;   

           

            Если ТипКвитанции = "На текущее начисление" Тогда

                        ПечатьКвитанцииНаТекущееНачисление(ТабДок, ЛС, Получатель, ТекущееНачисление);

            КонецЕсли;

           

            ТабДок.ОтображатьСетку = Ложь;

            ТабДок.Защита = Ложь;

            ТабДок.ТолькоПросмотр = Ложь;

            ТабДок.ОтображатьЗаголовки = Ложь;

            ТабДок.Показать(?(ЗначениеЗаполнено(ЭтотОбъект.ТипКвитанции), "Квитанция " + НРег(ЭтотОбъект.ТипКвитанции), "Таблица")); 

           

            ЭтаФорма.Закрыть();

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