Имя: Пароль:
1C
1C 7.7
v7: Не получается изменить нижний колонтитул в Word из-под 1с 7.7
0 Absurdus
 
29.11.16
11:12
Процедура ЗаменитьТекст(Текст1,Текст2)
    Word.Selection.Find.Replacement.ClearFormatting();
    Word.Selection.Find.Execute(Текст1,0,0,0,0,0, 1,1,0,Текст2,2);
КонецПроцедуры//ЗаменитьТекст  

Процедура ЗаменитьТекстКолонтитула(Текст1,Текст2)  
    Word.Selection(1).Footers.Range.Find.Execute(Текст1,,,,,,,,,Текст2,2);  
КонецПроцедуры//ЗаменитьТекст  

Процедура Печать()  
    
    ШаблонДоговора = КаталогИБ() + "\Шаблоны\Договор с ТД.doc";
    Если ФС.СуществуетФайл(ШаблонДоговора) = 0 Тогда
        Предупреждение("Нет файла шаблона договора с ТД Гидросервис!");
        СтатусВозврата(0);
        Возврат;  
    КонецЕсли;
    
    Word = СоздатьОбъект("Word.Application");
    Word.Visible    = 1;
    Doc    = Word.Documents.Add(ШаблонДоговора);
    
    //***Номер документа
    ЗаменитьТекст("%НомерДоговора%"                    ,СокрЛП(НомерДог));

    //***Дата договора
    ДатаДок = ДатаДог;
    День = "";
    Месяц = "";
    Год = "";
    
    День = ?(ДатаЧисло(ДатаДок)<10,"0"+ДатаЧисло(ДатаДок),ДатаЧисло(ДатаДок));
    
    МесяцЧисло = 0 ;
    МесяцЧисло = ДатаМесяц(ДатаДок);
    СЗМ = СоздатьОбъект("СписокЗначений");
    СЗМ.ДобавитьЗначение("Января");    СЗМ.ДобавитьЗначение("Февраля"); СЗМ.ДобавитьЗначение("Марта");    СЗМ.ДобавитьЗначение("Апреля");    СЗМ.ДобавитьЗначение("Мая"); СЗМ.ДобавитьЗначение("Июня"); СЗМ.ДобавитьЗначение("Июля");
    СЗМ.ДобавитьЗначение("Августа"); СЗМ.ДобавитьЗначение("Сентября"); СЗМ.ДобавитьЗначение("Октября"); СЗМ.ДобавитьЗначение("Ноября"); СЗМ.ДобавитьЗначение("Декабря");
      
    Месяц = СЗМ.ПолучитьЗначение(МесяцЧисло);
    
    Год = ДатаГод(ДатаДок);
    
    ЗаменитьТекст("%День%"                    ,День);
    ЗаменитьТекст("%Месяц%"                    ,Месяц);
    ЗаменитьТекст("%Год%"                    ,Год);    
        
    //***Контрагент
    ЗаменитьТекст("%Контрагент%"            ,СокрЛП(Контрагент));
    
    //***Должность
    ЗаменитьТекст("%Должность%"            ,СокрЛП(Должность));
    
    //***ФИО директора
    ЗаменитьТекст("%ФИО%"            ,СокрЛП(ФИО));
    
    //***Дейтсвует на основании
    ЗаменитьТекст("%ДействующегоНаОсновании%"                ,СокрЛП(ДействующегоНаОсновании));
    
    //***Отсрочка
    ЗаменитьТекст("%ДнейОтсрочки%"                ,СокрЛП(ДнейОтсрочки));
    ЗаменитьТекст("%СуммаОтсрочки%"                ,СокрЛП(СуммаОтсрочки));    
    
    //***Платежные реквизиты      
    ЗаменитьТекст("%КраткоеНаименование%",СокрЛП(КраткоеНаименование));  
    ЗаменитьТекст("%ОГРН%"                ,СокрЛП(ОГРН));
    ЗаменитьТекст("%ЮрАдрес%"            ,СокрЛП(ЮрАдрес));
    ЗаменитьТекст("%ПочтовыйАдрес%"            ,СокрЛП(ПочтовыйАдрес));
    ЗаменитьТекст("%ИНН%"                ,СокрЛП(ИНН));
    ЗаменитьТекст("%КПП%"                ,СокрЛП(КПП));  
    
    ЗаменитьТекст("%РассчетныйСчет%"    ,СокрЛП(РассчетныйСчет));
    ЗаменитьТекст("%Банк%"                 ,СокрЛП(Банк));
    ЗаменитьТекст("%КоррСчет%"            ,СокрЛП(КоррСчет));
    ЗаменитьТекст("%БИК%"                ,СокрЛП(БИК));
    
    ЗаменитьТекст("%Телефоны%"            ,СокрЛП(Телефоны));  
    ЗаменитьТекст("%Емаил%"                ,СокрЛП(Емаил));  
    
    ЗаменитьТекст("%РасшифровкаПодписи%",СокрЛП(РасшифровкаПодписи));  
    
    //Нижний колонтитул
    ЗаменитьТекстКолонтитула("%НомерДоговора%",СокрЛП(НомерДог));
    ЗаменитьТекстКолонтитула("%ДатаДоговора%"    ,СокрЛП(Строка(ДатаДог)));
    
    Doc.Activate();  
    Word    = 0;

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

Ну и ошибка в итоге:
Word.Selection(1).Footers.Range.Find.Execute(Текст1,,,,,,,,,Текст2,2);  
{C:\USERS\VPN1C\DESKTOP\База\EXTFORMS\ПЕЧАТЬДОГОВОРА.ERT(152)}: Коллекции не поддерживаются

Как побороть?
1 Масянька
 
29.11.16
11:15
У меня верхний работает так:
    // верхний колонтитул
    мКолонтитул = мДок.Sections.Item(1).Headers.Item(1).Range;
    мКолонтитул.Find.Execute("[ПечНомерДоговора]",0,0,,,,,,,мНомерДоговора,2);
    мКолонтитул.Find.Execute("[ПечДатаДоговора]",0,0,,,,,,,Нрег(СокрЛП(мДатаДоговора)),2);
Нижний не использую. Скорее всего - по аналогии.
2 Absurdus
 
29.11.16
11:27
(1) Word.Selection.Item(1).Footers.Item(1).Range.Find.Execute(Текст1,,,,,,,,,Текст2,2);  
{C:\USERS\VPN1C\DESKTOP\База\EXTFORMS\ПЕЧАТЬДОГОВОРА.ERT(152)}: Поле агрегатного объекта не обнаружено (Item)
3 Absurdus
 
29.11.16
11:28
Вернее так
Word.Sections.Item(1).Footers.Item(1).Range.Find.Execute(Текст1,,,,,,,,,Текст2,2);  
{C:\USERS\VPN1C\DESKTOP\База\EXTFORMS\ПЕЧАТЬДОГОВОРА.ERT(152)}: Поле агрегатного объекта не обнаружено (Sections)
4 Масянька
 
29.11.16
11:42
(3) У меня:
1. инфу из верхнего перенесла в нижний (в шаблоне Word).
2. изменила строку кода:
    мКолонтитул = мДок.Sections.Item(1).Footers.Item(1).Range;


В колонтитуле такая строчка - Договор № [ПечНомерДоговора] на поставку товаров от [ПечДатаДоговора].
Всё арбайтен.
5 Масянька
 
29.11.16
11:44
+ (4) Не плохая инфа для работы с Word - https://msdn.microsoft.com/ru-ru/library/kw65a0we.aspx
6 Базис
 
naïve
29.11.16
11:46
Включи запись макроса, сделай руками, останови запись макроса.
7 Ёпрст
 
29.11.16
11:49
(3) дык не к тому объекту применяешь метод.
8 Ёпрст
 
29.11.16
11:49
к объекту doc пробуй.
9 Absurdus
 
29.11.16
11:55
Doc.Sections.Footers.Item(1).Range();
Doc.Find.Execute(Текст1,,,,,,,,,Текст2,2);
{C:\USERS\VPN1C\DESKTOP\База\EXTFORMS\ПЕЧАТЬДОГОВОРА.ERT(153)}: Microsoft Word: "Range" не является методом.
10 Масянька
 
29.11.16
11:58
(9)
    // формируем файл
    мWord = СоздатьОбъект("Word.Application");

    мWord.Visible = 0;
    мNewDoc = мWord.Documents;
    мШаблон = СокрЛП(Строка(КаталогШаблонов + мШаблон));
    мДок = мNewDoc.Add(мШаблон, 0, 0, 1);
11 Ёпрст
 
29.11.16
12:05
(9) range без скобок
12 Absurdus
 
29.11.16
12:22
(11) Doc.Sections.Item(1).Footers.Item(1).Range<<?>>;
{C:\USERS\VPN1C\DESKTOP\База\EXTFORMS\ПЕЧАТЬДОГОВОРА.ERT(153)}: Неопознанный оператор
13 Absurdus
 
29.11.16
12:31
Doc.Sections(1).Footers(1).Range.Find.Execute(Текст1,,,,,,,,,Текст2,2);
Такое прокатило. Всем спасибо.