Не указано место хранения получаемого файла.

1. АннаШ 127 21.11.24 13:48 Сейчас в теме
Добрый день!
ЗУП, внешняя печатная форма.
При формировании печ. формы выходит ошибка "Не указано место хранения получаемого файла."
Причем, на другом док-те этого же вида все норм.
В чем проблема?
Спасибо.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user2107191 21.11.24 13:50 Сейчас в теме
(1)
Причем, на другом док-те этого же вида все норм.
В чем проблема?
проблема в том, что это разные документы с разными данными. Соответственно, могут работать отличающиеся алгоритмы формирования печатной формы (в зависимости от состава данных).
Логично, не правда ли?

PS. Всем напоминать про отладчик уже пальцы устали.
3. АннаШ 127 21.11.24 13:52 Сейчас в теме
(2) Внешняя печатная форма. Один алгоритм.
4. user2107191 21.11.24 13:55 Сейчас в теме
(3) Что-то мне сегодня везет на "непорочное зачатие пресвятой Девы Марии"... Прям хоть верить всем на слово начинай...
Один алгоритм.
Хочу увидеть этот алгоритм, в котором нет ни одного "Если.. Тогда... Иначе..."
5. АннаШ 127 21.11.24 13:57 Сейчас в теме
(4) Пожалуйста:

Функция СведенияОВнешнейОбработке() Экспорт

	МассивНазначений = Новый Массив;
	МассивНазначений.Добавить("Документ.РаботаВВыходныеИПраздничныеДни"); 
	
	ПараметрыРегистрации = Новый Структура;
	ПараметрыРегистрации.Вставить("Вид", 			 "ПечатнаяФорма"); 
	ПараметрыРегистрации.Вставить("Назначение", 	 МассивНазначений);
	ПараметрыРегистрации.Вставить("Наименование", 	 "Уведомление"); 
	ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
	ПараметрыРегистрации.Вставить("Версия", 		 "1.0"); 
	ПараметрыРегистрации.Вставить("Информация", 	 "Печать уведомления"); 
	
	
	ТаблицаКоманд = ПолучитьТаблицуКоманд();
	ДобавитьКоманду(ТаблицаКоманд, "Уведомление сотрудника", "Уведомление", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
	
	ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
	
	Возврат ПараметрыРегистрации;
	
КонецФункции

Функция ПолучитьТаблицуКоманд()  
	
	Команды = Новый ТаблицаЗначений;
	
	Команды.Колонки.Добавить("Представление", 		 Новый ОписаниеТипов("Строка"));
	Команды.Колонки.Добавить("Идентификатор", 		 Новый ОписаниеТипов("Строка")); 
	Команды.Колонки.Добавить("Использование", 		 Новый ОписаниеТипов("Строка")); 
	Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
	Команды.Колонки.Добавить("Модификатор", 		 Новый ОписаниеТипов("Строка"));
	
	Возврат Команды;
	
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")

	НоваяКоманда = ТаблицаКоманд.Добавить();
	
	НоваяКоманда.Представление	 		= Представление; 
	НоваяКоманда.Идентификатор 			= Идентификатор;
	НоваяКоманда.Использование 			= Использование;
	НоваяКоманда.ПоказыватьОповещение 	= ПоказыватьОповещение;
	НоваяКоманда.Модификатор 			= Модификатор;

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

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "Уведомление") Тогда
		ПечатьДокумента(КоллекцияПечатныхФорм, МассивОбъектов, ОбъектыПечати);
	КонецЕсли;

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

Процедура ПечатьДокумента(КоллекцияПечатныхФорм, МассивОбъектов, ОбъектыПечати) Экспорт
		
	ВывестиДанныеДокументаВТабличныйДокумент(КоллекцияПечатныхФорм, МассивОбъектов);
		
КонецПроцедуры 

Процедура ВывестиДанныеДокументаВТабличныйДокумент(КоллекцияПечатныхФорм, ОбъектыПечати)

	МодульСклонениеПредставленийОбъектов = ОбщегоНазначения.ОбщийМодуль("СклонениеПредставленийОбъектов");
	
	ДвоичныеДанныеМакета = ПолучитьМакет("ПФ_DOC_Уведомление");
	
	// общие параметры
	
	СсылкаНаДокумент = ОбъектыПечати[0];
	
	СтрокаШтрихкода 	 = СсылкаНаДокумент.НЛЭ_Штрихкод;
	ДатаУведомления 	 = Формат(СсылкаНаДокумент.Дата, "ДЛФ=Д");
	ПодписантФИО 		 = СокрЛП(ТРег(СсылкаНаДокумент.НЛЭ_Подписант.ФизическоеЛицо.Фамилия) + " " + ТРег(СсылкаНаДокумент.НЛЭ_Подписант.ФизическоеЛицо.Инициалы)); 
	ПодписантДолжность 	 = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СсылкаНаДокумент.НЛЭ_Подписант, "Должность", СсылкаНаДокумент.Дата)[0].Должность;	
	ФИОПодготовил 		 = СокрЛП(ТРег(СсылкаНаДокумент.Ответственный.ФизическоеЛицо.Фамилия) + " " + СсылкаНаДокумент.Ответственный.ФизическоеЛицо.Инициалы);
	КонтактнаяИнформация = ПользователиСлужебный.ОписаниеПользователя(СсылкаНаДокумент.Ответственный);
	ТелефонПодготовил 	 = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(КонтактнаяИнформация, "Телефон", "");
	
  	КолВоСотрудников = ПолучитьКоличествоСотрудниковВДокументе(СсылкаНаДокумент);
	ТекСотрудник = 0;
	
	Если ДвоичныеДанныеМакета <> Неопределено Тогда
		
		ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "Уведомление");
		
		ПечатнаяФорма.ТабличныйДокумент = Новый ТабличныйДокумент;
		
		Макет = УправлениеПечатью.ИнициализироватьМакетОфисногоДокумента(ДвоичныеДанныеМакета,Неопределено);
		ПечатнаяФормаДокумента = УправлениеПечатью.ИнициализироватьПечатнуюФорму(Неопределено, Макет.НастройкиСтраницыМакета, Макет);		
		
		ДанныеДляПечати  	= ТабличныеДанные(СсылкаНаДокумент);
		ВыборкаПоДокументам = ДанныеДляПечати.РезультатПоШапке.Выбрать();
		ВыборкаПоСтрокам 	= ДанныеДляПечати.РезультатПоТабличнойЧасти.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
		
		Пока ВыборкаПоДокументам.Следующий() Цикл
			СтруктураПоиска = Новый Структура("Ссылка", СсылкаНаДокумент);
			
			ВыборкаПоСтрокам.Сбросить();
			
			Пока ВыборкаПоСтрокам.НайтиСледующий(СтруктураПоиска) Цикл 
				
				ВыборкаПоДатам = ВыборкаПоСтрокам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
				
				Пока ВыборкаПоДатам.Следующий() Цикл 
					ВыборкаПоСотрудникам = ВыборкаПоДатам.Выбрать();
					
					Пока ВыборкаПоСотрудникам.Следующий() Цикл 
						ТекСотрудник = ТекСотрудник + 1;
						
						Данные = Новый Структура;
						
						ОбластьКолонтитул = Новый Структура;
						ОбластьКолонтитул.Вставить("ИмяОбласти", "НижнийКолонтитул");
						ОбластьКолонтитул.Вставить("ТипОбласти", "НижнийКолонтитул");
						
						ОбластьЗаголовок = Новый Структура;
						ОбластьЗаголовок.Вставить("ИмяОбласти", "Заголовок");
						ОбластьЗаголовок.Вставить("ТипОбласти", "Общая");
						
						ОбластьУведомление = Новый Структура;
						ОбластьУведомление.Вставить("ИмяОбласти", "Уведомление");
						ОбластьУведомление.Вставить("ТипОбласти", "Общая");
						
						ОбластьСогласие = Новый Структура;
						ОбластьСогласие.Вставить("ИмяОбласти", "Согласие");
						ОбластьСогласие.Вставить("ТипОбласти", "Общая");
						
						ОбластьПереводСтраницы = Новый Структура;
						ОбластьПереводСтраницы.Вставить("ИмяОбласти", "ПереводСтраницы");
						ОбластьПереводСтраницы.Вставить("ТипОбласти", "Общая");
						
						ТекстПодготовил = "Подготовил: " + ФИОПодготовил + ?(ЗначениеЗаполнено(ТелефонПодготовил), ", телефон: " + ТелефонПодготовил, "");
						Данные.Вставить("Подготовил", ТекстПодготовил);
						
						Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьКолонтитул);
						УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФормаДокумента, Область, Данные); 
						
					
						ДолжностьСотрудникаУведомление	= МодульСклонениеПредставленийОбъектов.ПросклонятьПредставление(СокрЛП(ВыборкаПоСотрудникам.Должность), 3);
						ФИОСотрудникаУведомление 		= НЛЭ_ВспомогательныйДляПечатныхФорм.ОбработатьФамилиюСотрудника(ВыборкаПоСотрудникам.Сотрудник.ФизическоеЛицо, 3, МодульСклонениеПредставленийОбъектов,);
						
						ТекстУважаемыйУведомление = ?(ВыборкаПоСотрудникам.Пол = Перечисления.ПолФизическогоЛица.Женский, "Уважаемая ", "Уважаемый ") + 
												 	СокрЛП(ТРег(ВыборкаПоСотрудникам.Имя)) + " " + СокрЛП(ТРег(ВыборкаПоСотрудникам.Отчество)) + ".";
												 
						Данные.Вставить("ДатаУведомления", 		  ДатаУведомления);
						Данные.Вставить("ДолжностьСотрудника", 	  ДолжностьСотрудникаУведомление);
						Данные.Вставить("ФИОСотрудникаПолностью", ТРег(ФИОСотрудникаУведомление));
						Данные.Вставить("ТекстУважаемый", 		  ТекстУважаемыйУведомление);
						Данные.Вставить("Code", 				  СтрокаШтрихкода);
						
						Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьЗаголовок);
						УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФормаДокумента, Область, Данные);
						
						ПодписантФИО 		= СокрЛП(ТРег(СсылкаНаДокумент.НЛЭ_Подписант.ФизическоеЛицо.Фамилия) + " " + ТРег(СсылкаНаДокумент.НЛЭ_Подписант.ФизическоеЛицо.Инициалы));
						
						Данные.Вставить("ДатаВыхода", 		 	 Формат(ВыборкаПоСотрудникам.Дата, "ДЛФ=Д"));
						Данные.Вставить("ДолжностьРуководителя", ПодписантДолжность);
						Данные.Вставить("ФИОРуководителя", 		 ПодписантФИО);
		
						Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьУведомление);
						УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФормаДокумента, Область, Данные);
						
						СтрокаСогласиеСЗаглавной = ?(ВыборкаПоСотрудникам.Пол = Перечисления.ПолФизическогоЛица.Женский, "Согласна ", "Согласен ");
						СтрокаСогласиеСтрочными  = ?(ВыборкаПоСотрудникам.Пол = Перечисления.ПолФизическогоЛица.Женский, "согласна ", "согласен ");
						ФИОСотрудникаКратко 	 = СокрЛП(ТРег(ВыборкаПоСотрудникам.ФамилияИО));
						
						Данные.Вставить("ДатаВыхода", 		 	Формат(ВыборкаПоСотрудникам.Дата, "ДЛФ=Д"));
						Данные.Вставить("СогласиеСЗаглавной", 	СтрокаСогласиеСЗаглавной);
						Данные.Вставить("ДатаУведомления", 		ДатаУведомления);
						Данные.Вставить("СогласиеСтрочными", 	СтрокаСогласиеСтрочными);
						Данные.Вставить("ФИОСотрудникаКратко", 	ФИОСотрудникаКратко);
		
						Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьСогласие);
						УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФормаДокумента, Область, Данные);

						Если (ТекСотрудник <> КолВоСотрудников) Тогда 
							Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьПереводСтраницы);
							УправлениеПечатью.ПрисоединитьОбласть(ПечатнаяФормаДокумента, Область); 
						КонецЕсли;
						
					КонецЦикла;
				КонецЦикла;
			КонецЦикла; 
		КонецЦикла; 

		АдресХранилищаОфисныйДокумент = УправлениеПечатью.СформироватьДокумент(ПечатнаяФормаДокумента);

		УправлениеПечатью.ОчиститьСсылки(ПечатнаяФормаДокумента, Ложь);
		УправлениеПечатью.ОчиститьСсылки(Макет);
		
		ОфисныеДокументы = Новый Соответствие;
		
		ИмяДокумента = "Уведомление";
		ОфисныеДокументы.Вставить(АдресХранилищаОфисныйДокумент, ИмяДокумента); 
		
		ПечатнаяФорма.СинонимМакета    = ИмяДокумента;
		ПечатнаяФорма.ОфисныеДокументы = ОфисныеДокументы;
  	КонецЕсли;
	
КонецПроцедуры 

Функция ПолучитьКоличествоСотрудниковВДокументе(МассивОбъектов)

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

Функция ТабличныеДанные(МассивОбъектов)

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

Процедура ПроверкаВыводимыхПараметров(СсылкаНаДокумент)

	Ошибки = Неопределено;    
	
	Если (Не ЗначениеЗаполнено(СсылкаНаДокумент.НЛЭ_Подписант)) Тогда 
		ТекстСообщения = СтрШаблон(НСтр("ru = 'Не выбран руководитель (подписант служебной записки).'"), );
		ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, , ТекстСообщения, , , ТекстСообщения, );
	КонецЕсли;                               

	ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Ложь);

КонецПроцедуры
Показать
6. user2107191 21.11.24 14:08 Сейчас в теме
7. rname 25.11.24 11:57 Сейчас в теме
Такая же была ошибка. Означает, что нет выведенных областей в макете.
8. АннаШ 127 25.11.24 12:14 Сейчас в теме
(7) Нет, тут проблема в запросах (данные для печати).
Спасибо за внимание!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот