Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 01:34

Внешняя печатная форма в формате Word (БСП)

Автор kssh24, 23 янв 2023, 17:30

0 Пользователей и 1 гость просматривают эту тему.

kssh24

На стажировке дали задачу:

Для документа Заказ клиента разработать внешнюю печатную форму. Предусмотреть стандартный механизм подключения внешних печатных форм для типовой конфигурации 1С. Печатная форма Договор купли-продажи формируется при нажатии на кнопку Печать и выбором пункта Договор купли-продажи (внешний). Обязательные поля для печатной формы договора: Организация, ФИОДиректораВРодПад, ФИОДиректораВИминПад, НаименованиеБанкаОрганизации, БИКБанкаОрганизации, РасчетныйСчетОрганизации, Контрагент, ФИОДиректораКонтрагентаРодПад, ФИОДиректораКонтрагентаИминПад.

Как это реализовать?

Как прописать процедуру печати?

Максим75

В Ворде взять сам файл пустого договора.
Затянуть его в макеты документа (создать новый макет, указать тип макета Active document, выбрать нужный файл). Появится новый макет, его и вызвать при нажатии на кнопку Печать и выбором чего-то там.

В самом макете реализовать через закладки именованные области, в которые потом выводить нужные данные.

когда-то изгалялся печатать приходную накладную в конфе для обучения самого себя, вот нашел, может поможет:
&НаСервере
Процедура ПечатьАктивНаСервере(СсылкаНаДокумент)

Макет = Документы.ПриходнаяНакладная.ПолучитьМакет("МакетАктив");

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПриходнаяНакладная.Номер КАК Номер,
| ПриходнаяНакладная.Дата КАК Дата,
| ПриходнаяНакладная.СуммаДокумента КАК СуммаДокумента,
| ПриходнаяНакладная.Поставщик.Наименование КАК Поставщик
|ИЗ
| Документ.ПриходнаяНакладная КАК ПриходнаяНакладная
|ГДЕ
| ПриходнаяНакладная.Ссылка = &СсылкаНаДокумент
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ПриходнаяНакладнаяТМЦ.НомерСтроки КАК НомерСтроки,
| ПриходнаяНакладнаяТМЦ.Товар.Наименование КАК Товар,
| ПриходнаяНакладнаяТМЦ.Колво КАК Колво,
| ПриходнаяНакладнаяТМЦ.Цена КАК Цена,
| ПриходнаяНакладнаяТМЦ.Сумма КАК Сумма
|ИЗ
| Документ.ПриходнаяНакладная.ТМЦ КАК ПриходнаяНакладнаяТМЦ
|ГДЕ
| ПриходнаяНакладнаяТМЦ.Ссылка = &СсылкаНаДокумент";

Запрос.УстановитьПараметр("СсылкаНаДокумент", СсылкаНаДокумент);

МассивРезультатовЗапроса = Запрос.ВыполнитьПакет();//выполняется пакет запросов
//один по шапке документа
//второй по табличной части
//получаем массив результатов выполнения запроса
//обращение к каждому результату как к элементы массива.

ВыборкаШапка = МассивРезультатовЗапроса[0].Выбрать();//выборка по первому элементу массива, т.е. по шапке документа
ВыборкаТовары = МассивРезультатовЗапроса[1].Выбрать();//выборка по второму элементу массива, т.е. по табличной части товары

ВыборкаШапка.Следующий();//в выборке всего 1 строка, поэтому на ней и позиционируемся

Word = Макет.Получить();

Word.Application.Visible = Ложь;

Doc = Word.Application.Documents(1);
Doc.Activate();

Word.Bookmarks("НомерНакладной").Select();
Word.Application.Selection.TypeText(ВыборкаШапка.Номер);
                                                               
Word.Bookmarks("ДатаНакладной").Select();
Word.Application.Selection.TypeText(Формат(ВыборкаШапка.Дата,"ДФ=dd.MM.yyyy"));

Word.Bookmarks("Поставщик").Select();
Word.Application.Selection.TypeText(ВыборкаШапка.Поставщик);

Word.Bookmarks("СуммаОбщая").Select();
Word.Application.Selection.TypeText(Формат(ВыборкаШапка.СуммаДокумента,"ЧДЦ=2"));

Word.Bookmarks("СуммаОбщаяПрописью").Select();
Word.Application.Selection.TypeText(ЧислоПрописью(ВыборкаШапка.СуммаДокумента,"L=uk_UA","гривня, гривні, гривень, ж, копійка, копійки, копійок, ж, 2"));

//ну и так далее по всем закладкам, которые могут быть в шаблоне макета

//самое интересное - вывод табличных частей
Таблица = Word.Tables.Item(1);//получаем первую таблицу в документе
//если несколько, то необходимо каждую получать таким образом
НомерСтроки=0;

Пока ВыборкаТовары.Следующий() цикл
НомерСтроки = НомерСтроки+1;
Row = Таблица.Rows.Add(Таблица.Rows(НомерСтроки+1));//начинаем добавлять со 2 строки, шапку пропускаем в таблице

Row.Cells(1).Range.Text = НомерСтроки; //Cells(i)-i колонка в текущей строке
Row.Cells(2).Range.Text = ВыборкаТовары.Товар;
Row.Cells(3).Range.Text = "шт";
Row.Cells(4).Range.Text = Формат(ВыборкаТовары.Цена,"ЧДЦ=2");
Row.Cells(5).Range.Text = ВыборкаТовары.Колво;
Row.Cells(6).Range.Text = Формат(ВыборкаТовары.Сумма,"ЧДЦ=2");

КОнецЦикла;
//Row = Таблица.Rows(НомерСтроки+1);
//Row.Cells(6).Range.Text = Формат(ВыборкаШапка.СуммаДокумента,"ЧДЦ=2");

Word.Bookmarks("СуммаОбщаяИтого").Select();
Word.Application.Selection.TypeText(Формат(ВыборкаШапка.СуммаДокумента,"ЧДЦ=2"));
Word.Application.Visible = Истина;

//Doc.Close();
//Word.Quit();



вот как раз в Word.Bookmarks("НомерНакладной").Select() НомерНакладной - это и есть закладка.
делается закладка так: когда уже есть макет, открыть его. Выделить текст, который должен быть чем-то заполнен из базы. В меню Вставка найти закладки (у меня под подменю ссылки есть выпадающее, там в выпадающем есть закладка). Дальше задаешь имя закладки и жмешь добавить. Таким образом по тексту договора надо создать закладки, к которым потом сможешь обратиться из кода программы и задать нужные значения.

Все чем мог - помог. У меня работало коряво, подвешивало 1С когда выводило печатную форму. Так и не разобрался почему, забил.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск