Имя: Пароль:
1C
1С v8
Помогите с Word шаблоном
0 Tumakota
 
03.03.13
21:29
Есть шаблон ворда, он заполняется все нормально, в конце есть приложение в котором находится таблица, мне надо ее заполнить из документа счет на оплату, который я выбираю. Пишу вот такой вот код

   Если ТипЗнч(Документ) = Тип("ДокументСсылка.СчетНаОплатуПокупателю") тогда
       Для каждого Стр из Документ.Товары цикл
           Замена.Execute("[Номенклатура]", , , , , , , , , Стр.Номенклатура, 2);
           Замена.Execute("[Цена]", , , , , , , , , Стр.Цена, 2);
           Замена.Execute("[Кол]", , , , , , , , , стр.Количество, 2);
           Замена.Execute("[Сумма]", , , , , , , , , стр.Сумма, 2);
           Замена.Execute("[НомерСтроки]", , , , , , , , , стр.НомерСтроки, 2);
       КонецЦикла;
КонецЕсли;

Пишет исключительная ситуация с объектом Execute, подскажите как мне правильно таблицу заполнить в ворде, чтобы автоматически добавлялись новые строчки если надо
1 Мисти
 
03.03.13
22:21
v8: Как при выводе в шаблон ворд сделать цикл? - вот там мне совет давали, правда, я им еще не воспользовалась.
2 Wobland
 
04.03.13
06:59
это ты так хочешь первой строкой ТЧ всё поназаменять? цикл тогда ни к чему
3 Tumakota
 
04.03.13
08:03
Падеж = 2;
   Пол = 0  ;
   КомпонентаСклоненияФИО = СклонениеФИО(ФИО, Падеж, пол);
   Падеж = 2;
   Пол = 0;
   КомпонентаСклоненияКонтрагента = СклонениеКонтрагента(ФИОк, Падеж, пол);
   
   // Получим объект Microsoft Word из макета
   ОбъектВорд = ПолучитьМакет("ДоговорПоставка").Получить();
   
   // Получим документ из объекта и активируем его
   WD = ОбъектВорд.Application.Documents(1);
   WD.Activate();
   СуммаПредоплатыНДС = Число(СуммаНДС=Строка(Условие));
   // Поиск и замена маркеров
   Замена = WD.Content.Find;
   Замена.Execute("[Номер]", , , , , , , , , Номер, 2);
   Замена.Execute("[Дата]", , , , , , , , , Формат(Дата,"ДЛФ=DD"), 2);
   Замена.Execute("[Организация]", , , , , , , , , Организация.НаименованиеПолное, 2);
   Замена.Execute("[Должность]", , , , , , , , , Должность.Наименование+"а", 2);
   Замена.Execute("[ФИО]", , , , , , , , , КомпонентаСклоненияФИО, 2);
   Замена.Execute("[Основание]", , , , , , , , , Основание.Наименование, 2);
   Замена.Execute("[Контрагент]", , , , , , , , , Контрагент.НаименованиеПолное, 2);
   Замена.Execute("[ДолжностьКонтрагента]", , , , , , , , , ДолжностьК+"а", 2);
   Замена.Execute("[ФИОКонтрагента]", , , , , , , , , КомпонентаСклоненияКонтрагента, 2);
   Замена.Execute("[ОснованиеКонтрагента]", , , , , , , , , ОснованиеК.Наименование, 2);
   Замена.Execute("[ПредметДоговора]", , , , , , , , , ПредметДоговора, 2);
   Замена.Execute("[периодПо]", , , , , , , , , Строка(Формат(ПериодПо, "ДЛФ=Д")), 2);
     Замена.Execute("[Сумма]", , , , , , , , , Строка(Сумма), 2);
   Замена.Execute("[НДС]", , , , , , , , , Строка(СтавкаНДС), 2);
   Замена.Execute("[СуммаНДС]", , , , , , , , , Строка(СуммаНДС), 2);
   Замена.Execute("[Пропись]", , , , , , , , , ЧислоПрописью(Сумма,,"Рубль, рублей, рубля, м, копейка, копейки, копеек, ж, 2"), 2);
   Замена.Execute("[ПрописьНДС]", , , , , , , , , ЧислоПрописью(СуммаНДС,,"Рубль, рублей, рубля, м, копейка, копейки, копеек, ж, 2"), 2);



   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
                  |    КонтактнаяИнформация.Объект.Ссылка,
                  |    КонтактнаяИнформация.Вид.Представление,
                  |    КонтактнаяИнформация.Представление
                  |ИЗ
                  |    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
                  |ГДЕ
                  |    КонтактнаяИнформация.Объект.Ссылка = &Организация";
   Запрос.УстановитьПараметр("Организация", Организация);
   Рез = Запрос.Выполнить().Выбрать();
   Пока Рез.Следующий() цикл
   Замена.Execute("[Адрес]", , , , , , , , , Рез.Представление, 2);
   КонецЦикла;
   Замена.Execute("[ИНН]", , , , , , , , , ИННо, 2);
   Замена.Execute("[КПП]", , , , , , , , , КППо, 2);
   Замена.Execute("[БИК]", , , , , , , , , СчетОрг.Банк.Код, 2);
   Замена.Execute("[ОГРН]", , , , , , , , , Организация.ОГРН, 2);    
   Замена.Execute("[БАНК]", , , , , , , , , СчетОрг.Банк.Наименование, 2);
   Замена.Execute("[КорСчет]", , , , , , , , , СчетОрг.Банк.КоррСчет, 2);
   Замена.Execute("[Счет]", , , , , , , , , СчетОрг.НомерСчета, 2);  
   Замена.Execute("[ОКПОо]", , , , , , , , , Организация.КодПоОКПО, 2);
   Замена.Execute("[ФИОО]", , , , , , , , , ФамилияИнициалыФизЛица(ФИО), 2);
   

   Запрос1 = Новый Запрос;
   Запрос1.Текст = "ВЫБРАТЬ
                   |    КонтактнаяИнформация.Представление,
                   |    КонтактнаяИнформация.Объект.Ссылка КАК ОбъектСсылка1
                   |ИЗ
                   |    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
                   |ГДЕ
                   |    КонтактнаяИнформация.Объект.Ссылка = &Контрагент";
   Запрос1.УстановитьПараметр("Контрагент", Контрагент);
   Выборка = Запрос1.Выполнить().Выбрать();
   Пока Выборка.Следующий() цикл
   Замена.Execute("[ЮрАдрес]", , , , , , , , , Выборка.Представление, 2);
   КонецЦикла;
   Замена.Execute("[ИННк]", , , , , , , , , ИННк, 2);
   Замена.Execute("[КППк]", , , , , , , , , КППо, 2);
   Замена.Execute("[БАНКк]", , , , , , , , , Контрагент.ОсновнойБанковскийСчет.Банк.Наименование, 2);
   Замена.Execute("[БИК]", , , , , , , , , Контрагент.ОсновнойБанковскийСчет.Банк.Код, 2);
   Замена.Execute("[ОГРНК]", , , , , , , , , ОГРНк, 2);
   Замена.Execute("[ОКПО]", , , , , , , , , Контрагент.КодПоОКПО, 2);
   Замена.Execute("[КорСчетКонтрагента]", , , , , , , , , Контрагент.ОсновнойБанковскийСчет.Банк.КоррСчет, 2);
   Замена.Execute("[СЧЕТконтрагента]", , , , , , , , , Контрагент.ОсновнойБанковскийСчет.НомерСчета, 2);
   Замена.Execute("[ФИОКонтрагентаК]", , , , , , , , , ФамилияИнициалыФизЛица(ФИОк), 2);
   
   WD.selection.MoveDown(,12);
   WD.Paragraphs.Add();
   //Word.Selection.MoveRight(,);

   Табл= WD.Selection.Range;
   //Формируем заголовок:

   Табл.InsertAfter("№ п/п*Наименование*Кол-во*Цена,руб.*Сумма,руб.");
   Табл.InsertParagraphAfter();
   //сама таблица
   Если ТипЗнч(Документ) = Тип("ДокументСсылка.СчетНаОплатуПокупателю") тогда
   й = 1;
   Для Каждого строка из Документ.Товары Цикл
       Табл.InsertAfter(Строка(й) + "*" + строка.Номенклатура+"*"+Строка.Количество+"*"+Строка.Цена+"*"+строка.Сумма);
       Табл.InsertParagraphAfter();
       й = й + 1;
   КонецЦикла;
  КонецЕсли;
       
   
   // Вывод документа
   WD.Application.Visible = Истина;
   WD.Activate();

Выдается ошибка "{Справочник.а_ЗаключениеДоговоровИсходящий.Форма.ФормаЭлемента(635)}: Поле объекта не обнаружено (selection)
   WD.selection.MoveDown(,12);"

Подскажите что не так, делаю
4 Wobland
 
04.03.13
08:13
очевидно, в WD получаешь то, чего не ожидаешь
5 Tumakota
 
04.03.13
09:07
Что не кто не может подсказать почему ошибка:)
6 Tumakota
 
04.03.13
12:09
WD.Paragraphs.Add();
       Table = WD.Tables.Add(WD.Paragraphs.Last.Range(),1, 6,1,2);
       // Устанавливаем ширину колонок
       Table.Columns(1).PreferredWidth=10;
       Table.Columns(2).PreferredWidth=50;
       Table.Columns(3).PreferredWidth=10;
       Table.Columns(4).PreferredWidth=10;
       Table.Columns(5).PreferredWidth=10;
       Table.Columns(6).PreferredWidth=10;

       // Задаем заголовки колонок
       Row1=Table.Rows(1);
       Row1.Cells(1).Range.Text="№ п/п";
       Row1.Cells(2).Range.Text="Наименование";
       Row1.Cells(4).Range.Text="Кол-во";
       Row1.Cells(3).Range.Text="Ед. изм.";
       Row1.Cells(5).Range.Text="Цена,руб.";
       Row1.Cells(6).Range.Text="Сумма,руб.";

       // Построчно выводим содержимое таблицы Товары
       НомерСтроки = 1;
       Если ТипЗнч(Документ) = Тип("ДокументСсылка.СчетНаОплатуПокупателю") тогда
           Для каждого СтрокаТовары Из Документ.Товары Цикл
           Row=Table.Rows.Add();
           Row.Cells(1).Range.Text=СтрокаТовары.НомерСтроки;
           // Выравнивание по левому краю
           Row.Cells(1).Range.ParagraphFormat.Alignment = 1;
           // В качестве текста можно передать только значение "простого" формата
           // все агрегатные объекты, переданные как текст, что нормально для платформы 1с
           // вызовут исключение.
           Row.Cells(2).Range.Text=СтрокаТовары.Номенклатура.Наименование;
       //           +?(ЗначениеЗаполнено(СтрокаТовары.ХарактеристикаНоменклатуры),
       //           " ("+СтрокаТовары.ХарактеристикаНоменклатуры+")","");
           Row.Cells(4).Range.Text=Строка(СтрокаТовары.Количество);
           Row.Cells(4).Range.ParagraphFormat.Alignment = 1;
           Row.Cells(3).Range.Text=?(ЗначениеЗаполнено(СтрокаТовары.Номенклатура.БазоваяЕдиницаИзмерения)
                                 ,СтрокаТовары.Номенклатура.БазоваяЕдиницаИзмерения.Наименование,"-");
           Row.Cells(3).Range.ParagraphFormat.Alignment = 1;
           Row.Cells(5).Range.Text=Формат(СтрокаТовары.Цена,"ЧДЦ=2");
           Row.Cells(5).Range.ParagraphFormat.Alignment = 1;
           Row.Cells(6).Range.Text=Формат(СтрокаТовары.Сумма,"ЧДЦ=2");
           Row.Cells(6).Range.ParagraphFormat.Alignment = 1;
           НомерСтроки=НомерСтроки+1;
       КонецЦикла;
       КонецЕсли;

В принципе с создание таблицы разобрался, вот только теперь вопрос как мне вычислить определенную строку в Ворде после которой ее добавить? может кто нить знает
7 Wobland
 
04.03.13
12:14
а что с (3) было?
8 Tumakota
 
04.03.13
12:22
(7) Ну сделал по другому, в (3) он тоже подставлял либо в начало либо в конец, а мне надо после определенной строки, не подскажешь как это сделать?
9 Wobland
 
04.03.13
12:26
(8) неа. писать макрос, глядеть в код, думать - других методов не знаю
10 Tumakota
 
04.03.13
14:00
Всем спасибо за помощь разобрался, осталось только последнее, все выводится все выводится очень хорошо, только вот как вывести мне в конце таблицу строку с итогом ну и подсчитать например сумму
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший