gifts2017

Документооборот КОРП. Внедрение функции «Автоматическое заполнение таблиц в шаблоне odt по данным табличной части справочника»

Опубликовал Алексей Штейнварг (alexstey) в раздел Программирование - Универсальные функции

Программа 1С:Документооборот КОРП до сих пор не умеет вставлять табличные данные из справочников и документов в таблицы шаблонов. Попытаемся это исправить. Для этого требуется внести изменения как в текст 1С, так и специальным образом доработать шаблон для программы LibreOffice Writer.

Документооборот КОРП. Внедрение функции «Автоматическое заполнение таблиц документа по данным табличной части»

  1. Общее

    Программа 1С:Документооборот КОРП до сих пор не умеет вставлять табличные данные из справочников и документов в таблицы шаблонов. Попытаемся это исправить. Для этого требуется внести изменения как в текст 1С, так и специальным образом доработать шаблон для программы LibreOffice Writer. Порядок действий:

    А) внесение изменений в 1С (модули АвтозаполнениеШаблоновФайловКлиентСервер, АвтозаполнениеШаблоновФайловСервер, справочник ПравилаАвтозаполненияФайлов)

    Б) доработка шаблона в программе LibreOffice Writer

    В) доработка шаблона путем изменения файла contents.xml  в архиве шаблона

    Г) настройка совместимости шаблона и таблиц в программе LibreOffice Writer

    Важное замечание: в представленной версии программа работает с таблицами (табличными частями), добавленными в Справочник Внутренние документы. Универсальность заполнения – в разработке.

     

  2. Внесение изменений в 1С. Тексты модулей даются по конфигурации «Документооборот 8 КОРП, редакция 1.4 (1.4.5.1). Платформа 1С:Предприятие 8.3 (8.3.5.1119)». Начало вносимых изменений отмечено «//-alexstey», конец – «//+alexstey».

    1. Модуль АвтозаполнениеШаблоновФайловКлиентСервер. Изменения вносятся в текст Процедура ВыполнитьЗаменуПолейИСтрокВДокументеOpenOfficeWriter,

      Функция ПроверитьНаличиеПолейИСтрокВФайлеOpenOfficeWriter,

      Функция НайтиПоляВФайлеOpenOfficeWriter,

      Функция ЗаполнитьФайлOpenOfficeWriter,

      Добавлено: Процедура ВыполнитьВставкуПолейТаблицВДокументеOpenOfficeWriter,

      Добавлено: Процедура ВыполнитьДобавлениеПолейТаблицВДокументеOpenOfficeWriter,

      Добавлено: Функция ПолучениеСтрПоискаИзСтроки

    2. Модуль АвтозаполнениеШаблоновФайловСервер. Изменения вносятся в текст

      Функция ПолучитьНастройкиАвтозаполненияШаблоновФайлов,

      Добавлено: Функция ПолучитьМассивАвтозаполненийШаблонаТаблицы

    3. Справочник ПравилаАвтозаполненияФайлов. В Форму элемента справочника добавить табличную часть ПравилаЗаполненияТаблиц (сама табличная часть уже присутствует в реквизитах).

       

  3. Доработка шаблона в программе LibreOffice Writer

    1. Подготовить документ-шаблон, в который нужно будет вставлять данные из 1С

    2. В места для вставки вставить «Поля пользователя» (Вставка – Поля - Дополнительно)

      В общем случае Формат поля – текст, Имя поля и Значение – совпадают.

    3. Если необходимо вставлять табличные данные:

      1. Создать таблицу (или сократить имеющуюся), в которой в первой строке, или нескольких, будут заголовки столбцов, во второй строке – поля данных, которые будут увеличивать количество строк в соответствии с количеством строк в вставляемой табличной части.

        Таблице должно быть присвоено имя, начинающееся со слова Заполнение, а дальше имя табличной части. Например, для табличной части Справочник.ВнутренниеДокументы.ТабличнаяЧасть.ТаблицаПлатежей таблица должна иметь имя ЗаполнениеТаблицаПлатежей.

        Имена полей таблицы и, соответственно, табличной части документа составляются из имени Табличной части без слова Заполнение и имени поля. Так, в нашем примере имена полей: ТаблицаПлатежейПоле1, ТаблицаПлатежейПоле2, ТаблицаПлатежейПоле3.

      2. Ниже могут быть итоговые строки:

ЗаголовокСтолбца1

ЗаголовокСтолбца2

ЗаголовокСтолбца3

ТаблицаПлатежейПоле1

ТаблицаПлатежейПоле2

ТаблицаПлатежейПоле3

Итого

 

Названия заголовков – произвольные. Поля вставляются как обычно, смотри п.3.2.

      1. Таблице должно быть присвоено имя, начинающееся со слова Таблица, поля таблица начинаются с имени таблицы. Заголовки – произвольно.

         

  1. Доработка шаблона путем изменения файла contents.xml  в архиве шаблона

    Каждый ряд (строка) в таблице LibreOffice Writer имеет  свой стиль, имя которому присваивается программой автоматически. К сожалению, переименовать его из оболочки редактора не получается (Автор программы будет благодарен программистам, которые подскажут, как это сделать без «влезания в код»), поэтому придется делать это руками. И так:

    1. Закроем наш файл

    2. Переименуем его расширение из .odt в .zip

    3. Откроем архив

    4. Откроем для редактирования файл contents.xml  из архива. В зависимости от используемого вами редактора открывшийся файл будет виден либо как одна дли-и-инная строка, или как форматированный xml файл. С последним видом работать явно удобнее. Рекомендация: для просмотра файла в «форматированном» виде его нужно «достать» из архива во временную папку и открыть через Internet Explorer.

    5. Видим следующий текст (на рисунке приведен только интересующий фрагмент) для нашего примера:

      Для правки нас интересует последняя часть, описывающая строку таблицы , а именно та, в которой вставлены наши поля ТаблицаПлатежейПоле1, ТаблицаПлатежейПоле2 и ТаблицаПлатежейПоле3. Имя стиля ряда должно быть ТаблицаПлатежей.СтильСтрокиЗамены:

                         Начнем преобразование: допишем стиль ряда таблицы (в документах, пересохраненных из MSWord этот фрагмент уже присутствует, в нем нужно только поменять имя стиля). Итак, вместо <table:table-row>, должно быть
 <
table:table-row table:style-name="ТаблицаПлатежей.СтильСтрокиЗамены"

    1. На этом заканчиваем редактирование, сохраняем и закрываем файл, соглашаемся на перезапись его в архиве, выходим из архива, переименовываем расширение файла обратно на .odt. На этом внесение изменений закончено.

  1. Настройка совместимости шаблона и таблиц в программе LibreOffice Writer.

    1. Заполним поля. Открываем документооборот – Нормативно-Справочная информация – Правила автозаполнения шаблонов файлов – Создать. Работаем с верхним табличным полем. Далее действуем по правилам заполнения шаблонов.

    2. Заполним поля таблицы. Смотрим на нижнее поле Дополнение alexstey. Нажимаем Добавить для добавления новой строки. В поле Заполняемая таблица пишем ЗаполнениеТаблицаПлатежей (добавленная табличная часть в справочник Внутренние документы и совпадающая по названию таблица в шаблоне документа LibreOffice Writer), в поле Заменяемое поле пишем ТаблицаПлатежейПоле1, в поле Значение замены реквизит делаем произвольную запись, например ЗначПоле1 (главное, чтобы оно не пустовало).

    3. Сохраняем, закрываем. Можно работать

приложенный файл _ДокументооборотОбработкаТаблиц.rar содержит текст двух исправленных модулей и описание функции.

Вопросы, замечания и предложения по функции и ее внедрению готов принять на 1c@ptmail.ru

alexstey

 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
_ДокументооборотОбработкаТаблиц.rar
.rar 179,64Kb
24.10.14
7
.rar 179,64Kb 7 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Сергей Валутин (Bacemo) 03.11.14 20:47
Работа интересная, но исправлять типовую 1С не хочется
2. reznic Резник (reznic) 22.11.14 21:53
Применять не стал, но Алексею спасибо за отзывчивый, плюсов ать не умею
3. Алексей Штейнварг (alexstey) 23.11.14 11:55
Для "плюсования" есть белая звездочка в оранжевом квадрате. Жмите на нее
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа