Пример печатной формы "с выбором" без формы выбора

13.06.12

Разработка - Инструментарий разработчика

Пример реализации внешней печатной формы с выбором ответственного лица без формы выбора

Скачать исходный код

Наименование Файл Версия Размер
Пример СФ с выбором ответственных
.epf 36,67Kb
48
.epf 36,67Kb 48 Скачать

На Инфостарте выложено множество внешних печатных форм «с выбором…», и почти все они реализованы по одному принципу — перед печатью выводим форму, на которой пользователь выбирает нужное значение для подстановки. И я так неоднократно делал. Но некоторое время назад появилась пара клиентов, которые выписывают под тысячу счетов-фактур в день. Казалось бы, невелик труд — лишний раз на кнопку «ОК» кликнуть, если подписи уполномоченных по умолчанию печатать надо, но к концу дня бухгалтер стала нехорошо на меня посматривать :) Пришлось переделывать. Результатом стала внешняя печатная форма с выбором ответственных лиц без формы выбора.

Для демонстрации воспользуюсь стандартной внешней печатной формой счет-фактуры выданной по постановлению 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.Текст = Доверенность;
				Исключение
				Конецпопытки
			КонецЕсли;
		КонецЕсли;
 КонецЕсли;
КонецПроцедуры  

 

Вот и все. Теперь при выборе нашей печатной формы, программа будет без всяких вопросов выводить фамилию директора и главбуха. А если их надо поменять на кого-либо из уполномоченных, то достаточно кликнуть на «ФИОРуководителя» или «ФИОГлавногоБухгалтера» и выбрать нужного из появившегося списка.

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    131348    713    390    

761

Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    9463    27    6    

49

Infostart УДиФ: Управление данными и формами 1С

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 руб.

10.11.2023    5568    15    2    

39

SALE! %

PowerTools

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2880 руб.

14.01.2013    180054    1095    0    

868

OneDebugger - инструмент для отладки кода без использования режима конфигуратора

Инструментарий разработчика Программист Платформа 1С v8.3 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

5400 руб.

17.05.2024    6460    14    12    

40

Бустер Конвертации данных 3 (Infostart Toolkit)

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 руб.

07.10.2021    15458    3    12    

38

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    100388    240    97    

299

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Программист Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18902    7    8    

42
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. serega3333 13.06.12 17:30 Сейчас в теме
еще проще регламентное задание с печатью доков за период тогда сделать, буху вообще не придется ничего жать. А вообще не очень правильно после вывода печатной формы еще что-то делать, лучше до, печать как результат д.б.
2. Dasty 35 14.06.12 09:02 Сейчас в теме
(1) serega3333, Ага. Прибежал покупатель - давай счет-фактуру! А подписывать кто будет? У Иванова совещание, Петров в обладминистрацию уехал... Значит Сидоров подпишет. Пока бумажку печатали Сидоров в 5-й цех убежал, а это почти 4 км от административного корпуса. Зато у Иванова совещание закончилось. И так раз м-надцать за день. А хоть регламентное, хоть групповое - хорошо когда на аванс печатаешь. Там проблемы "Кто подпишет?" нет.
3. FedorovEvg 153 14.06.12 16:48 Сейчас в теме
Присоединяюсь к (1), мне кажется если реализовывать такой алгоритм, то нужно в базе сохранять данные об измененном подписанте. Иначе может получиться нестыковка при сверке с контрагентами или налоговой.
4. tango 543 15.06.12 11:46 Сейчас в теме
(3) FedorovEvg, возражаю: идея избавиться от промежуточного окошка хороша (воспользовался), а использовать можно для неофициальных форм. и ничто не мешает в рамках этой идеи сделать сохранение
5. FedorovEvg 153 15.06.12 12:32 Сейчас в теме
(4) так нам показан алгоритм на сф, это самая офицальная форма.
6. Dasty 35 15.06.12 12:39 Сейчас в теме
(3) Не уверен в необходимости хранения подобной информации в базе. На каждого уполномоченного должен быть приказ или доверенность "На основании..." Это "на основании" печатается под подписью.
(5) СФ выбрана потому, что она у каждого есть :) И, соответственно, мне нет необходимости постить кучу кода. Люди с малым рейтингом могут не качать пример, и так все понятно.
7. fomix 33 20.06.12 11:10 Сейчас в теме
Механизм реализации имеет право на жизнь. А значит "+". И не важно в какой момент выбирать значение - до печати или после. Все на любителя!
8. user906884 26.11.19 09:16 Сейчас в теме
Очень изящно. Очень помогло. Спасибо
Оставьте свое сообщение