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

Скрипт для переноса данных из реквизитов в файл Word

Автор Matana331, 10 дек 2025, 15:31

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

Matana331

Добрый день. Имеется база 1С:Документооборот, где пользователи создают документ "Заявки" и заполняют табличную часть (наименование товара, кол-во, период, обоснование). Данные из этой табличной части переносятся автоматически в файл Word, который так же расположен в документообороте. В данный момент скрипт рабочий, но максимально неудобный, т.к я каждое значение ячейки нахожу по-отдельности и добавляю в файл. Есть ли вариант скрипта, где одним действием через цикл он добавлял значения в нужные для меня ячейки файла(именно в разные ячейки, а не в одной ячейки символами переноса)? Для лучшего понимаю прикрепляю скрин табличной части пользователя(рис.1), получившийся вариант в Word(рис.2), пару однотипных скриптов(рис.3, рис.4) и шаблон файла ворд,который заполняется значениями из скрипта (рис.5)

Максим75

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

когда-то было интересно посмотреть, как это работает.
короче говоря создал несколько закладок, запихнул вордовский документ в макет объекта 1С (приходной накладной), вот такой код, может поможет

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

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

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

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

ВыборкаШапка = МассивРезультатовЗапроса[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(ЧислоПрописью(ВыборкаШапка.СуммаДокумента));

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

//самое интересное - вывод табличных частей
Таблица = 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();


можете на просторах сети поискать как с вордом прямо из 1с работать, есть статьи с примерами

Теги:

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

Рейтинг@Mail.ru

Поиск