1с

1C 8.2 Внешняя печатная форма с шаблоном OpenOffice

Сегодня передо мной стала задача формирования договора контрагента в формате .doc для отправки контрагентам для внесения своих изменений. На данный момент договора хранятся в макете.

Инструментарий который прилагался 1С 8.3 на управляемых формах (для обычных форм также подходит) и предустановленный OpenOffice.

Первым делом подготавливаем шаблон. В данном случае стандартный шаблон договора, только в тех местах, где необходимо будет подставлять данные из 1С я заключал в символ %(можно взять любой другой). Например, %Дата%.

Когда макет готов загружаем его в 1С. Для этого создаем новый макет с типом двоичные данные и загружаем подготовленный шаблон.

Теперь самое интересное. Вызов макета и заполнение переменных, которые мы заключили в %.

//проверка наличия OpenOffice на ПК
	Попытка
		OpenOffice = Новый COMОбъект("com.sun.star.ServiceManager");
	Исключение
		Сообщить(ОписаниеОшибки() + "; Программа OpenOffice не установлена на данном компьютере!");
	КонецПопытки;
//Создаем таблицу значений для описания замены
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Параметр");
ТЗ.Колонки.Добавить("Значение");
//Добавляем записи в ТЗ для поиска и замены
Стр = ТЗ.Добавить();
Стр.Параметр = "%Номер%"; //будет заменен параметр Номер
Стр.Значение = ЗаказНаряд.Номер; //на что менять

Стр = ТЗ.Добавить();
Стр.Параметр = "%Дата%"; //будет заменен параметр Дата
Стр.Значение = ЗаказНаряд.Дата; //на что менять

Стр = ТЗ.Добавить();
Стр.Параметр = "%Авто%"; //будет заменен параметр Дата
Стр.Значение = ЗаказНаряд.Автомобиль.Наименование; //на что менять

Макет = ПолучитьМакет("ДоговорДОК");

временныйПуть = КаталогВременныхФайлов();
имяВременногоФайла = временныйПуть + "dog.doc";
Макет.Записать(имяВременногоФайла);

Args = Новый COMSafeArray("VT_DISPATCH", 1);

Param=OpenOffice.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
Param.Name = "AsTemplate";
Param.Value = True;
Args.SetValue(0,Param);

// Открыть OpenOffice
Desktop = OpenOffice.CreateInstance("com.sun.star.frame.Desktop");
ПутьКФайлуURL = ПреобразоватьВURL(имяВременногоФайла); //преобразивание пути к файлу к URL формату
Document = Desktop.LoadComponentFromURL(ПутьКФайлуURL, "_blank", 0, Args);

Replace = Document.CreateReplaceDescriptor();
//Меняем параметры в документе согласно ТЗ
Для Каждого Строка Из ТЗ Цикл
Replace.SearchString = Строка.Параметр;
Replace.ReplaceString = Строка.Значение;
Document.ReplaceAll(Replace);
КонецЦикла;

Вот и все. У меня все отлично работает.

Предыдущая

Работа с Типом Структура в 1С 8.2, 8.3

Следующая

Как убрать рекламу в Viber на компьютере?

  1. Айрат

    Может у кого-то и работает, но у меня ошибка....
    Не удалось сформировать внешнюю печатную форму:
    {ВнешняяОбработка.ДоговорСПокупателем.МодульОбъекта(94)}: Ошибка при установке значения атрибута контекста (ReplaceString): Произошла исключительная ситуация ([automation bridge] ): InterfaceOleWrapper_Impl::Invoke :
    [automation bridge]UnoConversionUtilities::variantToAny
    Cannot convert the value of vartype :"9" to the expected UNO type of type class: 12

  2. Евгений

    осталось найти текст процедуры
    ПутьКФайлуURL = ПреобразоватьВURL(имяВременногоФайла);
    потому что хрен знает что это такое и где его брать

    • admin

      Функция ПреобразоватьВURL(ПутьКФайлу)

      ПутьКФайлу = СтрЗаменить(ПутьКФайлу," ","%20");
      ПутьКФайлу = СтрЗаменить(ПутьКФайлу,"\","/");
      Возврат "file:/" + "/localhost/" + ПутьКФайлу;

      Конецфункции

Добавить комментарий для Евгений Отменить ответ

All rights reserved. 2015-2021.