Отладка шаблона печатной формы Word AA 5

Декоративное изображение

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

Партнер
RSS
Добрый день.

Альфа-Авто: Автосалон+Автосервис+Автозапчасти ПРОФ. Редакция 5 (5.0.07.04)

Сделали вордовский документ с параметрами по примерам, которые зашиты в  конфигурацию.
Запускаем на печать, получаем

При печати Заказ-наряд АВ00000970 от 14.08.2013 12:03:16 обнаружены ошибки :
Обработчик печатной формы Тест догоора (шаблон): {ОбщийМодуль.зфЗащищенныеФункции.Модуль(3456)}: Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,29)}: Ошибка в выражении


Риторический опрос - как отладку сделать, как ошибку отловить?
Декоративное изображение 124
Сотрудник 1С-Рарус
Добрый день!

Отладку можно сделать следующим образом:
На копии базы  в модуле объекта документа Заказ-наряд текст функции Печать() временно замените на следующий:

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

Таким образом, сможете зайти в отладке в процедуру ПечатьШаблонаЗаказНарядДоговор() и найти в какой строке ошибка.

Обратите внимание, что имя функции печати шаблона должно образовываться следующим образом "ПечатьШаблона" + ИмяШаблона
где ИмяШаблона - имя элемента в справочнике шаблоны печатных форм.
Например, предопределенный шаблон называется "ЗаказНарядДоговор", поэтому функция в модуле называется "ПечатьШаблонаЗаказНарядДоговор".
Партнер
Спасибо, Михаил.

Попробуем.
Партнер
2 странности.

1. Не изменяя типовую конфигурацию, запускаю на печать шаблон. ЗаказНарядДоговор
Жду 5-10 минут, форма ходит на экран.
Первый опрос -  почему так долго? Сервер очень мощный, загрузка процессора не превышает 10%, памяти более чем достаточно.

второй опрос  - после закрытия введенной формы в  процессах остается процесс ворда.

2. Загружаю свой шаблон, пытаюсь печатать, получаю

Обработчик печатной формы Тест (шаблон): {(1)}: Метод объекта не обнаружен (ПечатьШаблонаТест)

хотите сказать, что для печати каждой формы нужно создавать свой обработчик печати? Т.е. каждый раз нужно привлекать программистов?
Сотрудник 1С-Рарус
По пунктам:

1. При формировании шаблонов печатных форм MS Word действительно есть задержка, связанная с использованием COM объектов. Обычно длительность открытия не превышает 10-15 секунд. (тестировалось на компьютере с ЦП: 2,7 Ghz, ОЗУ: 4 Гб). Если Вам удастся сделать замер производительности - можно будет увидеть на каком этапе происходит такая большая задержка. Скорее всего, проблемы происходят на стороне MS Word в момент открытия.

2. После закрытия введенной формы в процессах остается процесс ворда - действительно есть такая ошибка. В функции пчПроверитьCOMСоединениеMSWord() не происходит закрытие созданного объекта. Будет исправлено в следующем релизе.

3. Идея использования шаблонов заключается в следующем: пользователь может выгрузить имеющийся шаблон, внести нужные правки в тексте, переставить,удалить параметры и т.д. После этого измененный шаблон загружается обратно. Такой подход позволяет внести минимальные правки в печатную форму в режиме Предприятия не обращаясь за помощью к разработчику. Если нужно использовать несколько вариантов шаблона или создавать новые шаблоны для других печатных форм, тогда, как Вы правильно отметили, потребуется создание своего обработчика печати. Программа выдала сообщение об ошибке, так как не нашла нужного обработчика печати.
Пользователь ПП
Хочу высказаться  по данной теме.
1. Задержка в выводе печатной формы аналогична, не менее 5 мин. Замер производительности выложу попозже.

2. Можно ли пока самим доработать, какие изменения нужно внести?

3. Данная информация противоречит ответу, который мне дали в ветке
http://rarus.ru/forum/forum7/topic4895/#message29065

Я даже параметры из шаблона не удаляла для чистоты эксперимента, почему я не могу подгрузить свой шаблон??
Сотрудник 1С-Рарус
Юлия, здравствуйте!

1. На счет задержки пока не могу ничего ответить.

2. Можно самим исправить:
Нужно в пчПроверитьCOMСоединениеMSWord()
после строки Excel = Новый COMОбъект("Word.Application");
добавить строку Excel.Quit();

3. Посмотрел шаблон, который Вы выкладывали в другой ветке. В шаблоне добавлено множество меток, которых не было в базовом шаблоне. На данный момент процедуры печати заполняют только те метки, которые есть в базовом шаблоне. Доработка механизма, чтобы автоматически заполнялись новые метки, которых нет в базовом шаблоне, не планируется на текущий момент. Обратил внимание, что не все блоки текста находятся внутри областей - это неправильно, такие блоки не будут выведены на печать. Также у областей и меток обязательно должна быть как открывающая, так и закрывающая её метка.

Если нужна существенная переработка шаблона, как в Вашем примере, то проще сделать отдельную внешнюю печатную форму и не использовать механизм шаблонов. Но для этого, конечно, потребуется доработка конфигурации, как было правильно сказано в другой ветке.
Партнер
Цитата
Михаил Шкурла пишет:
Идея использования шаблонов заключается в следующем: пользователь может выгрузить имеющийся шаблон, внести нужные правки в тексте, переставить,удалить параметры и т.д. После этого измененный шаблон загружается обратно. Такой подход позволяет внести минимальные правки в печатную форму в режиме Предприятия не обращаясь за помощью к разработчику. Если нужно использовать несколько вариантов шаблона или создавать новые шаблоны для других печатных форм, тогда, как Вы правильно отметили, потребуется создание своего обработчика печати. Программа выдала сообщение об ошибке, так как не нашла нужного обработчика печати.

Очень странная идея. А в чем сложность сделать автозаполнение параметров ЛЮБОГО документа-шаблона при помощи одной процедуры? тогда пользователи могли бы самостоятельно делать печатные формы
Сотрудник 1С-Рарус
Реализация универсального механизма заполнения шаблонов - это достаточно трудоемкий процесс. В ближайшее время усовершенствование этого механизма не планируется.
Партнер
Грубо говоря
Функция ЗаменитьШаблонВВордеНаТекст(Ворд, ШаблонВВорде, ТекстЗамены, Все = Истина)
// здесь в цикле будем искать все шаблоны указанного вида
Ворд.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С-Рарус
Добрый день, Дмитрий, данный вопрос передан разработчикам, ответ будет дан в этой ветке форума.
Партнер
Спасибо :)
Сотрудник 1С-Рарус
Дмитрий, проблема все таки в работе самого Word. Альфа-Авто и платформа здесь не причем.
Партнер
У меня, очевидно, проблемы с донесением информации.
Попробую еще раз.
1. Берем кусок кода из Рарус:Управление фирмой франчайзи, запихиваем его в обработку, создаем шаблон документа. запускаем обработку, и, о чудо, тут же получаем на экране заполненный документ Ворд по шаблону.
2. Берем пятую Альфу последнего релиза, печатаем заказ наряд по типовому шаблону -  при первой печати курим 5 минут,последующие открываются адекватно.

Вопрос - вы уверены, что проблема не в Альфа-Авто?

Хотите, вышлю вам обработку из вашей же конфигурации для франчей, чтобы вы убедились, что там нет задержек??  :)
Сотрудник 1С-Рарус
Дмитрий, Ваш вопрос передан разработчикам, ответ будет дан в этой ветке форума.
Пользователь ПП
Подниму ветку. Что слышно по этой проблеме?
Сотрудник 1С-Рарус
Добрый день, Юлия, пока вопрос до конца решить не удалось.
Пользователь ПП
жуть конечно, думал у меня сервак зависает при попытке распечатать заказ-наряд по типовому шаблону и пока лазил в отладке и читал эту тему, ПФ так и не отобразилась. по моему лучше такой вариант функционала убрать из конфигурации пока не появится что то более адекватное
Сотрудник 1С-Рарус
Добрый день, Василий, как уже сообщалось выше проблема связана с MS Word, c его долгим открытием. Данный функционал работает, убираться из конфигурации он не будет.
Читают тему
Поддержка отраслевых решений «1С-Рарус»
Услуги 1С