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

13.06.12

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Пример СФ с выбором ответственных
.epf 36,67Kb
49
49 Скачать (1 SM) Купить за 1 850 руб.

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

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

 

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

См. также

SALE! %

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

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

12000 10000 руб.

02.09.2020    161357    893    399    

873

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 руб.

20.08.2024    8588    66    29    

76

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

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

22200 руб.

06.10.2023    15696    39    8    

73

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

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

9360 руб.

17.05.2024    23852    70    45    

119

SALE! %

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

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

15000 10000 руб.

10.11.2023    10668    38    27    

63

SALE! %

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

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

4800 3840 руб.

14.01.2013    188574    1142    0    

913

SALE! %

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

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

20000 15000 руб.

07.10.2021    17559    6    32    

42

Инструментарий разработчика Программист Платные (руб)

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

1800 руб.

21.02.2023    7833    8    35    

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