Имя: Пароль:
1C
1С v8
Вывод макета двоичных данных word во внешней обработке
0 ivangrant
 
06.03.20
10:23
Вывожу двоичные данные в макет word.
Данные берутся из внешней обработки, из списка сотрудников.
Вопрос: как вывести по порядку данные нескольких сотрудников в макет? При этом при каждой обработке количество сотрудников может быть разные. То есть заранее не прописать количество пунктов в макете.
Часть макета постарался прикрепить)
[img]https://forum.infostart.ru/upload/forum/upload/bee/bee6833f5849d4f26a11fb8ddfc74ec8[/img]
1 Случайный прохожий
 
06.03.20
10:27
Через таблицу
2 ivangrant
 
06.03.20
10:49
ПРИКАЗЫВАЮ:

1.    C [ДатаНачала] по [ДатаОкончания] поручить [ЗамещающийСотрудникДолжностьдп] [ЗамещающийСотрудникФИОдп] исполнение обязанностей [ЗамещаемыйСотрудникДолжностьрп] в течение установленной продолжительности рабочего дня наряду с работой, определенной трудовым договором.
2.    C [ДатаНачала] по [ДатаОкончания] поручить [ЗамещающийСотрудникДолжностьдп] [ЗамещающийСотрудникФИОдп] исполнение обязанностей [ЗамещаемыйСотрудникДолжностьрп] в течение установленной продолжительности рабочего дня наряду с работой, определенной трудовым договором.

_______
Данные в word'е.
Т.о., если в обработке указан один сотрудник, то выводится только один пункт. Если неск. сотрудников, то пунктов по количеству человек.
(1) не совсем понял.
3 famnam
 
06.03.20
11:19
(2) через шаблон таблицы
пример кода
    Документ.Bookmarks("моя таблица").Select();
        Word.Selection.InsertRows(Выборка.Количество()-1);

        Word.Selection.MoveLeft(,1);
    Сч = 0;
        Пока Выборка.Следующий() Цикл
        Сч = Сч + 1;
            
               стрСчет = Строка(Сч);
        Табл = Word.Selection.Range;
            Табл.InsertAfter(стрСчет);
        Word.Selection.MoveRight(,СтрДлина(стрСчет)+1);

        стрНоменклатура = СокрЛП(Строка(Выборка.Номенклатура));
        Табл = Word.Selection.Range;
        Табл.InsertAfter(стрНоменклатура);
        Word.Selection.MoveRight(,СтрДлина(Строка(стрНоменклатура))+1);

        ...

            Word.Selection.MoveRight(,1);
            

КонецЦикла;
4 ivangrant
 
13.03.20
12:53
(3) ваш вариант не подходит. Т.к. в документе текст с разным шрифтом. И его нужно выводить, если сотрудников больше одного. Например, даты должны быть выделены жирным шрифтом.
5 ivangrant
 
17.03.20
13:52
Пока получилось вот так (ТекстСтрокиПриказа - это закладка в документе):
[CODE]                Для Каждого Параметр Из СтруктураПараметров.Значение Цикл
                    ТекстСтрокиПриказа = Строка(Параметр.Номер) + ". С [ДатаНачала] по [ДатаОкончания] поручить [ЗамещающийСотрудникДолжностьдп] [ЗамещающийСотрудникФИОдп] исполнение обязанностей [ЗамещаемыйСотрудникДолжностьрп] в течение установленной продолжительности рабочего дня наряду с работой, определеённой трудовым договором." + Символы.ПС;
                    СсылкаМакет.Bookmarks("ТекстСтрокиПриказа").Select();
                    СсылкаМакет.Application.Selection.TypeText(ТекстСтрокиПриказа);
                    СсылкаМакет.Bookmarks.Add("ДатаНачала", Word.Application.Selection.Range());
                    СсылкаМакет.Bookmarks("ДатаНачала").Select();
                    СсылкаМакет.Application.Selection.BoldRun();
                    СсылкаМакет.Application.Selection.TypeText(Параметр.ДатаНачала);
                    СсылкаМакет.Bookmarks.Add("ДатаОкончания", Word.Application.Selection.Range());
                    СсылкаМакет.Bookmarks("ДатаОкончания").Select();
                    СсылкаМакет.Application.Selection.BoldRun();
                    СсылкаМакет.Application.Selection.TypeText(Параметр.ДатаОкончания);
                    СсылкаМакет.Bookmarks.Add("ЗамещающийСотрудникДолжностьдп", Word.Application.Selection.Range());
                    СсылкаМакет.Bookmarks("ЗамещающийСотрудникДолжностьдп").Select();
                                        СсылкаМакет.Application.Selection.BoldRun();
                    СсылкаМакет.Application.Selection.TypeText(Параметр.ЗамещающийСотрудникДолжностьдп);
                    СсылкаМакет.Bookmarks.Add("ЗамещающийСотрудникФИОдп", Word.Application.Selection.Range());
                    СсылкаМакет.Bookmarks("ЗамещающийСотрудникФИОдп").Select();
                    СсылкаМакет.Application.Selection.BoldRun();
                    СсылкаМакет.Application.Selection.TypeText(Параметр.ЗамещающийСотрудникФИОдп);
                    СсылкаМакет.Bookmarks.Add("ЗамещаемыйСотрудникДолжностьрп", Word.Application.Selection.Range());
                    СсылкаМакет.Bookmarks("ЗамещаемыйСотрудникДолжностьрп").Select();
                                        СсылкаМакет.Application.Selection.BoldRun();
                    СсылкаМакет.Application.Selection.TypeText(Параметр.ЗамещаемыйСотрудникДолжностьрп);

                КонецЦикла;[/CODE]

Но при двух строках в ТЗ, выходит вот такая каша(20.03.2020 и Иванову Ивану Ивановичу - в документе выделено полужирным шрифтом):
_________________________
1. С [ДатаНачала] по [ДатаОкончания] поручить [ЗамещающийСотрудникДолжностьдп] [ЗамещающийСотрудникФИОдп] исполнение обязанностей [ЗамещаемыйСотрудникДолжностьрп] в течение установленной продолжительности рабочего дня наряду с работой, определеённой трудовым договором.
17.03.202020.03.2020инженеру Иванову Ивану Ивановичуначальника отдела
________________________
Что ещё поправить можно?
6 ivangrant
 
18.03.20
07:08
! [B]Решение[/B]
Данные помещаются в ТЗ и оттуда выводятся на документ. В документе добавлена только одна закладка ( ТекстСтрокиПриказа ). Остальное выводится программно. Можно конечно было и её выводить программно, но надо было в документе отметить необходимое место, откуда добавлять закладки.
Код:
                Для Каждого Параметр Из СтруктураПараметров.Значение Цикл
                    ТекстСтрокиПриказа = Строка(Параметр.Номер) + ". С ";
                    СсылкаМакет.Bookmarks("ТекстСтрокиПриказа").Select();
                    СсылкаМакет.Application.Selection.TypeText(ТекстСтрокиПриказа);
                    
                    СсылкаМакет.Bookmarks.Add("ДатаНачала", Word.Application.Selection.Range());
                    СсылкаМакет.Bookmarks("ДатаНачала").Select();
                    СсылкаМакет.Application.Selection.BoldRun();
                    СсылкаМакет.Application.Selection.TypeText(Параметр.ДатаНачала);
                    
                    СсылкаМакет.Bookmarks.Add("по", Word.Application.Selection.Range());
                    СсылкаМакет.Bookmarks("по").Select();
                    СсылкаМакет.Application.Selection.BoldRun();
                    СсылкаМакет.Application.Selection.TypeText(" по ");
                    
                    СсылкаМакет.Bookmarks.Add("ДатаОкончания", Word.Application.Selection.Range());
                    СсылкаМакет.Bookmarks("ДатаОкончания").Select();
                    СсылкаМакет.Application.Selection.BoldRun();
                    СсылкаМакет.Application.Selection.TypeText(Параметр.ДатаОкончания);
                    
                    СсылкаМакет.Bookmarks.Add("поручить", Word.Application.Selection.Range());
                    СсылкаМакет.Bookmarks("поручить").Select();
                    СсылкаМакет.Application.Selection.BoldRun();
                    СсылкаМакет.Application.Selection.TypeText(" поручить ");
                    
                    СсылкаМакет.Bookmarks.Add("ЗамещающийСотрудникДолжностьдп", Word.Application.Selection.Range());
                    СсылкаМакет.Bookmarks("ЗамещающийСотрудникДолжностьдп").Select();
                    СсылкаМакет.Application.Selection.TypeText(Параметр.ЗамещающийСотрудникДолжностьдп + " ");
                    
                    СсылкаМакет.Bookmarks.Add("ЗамещающийСотрудникФИОдп", Word.Application.Selection.Range());
                    СсылкаМакет.Bookmarks("ЗамещающийСотрудникФИОдп").Select();
                    СсылкаМакет.Application.Selection.BoldRun();
                    СсылкаМакет.Application.Selection.TypeText(Параметр.ЗамещающийСотрудникФИОдп);
                    
                    СсылкаМакет.Bookmarks.Add("исполнениеобязанностей", Word.Application.Selection.Range());
                    СсылкаМакет.Bookmarks("исполнениеобязанностей").Select();
                    СсылкаМакет.Application.Selection.BoldRun();
                    СсылкаМакет.Application.Selection.TypeText(" исполнение обязанностей ");
                    
                    СсылкаМакет.Bookmarks.Add("ЗамещаемыйСотрудникДолжностьрп", Word.Application.Selection.Range());
                    СсылкаМакет.Bookmarks("ЗамещаемыйСотрудникДолжностьрп").Select();
                    СсылкаМакет.Application.Selection.TypeText(Параметр.ЗамещаемыйСотрудникДолжностьрп + " в течение установленной продолжительности рабочего дня наряду с работой, определённой трудовым договором." + Символы.ПС);
                    
                    СсылкаМакет.Bookmarks.Add("ТекстСтрокиПриказа", Word.Application.Selection.Range());
                КонецЦикла;

_____

Итог:
1. С [B]18.03.2020[/B] по [B]20.03.2020[/B] поручить ведущему инженеру [B]Иванову Ивану Ивановичу[/B] исполнение обязанностей начальника отдела в течение установленной продолжительности рабочего дня наряду с работой, определённой трудовым договором.
2. С [B]25.03.2020[/B] по [B]27.03.2020[/B] поручить инженеру  [B]Петрову Петру Петровичу[/B] исполнение обязанностей начальника отдела в течение установленной продолжительности рабочего дня наряду с работой, определённой трудовым договором.

[U]Всем спасибо за подсказки[/U].
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.