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

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С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 руб.

02.09.2020    119967    656    389    

701

Infostart PrintWizard

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

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

18000 руб.

06.10.2023    7018    20    6    

37

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

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

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

10000 руб.

10.11.2023    3253    10    1    

31

SALE! 30%

PowerTools

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

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

3600 2520 руб.

14.01.2013    177356    1071    0    

846

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

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

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

5000 руб.

07.02.2018    99207    239    97    

296

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

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

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

3000 руб.

27.08.2019    17921    6    8    

38

1С HTML Шаблоны / HTML Templates

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

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    27949    3    10    

14

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

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

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23494    15    15    

31
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
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 506 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 Сейчас в теме
Очень изящно. Очень помогло. Спасибо
Оставьте свое сообщение