Содержание:
1. Чек-лист разработки для создания внешней печатной формы
2. Пример разработки в 1С 8.3 Зарплата и управление персоналом
Довольно часто пользователи 1С просят разработать печатную формы в формате файлов MS Word. Это обусловлено широкими возможностями форматирования этого типа документа либо удобством его дальнейшего использования и хранения. В этой статье я хочу описать надежный и простой алгоритм создания внешних печатных форм, который я использую для решения поставленных задач. Дополнительным преимуществом этого алгоритма является то, что не требуется вносить изменения в основную конфигурацию. Т.е. используется для конфигураций, находящихся на поддержке без возможности изменения.
Весь принцип реализации строиться на использовании расширения. Причем, добавлять в расширение объекты основной конфигурации практически не нужно. Это очень удобно для дальнейших обновлений конфигураций с расширениями. Возникает вопрос: «А при чем здесь внешняя печатная форма, ведь это расширение?». Дело в том, что расширение легко устанавливается в программу в пользовательском режиме. А если еще ее объекты обособленны от объектов основной конфигурации, то, я думаю, можно называть ее внешней.
Пожалуй, единственным ограничением является наличие в конфигурации Библиотеки стандартных подсистем (далее – БСП). Данный метод «активно» использует механизмы этой библиотеки, поэтому БСП должно быть интегрировано в конфигурацию информационной базы (далее – ИБ). Но здесь особо беспокоиться не нужно, т.к. БСП сейчас присутствует практически во всех типовых конфигурациях.
Перед тем как продемонстрировать пример разработки, предлагаю ознакомиться с чек-листом и представить общую последовательность действий.
1. Чек-лист разработки для создания внешней печатной формы
1.Создать расширение в конфигурации ИБ
2.В расширении добавить новую обработку (далее Обработка)
3.Обработку включить в подсистему ПодключаемыеОтчетыИОбработки
4.Создать шаблон (документ в формате MS Word) с необходимым содержанием и установить параметры
5.В обработку добавить макет и загрузить в него файл шаблона, созданного в пункте 4
6.В обработку добавить форму и в модуле формы создать функцию:
· ВыполнитьКомандуПечати – экспортная, пользовательская
7.В модуле менеджера обработки создать 3 процедуры и 4 функции:
· ПриОпределенииНастроек — экспортная, предопределенная БСП
· ДобавитьКомандыПечати — экспортная, предопределенная БСП
· Печать — экспортная, предопределенная БСП
· ПолучитьДанныеПечати — экспортная, предопределенная БСП
· ПолучитьДанныеОбъекта – пользовательская
· ОбластиМакетаОфисногоДокумента – пользовательская
· НапечататьДокумент– пользовательская
2. Пример разработки в 1С 8.3 Зарплата и управление персоналом
Давайте рассмотрим этот процесс на примере создания печатной формы дополнительного соглашения к трудовому договору в формате файла MS Word. В качестве информационной базы я буду использовать конфигурацию 1C 8.3 Зарплата и управление персоналом версии 3.1.14.183, установленную на платформе 1С:Предприятие 8.3 (8.3.17.1496). В данной конфигурации используется БСП версии 3.1.2.469.
1.Создаем расширение в конфигурации ИБ.
Запускаем 1С:Предприятие в режиме конфигуратора. Открываем список расширений с помощью команды «Расширения конфигурации» пункта меню «Конфигурация» и добавляем новое расширение. После добавления расширения в список, необходимо будет снять флажок «Безопасный режим» как это показано на Рис.1. Если безопасный режим оставить включенным, то при печати нашей формы программа будет «ругаться».
Рис. 1 Расширение конфигурации в 1С 8.3 Зарплата и управление персоналом
2.Добавляем в расширение новую обработку.
Делаем двойной клик по строке списка с нашим расширением и открываем конфигурацию расширения. В дереве конфигурации находим «Обработки» … выделяем … правая клавиша мышки … Добавить. Я назвал обработку «Расш1_ПечатьWord».
3. Включаем обработку в подсистему ПодключаемыеОтчетыИОбработки.
Для этого необходимо добавить в расширение подсистему ПодключаемыеОтчетыИОбработки из основной конфигурации. Переходим в окно основной конфигурации, находим подсистему ПодключаемыеОтчетыИОбработки в дереве, выделяем и через контекстное меню жмем команду «Добавить в расширение» (см. Рис.2)
Рис. 2 Добавление в расширение в 1С 8.3 Зарплата и управление персоналом
Возвращаемся в окно конфигурации расширения, находим добавленную нами подсистему и уже здесь в ее состав добавляем нашу обработку.
4.Создаем шаблон-документ Word с необходимым содержанием и параметрами.
На этом этапе берем шаблон доп. соглашения – документ в формате MS Word c расширением .docx, устанавливаем разделители областей вывода, а в местах, где необходимо подставить значения из базы 1С устанавливаем маркеры параметров.
Разделитель области предназначен для того, чтобы «именовать» части документа-шаблона для дальнейшего вывода средствами встроенного языка 1С. Разделители представляют собой пару — открывающий тэг {v8 Область.<Имя области>} в самом начале области документа и закрывающий тэг {/v8 Область.<Имя области>} в самом конце области документа.
В этом примере я не буду рассматривать ситуацию с выводом нескольких областей. В большинстве случаев это и не требуется. Например, для вывода не сложной формы дополнительного соглашения к трудовому договору достаточно весь документ поместить в одну область. Так ее и назовем «ВесьДокумент».
Маркеры параметров выполняют такую же роль, как и параметры стандартных печатных макетов, и имеют следующий формат {v8 <Имя параметра>}
Рис. 3 Документ в формате MS Word
5. Добавляем в обработку макет и загружаем в него файл шаблона.
Добавляем в обработку макет. Тип макета – двоичные данные. Название должно начинаться с префикса ПФ_DOC_ Для этого примера я назвал его «ПФ_DOC_ДопСоглашение».
Далее кликаем по макету печатной формы и открывается форма с кнопкой «Загрузить из файла». Загружаем наш шаблон .docx, созданный ранее(пункт 4).
6. В обработку добавляем форму.
Теперь в нашей обработке «Расш1_ПечатьWord» создаем форму. Форма должна быть основной, поэтому при создании формы важно, чтобы флажок «Назначить форму основной» был установлен.
В модуль формы копируем функцию с Рис.4
Рис. 4 Функция модуля формы в 1С 8.3 Зарплата и управление персоналом
7. В модуле менеджера обработки создадим необходимые процедуры и функции.
На данном этапе все просто. Копируем в модуль менеджера обработки тексты процедур и функций, представленные на листингах ниже. Необходимо лишь заменить отдельные участки (я их подчеркнул красными линиями) в соответствии с конкретной задачей.
7.1 ПриОпределенииНастроек
Данная процедура является предопределенной БСП, поэтому название нужно сохранить. Изменить можно размещение (подчеркнуто красным). В моем примере команда печати должна располагаться в справочнике сотрудники.
Рис. 5 Команда печати в 1С 8.3 Зарплата и управление персоналом
7.2 ДобавитьКомандыПечати
Данная процедура является предопределенной БСП поэтому название нужно сохранить. Здесь мы описывает команду, которая будет запускать печать нашей формы. Свойство МенеджерПечати определяет нахождение модуля менеджера где располагается процедура Печать. Свойство Обработчик определяет нахождение и название клиентского обработчика команды. В нашем случае он располагается на форме обработки.
Рис. 6 Добавление команды печати в 1С 8.3 Зарплата и управление персоналом
7.3 Печать
Данная процедура является предопределенной БСП поэтому название нужно сохранить. В переменную ИдентификаторКоманды и ИмяМенеджераПечати устанавливаем имя идентификатора и менеджера печати из процедуры ДобавитьКомандуПечати (пункт 7.2).
Рис. 7 Процедура печати в 1С 8.3 Зарплата и управление персоналом
7.4 ПолучитьДанныеПечати
Данная функция является предопределенной БСП поэтому название нужно сохранить. Аналогично предыдущему шагу, устанавливаем в переменную ИдентификаторКоманды имя идентификатора из процедуры ДобавитьКомандуПечати.
В параметр функции УправлениеПечатью.МакетПечатнойФормы устанавливаем полный путь к макету печатной формы, созданному в пункте 5 нашей статьи.
Рис. 8 Получение данных печати в 1С 8.3 Зарплата и управление персоналом
7.5 ПолучитьДанныеОбъекта
В этой функции необходимо создать структуру с данными, которыми будет заполняться печатная форма. Ключ структуры – имя параметра шаблона Word {v8 <Имя параметра>}, а значение – значение из базы 1С. Параметр функции СсылкаНаОбъект – ссылка на объект печати. В нашем случае это ссылка на сотрудника.
Рис. 9 Получение данных объекта в 1С 8.3 Зарплата и управление персоналом
7.6 ОбластиМакетаОфисногоДокумента
Здесь описываем области и устанавливаем типы.
Возможные типы областей:
· Общая – используется однократно.
· СтрокаТаблицы – используется для вывода множества строк;
· Список – используется для вывода множества строк;
· ВерхнийКолонтитул;
· НижнийКолонтитул;
Рис. 10 Области макета в 1С 8.3 Зарплата и управление персоналом
7.7 НапечататьДокумент
Эта функция отвечает за вывод и заполнение областей. В блоке, отмеченном красной линией, нужно описать последовательный вывод областей. Здесь меняем/устанавливаем только название области. В нашем случае «ВесьДокумент»
Рис. 11 Функция напечатать документ в 1С 8.3 Зарплата и управление персоналом
На этом все. Запускаем печать и получаем ожидаемый результат.
Рис. 12 Печать макета документа Word
В заключении хотелось бы добавить, что с помощью одной такой обработки можно реализовать множество различных команд печати документа.
В интернете можно найти множество авторских методик создания внешней печатной формы в формате документа MS Word, однако, методы на основе БСП являются наиболее надежными.
Специалист компании «Кодерлайн»
Игорь Торба
0
14.01.201616:1414.01.2016 16:14:14
Доброго времени суток!
Для большинства организаций стандартная печатная форма какого-либо договора в программах 1С не подходит. Поэтому фирма 1С предоставила возможность добавлять дополнительные печатные формы для документов и других объектов. В этой статье я хочу рассказать, как создать и подключить внешнюю печатную форму договора, которая будет открываться в Microsoft Word.
Подключение дополнительных внешних печатных форм
Запускаем 1С:Предприятие. Открываем справочник «Дополнительные внешние печатные формы» через меню «Сервис» — «Дополнительные отчеты и обработки».
Нажмем кнопку «Добавить», затем зарегистрируем новую печатную форму, нажав «Заменить файл внешней обработки». Автоматически заполнится принадлежность печатной формы документу «Реализация товаров и услуг». Выбираем «Договор» в колонке «Заменяемая печатная форма», чтобы стандартная печатная форма более не использовалась.
Запускаем 1С:Предприятие, открываем справочник «Контрагенты», выбираем контрагента, для которого будет печататься наш договор и по кнопке «Файлы» переходим в справочник «Хранилище дополнительной информации», загружаем в него шаблон для договора и ,обязательно, называем его «Договор», как показано на рисунке ниже, иначе программа не сможет найти макет для печатной формы.
Теперь открываем любой документ «Реализация товаров и услуг» и нажимаем кнопку «Печать» — «Договор». Откроется документ Microsoft Word с договором.
Внешнюю печатную форму «Договор» и макет к ней можно скачать по ссылкам ниже.
Макет трудового договора в формате Microsoft Word
Существует, по меньшей мере, три способа создания шаблона:
1. В документе Word создаются опорные фразы, например, «[НомерДоговора]», затем, в модуле обработки производится поиск и замена значений.
2. В документе Word создаются закладки, к которым потом можно обращаться по имени. Минус этого способа в том, что метка должна быть уникальна, т.е., если нужно вставить фамилию сотрудника в каждый абзац текста, то придется сделать несколько закладок с разными именами.
3. В документе Word добавляются служебные поля, например, «DocVariable» или «Author». Используя DocVariable можно обращаться к переменной по имени, например, «ДокументВорд.Variables.Add(ИмяПеременной, ЗначениеПеременной);», но ее не видно в шаблоне. Поле «Author» отображается в шаблоне, но обращаться к нему придется в цикле по индексу: «ДокументВорд.Fields.item(Индекс).Result.Text = Значение;».
На мой взгляд, первый способ является самым оптимальным. Шаблон документа легко редактируется, опорные фразы видны в тексте. Поэтому шаблон создаём этим способом.
Открываем программу Microsoft Office. Для примера добавляем пару строк, как показано на рисунке ниже и сохраняем шаблон.
Создание внешней печатной формы «Договор»
Запускаем 1С:Предприятие в режиме «Конфигуратор» и через меню «Файл» — «Новый» создаём внешнюю обработку. Добавляем реквизит «Ссылка на объект» и макет «Параметры_Авторегистрации» с типом «Табличный документ». Тип реквизита «Ссылка на объект» зависит от того, для каких объектов будет использоваться печатная форма, в нашем случае печатная форма будет использовать для документа «Реализация товаров и услуг», поэтому указываем тип «ДокументСсылка.РеализацияТоваровУслуг».
Разработка процедуры печати
Параметры авторегистрации
Для автоматического заполнения принадлежности печатной формы к объектам конфигурации, заполним макет «Параметры_Авторегистрации». Это будет табличный документ, содержащий одну колонку с именами объектов метаданных, к которым будет принадлежать печатная форма. В нашем случае таблица будет выглядеть следующим образом.
14.01.201616:1414.01.2016 16:14:14
Демонстрация процесса формирования внешней печатной формы документа из макета Word средствами БСП, колонтитулы, коллекции, и обычные параметры
Функция СведенияОВнешнейОбработке() Экспорт
// Стандартное описание сведений о внешней печатной форме
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.БезопасныйРежим = Ложь;
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Наименование = "Название печатной формы";
ПараметрыРегистрации.Назначение.Добавить("Справочник.ФизическиеЛица");
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Название команды"; //Синоним
НоваяКоманда.Идентификатор = "НазваниеКоманды"; //ПолноеИмя
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
Возврат ПараметрыРегистрации;
КонецФункции
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// Просто передаем управление дальше если удовлетворяет условию
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "НазваниеКоманды") Тогда
ПечатьДокумента(КоллекцияПечатныхФорм, МассивОбъектов, ОбъектыПечати);
КонецЕсли;
КонецПроцедуры
Процедура ПечатьДокумента(КоллекцияПечатныхФорм, МассивОбъектов, ОбъектыПечати) Экспорт
// Сначала получим данные а потом передадим их для заполнения макета
МассивДанныхЗаполнения = ПолучитьДанныеДляПечатиДокумента(МассивОбъектов);
ВывестиДанныеДокументаВТабличныйДокумент(КоллекцияПечатныхФорм, МассивДанныхЗаполнения, ОбъектыПечати);
КонецПроцедуры
Функция ПолучитьДанныеДляПечатиДокумента(МассивОбъектов)
// здесь происходит заполнение данными для ПФ
Данные = Новый Структура;
Данные.Вставить("Организация", "ООО ""Рога и копыта""");
Данные.Вставить("Контрагент", "ИП Иванов");
Данные.Вставить("СуммаОплаты", 10523);
Данные.Вставить("Дата", '202110102158');
ТаблицаДанных = Новый ТаблицаЗначений;
ТаблицаДанных.Колонки.Добавить("Номенклатура");
ТаблицаДанных.Колонки.Добавить("Количество");
ТаблицаДанных.Колонки.Добавить("Сумма");
Строка = ТаблицаДанных.Добавить();
Строка.Номенклатура = "тест";
Строка.Количество = 2;
Строка.Сумма = 50;
Строка = ТаблицаДанных.Добавить();
Строка.Номенклатура = "тест1";
Строка.Количество = 3;
Строка.Сумма = 55;
Строка = ТаблицаДанных.Добавить();
Строка.Номенклатура = "тест2";
Строка.Количество = 4;
Строка.Сумма = 51;
ТаблицаДанныхВМассиве = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаДанных);
Данные.Вставить("ТаблицаДанных", ТаблицаДанныхВМассиве);
Возврат Данные;
КонецФункции
Процедура ВывестиДанныеДокументаВТабличныйДокумент(КоллекцияПечатныхФорм, МассивДанныхЗаполнения, ОбъектыПечати)
ДвоичныеДанныеМакета = ПолучитьМакет("ПФ_DOC_НазваниеМакета");
Если ДвоичныеДанныеМакета <> Неопределено Тогда
// Инициализируем печатную форму
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "НазваниеКоманды");
// Наличие пустого табличного документа в коллекции обязательно
ПечатнаяФорма.ТабличныйДокумент = Новый ТабличныйДокумент;
Макет = УправлениеПечатью.ИнициализироватьМакетОфисногоДокумента(ДвоичныеДанныеМакета,Неопределено);
ПечатнаяФормаДокумента = УправлениеПечатью.ИнициализироватьПечатнуюФорму(Неопределено, Макет.НастройкиСтраницыМакета, Макет);
// Определим какие области в документе Word хотим заполнить
// Для этого у нас документ должен быть размечен конструкциями
// {v8 Область.НазваниеОбласти}
// {/v8 Область.НазваниеОбласти}
// наличие областей обязательно
// Область для заполнения обычных параметров в тексте
ОбластьЗаголовок = Новый Структура;
ОбластьЗаголовок.Вставить("ИмяОбласти", "Заголовок");
ОбластьЗаголовок.Вставить("ТипОбласти", "Общая");
// Пример определения областей коллекций (таблица и нумерованный или обычный списки)
ОбластьШапкаТаблицы = Новый Структура;
ОбластьШапкаТаблицы.Вставить("ИмяОбласти", "ШапкаТаблицы");
ОбластьШапкаТаблицы.Вставить("ТипОбласти", "Общая");
ОбластьСтрокаТаблицы = Новый Структура;
ОбластьСтрокаТаблицы.Вставить("ИмяОбласти", "СтрокаТаблицы");
ОбластьСтрокаТаблицы.Вставить("ТипОбласти", "СтрокаТаблицы");
// Область должна быть определена первым элементом списка
// {v8 Область.НумерованныйСписок}
// 1.{v8 Номенклатура}
// {/v8 Область.НумерованныйСписок}
ОбластьНумерованныйСписка = Новый Структура;
ОбластьНумерованныйСписка.Вставить("ИмяОбласти", "НумерованныйСписок");
ОбластьНумерованныйСписка.Вставить("ТипОбласти", "Список");
// Область должна быть определена первым элементом списка
// {v8 Область.МаркированныйСписок}
// • {v8 Номенклатура}
// {/v8 Область.МаркированныйСписок}
ОбластьМаркированногоСписка = Новый Структура;
ОбластьМаркированногоСписка.Вставить("ИмяОбласти", "МаркированныйСписок");
ОбластьМаркированногоСписка.Вставить("ТипОбласти", "Список");
// Пример определения областей колонтитулов, эти области в документе есть по умолчанию,
// если колонтитулы определены в самом документе
ОбластьВерхнийКолонтитул = Новый Структура;
ОбластьВерхнийКолонтитул.Вставить("ИмяОбласти", "ВерхнийКолонтитул");
ОбластьВерхнийКолонтитул.Вставить("ТипОбласти", "ВерхнийКолонтитул");
ОбластьНижнийКолонтитул = Новый Структура;
ОбластьНижнийКолонтитул.Вставить("ИмяОбласти", "НижнийКолонтитул");
ОбластьНижнийКолонтитул.Вставить("ТипОбласти", "НижнийКолонтитул");
// Передаем данные заполнения для заполнения печатной формы
// Имена параметров данных заполнения должны совпадать с размеченными параметрами в документе в виде
// {v8 НазваниеПараметра}
Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьЗаголовок);
УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФормаДокумента, Область, МассивДанныхЗаполнения, Ложь);
Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьВерхнийКолонтитул);
УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФормаДокумента, Область, МассивДанныхЗаполнения);
Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьНижнийКолонтитул);
УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФормаДокумента, Область, МассивДанныхЗаполнения);
Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьШапкаТаблицы);
УправлениеПечатью.ПрисоединитьОбласть(ПечатнаяФормаДокумента, Область, Ложь);
Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьСтрокаТаблицы);
УправлениеПечатью.ПрисоединитьИЗаполнитьКоллекцию(ПечатнаяФормаДокумента, Область, МассивДанныхЗаполнения.ТаблицаДанных);
Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьНумерованныйСписка);
УправлениеПечатью.ПрисоединитьИЗаполнитьКоллекцию(ПечатнаяФормаДокумента, Область, МассивДанныхЗаполнения.ТаблицаДанных);
Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьМаркированногоСписка);
УправлениеПечатью.ПрисоединитьИЗаполнитьКоллекцию(ПечатнаяФормаДокумента, Область, МассивДанныхЗаполнения.ТаблицаДанных);
// Поместим получившийся документ в коллекцию печатных форм, в раздел ОфисныеДокументы
// так БСП поймет что нужно открывать Word при формировании печатной формы
АдресХранилищаОфисныйДокумент = УправлениеПечатью.СформироватьДокумент(ПечатнаяФормаДокумента);
УправлениеПечатью.ОчиститьСсылки(ПечатнаяФормаДокумента, Ложь);
УправлениеПечатью.ОчиститьСсылки(Макет);
ОфисныеДокументы = Новый Соответствие;
ОфисныеДокументы.Вставить(АдресХранилищаОфисныйДокумент, НСтр("ru = 'Название документа'"));
ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Название документа (документ Microsoft Word)'");
ПечатнаяФорма.ОфисныеДокументы = ОфисныеДокументы;
КонецЕсли;
КонецПроцедуры
Комментарии
|
|||
Andreik113
07.10.22 — 13:02 |
Есть вордовский документ. Исходя из него нужно сделать печатную форму, чтобы некоторые данные в этом документе подставлялись из 1С-ки. Как загрузить этот документ в макет обработки? в интернете столько информации, что непонятно что да как. |
||
Asmody
1 — 07.10.22 — 13:19 |
наяндексить не получилось? https://www.youtube.com/watch?v=z_Cq4RKQxX0 |
||
Asmody
2 — 07.10.22 — 13:20 |
Если конфа на БСП, то вот https://infostart.ru/1c/articles/1058604/ |
||
Asmody
3 — 07.10.22 — 13:21 |
вот еще https://spb.koderline.ru/expert/programming/article-vneshnyaya-pechatnaya-forma-1s-s-maketom-dokumenta-word/ |
||
Kassern
4 — 07.10.22 — 13:26 |
(0) Если «в двух словах», то ставишь параметры в нужных местах дока и пихаешь в макет. При печати получаешь док из макета и через COMОбъект его читаешь, заменяя параметры на нужный текст, а после выводишь на экран |
||
Garykom
5 — 07.10.22 — 13:39 |
(0) Не советую. |
||
Garykom
6 — 07.10.22 — 13:41 |
(5)+ для экселя там же сам поищи |
||
Serg_1960
7 — 07.10.22 — 13:43 |
Вот ещё |
||
Garykom
8 — 07.10.22 — 13:46 |
Добавление в платформу для ТабличныйДокумент.Прочитать(ПутьКФайлу) было бы фантастикой не только для xlsx но и для docx, pdf и т.д. |
||
Масянька
9 — 07.10.22 — 13:47 |
(5) Да, нормально БСП работает. |
||
Garykom 10 — 07.10.22 — 13:55 |
(9) не всегда
но согласен шаблоны печформ в ворде удобны если надо на юзеров свалить их правку |