Клиенту потребовалось печатать договора из заказа клиента в Управлении торговлей 11.4. Делать стандартный договор 1с не хотелось, так как замучишься потом править, то это нужно доработать, то это. Сделал вариант печати из WORD, чтобы сами правили. Два варианта печати из внешнего файла и из макета обработки. Макет двоичные данные. Так вот из макета через вэб интерфейс не печатает. Не может перегнать файл. Только из внешнего файла, сохраненного на компьютере пользователя. Плохо, что один и тот же макет, нужно размножить для каждого нуждающегося. Хорошо, что каждый нуждающийся сам может модернизировать себе макет.
В файле могут быть использованы следующие переменные
<ДокНомер> //Номер в формате только последние цифры без префиксов
<ДоговорНомер> //Полный номер документа
<ДокДата> //Дата в формате 20.05.2010
<ДоговорДата> //Дата в формате 20 мая 2010 г
<КлиентНаименование> //Наименование клиента
<КлиентНаименованиеПолное> //Полное наименование клиента
<АдресКлиента> //Адрес клиента
<ТелефонКлиента> //Контактный телефон клиента
<АдресЭПКлиента> //Адрес электронной почты клиента
<КонтрагентНаименование> //Наименование контрагента
<КонтрагентНаименованиеПолное> //Полное наименование контрагента
<ЮрАдресКонтрагента> //Юридический адрес контрагента
<ПочтовыйАдресКонтрагента> //Почтовый адрес контрагента
<КонтрагентИНН> //ИНН Контрагента
<КонтрагентКПП> //КПП Контрагента
<КонтрагентКодПоОКПО> //Код по ОКПО Контрагента
<ТелефонКонтрагента> //Телефон контрагента
<АдресЭПКонтрагента> //Адрес электронной почты контрагента
<ОрганизацияНаименование> //Наименование организации
<ОрганизацияНаименованиеПолное> //Полное наименование организации
<ОрганизацияНаименованиеСокращенное> //Сокращенное наименование организации
<ОрганизацияКПП> //КПП Организации
<ОрганизацияОГРН>
<ОрганизацияИНН>
<Город> //Город организации (из юр. Адреса)
<ЮрАдресОрганизации> //Юридический адрес организации
<ПочтовыйАдресОрганизации> //Почтовый адрес организации
<ТелефонОрганизации> //Телефон организации
<Соглашение>
<Сделка>
<Валюта> //Валюта договора
<СуммаДокумента> //Обшая сумма по заказу
<ГрафикОплаты> //График оплаты
<ЖелаемаяДатаОтгрузки> //Желаемая дата отгрузки
<Склад> //Склад
<ЦенаВключаетНДС> //Цена включает НДС
<Менеджер> //Менеджер
<НеОтгружатьЧастями> //Не отгружать частями
<ДатаСогласования> //Дата согласования
<Согласован> //Признак согласования
<ФормаОплаты> //Форма оплаты
<БанковскийСчет> //Банковский счет организации
<НомерСчетаОрганизации>// Номер банковского счета организации
<БИКБанкаОрганизации> //БИК банка организации
<НаименованиеБанкаОрганизации> //Наименование банка организации
<КоррСчетБанкаОрганизации> //Корр счет банка организации
<ГородБанкаОрганизации> //Город банка организации
<БанковскийСчетКонтрагента> //Банковский счет контрагента
<НомерСчетаКонтрагента> //Номер банковского счета контрагента
<НаименованиеБанкаКонтрагента> //Наименование банка контрагента
<БИКБанкаКонтрагента> //БИК банка контрагента
<КоррСчетБанкаКонтрагента> //Корр счет банка контрагента
<ГородБанкаКонтрагента> //Город банка контрагента
<СуммаАвансаДоОбеспечения> //Сумма аванса до обеспечения
<СуммаПредоплатыДоОтгрузки> //Сумма предоплаты до отгрузки
<ДатаОтгрузки> //Дата отгрузки
<АдресДоставки> //Адрес доставки
<НалогообложениеНДС>// Налогообложение НДС
<Комментарий> //Комментарий документа
<НомерПоДаннымКлиента> //Номер по данным клиента
<ДатаПоДаннымКлиента> //Дата по данным клиента
<Грузоотправитель> //Грузоотправитель
<Грузополучатель> //Грузополучатель
<БанковскийСчетГрузоотправителя> //Банковский счет грузоотправителя
<БанковскийСчетГрузополучателя>// Банковский счет грузополучателя
<Договор> //Договор документа
<Подразделение> //Подразделение
<Автор> //Автор
<ПорядокРасчетов>// Порядок расчетов
<СпособДоставки> //Способ доставки
<КонтактноеЛицо> //Контактное лицо
<КонтактноеЛицоРП> //Контактное лицо родительный падеж
<КонтактноеЛицоДП> //Контактное лицо дательный падеж
<Руководитель> //Руководитель организации
<РуководительНаОсновании> //Руководитель действующий на основании устава или доверенности
<РуководительРП> //Руководитель в родительном падеже
<РуководительДП> //Руководитель в дательном падеже
<РуководительФИО> //Руководитель Фамилия Инициалы
<ДолжностьРуководителя> //Должность руководителя
<ДолжностьРуководителяРП> //Должность руководителя в родительном падеже
<ДолжностьРуководителяДП> //Должность руководителя в дательном падеже
<ГлавныйБухгалтер> //Главный бухгалтер
<ПорядокОплаты> //Порядок оплаты
Переменные (слова в квадратных скобках) получены запросом к документу печати и загружены в структуру. Они добавляются в нужные места в документе WORD. Файл в формате *.docx.
&НаКлиенте
// Функция - заполняет шаблоны в файле шаблоне документа Word
//
Процедура ОбработатьФайлDocx(ПараметрыЗаполнения,ДокПечати) Экспорт
//КаталогДокументов();
ШаблоныКЗамене = ПолучитьШаблоныКЗамене(ДокПечати);
ФайлШаблона = ВывестиМакетНаСервере(ЗначениеЗаполнено(ПутьКФайлу));
Word = Новый COMОбъект("Word.Application");
ДокументВорд = Word.Documents.Add(ФайлШаблона);
ДокументВорд = Word.Application.Documents(1);
ДокументВорд.Activate();
КолСтрокТаб = 0;
Для каждого ПараметрЗ Из ШаблоныКЗамене Цикл
Если ПараметрЗ.Ключ = "КолСтрок" Тогда
КолСтрокТаб = Число(ПараметрЗ.Значение);
КонецЕсли;
Попытка
Замена = ДокументВорд.Content;
Замена.Find.Execute("<"+ПараметрЗ.Ключ+">",0,0,,,,,,,ПараметрЗ.Значение,2);
Исключение
Сообщить("Ошибка "+"<"+ПараметрЗ.Ключ+">"+ " Знач "+ПараметрЗ.Значение);
КонецПопытки;
КонецЦикла;
//Заполняем первую таблицу
Если ДокументВорд.Bookmarks.Exists("Таблица1") Тогда
//Выделяем обязательную закладку начала таблицы
ДокументВорд.Bookmarks("Таблица1").Select();
//Перемещаемся вниз, выделяем строку таблицы и копируем ее в буфер обмена
ДокументВорд.Application.Selection.MoveDown();
ДокументВорд.Application.Selection.SelectRow();
ДокументВорд.Application.Selection.Copy();
Сч = 0;
Пока Сч < КолСтрокТаб Цикл
Сч = Сч + 1;
Для каждого СтрокаТ Из ШаблоныКЗамене Цикл
Если СтрокаТ.Ключ = "Номенклатура"+Сч Тогда
Номенклатура = СтрокаТ.Значение;
КонецЕсли;
Если СтрокаТ.Ключ = "Количество"+Сч Тогда
Количество = СтрокаТ.Значение;
КонецЕсли;
Если СтрокаТ.Ключ = "Цена"+Сч Тогда
Цена = СтрокаТ.Значение;
КонецЕсли;
Если СтрокаТ.Ключ = "Сумма"+Сч Тогда
Сумма = СтрокаТ.Значение;
КонецЕсли;
КонецЦикла;
//Заменяем значения
ДокументВорд.Application.Selection.Find.Execute("<Знач1>" ,,,,,,,,,Сч,2);
ДокументВорд.Application.Selection.Find.Execute("<Знач2>" ,,,,,,,,,СокрЛП(Номенклатура),2);
//Последний параметр поиска пустой
ДокументВорд.Application.Selection.Find.Execute("<Знач3>" ,,,,,,,,,"Шт.",2);
ДокументВорд.Application.Selection.Find.Execute("<Знач4>" ,,,,,,,,,СокрЛП(Количество),2);
ДокументВорд.Application.Selection.Find.Execute("<Знач5>" ,,,,,,,,,СокрЛП(Цена),2);
ДокументВорд.Application.Selection.Find.Execute("<Знач6>" ,,,,,,,,,СокрЛП(Сумма),2);
//Перемещаемся вниз, вставляем из буфера обмена строку
ДокументВорд.Application.Selection.MoveDown();
ДокументВорд.Application.Selection.Paste();
//Перемещаемся вверх и выделяем строку для замены значений
ДокументВорд.Application.Selection.MoveUp();
ДокументВорд.Application.Selection.SelectRow();
EndDo;
//Вырезаем лишнюю строку
ДокументВорд.Application.Selection.Cut();
//Скрываем обязательную закладку начала таблицы
ДокументВорд.Bookmarks("Таблица1").Select();
ДокументВорд.Application.Selection.TypeText(" ");
КонецЕсли;
Word.Application.Visible = Истина;
Word.Application.WindowState = 2;
Word.Application.WindowState = 1;
Word.Activate();
КонецПроцедуры