Имя: Пароль:
1C
 
Заполнение документа Word данными из справочника?
0 Macleod
 
30.09.05
10:06
Вводные данные.
Есть несколько разных типовых договоров (разные условия оплаты, доставки и т.д.) в формате Word. Сейчас просто заполняют поля ________________ реальными данными в Ворде. Разумеется, встала задача заполнять эти данные автоматически из v8 (нетиповая). То есть в программе заполняются условия договора, ставятся соответствующие галочки и прочее...
Собссно вопрос. Как при нажатии кнопки "Печать" в форме договора вызвать нужный шаблон, заполнить необходимые поля в соответствии с данными контрагента и договора?
Облазил кучу форумов, ничего похожего не нашел.
1 Demiurg
 
30.09.05
10:13
Попытка
   MSWord = Новый COMОбъект("Word.Application");
Исключение
   Сообщить("Не удалось инициализировать Microsoft Word");
   Возврат;
КонецПопытки;

Запрос = Новый Запрос;

// Получить данные для формируемого прайс-листа.
Запрос.Текст = "ВЫБРАТЬ
|    ЦеныКомпанииСрезПоследних.ЕдиницаИзмерения.Наименование КАК ЕдиницаИзмерения,
|    ЦеныКомпанииСрезПоследних.Цена,
|    ЦеныКомпанииСрезПоследних.Номенклатура.Наименование КАК Номенклатура,
|    1 КАК Количество
|ИЗ
|    РегистрСведений.ЦеныКомпании.СрезПоследних(&Дата, ТипЦен = &ТипЦен) КАК ЦеныКомпанииСрезПоследних
|УПОРЯДОЧИТЬ ПО
|    Номенклатура
|ИТОГИ Количество(Количество) ПО
|    ОБЩИЕ";

Запрос.УстановитьПараметр("Дата", ТекущаяДата());
Запрос.УстановитьПараметр("ТипЦен", ТипЦен);

Результат = Запрос.Выполнить();

Попытка

   // Создать новый документ
   MSWord.Documents.Add();
   Документ = MSWord.ActiveDocument();

   // Добавить новый параграф в созданный документ.
   Документ.Paragraphs.Add();
   НомерПараграфа = Документ.Paragraphs.Count();
   Параграф = Документ.Paragraphs.Item(НомерПараграфа);

   // В созданный параграф вставить новый "диапазон"
   // и разместить в нем текст "Прайс-Лист".
   Параграф.Range.InsertAfter("Прайс-Лист");

   // Установить стиль параграфа "Заголовок 1" (он должен быть определен).
   Параграф.Range.Style="Заголовок 1";
   
   Документ.Paragraphs.Add();
   НомерПараграфа = Документ.Paragraphs.Count();
   Параграф = Документ.Paragraphs.Item(НомерПараграфа);
   Параграф.Range.InsertAfter("Сформирован на дату: " + Строка(ТекущаяДата()));
   Параграф.Range.Style = "Обычный";

   ВыборкаКоличества = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   ВыборкаКоличества.Следующий();
   КоличествоСтрок = ВыборкаКоличества.Количество;

   Документ.Paragraphs.Add();
   НомерПараграфа = Документ.Paragraphs.Count();
   Параграф=Документ.Paragraphs.Item(НомерПараграфа);

   // Вставить таблицу с количеством строк равным количеству записей
   // в выборке результата запроса и с тремя колонками
   Документ.Tables.Add(Параграф.Range, КоличествоСтрок, 3);

   // Получить таблицу как объект в отдельную переменную
   // учитывая тот факт, что таблица у нас единственная
   Таблица = Документ.Tables.Item(1);

   // Записать данные в ячейку таблицы строка №1, колонка №1
   Таблица.Cell(1,1).Range().InsertAfter("Номенклатура");

   // Установить цвет фона в ячейке
   Таблица.Cell(1,1).Shading.BackgroundPatternColor = 16776960;
   Таблица.Cell(1,2).Range().InsertAfter("Цена");
   Таблица.Cell(1,2).Shading.BackgroundPatternColor = 16776960;
   Таблица.Cell(1,3).Range().InsertAfter("Ед.Изм.");
   Таблица.Cell(1,3).Shading.BackgroundPatternColor = 16776960;

   НомерСтроки = 1;
   
   Выборка = ВыборкаКоличества.Выбрать();
   Пока Выборка.Следующий() Цикл НомерСтроки = НомерСтроки + 1;
       Таблица.Cell(НомерСтроки,1).Range().InsertAfter(Выборка.Номенклатура);
       Таблица.Cell(НомерСтроки,2).Range().InsertAfter(Строка(Выборка.Цена));
       Таблица.Cell(НомерСтроки,3).Range().InsertAfter(Выборка.ЕдиницаИзмерения);
   КонецЦикла;

   MSWord.Visible = Истина;
   MSWord.Activate();

Исключение

   // Если произойдет ошибка выводятся данные об ошибке и объект закрывается. Сообщить(ОписаниеОшибки());
   MSWord.Application.Quit();
КонецПопытки;
2 Груздь
 
30.09.05
10:16
(1) Ты (0) читал?
3 Рупор абсурда
 
30.09.05
10:18
(0) Ключ для поиска "FormFields" ...
4 Demiurg
 
30.09.05
10:20
(2) а тебе может весь VBA  выложить?
5 Груздь
 
30.09.05
10:26
(4) Выкладывать нужно то, что просят, а не что-нибудь ...
6 Macleod
 
30.09.05
10:27
Ни фига не понял...
Вот кусок файла ворда:
основании Устава, с одной стороны, и _____, именуемое в дальнейшем «Получатель», в лице __________________, действующ_ на основании ______, с другой стороны, в дальнейшем вместе или раздельно по тексту именуемые «Сторона» или «Стороны» заключили настоящий договор (далее по тексту именуемый «Договор») о нижеследующем:

Заменить в этом файле " и ____" на ООО "Рога и копыта", "лице" на "Семенов С.С.".
Ну и так далее в том же духе. Насколько знаете, в договорах в конце еще и данные контрагента заносятся.
7 Demiurg
 
30.09.05
10:36
ActiveDocument.FormFields("__бланполучателя___,").Result = "Получатель Вая"
8 Demiurg
 
30.09.05
10:39
поищи в хелпе ворда "Using the FormFields Collection"
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.