Отладка шаблона печатной формы Word AA 5
Читают тему
Вход в личный кабинет
Для получения доступа к форуму необходимо
авторизоваться
или
зарегистрироваться
на сайте.
{{ formTitle ? formTitle : 'Заказ обратного звонка' }}
{{ formDescription }}
Сообщить об ошибке
Альфа-Авто: Автосалон+Автосервис+Автозапчасти ПРОФ. Редакция 5 (5.0.07.04)
Сделали вордовский документ с параметрами по примерам, которые зашиты в конфигурацию.
Запускаем на печать, получаем
При печати Заказ-наряд АВ00000970 от 14.08.2013 12:03:16 обнаружены ошибки :
Обработчик печатной формы Тест догоора (шаблон): {ОбщийМодуль.зфЗащищенныеФункции.Модуль(3456)}: Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,29)}: Ошибка в выражении
Риторический опрос - как отладку сделать, как ошибку отловить?
Отладку можно сделать следующим образом:
На копии базы в модуле объекта документа Заказ-наряд текст функции Печать() временно замените на следующий:
Функция Печать(НазваниеПечатнойФормы="", КоличествоЭкземпляров=0, НаПринтер=Ложь, Документ=Неопределено, ДопПараметры=Неопределено) Экспорт
Документ = Новый ТабличныйДокумент();
ПечатнаяФорма = Справочники.ВнешниеПечатныеФормы.ЗаказНарядДоговор.ПолучитьОбъект();
Макет = ПечатнаяФорма.Хранилище.Получить();
ИмяМакета = ПечатнаяФорма.Наименование;
Возврат ЭтотОбъект.ПечатьШаблонаЗаказНарядДоговор(Документ,Макет,ИмяМакета);
КонецФункции
Таким образом, сможете зайти в отладке в процедуру ПечатьШаблонаЗаказНарядДоговор() и найти в какой строке ошибка.
Обратите внимание, что имя функции печати шаблона должно образовываться следующим образом "ПечатьШаблона" + ИмяШаблона
где ИмяШаблона - имя элемента в справочнике шаблоны печатных форм.
Например, предопределенный шаблон называется "ЗаказНарядДоговор", поэтому функция в модуле называется "ПечатьШаблонаЗаказНарядДоговор".
Попробуем.
1. Не изменяя типовую конфигурацию, запускаю на печать шаблон. ЗаказНарядДоговор
Жду 5-10 минут, форма ходит на экран.
Первый опрос - почему так долго? Сервер очень мощный, загрузка процессора не превышает 10%, памяти более чем достаточно.
второй опрос - после закрытия введенной формы в процессах остается процесс ворда.
2. Загружаю свой шаблон, пытаюсь печатать, получаю
Обработчик печатной формы Тест (шаблон): {(1)}: Метод объекта не обнаружен (ПечатьШаблонаТест)
хотите сказать, что для печати каждой формы нужно создавать свой обработчик печати? Т.е. каждый раз нужно привлекать программистов?
1. При формировании шаблонов печатных форм MS Word действительно есть задержка, связанная с использованием COM объектов. Обычно длительность открытия не превышает 10-15 секунд. (тестировалось на компьютере с ЦП: 2,7 Ghz, ОЗУ: 4 Гб). Если Вам удастся сделать замер производительности - можно будет увидеть на каком этапе происходит такая большая задержка. Скорее всего, проблемы происходят на стороне MS Word в момент открытия.
2. После закрытия введенной формы в процессах остается процесс ворда - действительно есть такая ошибка. В функции пчПроверитьCOMСоединениеMSWord() не происходит закрытие созданного объекта. Будет исправлено в следующем релизе.
3. Идея использования шаблонов заключается в следующем: пользователь может выгрузить имеющийся шаблон, внести нужные правки в тексте, переставить,удалить параметры и т.д. После этого измененный шаблон загружается обратно. Такой подход позволяет внести минимальные правки в печатную форму в режиме Предприятия не обращаясь за помощью к разработчику. Если нужно использовать несколько вариантов шаблона или создавать новые шаблоны для других печатных форм, тогда, как Вы правильно отметили, потребуется создание своего обработчика печати. Программа выдала сообщение об ошибке, так как не нашла нужного обработчика печати.
1. Задержка в выводе печатной формы аналогична, не менее 5 мин. Замер производительности выложу попозже.
2. Можно ли пока самим доработать, какие изменения нужно внести?
3. Данная информация противоречит ответу, который мне дали в ветке
Я даже параметры из шаблона не удаляла для чистоты эксперимента, почему я не могу подгрузить свой шаблон??
1. На счет задержки пока не могу ничего ответить.
2. Можно самим исправить:
Нужно в пчПроверитьCOMСоединениеMSWord()
после строки Excel = Новый COMОбъект("Word.Application");
добавить строку Excel.Quit();
3. Посмотрел шаблон, который Вы выкладывали в другой ветке. В шаблоне добавлено множество меток, которых не было в базовом шаблоне. На данный момент процедуры печати заполняют только те метки, которые есть в базовом шаблоне. Доработка механизма, чтобы автоматически заполнялись новые метки, которых нет в базовом шаблоне, не планируется на текущий момент. Обратил внимание, что не все блоки текста находятся внутри областей - это неправильно, такие блоки не будут выведены на печать. Также у областей и меток обязательно должна быть как открывающая, так и закрывающая её метка.
Если нужна существенная переработка шаблона, как в Вашем примере, то проще сделать отдельную внешнюю печатную форму и не использовать механизм шаблонов. Но для этого, конечно, потребуется доработка конфигурации, как было правильно сказано в другой ветке.
Идея использования шаблонов заключается в следующем: пользователь может выгрузить имеющийся шаблон, внести нужные правки в тексте, переставить,удалить параметры и т.д. После этого измененный шаблон загружается обратно. Такой подход позволяет внести минимальные правки в печатную форму в режиме Предприятия не обращаясь за помощью к разработчику. Если нужно использовать несколько вариантов шаблона или создавать новые шаблоны для других печатных форм, тогда, как Вы правильно отметили, потребуется создание своего обработчика печати. Программа выдала сообщение об ошибке, так как не нашла нужного обработчика печати.
Очень странная идея. А в чем сложность сделать автозаполнение параметров ЛЮБОГО документа-шаблона при помощи одной процедуры? тогда пользователи могли бы самостоятельно делать печатные формы
Функция ЗаменитьШаблонВВордеНаТекст(Ворд, ШаблонВВорде, ТекстЗамены, Все = Истина)
// здесь в цикле будем искать все шаблоны указанного вида
Ворд.Selection.Find.MatchWholeWord = 1;
Ворд.Selection.Find.MatchCase = 0;
Ворд.Selection.Find.Wrap = 1;
Ворд.Selection.Find.Text = ШаблонВВорде;
Рез = Ворд.Selection.Find.Execute();
Если Все Тогда
Пока Рез Цикл
Если Не ПустаяСтрока(ТекстЗамены) Тогда
Ворд.Selection.TypeText(ТекстЗамены);
Иначе
Ворд.Selection.Delete(1,1);
КонецЕсли;
Рез = Ворд.Selection.Find.Execute();
КонецЦикла;
ИначеЕсли Рез Тогда
Если Не ПустаяСтрока(ТекстЗамены) Тогда
Ворд.Selection.TypeText(ТекстЗамены);
Иначе
Ворд.Selection.Delete(1,1);
КонецЕсли;
Иначе
Возврат Рез;
КонецЕсли;
Возврат Рез;
КонецФункции // ЗаменитьШаблонВВордеНаТекст()
Процедура ЗаполнитьПараметрыШаблонаWord(ДокументДляЗамены,стрПараметрыЗамены, ТекущийПроцессор)
Если ТекущийПроцессор = ПроцессорОО ТОгда
Replace = ДокументДляЗамены.CreateReplaceDescriptor();
КонецЕсли;
Для Каждого Параметр Из стрПараметрыЗамены Цикл
Если ТекущийПроцессор = ПроцессорВорд Тогда
Попытка
// Заменим теги
ЗаменитьШаблонВВордеНаТекст(ДокументДляЗамены, "{" + СокрЛП(Параметр.Ключ) + "}", Параметр.Значение);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
ИначеЕсли ТекущийПроцессор = ПроцессорОО Тогда
Replace.SearchString = "{" + СокрЛП(Параметр.Ключ) + "}";
Replace.ReplaceString = Параметр.Значение;
ДокументДляЗамены.ReplaceAll(Replace);
КонецЕсли;
КонецЦикла;
КонецПроцедуры // ЗаполнитьПараметрыШаблонаWord()
Причем это кусок кода из Рарус:Управление Франчайзи пятилетней давности.
Остается добавить регистр сведений с настройкой соответствий замен и форму мастера создания собственно регистра для пользователей.
Часов 8 работ, не сильно крутого спеца.
Кстати говоря, никаких "областей" в той версии нет - просто заменялись шаблоне все соответствия.
в данный момент ААА последнего релиза, получается, существует совершенно бесполезный механизм - ни пользователям, ни программистам. (расстроено пожимает плечами)
Дернули работу с шаблонами с Управление Франчайзи.
документы формируются и выводятся за секунды
Ребят, я все понимаю, зфЗащищенныеФункции, все дела..
кусков кода по созданию таких обработок в интернете пруд пруди.
Мы что, единственные, кто озаботился шаблонами договоров, чтобы у клиента было все быстро и без привлечения программистов для создания шаблонов? или у всех все в порядке и нам не повезло?
Пробовали печатать из шаблона на трех различных серверах - первая печать в сессии висит от трех до пяти минут.
Мы что, единственные, кто озаботился шаблонами договоров, чтобы у клиента было все быстро и без привлечения программистов для создания шаблонов? или у всех все в порядке и нам не повезло?
Пробовали печатать из шаблона на трех различных серверах - первая печать в сессии висит от трех до пяти минут.
Действительно Word долго открывается.
Попробую еще раз.
1. Берем кусок кода из Рарус:Управление фирмой франчайзи, запихиваем его в обработку, создаем шаблон документа. запускаем обработку, и, о чудо, тут же получаем на экране заполненный документ Ворд по шаблону.
2. Берем пятую Альфу последнего релиза, печатаем заказ наряд по типовому шаблону - при первой печати курим 5 минут,последующие открываются адекватно.
Вопрос - вы уверены, что проблема не в Альфа-Авто?
Хотите, вышлю вам обработку из вашей же конфигурации для франчей, чтобы вы убедились, что там нет задержек??