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

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

 

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

См. также

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

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

12000 руб.

02.09.2020    171577    960    403    

924

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

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

8400 руб.

20.08.2024    14178    107    46    

107

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

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

9360 руб.

17.05.2024    27207    96    48    

137

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

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

22200 руб.

06.10.2023    17228    43    15    

75

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

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

15000 руб.

10.11.2023    11867    45    27    

67

SALE! %

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

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

4800 3840 руб.

14.01.2013    191118    1152    0    

920

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1100    2    0    

5

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

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

5000 руб.

07.02.2018    104103    244    100    

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