Документооборот КОРП. Внедрение функции «Автоматическое заполнение таблиц документа по данным табличной части»
-
Общее
Программа 1С:Документооборот КОРП до сих пор не умеет вставлять табличные данные из справочников и документов в таблицы шаблонов. Попытаемся это исправить. Для этого требуется внести изменения как в текст 1С, так и специальным образом доработать шаблон для программы LibreOffice Writer. Порядок действий:
А) внесение изменений в 1С (модули АвтозаполнениеШаблоновФайловКлиентСервер, АвтозаполнениеШаблоновФайловСервер, справочник ПравилаАвтозаполненияФайлов)
Б) доработка шаблона в программе LibreOffice Writer
В) доработка шаблона путем изменения файла contents.xml в архиве шаблона
Г) настройка совместимости шаблона и таблиц в программе LibreOffice Writer
Важное замечание: в представленной версии программа работает с таблицами (табличными частями), добавленными в Справочник Внутренние документы. Универсальность заполнения – в разработке.
-
Внесение изменений в 1С. Тексты модулей даются по конфигурации «Документооборот 8 КОРП, редакция 1.4 (1.4.5.1). Платформа 1С:Предприятие 8.3 (8.3.5.1119)». Начало вносимых изменений отмечено «//-alexstey», конец – «//+alexstey».
-
Модуль АвтозаполнениеШаблоновФайловКлиентСервер. Изменения вносятся в текст Процедура ВыполнитьЗаменуПолейИСтрокВДокументеOpenOfficeWriter,
Функция ПроверитьНаличиеПолейИСтрокВФайлеOpenOfficeWriter,
Функция НайтиПоляВФайлеOpenOfficeWriter,
Функция ЗаполнитьФайлOpenOfficeWriter,
Добавлено: Процедура ВыполнитьВставкуПолейТаблицВДокументеOpenOfficeWriter,
Добавлено: Процедура ВыполнитьДобавлениеПолейТаблицВДокументеOpenOfficeWriter,
Добавлено: Функция ПолучениеСтрПоискаИзСтроки
-
Модуль АвтозаполнениеШаблоновФайловСервер. Изменения вносятся в текст
Функция ПолучитьНастройкиАвтозаполненияШаблоновФайлов,
Добавлено: Функция ПолучитьМассивАвтозаполненийШаблонаТаблицы
-
Справочник ПравилаАвтозаполненияФайлов. В Форму элемента справочника добавить табличную часть ПравилаЗаполненияТаблиц (сама табличная часть уже присутствует в реквизитах).
-
-
Доработка шаблона в программе LibreOffice Writer
-
Подготовить документ-шаблон, в который нужно будет вставлять данные из 1С
-
В места для вставки вставить «Поля пользователя» (Вставка – Поля — Дополнительно)
В общем случае Формат поля – текст, Имя поля и Значение – совпадают.
-
Если необходимо вставлять табличные данные:
-
Создать таблицу (или сократить имеющуюся), в которой в первой строке, или нескольких, будут заголовки столбцов, во второй строке – поля данных, которые будут увеличивать количество строк в соответствии с количеством строк в вставляемой табличной части.
Таблице должно быть присвоено имя, начинающееся со слова Заполнение, а дальше имя табличной части. Например, для табличной части Справочник.ВнутренниеДокументы.ТабличнаяЧасть.ТаблицаПлатежей таблица должна иметь имя ЗаполнениеТаблицаПлатежей.
Имена полей таблицы и, соответственно, табличной части документа составляются из имени Табличной части без слова Заполнение и имени поля. Так, в нашем примере имена полей: ТаблицаПлатежейПоле1, ТаблицаПлатежейПоле2, ТаблицаПлатежейПоле3.
-
Ниже могут быть итоговые строки:
-
-
ЗаголовокСтолбца1 |
ЗаголовокСтолбца2 |
ЗаголовокСтолбца3 |
ТаблицаПлатежейПоле1 |
ТаблицаПлатежейПоле2 |
ТаблицаПлатежейПоле3 |
Итого |
|
Названия заголовков – произвольные. Поля вставляются как обычно, смотри п.3.2.
-
Таблице должно быть присвоено имя, начинающееся со слова Таблица, поля таблица начинаются с имени таблицы. Заголовки – произвольно.
-
Доработка шаблона путем изменения файла contents.xml в архиве шаблона
Каждый ряд (строка) в таблице LibreOffice Writer имеет свой стиль, имя которому присваивается программой автоматически. К сожалению, переименовать его из оболочки редактора не получается (Автор программы будет благодарен программистам, которые подскажут, как это сделать без «влезания в код»), поэтому придется делать это руками. И так:
-
Закроем наш файл
-
Переименуем его расширение из .odt в .zip
-
Откроем архив
-
Откроем для редактирования файл contents.xml из архива. В зависимости от используемого вами редактора открывшийся файл будет виден либо как одна дли-и-инная строка, или как форматированный xml файл. С последним видом работать явно удобнее. Рекомендация: для просмотра файла в «форматированном» виде его нужно «достать» из архива во временную папку и открыть через Internet Explorer.
-
Видим следующий текст (на рисунке приведен только интересующий фрагмент) для нашего примера:
Для правки нас интересует последняя часть, описывающая строку таблицы , а именно та, в которой вставлены наши поля ТаблицаПлатежейПоле1, ТаблицаПлатежейПоле2 и ТаблицаПлатежейПоле3. Имя стиля ряда должно быть ТаблицаПлатежей.СтильСтрокиЗамены:
-
Начнем преобразование: допишем стиль ряда таблицы (в документах, пересохраненных из MSWord этот фрагмент уже присутствует, в нем нужно только поменять имя стиля). Итак, вместо <table:table-row>, должно быть
<table:table-row table:style-name=»ТаблицаПлатежей.СтильСтрокиЗамены«
-
На этом заканчиваем редактирование, сохраняем и закрываем файл, соглашаемся на перезапись его в архиве, выходим из архива, переименовываем расширение файла обратно на .odt. На этом внесение изменений закончено.
-
Настройка совместимости шаблона и таблиц в программе LibreOffice Writer.
-
Заполним поля. Открываем документооборот – Нормативно-Справочная информация – Правила автозаполнения шаблонов файлов – Создать. Работаем с верхним табличным полем. Далее действуем по правилам заполнения шаблонов.
-
Заполним поля таблицы. Смотрим на нижнее поле Дополнение alexstey. Нажимаем Добавить для добавления новой строки. В поле Заполняемая таблица пишем ЗаполнениеТаблицаПлатежей (добавленная табличная часть в справочник Внутренние документы и совпадающая по названию таблица в шаблоне документа LibreOffice Writer), в поле Заменяемое поле пишем ТаблицаПлатежейПоле1, в поле Значение замены реквизит делаем произвольную запись, например ЗначПоле1 (главное, чтобы оно не пустовало).
-
Сохраняем, закрываем. Можно работать
-
приложенный файл _ДокументооборотОбработкаТаблиц.rar содержит текст двух исправленных модулей и описание функции.
Вопросы, замечания и предложения по функции и ее внедрению готов принять на 1c@ptmail.ru
alexstey
Работа интересная, но исправлять типовую 1С не хочется
Применять не стал, но Алексею спасибо за отзывчивый, плюсов ать не умею
Для «плюсования» есть белая звездочка в оранжевом квадрате. Жмите на нее
Скажите, пожалуйста, а «перезаполнение файла данными документа» нормально обновляет данные таблицы? не вкладывает их одну в другую?