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

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С. Часть 1. Простые и расширенные настройки

СКД Инструкции пользователю Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

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

18.09.2023    6328    accounting_cons    5    

29

Оплата счетов в 1С:Бухгалтерии: выставлено и оплачено

Взаиморасчеты Инструкции пользователю Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Бесплатно (free)

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

16.05.2023    5671    accounting_cons    4    

13

Дополнительные расходы при приобретении товаров в 1С:Управление торговлей 11.5

Инструкции пользователю Оптовая торговля Учет доходов и расходов Платформа 1С v8.3 1С:Управление торговлей 11 Россия Управленческий учет Бесплатно (free)

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

27.02.2023    9325    TINa78    5    

24

Использование типовых возможностей 1С и их расширение. Часть 2

Инструкции пользователю Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

03.11.2022    3874    ixijixi    7    

18

Использование типовых возможностей 1С и их расширение. Часть 1

Инструкции пользователю БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

29.10.2022    7603    ixijixi    7    

58

Описываем ошибки правильно. Правило трех вопросов

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

Коллеги, вне зависимости от того, кем Вы работаете, если Вы хоть как-то косвенно связаны с 1С - данная статья для Вас! Все мы либо сообщаем кому-то об ошибках, либо по другую сторону баррикад - исправляем ошибки. В статье расскажу, как максимально просто и эффективно общаться друг с другом на тему ошибок.

18.08.2022    5866    biimmap    20    

36

Модуль "Оргсхема, должностные инструкции и регламенты" для УНФ, УТ 10/11, КА, БП, ERP/УПП, АльфаАвто

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

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

8400 руб.

05.08.2022    6774    2    0    

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

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