Сохранение ручных корректировок в печатных формах

22.02.14

Задачи пользователя - Инструкции пользователю

Доработка позволяет сохранять и загружать ручные корректировки пользователей в приказах и других печатных формах. Печатные формы сохраняются в базе как хранилище значения.

Что в результате

В окне вывода печатной формы появятся две кнопки "Сохранить макет" и "Загрузить макет". 

Кнопка "Сохранить макет" позволяет сохранить изменения, внесенные в макете вручню.

Кнопка "Загрузить макет" позволяет загрузить внесенные изменения.

 

Доработка системы 

Необходимо внести в систему следующие изменения:

1. Общий модуль "Универсальные механизмы", функция "Напечатать документ"

1.1 Добавляем параметр

СсылкаНаОбъект = Неопределено;

1.2 В конец функции добавляем  строку

ФормаПечати.СсылкаНаОбъект = СсылкаНаОбъект;

В результате  должно получиться:

Функция НапечататьДокумент(ПечДокумент, КоличествоЭкземпляров = 0, НаПринтер = Ложь, Заголовок = "", ПараметрыРасшифровки = Неопределено, ПараметрыПечДокумента = Неопределено, СсылкаНаОбъект = Неопределено) Экспорт
	Если ПечДокумент = Неопределено тогда
		Возврат Неопределено;
	КонецЕсли;
	// Получить необходимое количество копий
	Если КоличествоЭкземпляров > 0 Тогда
		ПечДокумент.КоличествоЭкземпляров = КоличествоЭкземпляров;
	КонецЕсли;
	Если НаПринтер Тогда
		ПечДокумент.Напечатать();		
		Возврат Неопределено;		
	Иначе
		// Отобразить печатный документ на экране
		ФормаПечати = ПолучитьОбщуюФорму("ПечатьДокументов",, ПечДокумент);
		ФормаПечати.ПечатныйДокумент = ПечДокумент;
		ФормаПечати.Заголовок = Заголовок;
		ФормаПечати.Защита = УправлениеДопПравамиПользователей.ЗащитаТаблиц();
		ФормаПечати.ПараметрыРасшифровки = ПараметрыРасшифровки;
		ФормаПечати.ПараметрыПечатногоДокумента	= ПараметрыПечДокумента;

		//Сохранение макетов + 
                ФормаПечати.СсылкаНаОбъект = СсылкаНаОбъект; 
                //Сохранение макетов - 
  
		ФормаПечати.Открыть();
		Возврат ФормаПечати;		
	КонецЕсли;	
КонецФункции

2. Общая форма "ПечатьДокументов"

2.1 В форме добавляем реквизиты: 

ДОП_КоличествоКопий (Тип: Число)

СсылкаНаОбъект (Тип: ДокументСсылка)

2.2 В модуль формы добавляем следующие функции:

//функции для сохранения макетов + 
Процедура КоманднаяПанельФормыСохранитьМакет()
	
	ИмяФайла = ПолучитьПолноеИмяВременногоФайла();	
	
	ЭлементыФормы.ПолеТабличногоДокумента.Записать(ИмяФайла); 
	
	НаборЗаписей = РегистрыСведений.ДОП_МакетыДокументов.СоздатьНаборЗаписей();      		
	НаборЗаписей.Отбор.СсылкаНаОбъект.Установить(СсылкаНаОбъект);
	НаборЗаписей.Прочитать();
	Если НаборЗаписей.Количество() > 0 Тогда
		
		Ответ = Вопрос("По данному документу уже сохранен макет, заменить?", РежимДиалогаВопрос.ДаНет);
		Отказ = (Ответ = КодВозвратаДиалога.Нет);
		Если Отказ Тогда
			УдалитьВременныйФайлМакета(ИмяФайла);
			Возврат;
		КонецЕсли;		
	КонецЕсли;   
	
	НаборЗаписей.Очистить();
	ЛокХранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ИмяФайла));
	
	НоваяЗапись = НаборЗаписей.Добавить();      		
	НоваяЗапись.СсылкаНаОбъект = СсылкаНаОбъект;
	НоваяЗапись.Макет = ЛокХранилище;	
	НаборЗаписей.Записать(Истина);  	

	УдалитьВременныйФайлМакета(ИмяФайла);  	
	
КонецПроцедуры

Процедура КоманднаяПанельФормыЗагрузитьМакет()
	
	ИмяФайла = ПолучитьПолноеИмяВременногоФайла();
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("СсылкаНаОбъект",СсылкаНаОбъект);
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ДОП_МакетыДокументов.Макет
	|ИЗ
	|	РегистрСведений.ДОП_МакетыДокументов КАК ДОП_МакетыДокументов
	|ГДЕ
	|	ДОП_МакетыДокументов.СсылкаНаОбъект = &СсылкаНаОбъект";
	Выборка = Запрос.Выполнить().Выбрать();
	
	Если Выборка.Количество() = 0 Тогда  		
		Ответ = Вопрос("По данному документу не сохранен макет", РежимДиалогаВопрос.ОК);
		Возврат; 		
	Иначе
		Выборка.Следующий();   	
		Макет = Выборка.Макет;
		Макет.Получить().Записать(ИмяФайла);	
	
		ЭлементыФормы.ПолеТабличногоДокумента.Прочитать(ИмяФайла);	
		УдалитьВременныйФайлМакета(ИмяФайла);		
		
	КонецЕсли;
	
		
КонецПроцедуры

Функция ПолучитьПолноеИмяВременногоФайла()
	
	ЮзерИД = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор;
	
	//здесь прописываем путь к каталогу временных файлов
	КаталогВременныхФайлов = ПолучитьКаталогВременныхФайлов();
	КаталогНаДиске = Новый Файл(КаталогВременныхФайлов);
	Если Не КаталогНаДиске.Существует() Тогда
		 СоздатьКаталог(КаталогВременныхФайлов);
	КонецЕсли;
	
	Возврат  Строка("\"+КаталогВременныхФайлов+"\"+строка(ЮзерИД)+".mxl");	
	
КонецФункции

 Функция ПолучитьКаталогВременныхФайлов()
	 
	 //здесь прописываем путь к каталогу временных файлов
	Возврат  Строка("C:\temp111");	
	
КонецФункции


Процедура УдалитьВременныйФайлМакета(КаталогВременныхФайлов)
	
	УдалитьФайлы(КаталогВременныхФайлов);	
	
КонецПроцедуры

Процедура КоманднаяПанельФормыАБ_Сохранить(Кнопка)
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	Диалог.Заголовок = "Save as";
	Диалог.ПолноеИмяФайла = СтрЗаменить(ЭтаФорма.Заголовок,".","");
	Диалог.ПредварительныйПросмотр = Ложь;
	Диалог.Фильтр = ПолучитьФильтрФайлов();
	Если Диалог.Выбрать() Тогда
		ИмяФайла = Диалог.ПолноеИмяФайла;
		Попытка
			ЭлементыФормы.ПолеТабличногоДокумента.Записать(ИмяФайла, ?(Прав(ИмяФайла,3) = "xls", ТипФайлаТабличногоДокумента.XLS, ТипФайлаТабличногоДокумента.MXL));
		Исключение
			Предупреждение("Ошибка при записи. Файл не записан.");
		КонецПопытки;		
	КонецЕсли;

КонецПроцедуры

Функция ПолучитьФильтрФайлов() Экспорт

	Возврат "Табличный документ (*.mxl)|*.mxl|"
	      + "Документ Microsoft Excel (*.xls)|*.xls|";

КонецФункции // ПолучитьФильтрФайлов()

Процедура КоманднаяПанельФормыАБ_ТолькоПросмотр(Кнопка)
	ЭлементыФормы.ПолеТабличногоДокумента.ТолькоПросмотр      = НЕ ЭлементыФормы.ПолеТабличногоДокумента.ТолькоПросмотр;
	ЭлементыФормы.АБ_Панель2.Кнопки.АБ_ТолькоПросмотр.Пометка = НЕ ЭлементыФормы.АБ_Панель2.Кнопки.АБ_ТолькоПросмотр.Пометка;

КонецПроцедуры

Процедура КоманднаяПанельФормыАБ_Печать(Кнопка)
	ЭлементыФормы.ПолеТабличногоДокумента.КоличествоЭкземпляров = ДОП_КоличествоКопий;
	ЭлементыФормы.ПолеТабличногоДокумента.Напечатать(РежимИспользованияДиалогаПечати.Использовать);
КонецПроцедуры           
//функции для сохранения макетов -

2.2 В функцию "ПриОткрытии" модуля формы добавляем строки:

Процедура ПриОткрытии()
	
	ЭлементыФормы.ПолеТабличногоДокумента.ВставитьОбласть(ПечатныйДокумент.Область());
	ЭлементыФормы.ПолеТабличногоДокумента.ИмяПараметровПечати = ПечатныйДокумент.ИмяПараметровПечати;
	ЭлементыФормы.ПолеТабличногоДокумента.ОтображатьЗаголовки = Ложь;
	ЭлементыФормы.ПолеТабличногоДокумента.ОтображатьСетку     = Ложь;
	ЭлементыФормы.ПолеТабличногоДокумента.Защита              = Защита;
	ЭлементыФормы.ПолеТабличногоДокумента.ТолькоПросмотр      = Истина;
	
	Если ПараметрыПечатногоДокумента <> Неопределено Тогда
		ЗаполнитьЗначенияСвойств(ЭлементыФормы.ПолеТабличногоДокумента, ПараметрыПечатногоДокумента,, "ОтображатьЗаголовки, ОтображатьСетку, ТолькоПросмотр, Защита, ИмяПараметровПечати");
	КонецЕсли;
// механизм сохранения макетов  + 
	Если СсылкаНаОбъект <> Неопределено Тогда
		ДействиеСохранитьМакет = Новый Действие("КоманднаяПанельФормыСохранитьМакет");  
		КнопкаСохранитьМакет = ЭлементыФормы.КоманднаяПанельФормы.Кнопки.Добавить("СохранитьМакет", ТипКнопкиКоманднойПанели.Действие,"Сохранить макет",ДействиеСохранитьМакет);
		
		ДействиеЗагрузитьМакет = Новый Действие("КоманднаяПанельФормыЗагрузитьМакет");  
		КнопкаЗагрузитьМакет = ЭлементыФормы.КоманднаяПанельФормы.Кнопки.Добавить("ЗагрузитьМакет", ТипКнопкиКоманднойПанели.Действие,"Загрузить макет",ДействиеЗагрузитьМакет);
	КонецЕсли;
	//механизм сохранения макетов -   
КонецПроцедуры

3. В модулях объекта тех документов, макеты которых необходимо сохранять, вносим изменения в вызов функции "УниверсальныеМеханизмы.НапечататьДокумент": добавляем параметр "Ссылка" в конце

Возврат УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначенияЗК.СформироватьЗаголовокДокумента(ЭтотОбъект,"Прием на работу в организацию "),,ТабДокумент,Ссылка); 

4. Добавляем регистр сведений "ДОП_МакетыДокументов" (непериодический, независимый)

Измерение:  "Ссылка на объект" (Тип: ДокументСсылка);

Ресурс: "Макет" (Тип: ХранилищеЗначения);


5. Всё! Проверяем, радуем кадровиков.  

 

 

 

 

 

 

 

Вступайте в нашу телеграмм-группу Инфостарт

макет печатная форма

См. также

Инструкции пользователю 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Рассказываем об истории создания 1C-Store и о том, какие проблемы пользователей и разработчиков решает каталог. Узнайте, как устроена система конвейера и аудита решений и как такой формат формирует новую экосистему вокруг 1С.

08.10.2025    1303    artbear    4    

11

Инструкции пользователю Бесплатно (free)

Серия материалов, о том какие самые доставучие вопросы задают пользователи 1С, от которых прям выворачивает, когда видишь что пользователь не видит перед собой кнопку, галку.

23.05.2025    3116    Eugeneer    13    

14

Инструментарий разработчика Инструкции пользователю Бесплатно (free)

Макропад — это программируемая мини-клавиатура, позволяющая назначить на его кнопки выполнение каких-то действий: от управления громкостью медиа проигрывателя и до ввода макросов для автоматизации каких-то действий, например, для ввода с клавиатуры шаблонов кода 1С. Все участники конференции INFOSTART TECH EVENT 2024 получили в комплекте участника такое устройство. В этой статье - необходимые файлы и инструкции по настройке.

10.10.2024    10929    kuntashov    59    

15

Инструкции пользователю Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Абонемент ($m)

Практические советы пользователям по настройке отчетов на СКД. Такие отчеты - как встроенные, так и внешние - используются в современных типовых конфигурациях: УТ 11, КА 2, ERP 2, БП 3.0, ЗУП 3.1 и других.

2 стартмани

11.03.2024    8084    70    accounting_cons    2    

20

Инструкции пользователю СКД Бухгалтер Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

Простые приемы работы с отчетами на СКД. Что нужно знать пользователю про настройку отчетов, чтобы использовать их на полную катушку, – продолжение.

16.10.2023    35416    accounting_cons    14    

15
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. AnryMc 850 24.02.14 18:37 Сейчас в теме
Конечно это не обязательно, а из серии - юзабилити...

Кнопка "Загрузить макет" должна быть доступна только если есть сохраненные...
2. mangy 30 24.02.14 20:53 Сейчас в теме
(1) AnryMc, логично. Правда данный "шедевр" был разработан под конкретную задачу, и возможность довести до совершенства я оставляю всем заинтересовашимся.
3. pepe 64 25.02.14 16:39 Сейчас в теме
Я правильно понял Вас, ваш механизм позволяет сохранять документы? Если пользователь сформирует новый отчет, с новыми данными заполненными из программы, то они затрутся?
4. mangy 30 25.02.14 17:35 Сейчас в теме
(3) pepe, только печатные формы. О документах и отчетах речи нет.
5. AndrewUtkaev 120 01.10.17 14:05 Сейчас в теме
Идея верная и реализация неплохая. Бросается в глаза только следующее - ПолучитьПолноеИмяВременногоФайла() И ПолучитьКаталогВременныхФайлов() функции не нужны, есть стандартная функция - ПолучитьИмяВременногоФайла("mxl") - возвращает имя временного файла с каталогом
Для отправки сообщения требуется регистрация/авторизация