|
Выгрузка из 1С в Word через макет Active Document | ☑ | ||
|---|---|---|---|---|
|
0
Nixnix
18.06.22
✎
17:26
|
На форме документа есть серверная процедура которая формирует Word из заполненных реквизитов и табличной части. Все работает, но выводится только 1 строка из ТЧ.
|
|||
|
1
Nixnix
18.06.22
✎
17:27
|
&НаСервере
Процедура Серверная () Счет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Счет"); MSWord = Счет.Получить(); ДатаСчета = Формат(ТекущаяДата(), "ДЛФ=D"); Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТекущийДокумент", Объект.Ссылка); Запрос.Текст= "ВЫБРАТЬ | ПродажаТоваровПереченьНоменклатуры.НомерСтроки КАК НомерСтроки, | ПродажаТоваровПереченьНоменклатуры.Номенклатура КАК Номенклатура, | ПродажаТоваровПереченьНоменклатуры.НаборСвойств КАК НаборСвойств, | ПродажаТоваровПереченьНоменклатуры.Количество КАК Количество, | ПродажаТоваровПереченьНоменклатуры.Валюта КАК Валюта, | ПродажаТоваровПереченьНоменклатуры.Курс КАК Курс, | ПродажаТоваровПереченьНоменклатуры.Цена КАК Цена, | ПродажаТоваровПереченьНоменклатуры.Сумма КАК Сумма |ИЗ | Документ.ПродажаТоваров.ПереченьНоменклатуры КАК ПродажаТоваровПереченьНоменклатуры |ГДЕ | ПродажаТоваровПереченьНоменклатуры.Ссылка = &ТекущийДокумент"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Попытка Документ = MSWord.Application.Documents(1); Документ.Activate(); // Заменяемые слова Замена = Документ.Content.Find; Замена.Execute("<Дата>", Ложь, Истина, Ложь, , , Истина, , Ложь, ""+ Объект.Дата + ""); Замена = Документ.Content.Find; Замена.Execute("<НомерДокумента>", Ложь, Истина, Ложь, , , Истина, , Ложь, ""+ Объект.Номер + ""); Замена = Документ.Content.Find; Замена.Execute("<СкладДокумента>", Ложь, Истина, Ложь, , , Истина, , Ложь, ""+ Объект.Склад + ""); Замена = Документ.Content.Find; Замена.Execute("<Мастер>", Ложь, Истина, Ложь, , , Истина, , Ложь, ""+ Объект.Мастер + ""); Замена = Документ.Content.Find; Замена.Execute("<Клиент>", Ложь, Истина, Ложь, , , Истина, , Ложь, ""+ Объект.Клиент + ""); Пока Выборка.Следующий() Цикл //тут выберим что нужно нам //номер строки Если Выборка.НомерСтроки = Неопределено или Выборка.НомерСтроки = NULL тогда Сообщить("Не заполнен номер строки"); Иначе Замена = Документ.Content.Find; Замена.Execute("<НомерСтроки>", Ложь, Истина, Ложь, , , Истина, , Ложь,"" + Выборка.НомерСтроки+ ""); КонецЕсли; Если Выборка.НомерСтроки = Неопределено или Выборка.Номенклатура = NULL тогда Сообщить("Не заполнен номер строки"); Иначе Замена = Документ.Content.Find; Замена.Execute("<Номенклатура>", Ложь, Истина, Ложь, , , Истина, , Ложь,"" + Выборка.Номенклатура+ ""); КонецЕсли; Если Выборка.НаборСвойств = Неопределено или Выборка.НаборСвойств = NULL тогда Сообщить("Не заполнен номер строки"); Иначе Замена = Документ.Content.Find; Замена.Execute("<НаборСвойств>", Ложь, Истина, Ложь, , , Истина, , Ложь,"" + Выборка.НаборСвойств+ ""); КонецЕсли; Если Выборка.Количество = Неопределено или Выборка.Количество = NULL тогда Сообщить("Не заполнен номер строки"); Иначе Замена = Документ.Content.Find; Замена.Execute("<Количество>", Ложь, Истина, Ложь, , , Истина, , Ложь,"" + Выборка.Количество+ ""); КонецЕсли; Если Выборка.Валюта = Неопределено или Выборка.Валюта = NULL тогда Сообщить("Не заполнен номер строки"); Иначе Замена = Документ.Content.Find; Замена.Execute("<Валюта>", Ложь, Истина, Ложь, , , Истина, , Ложь,"" + Выборка.Валюта+ ""); КонецЕсли; Если Выборка.Курс = Неопределено или Выборка.Курс = NULL тогда Сообщить("Не заполнен номер строки"); Иначе Замена = Документ.Content.Find; Замена.Execute("<Курс>", Ложь, Истина, Ложь, , , Истина, , Ложь,"" + Выборка.Курс+ ""); КонецЕсли; Если Выборка.Цена = Неопределено или Выборка.Цена = NULL тогда Сообщить("Не заполнен номер строки"); Иначе Замена = Документ.Content.Find; Замена.Execute("<Цена>", Ложь, Истина, Ложь, , , Истина, , Ложь,"" + Выборка.Цена+ ""); КонецЕсли; Если Выборка.Сумма = Неопределено или Выборка.Сумма = NULL тогда Сообщить("Не заполнен номер строки"); Иначе Замена = Документ.Content.Find; Замена.Execute("<Сумма>", Ложь, Истина, Ложь, , , Истина, , Ложь,"" + Выборка.Сумма+ ""); КонецЕсли; КонецЦикла; Word = MSWord.Application; Word.Visible = Истина; Исключение Сообщение= Новый СообщениеПользователю(); Сообщение.Текст = ОписаниеОшибки(); Сообщение.Сообщить(); MSWord.Application.Quit(); КонецПопытки; КонецПроцедуры |
|||
|
2
Мимохожий Однако
18.06.22
✎
21:28
|
Сделай макрос руками с добавлением строк в таблицу и перенеси фрагмент кода в свою процедуру.
|
| Форум | Правила | Описание | Секции | Поиск |