Сохранение нескольких табличных документов в одну книгу Excel
ВВЕДЕНИЕ
В 1С миллион лет назад появилась возможность сохранять табличный документ в Excel. А с версии 8.3.какой-то там еще и читать Excel в этот самый табличный документ. При этом прочитать 1С может документ с произвольным количеством закладок (книг), а вот если записать табличный документ обратно, то все содержимое будет помещено в лист "TDSheet" (ну или как-то так).
Меня давно мучила мысль о том, почему 1С не может записать несколько листов в одну книгу. Оказалось, что может. Давайте разберемся, каким образом она это делает…
НОВЫЕ СТАРЫЕ ОБЪЕКТЫ
Уже давно в 1С существует такой объект, как "ПакетОтображаемыхДокументов". Если зайти в синтаксис-помощник, то толку от этого будет мало — скудность информации зашкаливает…
Что же делает этот объект? Он позволяет записать несколько файлов в один. Как оказалось, среди типов записываемых документов есть и Excel.
Познакомился я с этим замечательным объектом при осуществлении поддержки механизма автоматической печати документов, который прекрасно жил на моей прошлой работе до часа Х. Час Х настал тогда, когда сохраняемые 1С PDF перестали сохраняться в том виде, в котором они должны были бы быть напечатаны. До какого-то времени PDF из табличного документа сохранялись таким образом, что количество экземпляров для печати становилось количеством повторов в PDF-файле в соответствии с настройками печати конкретного табличного документа. И вот пришел час Х — обновили платформу и автопечать выплюнула все документы в одном экземпляре. Этакая подстава от 1С (кстати, последняя подстава от желтых была в последней версии, и связана она с тем, что теперь нельзя редактировать строку табличной части, если выделено более одной строки, а кое-кто пользовался редактированием выделенных строк для того, чтобы установить всем выделенным строкам отредактированное значение — это было очень удобно, спасибо что лишили нас этого), которую совсем не ждешь. Стали разбираться и нашли в документации, что теперь для сохранения PDF в том виде, в котором должен быть напечатан документ, следует использовать новый метод объекта "ПакетОтображаемыхДокументов", который пишет как раз PDF-файл (и никакой другой).
Вообще, на просторах желтого сайта есть пример использования данного объекта. Смотрите здесь. Давайте разберемся, как это поможет нам сохранить несколько табличных документов в одну книгу.
ОПИСАНИЕ ОБЪЕКТА
Сам по себе пакет отображаемых документов по большому состоит из коллекции "Состав", имеющей тип "ЭлементПакетаОтображаемыхДокументов", в который, как следует из информации по ссылке выше, можно поместить в том числе и пакет отображаемых документов. Т.е. возможности коллекции достаточно большие — можно поместить в нее несколько пакетов, для которых количество печатаемых экземпляров будет отличаться, в итоге можно напечатать 10 экземпляров для первого документа, и 3 для второго. Также у этого объекта есть парочка методов сохранения — для PDF и для всего на свете. Ну и их экземпляры для асинхронной работы тоже наличествуют.
Для создания объекта существует простой конструктор:
ОднаКнига = Новый ПакетОтображаемыхДокументов;
Создав объект "ОднаКнига", мы можем в его состав поместить несколько табличных документов каким-то таким образом:
Элт = ОднаКнига.Состав.Добавить();
Элт.Данные = ПоместитьВоВременноеХранилище(ТабличныйДокумент);
А сохранить в одну книгу все это хозяйство можно так:
ОднаКнига.Записать(ИмяФайла, ТипФайлаПакетаОтображаемыхДокументов.XLSX);
ЗАКЛЮЧЕНИЕ
Данный метод работает в Linux — у меня на скриншоте как раз конфигуратор, открытый на Ubuntu 18.4, в котором я и отлаживал тестовый примерчик. В итоге получилась замечательная обработка, которая создает столько закладок, сколько вам нужно, открывает в закладке файл Excel и сохраняет файлы со всех закладок в одну книгу. Реализовать данную обработку вы можете в качестве домашнего задания…
Кассно. Можно ещё с этим совместитьhttps://infostart.ru/public/607750/
(1) а Вы, кстати, можете прикрутить туда этот вариант сохранения в Excel (ссылка на данную статью подразумевается) )))
Свои названия листам можно давать?
(3) можно.
Капец. Как я мог это пропустить?
Супер. А в стандартной пакетной печати счет фактура + счет + накладная сохранение в екселе отдельно каждый файл если не ошибаюсь.
надо попробывать
Век живи — век учись.
(6)
Есть мнение, что разработчики типовых сами не знают весь функционал 1С.
(0),
Чтото я у этого объекта не вижу метода Записать() …Сорри, старая платформа )
(10)
Очень старая )))
(2)Прикрутил Ссылку на вас вставил. Спасибо! Хорошая статья про хорошую технологию !
К сожалению данный функционал доступен только с 8.3.12
(13) так 8.3.12 уже морально устарела. Для бухни типовой уже 8.3.13 нужна.
Спасибо, отличное рабочее решение. Если бы можно уже имеющийся многостраничный файл Excel загрузить в массив табличных документов, то можно было бы добавлять страницы в уже имеющийся файл Excel.
(14) Пока еще 8.3.12.1685.
(15)
В действительности при загрузке Excel в табличный документ, в нем уже в коллекции областей содержатся поименованные области, соответствующие странице Excel. Можно вывести эти области по-одной в новый табличный документ и получить таким образом массив:
Не скажу, что вот именно такой код получится, но где-то тут.
(17)
Для каждого Область ИЗ ТабличныйДокумент.Области Цикл
НовыйТабДок = Новый ТабличныйДокумент;
НовыйТабДок.Вывести(Область);
МассивТабДокументов.Добавить(НовыйТабДок);
КонецЦикла;
К сожалению потерялась вся структура исходного листа. Да еще и съехала на несколько сот строк ниже. Интересно, можно ли как-нибудь прочитать многостраничный Excel с его группировками в Табличный документ без самого Excel или это фантастика?
Если кто не знал еще одна фича пакета отображаемых документов: при сохранении нескольких табличных документов в Word можно добиться чередования книжной и альбомной ориентации страниц в одном документе
(4) подскажите, пожалуйста, как присвоить имена листам?
(20) нашла сама -ЭлементПакетаОтображаемыхДокументов.Наименование
(18) Подскажите так и не нашли способ прочитать многостраничный Excel ?
Нужно открыть Книгу Excel, прочитать данные, кое что изменить и записать обратно без порчи файла.
(22) к сожалению, нет. В 14 и 15 платформе не проверял, но в 12 форматирование не сохраняется.
Полезная информация, плюс автору за раскрытие и минус справке 1С за примитивность