@Xris

Почему съезжает макет?

Из-за чего может съезжать макет двоичных данных (word)?
Процедура ПечатьДокумента(Форма) Экспорт
	Если ЗначениеЗаполнено(Форма.Объект.Курс) Тогда
		Попытка
			Word1 = Новый COMОбъект("Word.Application");
		Исключение
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки());
		КонецПопытки;
		MainWord = Word1.Documents.Add();
		
		Объект1 = Форма.Объект;
		Попытка	
			
			Данные = ПолучитьДанные(Объект1);
			СтруктураКурса = ПолучитьСтруктуруКурса(Объект1);
			НазваниеВида= "Удостоверение форма 25";
			Сч=Ложь;
			Для Каждого Элемент Из Объект1.Свидетельства Цикл
				
				Если Строка(Элемент.ВидВыдаваемогоСвидетельства) = НазваниеВида Тогда
					Сч=Истина;
					
					ИмяВременногоФайла = КаталогВременныхФайлов() + "tmpCart.doc";
					Попытка
						Word = Новый COMОбъект("Word.Application");
					Исключение
						ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки());
					КонецПопытки;	
					Попытка	
						
						СсылкаМакет = ПолучитьМакетДокумента();
						СсылкаМакет.Записать(ИмяВременногоФайла);
						Word.Documents.Add(ИмяВременногоФайла);
						ТекДок = Word.ActiveDocument;
						
	
						//ФизЛицо = РазложитьСтрокуВМассив(Строка(Элемент.ФизическоеЛицо), " ");
						Подписи = ПолучитьПодписи(Элемент.Свидетельство);
						СтруктураФизЛица = ПолучитьСтруктуруФизЛица(Элемент.ФизическоеЛицо);
						
						
						ТекДок.Bookmarks("City").Select();
						ТекДок.Application.Selection.TypeText(""+Данные.ОрганизацияТерритория);
						ТекДок.Bookmarks("IdentNum").Select();
						ТекДок.Application.Selection.TypeText(""+Элемент.НомерСвидетельства);
						ТекДок.Bookmarks("IdentDir").Select();
						ТекДок.Application.Selection.TypeText(""+Подписи);
						ТекДок.Bookmarks("FIO").Select();
						ТекДок.Application.Selection.TypeText(Строка(Элемент.ФизическоеЛицо));
						
						
						ТекДок.Bookmarks("DateOut").Select();
						ТекДок.Application.Selection.TypeText(Формат(Объект1.Дата,"ДФ=dd.MMMM.yyyy") + " года");
						
						ТекДок.Bookmarks("DateBegin").Select();
						ТекДок.Application.Selection.TypeText(Формат(СтруктураКурса.ДатаНачала,"ДФ=dd.MM.yyyy")); 
						ТекДок.Bookmarks("DateEnd").Select();
						ТекДок.Application.Selection.TypeText(Формат(СтруктураКурса.ДатаОкончания,"ДФ=dd.MM.yyyy"));
						
						ТекДок.Bookmarks("Hours").Select();
						ТекДок.Application.Selection.TypeText(""+СтруктураКурса.Часов);
						ТекДок.Bookmarks("ProgName").Select();
						ТекДок.Application.Selection.TypeText(""+СтруктураКурса.Дисциплина);
						
						ТекДок.SaveAs(КаталогВременныхФайлов() + "Удостоверение форма 25 "+ Строка(Элемент.ФизическоеЛицо) +".doc");
						
						
						MainWord.Activate();
						
						//ТекДок.Tables(1).Select();
						ТекДок.Select();
						ТекДок.Application.Selection.Copy();
						MainWord.Application.Selection.PasteAndFormat(16);
						//MainWord.Application.Selection.InsertBreak(2);
						ТекДок.Close();
						
						Попытка
							УдалитьФайлы(КаталогВременныхФайлов() + "Удостоверение форма 25 "+ Строка(Элемент.ФизическоеЛицо) +".doc");  
						Исключение
							ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
						КонецПопытки;
						Word.Quit();
					Исключение
						ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки());
						Word.Quit();
					КонецПопытки;
					
				КонецЕсли;
			КонецЦикла;
			Если Сч Тогда
				
				Попытка
					УдалитьФайлы(КаталогВременныхФайлов() + "tmpCart.doc");  
				Исключение
					ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
					Word1.Quit();
				КонецПопытки;
				MainWord.PageSetup.Orientation = 1;
				MainWord.PageSetup.TopMargin = 36;
				MainWord.Application.Visible = Истина;                                                                                         
				//MainWord.Application.WindowState = 2;
				//MainWord.Application.WindowState = 1; 
			Иначе		
				ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НазваниеВида+" не был найден");
				MainWord.Close(0);
				Word1.Quit();
				
			КонецЕсли;
		Исключение
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Ошибка: " + ОписаниеОшибки());
			Word1.Quit();
		КонецПопытки;
	Иначе
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Ошибка: " + "Заполните программу обучения!");
	КонецЕсли;
	
КонецПроцедуры

Исходник
5d0b76d532837216581182.png
При печати
5d0b76eb6603a715542785.png
  • Вопрос задан
  • 398 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Dementor
программист, архитектор, аналитик
Где может "съезжать" макет? В дереве метаданных конфигуратора? Значит вы перед ним добавили новый макет. Какая вообще разница (кроме эстетической) в том как макеты расположены?

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

По поводу двоичного макета. Рекомендую использовать тип активного документа: 1) так вам не нужно будет для изменения каждый раз сохранять и перезаписывать двоичные данные - можете все правки сделать напрямую в конфигураторе; 2) при получении макета сразу получите COM-объект, готовый к заполнению и показу пользователям.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы