Имя: Пароль:
1C
1С v8
Печатная форма в Word (БСП) и параметры страницы
, ,
0 andrewks
 
18.08.12
15:10
сварганил печатную форму с макетом в Word (БСП), всё, вроде, хорошо, и колонтитулы, и форматирование. но осталась одна проблемка: в выходном документе параметры страницы устанавливаются в стандартные, а не берутся из макета. из-за этого вся красота документа, естественно, портится.

как побороть?
1 andrewks
 
18.08.12
16:52
ап, что-ли
2 andrewks
 
18.08.12
17:00
мдэ, с OpenOffice дела ещё хуже - слетают не только параметры страницы, но ещё шрифты и выравнивание некоторых строк
3 andrewks
 
18.08.12
18:00
итак, настройки от макета-шаблона нужно передавать так:


Макет=УправлениеПечатьюКлиент.ИнициализироватьМакет(ДвоичныеДанныеМакетов[ИмяМакета],ТипМакета);
НастройкиСтраницыМакета=Макет.НастройкиСтраницыМакета;
ПечатнаяФорма=УправлениеПечатьюКлиент.ИнициализироватьПечатнуюФорму(ТипМакета,НастройкиСтраницыМакета,Макет);


для опенофиса параметры страницы перекочёвывают нормально, но проблема с шрифтами и выравниванием некоторых строк так и не побеждена.

для ms-офиса параметры не устанавливаются. как показала отладка, из-за того, что самые нужные параметры приходят из Word'а некорректно.

например, имеем такой тестовый код:



   МассивНастроек = Новый Массив;
   МассивНастроек.Добавить("Orientation");
   МассивНастроек.Добавить("TopMargin");
   МассивНастроек.Добавить("BottomMargin");
   МассивНастроек.Добавить("LeftMargin");
   МассивНастроек.Добавить("RightMargin");
   МассивНастроек.Добавить("Gutter");
   МассивНастроек.Добавить("HeaderDistance");
   МассивНастроек.Добавить("FooterDistance");
   МассивНастроек.Добавить("PageWidth");
   МассивНастроек.Добавить("PageHeight");
   МассивНастроек.Добавить("FirstPageTray");
   МассивНастроек.Добавить("OtherPagesTray");
   МассивНастроек.Добавить("SectionStart");
   МассивНастроек.Добавить("OddAndEvenPagesHeaderFooter");
   МассивНастроек.Добавить("DifferentFirstPageHeaderFooter");
   МассивНастроек.Добавить("VerticalAlignment");
   МассивНастроек.Добавить("SuppressEndnotes");
   МассивНастроек.Добавить("MirrorMargins");
   МассивНастроек.Добавить("TwoPagesOnOne");
   МассивНастроек.Добавить("BookFoldPrinting");
   МассивНастроек.Добавить("BookFoldRevPrinting");
   МассивНастроек.Добавить("BookFoldPrintingSheets");
   МассивНастроек.Добавить("GutterPos");
   
   COMОбъект = Новый COMОбъект("Word.Application");
   COMОбъект.Documents.Open(ИмяФайла);
   
   Для Каждого ИмяНастройки Из МассивНастроек Цикл
       Сообщить(""+ИмяНастройки+" = "+COMОбъект.ActiveDocument.PageSetup[ИмяНастройки]);
   КонецЦикла;
   
   COMОбъект.Quit(0);
   COMОбъект = 0;



часть настроек приходит нормально, но некоторые, например, так:
TopMargin = 9 999 999
BottomMargin = 9 999 999

при этом, если открытие документа заменить на создание нового:
COMОбъект.Documents.Add();

то все настройки приходят нормально:
TopMargin = 56,70000076293945
BottomMargin = 56,70000076293945

куда рыть?
4 andrewks
 
18.08.12
18:25
проверил БСП вплоть до 2.1.1.14 - везде настройки запрашиваются через ActiveDocument.  однако эксперименты на моём офисе (Office XP SP3/2002) показали, что правильные настройки после Documents.Open() нужно искать через COMОбъект.Documents.Item(1).PageSetup[ИмяНастройки]

если у кого есть возможность потестить на офисах 2003 и выше, отпишитесь, пожалуйста, о поведении при стандартном БСП-шном доступе через ActiveDocument
5 andrewks
 
18.08.12
20:46
Documents.Item(1) - сторно, не всегда отрабатывает. теперь тяну через Sections.


я, конечно, исправил посредством патча модуля УправлениеПечатьюMSWordКлиент, но хотелось бы мнений других товарищей по этому вопросу
6 andrewks
 
18.08.12
22:02
- доктор, мне кажется, что меня все игнорируют...
- следующий!
7 IamAlexy
 
18.08.12
22:09
долго долго всячески разные формы делал
в итоге пришел к выводу что форма в ворде имеет смысл только в том случае, если макет будут делать сами пользователи.
когда программист делает печатную форму - на 8ке вообще похрен в чем выводится
ибо простой табличный документ можно сохранить в 100500 различных форматов
соответственно возня с вордом, опенофисом и их глюками/особенностями просто напросто теряет смысл.

а как правило пользователи тупы и никто не хочет заморачиваться с шаблонами.
8 andrewks
 
20.08.12
08:45
итак, дальнейшие наблюдения показали:
1. слетающее форматирование в шаблоне ODT наблюдалось в OOo 3.3, но в LO 3.4-3.5  ничего не слетает, всё выводится корректно безо всякого "допила"

2. по поводу Word'а с его параметрами "9999999", всё-таки, хотел бы услышать мнения и опыт личного применения
9 andrewks
 
20.08.12
09:11
типа, ап
10 andrewks
 
20.08.12
09:47
граждане, не будьте равнодушными, не проходите мимо
11 Karambol
 
20.08.12
09:50
Не знаю, поможет ли, но я подобную проблему решал так: в шаблоне выделял весь текст, потом Изменить стили - По умолчанию и сохранял.
12 andrewks
 
20.08.12
10:07
(11) со стилями, как раз, сейчас все проблемы решил. осталась проблема с установкой параметров страницы при печати в Word при использовании стандартного кода БСП. из-за этого прихшлось делать патч в
УправлениеПечатьюMSWordКлиент.ПолучитьМакетMSWord():


   Для Каждого ИмяНастройки Из НастройкиПараметровСтраницы() Цикл
       Попытка
           // - andrewks Handler.НастройкиСтраницыМакета.Вставить(ИмяНастройки, COMОбъект.ActiveDocument.PageSetup[ИмяНастройки]);
           Handler.НастройкиСтраницыМакета.Вставить(ИмяНастройки, COMОбъект.ActiveDocument.Sections.Item(1).PageSetup[ИмяНастройки]); // + andrewks
       Исключение
           // Пропустить, если настройка не поддерживается данной версией программы.
       КонецПопытки;
   КонецЦикла;



т.е. на любую конфу внешку уже не накатишь - надо или патч делать, или смириться с расползающимися полями.

вот этот момент хочу, чтобы потестили форумчане, особенно тестовый код из (3) - у кого как и на каких версиях MSoffice выводятся параметры страницы
13 andrewks
 
20.08.12
11:23
^ ^
14 andrewks
 
20.08.12
15:02
ок, зайдём с другой стороны.

вот готовая обработка для тестирования (1с 8.2 УФ):  http://yadi.sk/d/yrSFqtXhHQMA

просьба, у кого есть установленные MS Office версий 2003 и выше, и кому не жалко потратить лишних 3-5 минут, - проверьте, пожалуйста, как у вас будут выводится значения настроек страницы

больше всего интересуют: TopMargin/BottomMargin/LeftMargin/RightMargin

просьба указать версию MS Office, и в каком из способов чтения настроек были получены реальные значения (нереальные - это если много девяток: TopMargin = 9 999 999  )

я рассчитываю на вашу помощь!
15 pumbaEO
 
20.08.12
15:11
ща заценим.
16 andrewks
 
20.08.12
15:13
(15) спасибо, друг! а то уже думал, что тема так и затухнет в одиночестве
17 pumbaEO
 
20.08.12
15:15
18 andrewks
 
20.08.12
15:19
(17) вот жешь чёрт, а на office xp глючит через ActiveDocument.PageSetup. спасибо за помощь!

у кого есть другие версии (2003, 2010, 2012) - хотелось бы тоже узнать, как дела обстоят на этих версиях
19 pumbaEO
 
20.08.12
15:27
2003 нормально.  9999999999 - не было.
20 dk
 
20.08.12
15:28
хз, у меня вообще зависает в конфигураторе на попытке маке тпоглядеть
21 dk
 
20.08.12
15:29
маке = макет
22 andrewks
 
20.08.12
15:30
(20) а зачем ты хочешь смотреть макет в конфигураторе? =)  там двоичные данные, вообще-то
23 andrewks
 
20.08.12
15:31
(19) ага, спасибо огроменное. будем считать это глюком конкретно office xp. хоть будет обозначен проблемный круг на будущее
24 dk
 
20.08.12
15:33
любопытно же
виснет просто если список макетов раскрыть
25 andrewks
 
20.08.12
15:33
(24) какой релиз платформы?
26 andrewks
 
20.08.12
15:33
сохранял на 8.2.15.319
27 dk
 
20.08.12
15:37
1С:Предприятие 8.2 (8.2.15.318)
28 andrewks
 
20.08.12
15:39
(27) странно. возможно, следует почистить кэш, из-за него, порой, очень интересные эффекты бывают
29 dk
 
20.08.12
15:41
MS Word 2010 - нормально открыл все
30 andrewks
 
20.08.12
15:47
(29) спасибо!
31 andrewks
 
20.08.12
21:02
придётся апать.

внезапно(!) выяснилось, что проблема в конкретном шаблоне (корректный ворд-файл, открывается корректно, поля показываются правильно, но при доступе через ActiveDocument.PageSetup - девятки)
пробовал создавать новый док, копировать в него содержимое и сохранял - всё равно глючит.

у кого есть немного свободного времечка, гляньте, как этот файл ведёт себя на других версиях MS Office.

новая версия обработки: http://yadi.sk/d/eK1d1Q_ZHnuR
сам файл-виновник: http://yadi.sk/d/ldRE0xvDHnuF

если вдруг у кого возникнут догадки, от чего такое может быть - буду благодарен
32 zladenuw
 
20.08.12
21:10
(31) помогу. результат напишу
33 andrewks
 
20.08.12
21:11
9999999 - это wdUndefined.

вопрос - почему в этом доке оно wdUndefined? и почему через Секцию всё показывается нормально?
34 andrewks
 
20.08.12
21:13
а тема-то бородатая http://msgroups.net/microsoft.public.word.vba.general/page-margin-issue/42429

только причина неясна
35 andrewks
 
20.08.12
21:16
http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/85a286b5-91b5-457a-93b5-ef56ff31a116/

я - Д'Артаньян, 1совцы - сами знаете, кто.

всё-таки у них глюк в коде, и нужен патч (12)
36 zladenuw
 
20.08.12
21:18
(35) в 1с ? вроде борода 2008 года
37 andrewks
 
20.08.12
21:19
ответ спеца от мелкософта:

If a document contains more than one section with differing settings and/or it's very long, querying on the entire document will return the value "indeterminate" (9999999).

перевожу:
Если документ содержит более одной секции с разными настройками и/или он очень большой, запрос к всему документу возвращает значение "неопределено" (9999999).

и советует использовать .Sections(1).PageSetup