Пример печатной формы с выбором без формы выбора
Пример реализации внешней печатной формы с выбором ответственного лица без формы выбора
- Описание
- Подробнее
Описание
На Инфостарте выложено множество внешних печатных форм «с выбором…», и почти все они реализованы по одному принципу — перед печатью выводим форму, на которой пользователь выбирает нужное значение для подстановки. И я так неоднократно делал. Но некоторое время назад появилась пара клиентов, которые выписывают под тысячу счетов-фактур в день. Казалось бы, невелик труд — лишний раз на кнопку «ОК» кликнуть, если подписи уполномоченных по умолчанию печатать надо, но к концу дня бухгалтер стала нехорошо на меня посматривать 🙂 Пришлось переделывать. Результатом стала внешняя печатная форма с выбором ответственных лиц без формы выбора.
Для демонстрации воспользуюсь стандартной внешней печатной формой счет-фактуры выданной по постановлению 1137 для Бухгалтерии 2.0. Подготовительные мероприятия по заполнению регистра «ОтветственныеЛицаОрганизаций» и дополнительных свойств справочника «ФизическиеЛица» подробно расписывать не буду. Все стандартно:
1) В справочнике «Физические лица» заполняем дополнительные реквизиты «Доверенность за директора» и «Доверенность за гл.бухгалтера»;
2) В ответственных лицах организаций добавляем новых ответственных как «Уполномоченное лицо».
И меняем нашу печатную форму.
Первым делом добавляем форму обработки. Снимаем галочки командных панелей сверху и снизу — они не нужны. На созданной форме удаляем кнопки «Выполнить» и «Закрыть», и «кидаем» на форму поле табличного документа.
Теперь идем в модуль объекта, находим там функцию Печать(), переименовываем её например в ОригинальнаяПечать(). И пишем свою:
Функция Печать() Экспорт
Форма = ПолучитьФорму("Форма"); ТабДокумент = Форма.ЭлементыФормы.ПолеТабличногоДокумента; Форма.Открыть(); Конецфункции // Печать
Все. В модуле объекта работы закончены.
Теперь меняем макеты (в данном случае их два и изменить надо оба). Берем ячейки, в которых содержаться те параметры которые будем менять, и присваиваем им имена. Т.е. ячейке с параметром «ФИОРуководителя» присваиваем имя «Директор», а ячейке с параметром «ФИОГлавногоБухгалтера» — «Главбух». Кроме того, надо объединить ячейки на две строки ниже подписи. Те, куда будет выводиться еще одна строка — «По доверенности…» или «По приказу…».
Возвращаюсь к форме. Вешаю на саму форму Событие «ПриОткрытии», а на поле табличного документа событие «Выбор».
Процедура ПриОткрытии() ТабДокумент = Новый ТабличныйДокумент; ТабДокумент = ОригинальнаяПечать(); ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт; ТабДокумент.ПолеСверху = 13; ТабДокумент.ПолеСлева = 0; ТабДокумент.ПолеСнизу = 0; ТабДокумент.ПолеСправа = 0; ТабДокумент.ВерхнийКолонтитул.Выводить = Истина; ТабДокумент.ВерхнийКолонтитул.НачальнаяСтраница = 2; ТабДокумент.ВерхнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Низ; ЗаголовокДляПечати = ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаОбъект, "Счет-фактура") + " г."; ТабДокумент.ВерхнийКолонтитул.ТекстСлева = ЗаголовокДляПечати; ТабДокумент.ВерхнийКолонтитул.ТекстСправа = "Лист [&НомерСтраницы]"; ЭтаФорма.Заголовок = ЗаголовокДляПечати; Элементыформы.ПолеТабличногоДокумента.ВставитьОбласть(ТабДокумент.Область()); ЭлементыФормы.ПолеТабличногоДокумента.ОтображатьЗаголовки = Ложь; ЭлементыФормы.ПолеТабличногоДокумента.ОтображатьСетку = Ложь; ЭлементыФормы.ПолеТабличногоДокумента.Защита = Истина; ЭлементыФормы.ПолеТабличногоДокумента.ТолькоПросмотр = Истина; КонецПроцедуры
Процедура ПолеТабличногоДокументаВыбор(Элемент, Область, СтандартнаяОбработка) Если Область.Имя = "Директор" ИЛИ Область.Имя = "Главбух" Тогда
ТабДок = Элементыформы.ПолеТабличногоДокумента; СтандартнаяОбработка = Ложь; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОтветственныеЛицаОрганизаций.ФизическоеЛицо, | ФИОФизЛицСрезПоследних.Фамилия + "" "" + ПОДСТРОКА(ФИОФизЛицСрезПоследних.Имя, 1, 1) | + ""."" + ПОДСТРОКА(ФИОФизЛицСрезПоследних.Отчество, 1, 1) + ""."" КАК ФИО |ПОМЕСТИТЬ Уполномоченные |ИЗ | РегистрСведений.ОтветственныеЛицаОрганизаций.СрезПоследних( | &Дата, | ОтветственноеЛицо = &Уполномоченный | И СтруктурнаяЕдиница = &СтруктурнаяЕдиница) КАК ОтветственныеЛицаОрганизацийСрезПоследних | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтветственныеЛицаОрганизаций КАК ОтветственныеЛицаОрганизаций | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(&Дата, ) КАК ФИОФизЛицСрезПоследних | ПО ОтветственныеЛицаОрганизаций.ФизическоеЛицо = ФИОФизЛицСрезПоследних.ФизЛицо | ПО (НАЧАЛОПЕРИОДА(ОтветственныеЛицаОрганизаций.Период, ДЕНЬ) = | НАЧАЛОПЕРИОДА(ОтветственныеЛицаОрганизацийСрезПоследних.Период, ДЕНЬ)) | И ОтветственныеЛицаОрганизацийСрезПоследних.СтруктурнаяЕдиница = ОтветственныеЛицаОрганизаций.СтруктурнаяЕдиница | И ОтветственныеЛицаОрганизацийСрезПоследних.ОтветственноеЛицо = ОтветственныеЛицаОрганизаций.ОтветственноеЛицо |; |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЗначенияСвойствОбъектов.Объект КАК Уполномоченный, | ЗначенияСвойствОбъектов.Значение КАК Доверенность |ПОМЕСТИТЬ Доверенности |ИЗ | ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваОбъектов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов | ПО СвойстваОбъектов.Ссылка = ЗначенияСвойствОбъектов.Свойство |ГДЕ | СвойстваОбъектов.Наименование = &Владелец |; |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Уполномоченные.ФИО, | Доверенности.Доверенность |ИЗ | Уполномоченные КАК Уполномоченные | ЛЕВОЕ СОЕДИНЕНИЕ Доверенности КАК Доверенности | ПО Уполномоченные.ФизическоеЛицо = Доверенности.Уполномоченный |ГДЕ| (НЕ Доверенности.Доверенность = """")"; Запрос.УстановитьПараметр("Дата", СсылкаНаОбъект.Дата); Запрос.УстановитьПараметр("СтруктурнаяЕдиница", СсылкаНаОбъект.Организация); Запрос.УстановитьПараметр("Уполномоченный", Перечисления.ОтветственныеЛицаОрганизаций.УполномоченныйПредставитель); НужнаяСтрока = Область.Верх; НужнаяКолонка = Область.Лево; Если Область.Имя = "Директор" Тогда Запрос.УстановитьПараметр("Владелец","Доверенность за директора"); Иначе
Запрос.УстановитьПараметр("Владелец","Доверенность за гл.бухгалтера"); КонецЕсли; Выборка = Запрос.Выполнить().Выгрузить(); Руководители=РегламентированнаяОтчетность.ОтветственныеЛицаОрганизаций(СсылкаНаОбъект.Организация,СсылкаНаОбъект.Дата,); НоваяСтрока = Выборка.Вставить(0); НоваяСтрока.Доверенность = ""; Если Область.Имя = "Директор" Тогда НоваяСтрока.ФИО = Руководители.Руководитель; Иначе
НоваяСтрока.ФИО = Руководители.ГлавныйБухгалтер; КонецЕсли; Спис = Новый СписокЗначений; Спис.ЗагрузитьЗначения(Выборка.ВыгрузитьКолонку("ФИО")); ВыбЭлемент = Спис.ВыбратьЭлемент("Выберите сотрудника.", ВыбЭлемент); Если Не ВыбЭлемент = Неопределено Тогда ВыбЗначение = ВыбЭлемент.Значение; НайденныеСтроки = Выборка.НайтиСтроки(Новый Структура("ФИО", ВыбЗначение)); Если ЗначениеЗаполнено(НайденныеСтроки[0].Доверенность) Тогда
Доверенность = НайденныеСтроки[0].Доверенность; Иначе
Доверенность = ""; КонецЕсли; Если Область.Имя = "Директор" тогда
Обл1 = ТабДок.Область(НужнаяСтрока,НужнаяКолонка,НужнаяСтрока,НужнаяКолонка); Обл2 = ТабДок.Область(НужнаяСтрока + 2,2,НужнаяСтрока + 2,7); Попытка
Обл1.Текст = НайденныеСтроки[0].ФИО; Обл2.Текст = Доверенность; Исключение
КонецПопытки Иначе Обл1 = ТабДок.Область(НужнаяСтрока,НужнаяКолонка,НужнаяСтрока,НужнаяКолонка); Обл2 = ТабДок.Область(НужнаяСтрока + 2,9,НужнаяСтрока + 2,15); Попытка
Обл1.Текст = НайденныеСтроки[0].ФИО; Обл2.Текст = Доверенность; Исключение
КонецпопыткиКонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры
Вот и все. Теперь при выборе нашей печатной формы, программа будет без всяких вопросов выводить фамилию директора и главбуха. А если их надо поменять на кого-либо из уполномоченных, то достаточно кликнуть на «ФИОРуководителя» или «ФИОГлавногоБухгалтера» и выбрать нужного из появившегося списка.
