Клюев В.В.
http://prof1c.kklab.ru
Доработка документа «Перечисление НДФЛ в бюджет РФ»
Обычное приложение, УПП ред 1.3
Добрый день!
Очень много было вопросов по поводу заполнения документа Перечисление НДФЛ в бюджет, много было и споров о том, как всё таки правильно заполнять этот документ (кстати, о том как его заполнять можно почитать на ИТС), но речь сейчас не об этом.
Со стороны программиста – вопросов не возникает – документ работает и делает свою работу – распределяет по сотрудникам суммы выплаченного НДФЛ по платежному поручению, но о том, как этот документ реализован – и как его неудобно заполнять догадываются только те программисты, которые сами попробовали его заполнить.
В целях помощи пользователю – давайте разработаем небольшой функционал, помогающий сделать подбор платежных поручений более удобным, ведь пользователю необходимо четко помнить – какое платежное поручение и когда оно прошло, переходить в журнал документов платежные поручения, для
того чтобы взять оттуда – номер, дату и сумму документа, неудобство это еще большее – если эти операции выполняют разные пользователи – один из которых
отвечает за расчетный блок, а другой за формирование платежных поручений и за их выплату. Доработаем документ – в части удобного подбора платежных
поручений и заполнения необходимых реквизитов.
Пример будет основываться на конфигурации УПП ред 1.3. Для практических испытаний) – сделайте копию информационной базы – и все эксперименты проводите с ней.
Итак, запустите конфигуратор, откройте конфигурацию (если она не открыта), в списке объектов найдите ветку документы – и в ней документ ПеречислениеНДФЛвБюджет, дважды щелкните мышью для его открытия и перейдите на вкладку Формы.
Будем дорабатывать форму ФормаДокумента и добавим еще одну форму – «ФормаПодбораПП».
Сейчас выберите форму- ФормаДокумента и откройте ее(двойной клик).
Теперь на панели инструментов – найдите кнопку «Вставить элемент управления», если ее нет – правая клавиша мыши в свободном пространстве на панели инструментов и установите галочку – на Редактор форм.
В окне Вставка элемента управления выберите Кнопка и имя «КнопкаЗаполнитьПП» и заголовок «Подобрать п/п», и нажмите кнопку . Теперь разместите на зеленом поле после нашу кнопку, просто подведя курсор и щелкнув мышью в этом пространстве.
На этом пока закончим с формой, но мы к ней вернемся позже для написания алгоритма для нашей кнопки, а сейчас вернитесь в окно со свойствами объекта документа «ПеречислениеНДФЛвБюджет», на вкладку Формы и добавьте новую форму.
Назовем форму – «ФормаПодбораПП», тип формы – произвольная и «Готово».
Теперь давайте разместим на нашей форме элементы управления, а именно таблицу значений, для этого используйте кнопку «Вставить элемент управления», выберите «Табличное поле» и имя «СписокПП», тип – таблица значений.
А теперь также просто щелкните кнопкой мыши на форме для вставки таблицы значений. Разместите ее в начале формы и растяните границы до синей пунктирной линии формы.
Теперь нам необходимо добавить колонки в которые мы будем выводить запросом список платежных поручений. Для этого над полем СписокПП нажмите правую клавишу мыши и выберите пункт Добавить колонку, нам необходимо добавить две колонки – платежное поручение и дата.
Так необходимо проделать 2-раза, для получения двух колонок Колонка1, Колонка2. Теперь давайте изменим названия колонок и их имена. Для этого дважды щелкните по колонке Колонка1 для вывода её свойств и назовем ее как НаименованиеПП; тип значения – ДокументСсылка.ПлатежноеПоручениеИсходящее,
а вторую Сумма; тип значения число 10,2.
Для более удобного просмотра списков документов – можете расширить длину поля с наименованием платежного поручения.
Осталось добавить кнопку – для выбора платежного поручения – «Выбрать» внизу панели щелкните дважды на пустой значок кнопки
и напишите имя и Текст кнопки -> «Выбрать»
Теперь давайте перейдем в модуль нашей формы (ФормаПодбораПП) и объявим глобальную переменную «ЗначенияПараметров» для
передачи параметров в форму.
Перем ЗначенияПараметров Экспорт; Процедура ОсновныеДействияФормыВыбрать(Кнопка) // Вставить содержимое обработчика. КонецПроцедуры
Пока закончим работу с нашей формой, мы еще вернемся к ней, а пока давайте откроем нашу форму документа и напишем код для кнопки Подобрать п/п, для этого откройте Модуль формы «ФормаДокумента» и найдите нашу пустую процедуру «КнопкаЗаполнитьППНажатие». Давайте здесь напишем код, который по
нажатию кнопки – будет открывать форму подбора платежных поручений и нам необходимо передавать некоторые параметры в нашу форму:
Процедура КнопкаЗаполнитьППНажатие(Элемент) // Вставить содержимое обработчика. ЗначенияПараметров = Новый Структура(); ЗначенияПараметров.Вставить("Дата",Дата); ЗначенияПараметров.Вставить("ОКАТО",ОКАТО_КПП); Форма = ПолучитьФорму("ФормаПодбораПП"); Форма.ЗначенияПараметров = ЗначенияПараметров; ВозвращаемоеЗначение = Форма.ОткрытьМодально(); Если ВозвращаемоеЗначениеНеопределено Тогда ПлатежноеПоручение = ВозвращаемоеЗначение.ПлатежноеПоручение; ПлатежноеПоручениеНомер = ПлатежноеПоручение.Номер; ПлатежноеПоручениеДата = ПлатежноеПоручение.Дата; ОКАТО = ПлатежноеПоручение.КодОКАТО; КПП = ПлатежноеПоручение.КПППлательщика; ДатаПлатежа = ПлатежноеПоручение.Дата; Сумма = ПлатежноеПоручение.СуммаДокумента; КонецЕсли; КонецПроцедуры
Этот код заполняет по переданному документу «ПлатежноеПоручениеИсходящее» данные по платежному поручения в нашей форме документа.
Теперь еще раз возвращаемся в форму подбора платежного поручения, переходим в модуль и пишем следующий текст, предварительно проверьте есть ли у кнопки выбрать – событие при нажатии на эту кнопку (в модуле увидите пустую процедуру ОсновныеДействияФормыВыбрать). Выберем предопределенную процедуру ПриОткрытии и напишем следующий код:
Процедура ПриОткрытии() КодБК = Новый СписокЗначений; КОДБК.Очистить(); КОДБК.Добавить("18210102021011000110"); //2011 г. КодБК.Добавить("18210102010011000110"); //2012 г. ПредставлениеМесяца = Формат(ЗначенияПараметров.Дата,"ДФ='ММ'"); ПредставлениеГода=Формат(ЗначенияПараметров.Дата,"ДФ='yyyy'"); Представление="МС."+ПредставлениеМесяца+"."+ПредставлениеГода; Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ | ПлатежноеПоручениеИсходящее.СуммаДокумента как Сумма, | ПлатежноеПоручениеИсходящее.Ссылка как НаименованиеПП |ИЗ | Документ.ПлатежноеПоручениеИсходящее КАК ПлатежноеПоручениеИсходящее | ГДЕ | ПлатежноеПоручениеИсходящее.КодБК В (&КОДБК) | И ПлатежноеПоручениеИсходящее.ПоказательПериода = &Представление "; Запрос.УстановитьПараметр("КОДБК",КодБК); Запрос.УстановитьПараметр("Представление",Представление); Результат = Запрос.Выполнить().Выгрузить(); ЭлементыФормы.СписокПП.Значение.Очистить(); Для каждого Стрка из Результат Цикл НовСтрока = ЭлементыФормы.СписокПП.Значение.Добавить(); НовСтрока.НаименованиеПП = Стрка.НаименованиеПП; НовСтрока.Сумма = Стрка.Сумма; КонецЦикла; КонецПроцедуры
Данным кусочком кода мы заполняем в зависимости от передаваемой даты документа – список платежных поручений. Единственная проблема – коды бюджетной классификации, которые при случае их смены придется переписывать или добавлять в список значений.
При желании – можете улучшить код и подбирать платежки в зависимости от выбранного ОКАТО/КПП в форме документа, а также учитывать уже заполненные ранее документы перечисление ндфл в бюджет и отфильтровывать платежные поручения которые поучаствовали в выборе.
Также мы может заполнять данные ОКАТО/КПП из самого платежного поручения, переменные с окато, кпп уже объявлены их нужно объединить в строку и записать значение в форму.
Теперь нам не хватает единственной детали – передавать документ в нашу форму, тот документ который выберет пользователь в нашей форме подбора платежных поручений.
Давайте напишем код для кнопки «Выбрать», событие при нажатии на кнопку должно быть уже у вас сформировано
Процедура ОсновныеДействияФормыВыбрать(Кнопка) // Вставить содержимое обработчика. КонецПроцедуры
Итак:
Процедура ОсновныеДействияФормыВыбрать(Кнопка) ТекСтрока = ЭлементыФормы.СписокПП.ТекущаяСтрока; Параметры = Новый Структура(); Параметры.Вставить("ПлатежноеПоручение",ТекСтрока.НаименованиеПП); ЭтаФорма.Закрыть(Параметры); КонецПроцедуры
При завершении экспериментов не забываем обновить конфигурацию – клавиша (F7).