Документооборот 8: Расширяем возможности автозаполнения шаблонов документов в 1С или XML-инъекция

17.02.14

Задачи пользователя - Адаптация типовых решений

Довелось недавно решать интересную задачу в которой необходимо было добавить внутреннему документу табличную часть и заполнять на основании такого внутреннего документа word'овский документ по шаблону автозаполнения. Конфигурацию в данном примере модифицировать не потребуется.
Кому интересно - прошу под кат.
Посмотрев на справку и примеры я пришел к выводу, что прямым путем такую задачу не решить. Пойдем в обход.
Анализ кода в конфигураторе показал мне такое место:
 
Модуль АвтозаполнениеШаблоновФайловКлиентСервер строка 743
 
Если Найти(СтрЗамены, Символы.ПС) Тогда
        СтрЗамены = СтрЗаменить(СтрЗамены, Символы.ПС, "");
        Если СтрЗамены <> ЧтениеXML.Значение Тогда
                ЗаписьXML.ЗаписатьБезОбработки(СтрЗамены);
        Иначе
                ЗаписьXML.ЗаписатьТекст(СтрЗамены);
        КонецЕсли;
Иначе
        ЗаписьXML.ЗаписатьТекст(СтрЗамены);
КонецЕсли; 
 
Вывод очень простой - если мы выполним условие - наличие переноса строки - то получим возможность записать то что нам нужно.
Данные код работает только при замене текста в документе, поэтому создаем в нашем документе текст для замены, например, РазделТаблицыТарифнойСетки.

Я не рекомендую использовать символы @#$ и т.д. в тексте замены, так как очень вероятна ситуация когда в структуре документа вы получите три отдельных текста (или "пробега"):

<w:t>@</w:t><w:t>Таблица</w:t><w:t>@</w:t>

и 1С вам будет упорно сообщать, что "@Таблица@" отсутствует в документе.

 
Итак приступим к формированию нашего РезультатаОбработки:
// Закроем открытые теги
РезультатОбработки = "</w:t></w:r></w:p>";
// Заголовок таблицы
РезультатОбработки = РезультатОбработки +
"<w:tbl>
 | <w:tblPr>
 |   <w:tblW w:w=""5000"" w:type=""pct""/> // Ширина таблицы во весь лист
 |   <w:tblBorders> // Границы
 |     <w:top w:val=""single"" w:sz=""4"" w:space=""0"" w:color=""auto""/>
 |     <w:left w:val=""single"" w:sz=""4"" w:space=""0"" w:color=""auto""/>
 |     <w:bottom w:val=""single"" w:sz=""4"" w:space=""0"" w:color=""auto""/>
 |     <w:right w:val=""single"" w:sz=""4"" w:space=""0"" w:color=""auto""/>
 |     <w:insideH w:val=""single"" w:sz=""4"" w:space=""0"" w:color=""auto""/>
 |     <w:insideV w:val=""single"" w:sz=""4"" w:space=""0"" w:color=""auto""/>
 |   </w:tblBorders>
 | </w:tblPr>
 | <w:tblGrid>
 |   <w:gridCol w:w=""10296""/>
 | </w:tblGrid>
 | <w:tr> // Первая строка - она же заголовок таблицы
 |   <w:tc> // Первая колонка
 |     <w:tcPr> // Параметры колонки
 |       <w:tcW w:w=""7"" w:type=""pct""/> // Ширина в процентах
 |       <w:vAlign w:val=""center"" /> // Вертикальное выравнивание
 |     </w:tcPr>
 |     <w:p> // Параграф
 |      <w:pPr> // Параметры параграфа
 |              <w:jc w:val=""center""/> // Горизонтальное выравнивание
 |      </w:pPr>
 |      <w:r> // "Пробег" 
 |          <w:rPr> // Параметры "пробега"
 |              <w:sz w:val=""24""/> // Размер шрифта в 0.5 пункта
 |              <w:b w:val=""1"" /> // Полужирный
 |          </w:rPr>
 |          <w:t>№ п/п</w:t> // Собственно сам текст
 |      </w:r>
 |  </w:p>
 |   </w:tc>
 |   <w:tc>
 |     <w:tcPr>
 |       <w:tcW w:w=""32"" w:type=""pct""/>
 |       <w:vAlign w:val=""center"" />
 |     </w:tcPr>
 |     <w:p>
 |      <w:pPr>
 |              <w:jc w:val=""center""/>
 |      </w:pPr>
 |      <w:r>
 |          <w:rPr>
 |              <w:sz w:val=""24""/>
 |              <w:b w:val=""1"" />
 |          </w:rPr>
 |          <w:t>Станция отправления</w:t>
 |      </w:r>
 |  </w:p>
 |   </w:tc>
 |   <w:tc>
 |     <w:tcPr>
 |       <w:tcW w:w=""32"" w:type=""pct""/>
 |       <w:vAlign w:val=""center"" />
 |     </w:tcPr>
 |     <w:p>
 |      <w:pPr>
 |              <w:jc w:val=""center""/>
 |      </w:pPr>
 |      <w:r>
 |          <w:rPr>
 |              <w:sz w:val=""24""/>
 |              <w:b w:val=""1"" />
 |          </w:rPr>
 |          <w:t>Станция назначения</w:t>
 |      </w:r>
 |  </w:p>
 |   </w:tc>
 |   <w:tc>
 |     <w:tcPr>
 |       <w:tcW w:w=""29"" w:type=""pct""/>
 |       <w:vAlign w:val=""center"" />
 |     </w:tcPr>
 |     <w:p>
 |      <w:pPr>
 |              <w:jc w:val=""center""/>
 |      </w:pPr>
 |      <w:r>
 |          <w:rPr>
 |              <w:sz w:val=""24""/>
 |              <w:b w:val=""1"" />
 |          </w:rPr>
 |          <w:t>Стоимость услуг (руб/тн без учета НДС)</w:t>
 |      </w:r>
 |  </w:p>
 |   </w:tc>
 | </w:tr>"; 
 
 
Далее нам понадобится шаблон строки:
ШаблонСтроки = "
 | <w:tr>
 |   <w:tc>
 |     <w:tcPr>
 |       <w:tcW w:w=""7"" w:type=""pct""/>
 |       <w:vAlign w:val=""center"" />
 |     </w:tcPr>
 |     <w:p>
 |      <w:pPr>
 |              <w:jc w:val=""center""/>
 |      </w:pPr>
 |      <w:r>
 |          <w:rPr>
 |              <w:sz w:val=""24""/>
 |          </w:rPr>
 |          <w:t>%1</w:t>
 |      </w:r>
 |  </w:p>
 |   </w:tc>
 |   <w:tc>
 |     <w:tcPr>
 |       <w:tcW w:w=""32"" w:type=""pct""/>
 |       <w:vAlign w:val=""center"" />
 |     </w:tcPr>
 |     <w:p>
 |      <w:pPr>
 |              <w:jc w:val=""center""/>
 |      </w:pPr>
 |      <w:r>
 |          <w:rPr>
 |              <w:sz w:val=""24""/>
 |          </w:rPr>
 |          <w:t>%2</w:t>
 |      </w:r>
 |  </w:p>
 |   </w:tc>
 |   <w:tc>
 |     <w:tcPr>
 |       <w:tcW w:w=""32"" w:type=""pct""/>
 |       <w:vAlign w:val=""center"" />
 |     </w:tcPr>
 |     <w:p>
 |      <w:pPr>
 |              <w:jc w:val=""center""/>
 |      </w:pPr>
 |      <w:r>
 |          <w:rPr>
 |              <w:sz w:val=""24""/>
 |          </w:rPr>
 |          <w:t>%3</w:t>
 |      </w:r>
 |  </w:p>
 |   </w:tc>
 |   <w:tc>
 |     <w:tcPr>
 |       <w:tcW w:w=""29"" w:type=""pct""/>
 |       <w:vAlign w:val=""center"" />
 |     </w:tcPr>
 |     <w:p>
 |      <w:pPr>
 |              <w:jc w:val=""center""/>
 |      </w:pPr>
 |      <w:r>
 |          <w:rPr>
 |              <w:sz w:val=""24""/>
 |          </w:rPr>
 |          <w:t>%4</w:t>
 |      </w:r>
 |  </w:p>
 |   </w:tc>
 | </w:tr>"; 
 
Здесь, думаю, вам все уже понятно.
Собственно, строки:

// Вывод строк
Для Каждого СтрокаТЧ Из ФактическийВладелецФайла.ТарифнаяСетка Цикл

    РезультатОбработки = РезультатОбработки
        + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                ШаблонСтроки,
                СтрокаТЧ.НомерСтроки,
                СтрокаТЧ.СтанцияОтправления,
                СтрокаТЧ.СтанцияНазначения,
                Формат(СтрокаТЧ.Стоимость, "ЧДЦ=2"));

КонецЦикла;
// Закроем таблицу
РезультатОбработки = РезультатОбработки + " </w:tbl>"";
// Откроем теги, т.к. в структуре документа они закрываются сразу за вставкой.
РезультатОбработки = РезультатОбработки + "<w:p><w:r><w:t>";
 
Теперь мы уберем переносы строк внутри, которые мы использовали для удобства, и добавим в начало и конец для того, чтобы выполнился тот код, который позволит нам сформировать таблицу
 
// Добавим переносы строки для записи в xml без обработки
РезультатОбработки = Символы.ПС + СтрЗаменить(РезультатОбработки, Символы.ПС, "") + Символы.ПС;
 
Пример, где еще может пригодиться - например, формирование реестра связанных документов.

Необходимые условия:
Шаблон в формате *.docx 

Используемые материалы:

Документооборот шаблоны автозаполнения

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4453    9    4    

18

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

Логистика, склад и ТМЦ Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    2957    4    0    

19

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1289    dimanich70    6    

13

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

Адаптация типовых решений Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Доработка типового отчета "Связанные документы" позволяет просто и быстро расширять состав объектов для построения структуры подчиненности документов, используя объекты основной конфигурации и любых расширений.

1 стартмани

27.10.2023    1996    13    avmartynov    10    

43

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2077    21    progmaster    7    

3
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Yashazz 4709 19.02.14 11:37 Сейчас в теме
Класс! Отличная идея. Кстати, навело на мысль, что в любые строковые реквизиты неограниченной длины можно пихать свои xml, в т.ч. содержащие многострочные данные, лопатить их сериализатором и иметь хранение "табличных" данных.
2. Aleksandr_K 44 20.02.14 19:29 Сейчас в теме
(1) Yashazz, или в ХранилищеЗначения, например в регистре хранящем настройки отчетов и обработок в УТ, КА и УПП.
Если интересно, могу написать статью об использовании данного регистра для хранения данных внешних обработок и отчетов в БД.
3. ivdic 31 25.02.14 10:45 Сейчас в теме
неплохо бы еще вставлять в документ в нужное место печать и клеше (подпись руководителя)
5. Aleksandr_K 44 26.02.14 20:41 Сейчас в теме
(3) Без доработки типовой тут уже не обойдется. А почему не хотите сделать это изначально в шаблоне для автозаполнения?
4. soap 65 25.02.14 12:16 Сейчас в теме
Хороший подход ! Однозначно+
6. karapuzzzz 63 26.06.14 10:34 Сейчас в теме
У меня, конечно, не без доработок, но вот что реализовано:
1. Возможность вставлять таблицу в поле (а не заменять текст), что дает возможность перезаполнять документ сколь угодно раз
2. Таблицу можно создавать форматированной, что придает юзабилити. По сути создается табличный документ, который можно форматировать или программно или брать готовый шаблон из макета.
3. Вставлять картинку. При этом, картинка записывается в базе отдельным файлом.
4. Вставлять текст одного документа в другой.

Для реализации 3-4 пункта пришлось пойти на костыль: картинка или содержимое вставляется не непосредственно в поле документа, а рядом. При этом вокруг вставленного объекта создаются дополнительные поля на подобии открывающего и закрывающего тэга. Сделано это из-за ограничения поля, но для возможности перезаполнять документ неоднократно.

Сейчас я сильно занят, но когда более-менее освобожусь - обязательно напишу статью на эту тему.
8. Atori-kun 04.12.14 05:47 Сейчас в теме
(6) karapuzzzz, Время не появилось свободное?
Horsy; Hood; +2 Ответить
44. Horsy 04.03.21 12:26 Сейчас в теме
(6) Уважаемый karapuzzzz, может, вы уже написали статью?
50. karapuzzzz 63 17.03.21 01:28 Сейчас в теме
(44) Нет, и не напишу. Доступ к конфигурации был потерян давным давно.
7. Atori-kun 04.12.14 05:44 Сейчас в теме
ФактическийВладелецФайла - Это ссылка на владельца файла, а ТарифнаяСетка - ? Это не дополнительный реквизит, значит все равно пришлось в конфигуратор лезть?
9. Aleksandr_K 44 04.12.14 12:39 Сейчас в теме
(7) В конфигуратор лезть в любом случае придется.
ФактическийВладелецФайла - Ссылка на элемент справочника для которого формируется файл.
Тарифная сетка - не типовая табличная часть объекта
10. hvitaly 03.05.16 11:42 Сейчас в теме
Спасибо! Это то простое решение, которое я ищу последние полгода :)
Теперь можно написать функцию, в которую передавать заголовок и таблицу значений, чтобы она за кадром формировала структуру таблицы (чтобы не писать длинный текст каждый раз). Также, разобравшись в тегах Ворда можно в функцию передавать и некоторые параметры оформления.
Еще раз спасибо!
Aleksandr_K; +1 Ответить
11. SidorovNN 05.05.16 12:46 Сейчас в теме
Добрый день!
Подскажите пожалуйста. Тег "</w:t></w:r></w:p>" формирует абзац с пустой строкой? Столкнулся со следующей проблемой. Если данные файла обновлять по кнопке "Заполнить файл данными документа", то текст, вставленный через теги, постоянно смещается на одну строку вниз.
12. Aleksandr_K 44 05.05.16 16:43 Сейчас в теме
(11) SidorovNN, данные теги закрывают текущий параграф, а добавляемые в конце - открывают новый параграф. Если стилями предусмотрен отступ - будет выглядеть как пустая строка.
Чтобы сказать что-то более детальное - хотелось бы увидеть структуру документа в месте вставки.
13. SidorovNN 05.05.16 16:56 Сейчас в теме
(12) Aleksandr_K, во вложении файл. С помощью тегов заполняю поле "Получатель". При заполнении сначала вставляется пустая строка, потом сам текст. Если данные файла обновлять данными документа, то текст смещается вниз.
Прикрепленные файлы:
Бланк письма.docx
14. SidorovNN 12.05.16 11:35 Сейчас в теме
(12) Aleksandr_K, Не удалось выяснить причину?
15. Hateful72 5 07.11.16 15:16 Сейчас в теме
не актуально с релиза 2.1 где то. Общие модули автоподстановки немного переделали
djd; Aleksandr_K; +2 Ответить
16. crushos 10 31.07.17 11:12 Сейчас в теме
(15) 2.1.10.2
Все работает.

Может кому надо, реализация таблицы с "горизонтальными столбцами".

РезультатОбработки = "";
КоличествоСпутников = 0;
Массив = Новый Массив;
СтрокаВыводаWORD = "</w:t>";
СтрокаВыводаWORD =СтрокаВыводаWORD+"</w:r>";
СтрокаВыводаWORD =СтрокаВыводаWORD+"</w:p>";

СтрокаВыводаWORD =СтрокаВыводаWORD+ "    <w:tbl>
|      <w:tblPr>
|        <w:tblW w:w=""5400"" w:type=""dxa"" />
|        <w:jc w:val=""center"" />
|        <w:tblCellMar>
|          <w:left w:w=""0"" w:type=""dxa"" />
|          <w:right w:w=""0"" w:type=""dxa"" />
|        </w:tblCellMar>
|        <w:tblLook w:val=""04A0"" w:firstRow=""1"" w:lastRow=""0"" w:firstColumn=""1"" w:lastColumn=""0"" w:noHBand=""0"" w:noVBand=""1"" />
|      </w:tblPr>";
СтрокаВыводаWORD =СтрокаВыводаWORD+ "
|   <w:tblGrid>
| <w:gridCol w:w=""2700"" />";

Массив.Добавить("Наименование");	
Для Каждого СтрокаТЧ Из Файл.ВладелецФайла.Товары Цикл
	Если СокрЛП(СтрокаТЧ.Номенклатура.Родитель) = "Спутники" Тогда
		КоличествоСпутников = КоличествоСпутников+1;
		СтрокаВыводаWORD =СтрокаВыводаWORD+ "
		|        <w:gridCol w:w=""2700"" />";
		Массив.Добавить(СтрокаТЧ.Номенклатура.Наименование);
		ТоварПоискДопРеквизитов = СтрокаТЧ.Номенклатура;
	КонецЕсли;
КонецЦикла;
СтрокаВыводаWORD =СтрокаВыводаWORD+ "
|      </w:tblGrid>";

Если КоличествоСпутников>0 Тогда
	СтрокаВыводаWORD = СтрокаВыводаWORD+ "
	|	<w:tr w:rsidR=""00FF1197"" w:rsidRPr=""002716E2"" w:rsidTr=""00064027"">
	|        <w:trPr>
	|          <w:trHeight w:val=""61"" />
	|          <w:jc w:val=""center"" />
	|        </w:trPr>";
	Для Индекс = 0 По Массив.Количество() - 1 Цикл
		СтрокаВыводаWORD= СтрокаВыводаWORD+ "
		|          <w:tc>
		|          <w:tcPr>
		|            <w:tcW w:w=""2700"" w:type=""dxa"" />
		|            <w:tcBorders>
		|              <w:top w:val=""single"" w:sz=""8"" w:space=""0"" w:color=""auto"" />
		|              <w:left w:val=""single"" w:sz=""8"" w:space=""0"" w:color=""auto"" />
		|              <w:bottom w:val=""single"" w:sz=""8"" w:space=""0"" w:color=""auto"" />
		|              <w:right w:val=""single"" w:sz=""8"" w:space=""0"" w:color=""000000"" />
		|            </w:tcBorders>
		|            <w:noWrap />
		|            <w:tcMar>
		|              <w:top w:w=""0"" w:type=""dxa"" />
		|              <w:left w:w=""108"" w:type=""dxa"" />
		|              <w:bottom w:w=""0"" w:type=""dxa"" />
		|              <w:right w:w=""108"" w:type=""dxa"" />
		|            </w:tcMar>
		|            <w:vAlign w:val=""center"" />
		|            <w:hideMark />
		|          </w:tcPr>
		|          <w:p w:rsidR=""00FF1197"" w:rsidRPr=""002716E2"" w:rsidRDefault=""00FF1197"" w:rsidP=""0007101D"">
		|            <w:pPr>
		|              <w:rPr>
		|                <w:sz w:val=""20"" />
		|                <w:szCs w:val=""20"" />
		|              </w:rPr>
		|            </w:pPr>
		|            <w:r w:rsidRPr=""002716E2"">
		|              <w:rPr>
		|                <w:sz w:val=""20"" />
		|                <w:szCs w:val=""20"" />
		|              </w:rPr>
		|              <w:t>"+Массив[Индекс]+"</w:t>
		|            </w:r>
		|          </w:p>
		|        </w:tc>";
	КонецЦикла;
	СтрокаВыводаWORD = СтрокаВыводаWORD+ "
	|	</w:tr>";
	
	Для Каждого СтрокаДопР Из ТоварПоискДопРеквизитов.ДополнительныеРеквизиты Цикл
		Массив.Очистить();
		тмп = СокрЛП(СтрокаДопР.Свойство);
		Массив.Добавить(лев(тмп,Найти(тмп," (")));
		
		Для Каждого Стр из Файл.ВладелецФайла.Товары Цикл
			Если СокрЛП(Стр.Номенклатура.Родитель) = "Спутники" Тогда			
				Для Каждого ДопРеквизит Из Стр.Номенклатура.ДополнительныеРеквизиты Цикл
					Если (Строка(ДопРеквизит.Свойство) = СокрЛП(СтрокаДопР.Свойство)) 
						Или (ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДопРеквизит.Свойство, "Заголовок") = СокрЛП(СтрокаДопР.Свойство)) Тогда
						Массив.Добавить(СокрЛП(ДопРеквизит.Значение));
					КонецЕсли;
				КонецЦикла;
			КонецЕсли;
		КонецЦикла;
		Если Массив.Количество() >1 Тогда		
			СтрокаВыводаWORD = СтрокаВыводаWORD+ "
			|	<w:tr w:rsidR=""00FF1197"" w:rsidRPr=""002716E2"" w:rsidTr=""00064027"">
			|        <w:trPr>
			|          <w:trHeight w:val=""61"" />
			|          <w:jc w:val=""center"" />
			|        </w:trPr>";		
			Для Индекс = 0 По Массив.Количество() - 1 Цикл
				СтрокаВыводаWORD= СтрокаВыводаWORD+ "
				|          <w:tc>
				|          <w:tcPr>
				|            <w:tcW w:w=""2700"" w:type=""dxa"" />
				|            <w:tcBorders>
				|              <w:top w:val=""single"" w:sz=""8"" w:space=""0"" w:color=""auto"" />
				|              <w:left w:val=""single"" w:sz=""8"" w:space=""0"" w:color=""auto"" />
				|              <w:bottom w:val=""single"" w:sz=""8"" w:space=""0"" w:color=""auto"" />
				|              <w:right w:val=""single"" w:sz=""8"" w:space=""0"" w:color=""000000"" />
				|            </w:tcBorders>
				|            <w:noWrap />
				|            <w:tcMar>
				|              <w:top w:w=""0"" w:type=""dxa"" />
				|              <w:left w:w=""108"" w:type=""dxa"" />
				|              <w:bottom w:w=""0"" w:type=""dxa"" />
				|              <w:right w:w=""108"" w:type=""dxa"" />
				|            </w:tcMar>
				|            <w:vAlign w:val=""center"" />
				|            <w:hideMark />
				|          </w:tcPr>
				|          <w:p w:rsidR=""00FF1197"" w:rsidRPr=""002716E2"" w:rsidRDefault=""00FF1197"" w:rsidP=""0007101D"">
				|            <w:pPr>
				|              <w:rPr>
				|                <w:sz w:val=""20"" />
				|                <w:szCs w:val=""20"" />
				|              </w:rPr>
				|            </w:pPr>
				|            <w:r w:rsidRPr=""002716E2"">
				|              <w:rPr>
				|                <w:sz w:val=""20"" />
				|                <w:szCs w:val=""20"" />
				|              </w:rPr>
				|              <w:t>"+Массив[Индекс]+"</w:t>
				|            </w:r>
				|          </w:p>
				|        </w:tc>";		
			КонецЦикла;		
			СтрокаВыводаWORD = СтрокаВыводаWORD+ "
			|	</w:tr>";
			
		КонецЕсли;
	КонецЦикла;	
КонецЕсли;
СтрокаВыводаWORD = СтрокаВыводаWORD+ "
|	</w:tbl>	";
СтрокаВыводаWORD = СтрокаВыводаWORD + "<w:p>";
СтрокаВыводаWORD = СтрокаВыводаWORD + "<w:r>";
СтрокаВыводаWORD = СтрокаВыводаWORD + "<w:t>";

РезультатОбработки = Символы.ПС + СтрЗаменить(СтрокаВыводаWORD, Символы.ПС, "") + Символы.ПС;
Показать
17. Zanuda1977 25.01.18 11:21 Сейчас в теме
2.1.11.5 к сожалению не работает.
24. Оберон 16 29.05.19 11:31 Сейчас в теме
(17) привет, попоробовал переделать под себя - работает. см (21)
18. podkova 07.03.18 21:53 Сейчас в теме
подскажите как решили вопрос?
19. awe007 20.05.19 10:31 Сейчас в теме
Очень актуальный вопрос. Коллеги, подскажите, есть ли какие то рабочие способы вставки табличной части в шаблон на актуальной версии ДО КОРП 2.1.12.2 ?
23. Оберон 16 29.05.19 11:31 Сейчас в теме
25. Оберон 16 29.05.19 11:32 Сейчас в теме
(19) получилось сделать свой вариант, см. (21)
20. Оберон 16 28.05.19 18:06 Сейчас в теме
вставил лист согласования -- полет нормальный
21. Оберон 16 28.05.19 18:48 Сейчас в теме
//
Функция ПолучитьСогласовантовПоБПвТЗ(тСсылка) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Предмет", тСсылка);
	Запрос.УстановитьПараметр("ТочкаМаршрута", БизнесПроцессы.Согласование.ТочкиМаршрута.Согласовать);
	
#Область Запрос
	Запрос.Текст =
	"ВЫБРАТЬ
	|	СогласованиеПредметы.Ссылка КАК Ссылка,
	|	СогласованиеПредметы.Ссылка.Завершен КАК Завершен,
	|	СогласованиеПредметы.Ссылка.Стартован КАК Стартован,
	|	СогласованиеПредметы.Ссылка.ДатаЗавершения КАК ДатаЗавершения
	|ПОМЕСТИТЬ Т1
	|ИЗ
	|	БизнесПроцесс.Согласование.Предметы КАК СогласованиеПредметы
	|ГДЕ
	|	СогласованиеПредметы.Предмет = &Предмет
	|	И СогласованиеПредметы.Ссылка.Стартован
	|	И СогласованиеПредметы.Ссылка.ПричинаПрерывания = """"
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ЗадачаИсполнителя.Дата КАК Дата,
	|	ЗадачаИсполнителя.Исполнитель КАК Исполнитель,
	|	ЗадачаИсполнителя.РольИсполнителя КАК РольИсполнителя,
	|	ЗадачаИсполнителя.ТочкаМаршрута КАК ТочкаМаршрута,
	|	ЗадачаИсполнителя.Описание КАК Описание,
	|	ЗадачаИсполнителя.ТочкаМаршрута.Порядок КАК ТочкаМаршрутаПорядок,
	|	ЗадачаИсполнителя.ТочкаМаршрута.Представление КАК ТочкаМаршрутаПредставление,
	|	ЗадачаИсполнителя.ТочкаМаршрута.Ссылка КАК ТочкаМаршрутаСсылка,
	|	ЗадачаИсполнителя.ДатаИсполнения КАК ДатаИсполнения
	|ПОМЕСТИТЬ Т2
	|ИЗ
	|	Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Т1 КАК Т1
	|		ПО ЗадачаИсполнителя.БизнесПроцесс = Т1.Ссылка
	|			И (ЗадачаИсполнителя.ТочкаМаршрута = &ТочкаМаршрута)
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	МАКСИМУМ(Т2.Дата) КАК Дата
	|ПОМЕСТИТЬ Т3
	|ИЗ
	|	Т2 КАК Т2
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	Т2.Дата КАК Дата,
	|	Т2.Исполнитель КАК Исполнитель,
	|	Т2.РольИсполнителя КАК РольИсполнителя,
	|	Т2.ТочкаМаршрута КАК ТочкаМаршрута,
	|	Т2.Описание КАК Описание,
	|	Т2.ТочкаМаршрутаПорядок КАК ТочкаМаршрутаПорядок,
	|	Т2.ТочкаМаршрутаПредставление КАК ТочкаМаршрутаПредставление,
	|	Т2.ТочкаМаршрутаСсылка КАК ТочкаМаршрутаСсылка,
	|	СведенияОПользователяхДокументооборот.Подразделение КАК Подразделение,
	|	СведенияОПользователяхДокументооборот.Должность КАК Должность,
	|	Т2.ДатаИсполнения КАК ДатаИсполнения
	|ИЗ
	|	Т2 КАК Т2
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Т3 КАК Т3
	|		ПО Т2.Дата = Т3.Дата
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователяхДокументооборот КАК СведенияОПользователяхДокументооборот
	|		ПО (СведенияОПользователяхДокументооборот.Пользователь = Т2.Исполнитель)";

#КонецОбласти

	ТЗ = Неопределено;
	Рез = Запрос.Выполнить();
	Если НЕ Рез.Пустой() Тогда
		ТЗ = Запрос.Выполнить().Выгрузить();
	КонецЕсли;
	
	Возврат ТЗ;
КонецФункции // ПолучитьСогласовантовПоБП()
Показать
26. awe007 30.05.19 09:39 Сейчас в теме
(21) Спасибо большое за пример! А можете пояснить новичку, если не трудно?
В ворде делаем обычный параметр, поле, как при других вставках автозаполнения.. И потом в скриптах автозаполнения выбираем это поле и для него уже вставляем скрипт автозамены? Правильно?
Т.е. вся таблица изначально формируется в 1С и потом целиком как есть вставляется в Word?
27. Оберон 16 30.05.19 10:47 Сейчас в теме
(26) тут все просто..
1. Конфигуратор:
в ДО в новый Общий Модуль (ухОбщийМодульПовтИсп) со следующими свойствами(Сервер, Вызов сервера, Повторное использование возвращаемых значений = На время сеанса ), вставляете указанную функцию, сохраняем.

2. WORD:
создаем в шаблоне ворд текстовый параметр, поле, как при других вставках автозаполнения, например "ТаблицаСогласовантов"

3. Предприятие:
в скриптах автозаполнения выбираем это поле и для него вставляем скрипт автозамены что я привел.

4. получаем на выходе таблицу согласовавших данный документ.

Профит!
meowmeow; blandinko; +2 Ответить
22. Оберон 16 29.05.19 11:29 Сейчас в теме
СКРИПТ для вставки листа согласовантов.
Функция ухОбщийМодульПовтИсп.ПолучитьСогласовантовПоБПвТЗ  расположена выше.

// Закроем открытые теги
РезультатОбработки = "</w:t></w:r></w:p>";

// Заголовок таблицы
РезультатОбработки = РезультатОбработки +"<w:tbl>
|<w:tblPr>
|<w:tblStyle w:val=""a3""/><w:tblW w:w=""5000"" w:type=""pct""/><w:tblLook w:val=""04A0"" w:firstRow=""1"" w:lastRow=""0"" w:firstColumn=""1"" w:lastColumn=""0"" w:noHBand=""0"" w:noVBand=""1""/></w:tblPr><w:tblGrid><w:gridCol w:w=""3377""/>
|<w:gridCol w:w=""1104""/><w:gridCol w:w=""2414""/>
|<w:gridCol w:w=""2450""/></w:tblGrid><w:tr w:rsidR=""00D175E1"" w:rsidRPr=""0013339A"" w:rsidTr=""00F113F1"">
|<w:trPr><w:trHeight w:val=""1349""/></w:trPr>
|<w:tc>
|<w:tcPr><w:tcW w:w=""5000"" w:type=""pct""/><w:gridSpan w:val=""4""/>
|<w:vAlign w:val=""center""/></w:tcPr><w:p w:rsidR=""00D175E1"" w:rsidRPr=""0013339A"" w:rsidRDefault=""00D175E1"" w:rsidP=""0013339A"">
|<w:pPr><w:rPr><w:rFonts w:ascii=""Montserrat Light"" w:hAnsi=""Montserrat Light""/></w:rPr></w:pPr>
|<w:r w:rsidRPr=""0013339A""><w:rPr><w:rFonts w:ascii=""Montserrat Light"" w:hAnsi=""Montserrat Light""/></w:rPr>
|<w:t>СОГЛАСОВАНО:</w:t>
|</w:r></w:p></w:tc></w:tr>
|<w:tr w:rsidR=""00D175E1"" w:rsidRPr=""0013339A"" w:rsidTr=""00F113F1""><w:trPr><w:trHeight w:val=""392""/></w:trPr>
|<w:tc><w:tcPr><w:tcW w:w=""1707"" w:type=""pct""/><w:shd w:val=""clear"" w:color=""auto"" w:fill=""D9D9D9"" w:themeFill=""background1"" w:themeFillShade=""D9""/></w:tcPr>
|<w:p w:rsidR=""00D175E1"" w:rsidRPr=""0013339A"" w:rsidRDefault=""00D175E1"" w:rsidP=""0013339A"">
|<w:pPr><w:rPr><w:rFonts w:ascii=""Montserrat Light"" w:hAnsi=""Montserrat Light""/></w:rPr></w:pPr>
|<w:r w:rsidRPr=""0013339A""><w:rPr><w:rFonts w:ascii=""Montserrat Light"" w:hAnsi=""Montserrat Light""/></w:rPr>
|<w:t>Должность/Подразделение</w:t>
|</w:r></w:p></w:tc>
|<w:tc><w:tcPr><w:tcW w:w=""624"" w:type=""pct""/><w:shd w:val=""clear"" w:color=""auto"" w:fill=""D9D9D9"" w:themeFill=""background1"" w:themeFillShade=""D9""/></w:tcPr>
|<w:p w:rsidR=""00D175E1"" w:rsidRPr=""0013339A"" w:rsidRDefault=""00D175E1"" w:rsidP=""0013339A"">
|<w:pPr><w:rPr><w:rFonts w:ascii=""Montserrat Light"" w:hAnsi=""Montserrat Light""/></w:rPr></w:pPr>
|<w:r w:rsidRPr=""0013339A""><w:rPr><w:rFonts w:ascii=""Montserrat Light"" w:hAnsi=""Montserrat Light""/></w:rPr>
|<w:t>Виза</w:t>
|</w:r></w:p></w:tc>
|<w:tc><w:tcPr><w:tcW w:w=""1325"" w:type=""pct""/><w:shd w:val=""clear"" w:color=""auto"" w:fill=""D9D9D9"" w:themeFill=""background1"" w:themeFillShade=""D9""/></w:tcPr>
|<w:p w:rsidR=""00D175E1"" w:rsidRPr=""0013339A"" w:rsidRDefault=""00D175E1"" w:rsidP=""0013339A"">
|<w:pPr><w:rPr><w:rFonts w:ascii=""Montserrat Light"" w:hAnsi=""Montserrat Light""/></w:rPr></w:pPr>
|<w:r w:rsidRPr=""0013339A""><w:rPr><w:rFonts w:ascii=""Montserrat Light"" w:hAnsi=""Montserrat Light""/></w:rPr>
|<w:t>Дата</w:t>
|</w:r></w:p></w:tc>
|<w:tc><w:tcPr><w:tcW w:w=""1345"" w:type=""pct""/><w:shd w:val=""clear"" w:color=""auto"" w:fill=""D9D9D9"" w:themeFill=""background1"" w:themeFillShade=""D9""/></w:tcPr>
|<w:p w:rsidR=""00D175E1"" w:rsidRPr=""0013339A"" w:rsidRDefault=""00D175E1"" w:rsidP=""0013339A"">
|<w:pPr><w:rPr><w:rFonts w:ascii=""Montserrat Light"" w:hAnsi=""Montserrat Light""/></w:rPr></w:pPr>
|<w:r w:rsidRPr=""0013339A""><w:rPr><w:rFonts w:ascii=""Montserrat Light"" w:hAnsi=""Montserrat Light""/></w:rPr>
|<w:t>ФИО</w:t>
|</w:r></w:p></w:tc></w:tr>";

ШаблонСтроки = "<w:tr w:rsidR=""00D175E1"" w:rsidRPr=""0013339A"" w:rsidTr=""00F113F1"">
|<w:tc>
|<w:tcPr><w:tcW w:w=""1707"" w:type=""pct""/><w:vAlign w:val=""center""/></w:tcPr>
|<w:p w:rsidR=""00D175E1"" w:rsidRPr=""0013339A"" w:rsidRDefault=""00AE5474"" w:rsidP=""0013339A"">
|<w:pPr><w:rPr><w:rFonts w:ascii=""Montserrat Light"" w:hAnsi=""Montserrat Light""/></w:rPr></w:pPr>
|<w:r><w:rPr><w:rFonts w:ascii=""Montserrat Light"" w:hAnsi=""Montserrat Light""/></w:rPr>
|<w:t>%1</w:t>
|</w:r></w:p></w:tc>
|<w:tc>
|<w:tcPr><w:tcW w:w=""624"" w:type=""pct""/><w:vAlign w:val=""center""/>
|</w:tcPr><w:p w:rsidR=""00D175E1"" w:rsidRPr=""0013339A"" w:rsidRDefault=""00AE5474"" w:rsidP=""0013339A"">
|<w:pPr><w:rPr><w:rFonts w:ascii=""Montserrat Light"" w:hAnsi=""Montserrat Light""/></w:rPr></w:pPr>
|<w:r><w:rPr><w:rFonts w:ascii=""Montserrat Light"" w:hAnsi=""Montserrat Light""/></w:rPr>
|<w:t>%2</w:t>
|</w:r></w:p></w:tc>
|<w:tc>
|<w:tcPr><w:tcW w:w=""1325"" w:type=""pct""/><w:vAlign w:val=""center""/></w:tcPr>
|<w:p w:rsidR=""00D175E1"" w:rsidRPr=""0013339A"" w:rsidRDefault=""00AE5474"" w:rsidP=""0013339A"">
|<w:pPr><w:rPr><w:rFonts w:ascii=""Montserrat Light"" w:hAnsi=""Montserrat Light""/></w:rPr></w:pPr>
|<w:r><w:rPr><w:rFonts w:ascii=""Montserrat Light"" w:hAnsi=""Montserrat Light""/></w:rPr>
|<w:t>%3</w:t>
|</w:r></w:p></w:tc>
|<w:tc>
|<w:tcPr><w:tcW w:w=""1345"" w:type=""pct""/><w:vAlign w:val=""center""/>
|</w:tcPr><w:p w:rsidR=""00D175E1"" w:rsidRPr=""0013339A"" w:rsidRDefault=""00AE5474"" w:rsidP=""0013339A"">
|<w:pPr><w:rPr><w:rFonts w:ascii=""Montserrat Light"" w:hAnsi=""Montserrat Light""/></w:rPr></w:pPr>
|<w:r><w:rPr><w:rFonts w:ascii=""Montserrat Light"" w:hAnsi=""Montserrat Light""/></w:rPr>
|<w:t>%4</w:t>
|</w:r></w:p></w:tc></w:tr>";

//  заполняем таблицу
//ТаблицаВизДокумента = РаботаСВизамиСогласования.ПолучитьВизыДокумента(Файл.ВладелецФайла.Ссылка);

ТЗ = ухОбщийМодульПовтИсп.ПолучитьСогласовантовПоБПвТЗ(Файл.ВладелецФайла.Ссылка);
Если ТЗ<>Неопределено Тогда
	Для Каждого СтрокаТЗ Из ТЗ Цикл
		СтруктураВизы = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СтрокаТЗ);	// ТЗ[Стр]

		РезультатОбработки = РезультатОбработки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				ШаблонСтроки,
				СтруктураВизы.Должность+"/"+СтруктураВизы.Подразделение,
				СтруктураВизы.ТочкаМаршрута,
				Формат(СтруктураВизы.ДатаИсполнения, "ДЛФ=Д"),
				СтруктураВизы.Исполнитель);
	КонецЦикла;
КонецЕсли;
//
// Закроем таблицу
РезультатОбработки = РезультатОбработки +"</w:tbl>";

// Откроем теги, т.к. в структуре документа они закрываются сразу за вставкой.
РезультатОбработки = РезультатОбработки + "<w:p><w:r><w:t>";

// Добавим переносы строки для записи в xml без обработки
РезультатОбработки = Символы.ПС + СтрЗаменить(РезультатОбработки, Символы.ПС, "") + Символы.ПС;
Показать
Moto45; Tommy82; meowmeow; blandinko; +4 Ответить
28. awe007 30.05.19 11:43 Сейчас в теме
(22) Это просто праздник какой-то! Всё работает! День прожит не зря!
Спасибо вам от всей души!

Только ещё один маленький моментик.. таблица вставляется, но без рамок (без границ). Можно ли это победить?
29. Оберон 16 30.05.19 12:53 Сейчас в теме
(28) у меня сетка отображается - возможно у вас в шаблоне ворда стоит не отображать сетку
45. a_kaiman 16.03.21 08:30 Сейчас в теме
(22) вроде бы сделал все как написано, при проверке заполнения появляется ошибка:
{ОбщийМодуль.АвтозаполнениеШаблоновФайловСервер.Модуль(221)}:		ВызватьИсключение СтрокаОшибки;
{ОбщийМодуль.АвтозаполнениеШаблоновФайловСервер.Модуль(402)}:	МассивЗамен = ПолучитьМассивАвтозаполненийШаблона(
{ОбщийМодуль.АвтозаполнениеШаблоновФайловКлиентСервер.Модуль(1732)}:	НастройкиАвтозаполнения = 
{Справочник.ШаблоныВнутреннихДокументов.Форма.ШаблонВнутреннегоДокумента.Форма(2376)}:		РезультатЗаполненияФайла = АвтозаполнениеШаблоновФайловКлиентСервер.ЗаполнитьПоляФайлаДаннымиВладельца(
{Справочник.ВнутренниеДокументы.Форма.ФормаВыбора.Форма(127)}:		ОповеститьОВыборе(Элементы.Список.ТекущиеДанные.Ссылка);


ДО 8 КОРП, редакция 2.1 (2.1.27.1)
46. Оберон 16 16.03.21 12:39 Сейчас в теме
(45) добрый день, у меня была более старая версия.
посмотрите в отладчике что массив возвращается
{ОбщийМодуль.АвтозаполнениеШаблоновФайловСервер.Модуль(402)}: МассивЗамен = ПолучитьМассивАвтозаполненийШаблона
55. user633256_chehlyaevaal 21.04.22 01:11 Сейчас в теме
(46) Здравствуйте!
Можете, пожалуйста, более подробно описать, что необходимо сделать для устранения проблемы. У нас текущий релиз ДО - 2.1.28.14. И точно такая же ошибка возникает.
Заранее спасибо!
56. Оберон 16 22.04.22 11:43 Сейчас в теме
(55) добрый день
к сожалению нет под руками ДО с тем решением.
58. Tommy82 65 03.08.22 19:00 Сейчас в теме
Добрый день
ДО 3.0.7.28
Делаю по инструкции, но вместо таблицы получаю текст, но с заполненными параметрами
"w:tbl>
<w:tblPr>
<w:tblStyle w:val=""a3""/><w:tblW w:w=""5000"" w:type=""pct""/><w:tblLook w:val=""04A0"" w:firstRow=""1"" w:lastRow=""0"" w:firstColumn=""1"" w:lastColumn=""0"" w:noHBand=""0"" w:noVBand=""1""/></w:tblPr><w:tblGrid><w:gridCol w:w=""3377""/>
<w:gridCol w:w=""1104""/><w:gridCol w:w=""2414""/>
<w:gridCol w:w=""2450""/></w:tblGrid><w:tr w:rsidR=""00D175E1"" w:rsidRPr=""0013339A"" w:rsidTr=""00F113F1"">
<w:trPr><w:trHeight w:val=""1349""/></w:trPr>..."

куда копать?
30. awe007 30.05.19 16:15 Сейчас в теме
И последний вопрос, если позволите :)
Как вы добыли XML-код заголовка таблицы и строки таблицы?
Я нарисовал нужную мне табличку в ворде, сохранил, разархивировал, нашёл там document.xml, но как в нём понять что относится к шапке страницы, а что к строке?
Может есть какие то хитрости, типа онлайн-генератора xml? :) Или только руками и глазами отделять тэги друг от друга?
31. Оберон 16 31.05.19 11:32 Сейчас в теме
(30) хитростей нет - открыть с помощью браузера - EDge или exploer или Chrome и т.д.

Table ( Tbl ) таблица
row ( tr ) строка таблицы
column ( tc ) колонка таблицы

<w:tbl> -- таблица начало
<w:tr> -- строка начало
<w:tc> -- колонка начало
32. blandinko 11.07.19 15:49 Сейчас в теме
(31) Добрый день!
Скажите, а с проблемой перезаполнения таблицы данными Вы не столкнулись?
Я настроила все по Вашим постам, все прекрасно работает, и радовалась до момента, когда попробовала перезаполнить файл данными документа (а это надо будет делать неоднократно).
В итоге получается то, что на скрине :(((
Таблица в таблице и т.д...

И, главное, непонятно почему. Ведь заменяться должно все - и тэги вордовские, которыми мы строим таблицу, тоже?
Прикрепленные файлы:
36. Hood 7 03.09.19 17:44 Сейчас в теме
(32)Добрый день.
Получилось победить?
37. blandinko 05.09.19 09:17 Сейчас в теме
47. Оберон 16 16.03.21 13:09 Сейчас в теме
(37) очищайте перед формированием листа при перезаполнении.
не помню уже где там место, но помню было такое - исправлял.
33. Оберон 16 12.07.19 10:36 Сейчас в теме
(32) это надо смотреть как вы табличку нарисовали, там какая то ошибка, при перезаполнении данными на корректных таблицах так не должно быть, это ошибка шаблона (тега таблицы)
в моей доработке такого не встречалось.
34. blandinko 12.07.19 14:30 Сейчас в теме
(33) Взяла целиком Ваш код скрипта и Вашу функцию.
При перезаполнении файла получается то же самое...
Прикрепленные файлы:
35. Myxa 42 02.08.19 15:58 Сейчас в теме
(34) Добрый день!

Аналогичная ситуация!
38. bpirate999 25 03.12.19 12:15 Сейчас в теме
Не работает. Только теги ворда в тесковом поле
. Почему?
39. user682069_tulipadanys 04.12.19 15:56 Сейчас в теме
(38)

// Добавим переносы строки для записи в xml без обработки
РезультатОбработки = Символы.ПС + СтрЗаменить(РезультатОбработки, Символы.ПС, "") + Символы.ПС;
53. EvgeniyNP 19.11.21 13:03 Сейчас в теме
(39)
Обработки, Символы.ПС, "") + Символы.ПС;

а почему без последних Символы.ПС не срабатывает?
40. user749358 4 26.12.19 08:11 Сейчас в теме
Спасибо! Действительно работает в версии 2.1.14.4. Главное не забыть вставить
РезультатОбработки = Символы.ПС + СтрЗаменить(РезультатОбработки, Символы.ПС, "") + Символы.ПС;
41. ademidov 27.03.20 16:07 Сейчас в теме
Коллеги а на 13 Офисе это работает? Никто не пробовал? А то я тупо кописпастом все перенес и вот:
"Имя в конечном теге элемента должно совпадать с типом элемента в начальном теге". :(
42. EvgeniyNP 18.05.20 17:12 Сейчас в теме
А где можно узнать список тэгов? меня больше всего интересуют межстрочные интервалы, а то между строками слишком большие промежутки.
Уточнение. Интервал после интересует еще больше
48. Оберон 16 16.03.21 13:45 Сейчас в теме
(42) интервал выставляется в тегах ворда, вот например НЕТ отступа

<w:pPr><w:spacing w:after="0" w:line="240" w:lineRule="auto"/></w:pPr>
Прикрепленные файлы:
EvgeniyNP; +1 Ответить
54. EvgeniyNP 19.11.21 13:12 Сейчас в теме
43. Horsy 04.03.21 12:24 Сейчас в теме
Коллеги, может, кто-нибудь решил проблему вставки дополнительного поля (когда при повторном автозаполнении таблица вставляется в таблицу)?
49. Оберон 16 16.03.21 13:48 Сейчас в теме
(43) очищайте формируемый документ перед заполнением
51. Horsy 17.03.21 18:17 Сейчас в теме
(49) А если в него вносятся правки?
Похоже, без доработок - никак
52. falco 12.05.21 13:17 Сейчас в теме
Подскажите как через XML работать с колонтитулами в WORD, например вставить картинку?
57. partizand 130 11.07.22 11:53 Сейчас в теме
Добавлю, как решить проблему повторного заполнения по шаблону.
Идея в том, что перед заполнением, заменяем исходный файл, на файл шаблона.
Из минусов, все что внесли руками пропадет.
И если открыт файл на редактирование, то замены не будет

Нужно изменить Общий модуль АвтозаполнениеШаблоновФайловСервер, функция ПолучитьНастройкиАвтозаполненияШаблоновФайлов (можно добавить расширением "Вместо" + "ПродолжитьВызов")

Функция ПолучитьНастройкиАвтозаполненияШаблоновФайлов(ФайлСсылка, Документ = Неопределено, ПолучитьДанныеОШтрихкоде = Ложь) Экспорт

ДвоичныеДанныеФайла = ПолучитьДвоичныеДанныеФайла(ФайлСсылка);
	РасширениеФайла = НРег(ФайлСсылка.ТекущаяВерсияРасширение);
	ВыполнятьЗаполнениеMSWordНаСервере = Константы.ИзменениеФайловMSWordТолькоНаСервере.Получить();
	Если ФайлНаходитсяВИерархииПапокШаблонов(ФайлСсылка) Тогда
		ОснованиеФайла = ФайлСсылка
	Иначе
		ОснованиеФайла = ФайлСсылка.ШаблонОснованиеДляСоздания;
	КонецЕсли;
		
	МассивЗамен = ПолучитьМассивАвтозаполненийШаблона(
		ФайлСсылка,
		ОснованиеФайла, 
		?(Документ = Неопределено, ФайлСсылка.ВладелецФайла, Документ));
	ОснованиеСозданияФайла = ФайлСсылка.Ссылка;
	
	ДанныеВозврата = Новый Структура;
	ДанныеВозврата.Вставить("ДвоичныеДанныеФайла", ДвоичныеДанныеФайла);
	ДанныеВозврата.Вставить("РасширениеФайла", РасширениеФайла);
	ДанныеВозврата.Вставить("ВыполнятьЗаполнениеMSWordНаСервере", ВыполнятьЗаполнениеMSWordНаСервере);
	ДанныеВозврата.Вставить("МассивЗамен", МассивЗамен);
	ДанныеВозврата.Вставить("ОснованиеСозданияФайла", ОснованиеСозданияФайла);

Если ПолучитьДанныеОШтрихкоде Тогда
		ДанныеОШтрихкоде = ШтрихкодированиеСервер.ПолучитьДанныеДляВставкиШтрихкодаВОбъект(Документ, Ложь);
		Если ДанныеОШтрихкоде <> Неопределено И ДанныеОШтрихкоде.Свойство("ДвоичныеДанныеИзображения") Тогда
			ДанныеВозврата.Вставить("ДанныеОШтрихкоде", ДанныеОШтрихкоде); 
		КонецЕсли;
	КонецЕсли;
	
	// ++ Начало вставки
	// Подменяем только если файл и шаблон различаются и в полях есть определенные имена
	НеобходимаПодмена = Ложь;
	
	Если ФайлСсылка <> ОснованиеФайла Тогда
		ИменаПолейПризнаковЗамены = "Таблица1,Таблица2";
		ПоляПризнакиЗамены = СтрРазделить(ИменаПолейПризнаковЗамены, ",");
		Для каждого ОписаниеЗамены Из МассивЗамен Цикл
			ПолеЗамены = ОписаниеЗамены.ТермДляЗамены;
			Если ПоляПризнакиЗамены.Найти(ПолеЗамены) <> Неопределено Тогда
				НеобходимаПодмена = Истина;
				Прервать;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
	// Подменяем файл на шаблон
	Если НеобходимаПодмена Тогда
		ДвоичныеДанныеШаблона = ПолучитьДвоичныеДанныеФайла(ОснованиеФайла);
		ДанныеВозврата.ДвоичныеДанныеФайла = ДвоичныеДанныеШаблона;
	КонецЕсли;
	
	// -- Окончание вставки
	
	Возврат ДанныеВозврата;

КонецФункции

Показать
Moto45; Tommy82; +2 Ответить
59. Tommy82 65 04.08.22 10:44 Сейчас в теме
(57)
Добрый день
можете прокомментировать мой вопрос?
60. Tommy82 65 04.08.22 13:59 Сейчас в теме
(59)
в общем проблема в том, что < и > заменяются на < и > соответственно в document.xml

MSOW 2016 если что...

п.с.
да и здесь тоже заменяются, пишу & lt (только слитно) показывает <
61. Tommy82 65 04.08.22 18:04 Сейчас в теме
(60)
ДО 3.0.7.28
8.3.20.1674
MSOW 2016

в общем, если кто ещё столкнётся
суть в том, что в этой процедуре 1С разбивает РезультатОбработки на подстроки и получается, что значение РезультатОбработки записывается, как текст.
В нашем случае нужно 1С как-то дать понять, что РезультатОбработки нужно записать без обработки.
Для этого нужно акцентрироваться хоть на чём-то - выбрал "<w:tbl>"

наколхозил следущее

&Вместо("ЗаписатьВXMLСодержимое")
Процедура CG_ЗаписатьВXMLСодержимое(ЗаписьXML, Знач Содержимое)
	// Вставить содержимое метода.
	
	//ПродолжитьВызов(ЗаписьXML, Содержимое);
	
	Спецсимволы = Новый Соответствие;
	Спецсимволы.Вставить("<w:br/>", Символы.ПС);
	Спецсимволы.Вставить("</w:t><w:tab/><w:t>", Символы.Таб);
	
	Для Каждого Спецсимвол Из Спецсимволы Цикл
		Содержимое = СтрЗаменить(Содержимое, Спецсимвол.Значение, СтрШаблон("_###_%1_###_", Спецсимвол.Ключ));
	КонецЦикла;
	
	МассивПодстрок = СтрРазделить(Содержимое, "_###_", Ложь);
	
	Для Каждого Подстрока Из МассивПодстрок Цикл
		Если Спецсимволы[Подстрока] <> Неопределено Тогда
			ЗаписьXML.ЗаписатьБезОбработки(Подстрока);
                ИначеЕсли СтрНайти(Содержимое, "<w:tbl>") > 0 Тогда
			ЗаписьXML.ЗаписатьБезОбработки(Подстрока);
		Иначе
			ЗаписьXML.ЗаписатьТекст(Подстрока);	
		КонецЕсли;
	КонецЦикла;	
КонецПроцедуры
Показать
1c-kt; Moto45; +2 Ответить
62. partizand 130 11.08.22 11:34 Сейчас в теме
(59)
Нужно добавить перенос строки в подставляемый текст. Тогда ДО подставляет его как есть. Это можно увидеть в исходниках. И в этой статье это есть в примере кода.
63. Tommy82 65 15.08.22 11:05 Сейчас в теме
(62)
// Добавим переносы строки для записи в xml без обработки
РезультатОбработки = Символы.ПС + СтрЗаменить(РезультатОбработки, Символы.ПС, "") + Символы.ПС;


эта строчка кода у меня есть - поэтому и пришлось колхозить
66. user652103_rupert4 28.03.23 16:05 Сейчас в теме
(59)
если вдруг актуально- вы перед и после иньекции забыли вставить
перед </w:t></w:r></w:p>
после <w:p><w:r><w:t>

это нужно т.к. у вас открыт тег t перед заменой и закрыт после- и все что вы вставляете вставляется текстом
69. Tommy82 65 30.05.23 17:57 Сейчас в теме
(66)

а у меня тут всё и так было уже

РезультатОбработки = "</w:t></w:r></w:p>";
РезультатОбработки = НародноеТехноГрохотТракторовСветПрожекторов();
РезультатОбработки = РезультатОбработки + "<w:p><w:r><w:t>";
64. Tommy82 65 18.08.22 12:01 Сейчас в теме
(57)

"Нужно изменить Общий модуль АвтозаполнениеШаблоновФайловСервер, функция ПолучитьНастройкиАвтозаполненияШаблоновФайлов (можно добавить расширением "Вместо" + "ПродолжитьВызов")"

в ДО30 3.0.7.31

ОбщийМодуль.АвтозаполнениеШаблоновФайловВызовСервера -> Функция.ПолучитьНастройкиАвтозаполненияШаблоновФайлов

"ИменаПолейПризнаковЗамены = "Таблица1,Таблица2";"

где "Таблица1, Таблица2" - это наш скрипт сгенерированной таблицы

т.е.
"ИменаПолейПризнаковЗамены = "имя_нашего_скрипта_таблицы"
65. zilot123 27.10.22 19:50 Сейчас в теме
Есть какие-нибудь вариант победить проблему с перезаполнением? Может можно очистить только ранее нарисованную таблицу? предложение заменять файл на шаблон не походит, т.к. теряются правки пользователя.
67. user652103_rupert4 04.04.23 09:51 Сейчас в теме
(65) есть, но с правкой уже.
#Вставка
//проверяем а не таблица ли это и не надо ли эту таблицу удалить. 
Если ЧтениеXML.Имя = "w:tbl" и ЧтениеXML.КоличествоАтрибутов() > 0 Тогда
	DelReplase = ложь;
	Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
		Если ЧтениеXML.Имя = "w:DelReplase" и ЧтениеXML.Значение ="begin" тогда
			// вырезаем всю таблицу
			DelReplase = истина;
		КонецЕсли;
	КонецЦикла;
	Если DelReplase Тогда 
		Пока DelReplase цикл
			Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента  и ЧтениеXML.Имя = "w:tbl" Тогда 
				DelReplase = ложь;
			КонецЕсли;
			ЧтениеXML.Прочитать();
		КонецЦикла;
	КонецЕсли;
			//ЧтениеXML.Прочитать();
КонецЕсли;
#КонецВставки
Показать


плюс при формировании таблицы перед требуется не такая конструкция
</w:t></w:r></w:p>
а такая
Синоним заменяемой переменной</w:t></w:r></w:p><w:tbl w:DelReplase=""begin"">
70. Tommy82 65 30.05.23 18:15 Сейчас в теме
(67)
w:tbl


подскажите, пожалуйста, это в каком месте нужна вставка?

ВыполнитьЗаменуПолейИСтрокВДокументеMSOfficeOpenXML?
71. user652103_rupert4 13.06.23 13:15 Сейчас в теме
(70)
Да, в этой процедуре я вставлял.
Сразу после чтения

	Пока ЧтениеXML.Прочитать() Цикл                             
#Вставка
//проверяем а не таблица ли это и не надо ли эту таблицу удалить. 
Если ЧтениеXML.Имя = "w:tbl" и ЧтениеXML.КоличествоАтрибутов() > 0 Тогда
	DelReplase = ложь;
68. Tommy82 65 17.05.23 18:07 Сейчас в теме
(66)
конечно, спасибо, вернулся к задаче, буду переделывать
72. user1640706 13.01.24 17:24 Сейчас в теме
(68)Подскажите, у вас получилось перевыполнение победить?
По примеру кода выше
#Вставка
//проверяем а не таблица ли это и не надо ли эту таблицу удалить. 
Если ЧтениеXML.Имя = "w:tbl" и ЧтениеXML.КоличествоАтрибутов() > 0 Тогда
    DelReplase = ложь;
    Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
        Если ЧтениеXML.Имя = "w:DelReplase" и ЧтениеXML.Значение ="begin" тогда
            // вырезаем всю таблицу
            DelReplase = истина;
        КонецЕсли;
    КонецЦикла;
    Если DelReplase Тогда 
        Пока DelReplase цикл
            Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента  и ЧтениеXML.Имя = "w:tbl" Тогда 
                DelReplase = ложь;
            КонецЕсли;
            ЧтениеXML.Прочитать();
        КонецЦикла;
    КонецЕсли;
            //ЧтениеXML.Прочитать();
КонецЕсли;
#КонецВставки
Показать

Не отрабатывает перезаполнение, да и по примеру кода я так понимаю, пропускается таблица с параметром w:DelReplase=""begin"", и на его месте остается текст синонима заменяемой таблицы и при заполнении этого синонима он же остается выше вставленной таблицы?
Поведайте пожалуйста если у вас получилось
73. пользователь 29.01.24 14:52
Сообщение было скрыто модератором.
...
74. Tommy82 65 29.01.24 14:53 Сейчас в теме
(72)
Добрый день
если честно - руки так и не дошли
Оставьте свое сообщение