1с как сохранить xml на клиенте

Обновлено: 08.07.2024

В основе работы с XML-файлами лежит технология доступа SAX, которая осуществляет считывание по одному тегу. Для этого существует два типа данных – ЗаписьXML и ЧтениеXML.
Запись данных справочника в XML-файл:
Код 1C v 8.х

Чтение данных из XML-файла в справочник:
Код 1C v 8.х
Создадим обработку в типовой конфигурации для экспорта плана счетов. Структура xml-файла должна быть такой. Корневой элемент xml-документа соответствует плану счетов в целом. В нем располагаются подчиненные элементы с именем Счет, содержащие информацию о счетах. В качестве содержимого элементов указывается наименование счета. Остальные данные записываются в качестве атрибутов (код, признаки валютного, количественного учета и пр.). В качестве подчиненных элементов для элемента Счет задаются элементы, обозначающие его субсчета с теми же атрибутами. Приведем код процедуры экспорта плана счетов.
Код 1C v 7.x
В результате будет получен файл, вот его фрагмент:
Код


<?xml version="1.0" encoding="windows-12Sl" ?> - <ПланСчетов>
<Счет Код="00" Валютный="0" Количественный="0" Забалансовый="0" вид="активно-пассивный">Вспомогательный</Счет>
- <Счет Код="01" Валютный="0" Количественный="0" Забалансовый="0" вид="активный">
Основные средства
<Субсчет Код="01.1" Валютный="0" Количественный="0" Забалансовый="0"
вид="активный">ОС в организации</Субсчет> <Субсчет Код="01.2" Валютный="0" Количественный="0" Забалансовый="0"
вид="активный">Выбытие ОС</Субсчет> </Счет>
- <Счет Код="02" Валютный="0" Количественный="0" Забалансовый="0" вид="пассивный">
Амортизация ОС

А теперь приведем код для импорта плана счетов из xml-файла в новую конфигурацию. Код модуля соответствующей обработки должен содержать процедуру Выполнить(), которая имеет такой вид.

Представленные в публикации процедуры были рождены потребностью сохранять настройки внешних обработок с возможностью последующего их использования на других компьютерах и в других информационных базах. Работают они, однако, не только для обработок, но и для любых других объектов 1С, имеющих реквизиты и табличные части. Сам я пользуюсь ими достаточно часто, при решении самых различных задач, потому решил поделиться, глядишь кому-нибудь пригодится. Так же, думаю, этот материал может быть полезен начинающим программистам как пример рекурсивного чтения структуры XML-файла, к тому же процедуры малы, просты и легко "допиливаются" под специфические задачи.

Сохранение производится процедурой СохранитьРеквизитыИТабличныеЧасти . В качестве параметров она принимает сохраняемый объект и имя файла. Ссылочные реквизиты сохраняются в виде GUID.

Процедура СохранитьРеквизитыИТабличныеЧасти ( Объект , ИмяФайлаXML =Неопределено) Экспорт
ФайлXML = Новый ЗаписьXML ;
ФайлXML . ОткрытьФайл ( ИмяФайлаXML );
ФайлXML . ЗаписатьОбъявлениеXML ();
ФайлXML . ЗаписатьНачалоЭлемента ( "Root" );
ФайлXML . ЗаписатьАтрибут ( "Объект" , Объект . Метаданные (). Имя );
//Сохраняем реквизиты
Для Каждого Реквизит Из Объект . Метаданные (). Реквизиты Цикл
ФайлXML . ЗаписатьНачалоЭлемента ( "Реквизит" );
ФайлXML . ЗаписатьАтрибут ( "Имя" , Реквизит . Имя );
ТипЗначения = ТипЗнч ( Объект [ Реквизит . Имя ]);
Если Не ТипЗначения = Тип ( "Неопределено" ) Тогда
ФайлXML . ЗаписатьАтрибут ( "ИмяТипа" , XMLТип ( ТипЗначения ). ИмяТипа );
ФайлXML . ЗаписатьАтрибут ( "URI" , XMLТип ( ТипЗначения ). URIПространстваИмен );
КонецЕсли;
ФайлXML . ЗаписатьТекст ( XMLСтрока ( Объект [ Реквизит . Имя ]));
ФайлXML . ЗаписатьКонецЭлемента ();
КонецЦикла;
//Сохраняем табличные части
Для Каждого ТЧ из Объект . Метаданные (). ТабличныеЧасти Цикл
ФайлXML . ЗаписатьНачалоЭлемента ( "ТабличнаяЧасть" );
ФайлXML . ЗаписатьАтрибут ( "Имя" , ТЧ . Имя );
Для Каждого СтрокаТЧ из Объект [ ТЧ . Имя ] Цикл
ФайлXML . ЗаписатьНачалоЭлемента ( "ЭлементКоллекции" );
Для Каждого РеквизитТЧ Из ТЧ . Реквизиты Цикл
ФайлXML . ЗаписатьНачалоЭлемента ( "Реквизит" );
ФайлXML . ЗаписатьАтрибут ( "Имя" , РеквизитТЧ . Имя );
ТипЗначения = ТипЗнч ( СтрокаТЧ [ РеквизитТЧ . Имя ]);
Если Не ТипЗначения = Тип ( "Неопределено" ) Тогда
ФайлXML . ЗаписатьАтрибут ( "ИмяТипа" , XMLТип ( ТипЗначения ). ИмяТипа );
ФайлXML . ЗаписатьАтрибут ( "URI" , XMLТип ( ТипЗначения ). URIПространстваИмен );
КонецЕсли;
ФайлXML . ЗаписатьТекст ( XMLСтрока ( СтрокаТЧ [ РеквизитТЧ . Имя ]));
ФайлXML . ЗаписатьКонецЭлемента ();
КонецЦикла;
ФайлXML . ЗаписатьКонецЭлемента ();
КонецЦикла;
ФайлXML . ЗаписатьКонецЭлемента ();
КонецЦикла;
Если Не ФайлXML =Null Тогда
ФайлXML . ЗаписатьКонецЭлемента ();
ФайлXML . Закрыть ();
КонецЕсли;
КонецПроцедуры

За чтение объекта отвечают процедуры ЗагрузитьРеквизитыИТабличныеЧасти и ЗагрузитьОбъектРекурсивно . Чтобы прочитать объект вызывается первая, ей передаются объект, который необходимо заполнить, и имя файла. Вторая является вспомогательной.

Процедура ЗагрузитьРеквизитыИТабличныеЧасти ( Объект , ИмяФайлаXML =Неопределено) Экспорт
Если Не ИмяФайлаXML = Неопределено Тогда
ФайлXML = Новый ЧтениеXML ;
ФайлXML . ОткрытьФайл ( ИмяФайлаXML );
Пока ФайлXML . Прочитать () Цикл
Если ФайлXML . ТипУзла = ТипУзлаXML . НачалоЭлемента Тогда
ЗагрузитьОбъектРекурсивно ( ФайлXML , Объект , ФайлXML . Имя );
КонецЕсли
КонецЦикла;
КонецЕсли;
КонецПроцедуры

Процедура ЗагрузитьОбъектРекурсивно ( ФайлXML , Объект , знач ИмяУзла )
ИмяТипа = "" ;
ПространствоИмен = "" ;
Пока ФайлXML . ПрочитатьАтрибут () Цикл
Если ФайлXML . Имя = "ИмяТипа" Тогда
ИмяТипа = ФайлXML . Значение ;
ИначеЕсли ФайлXML . Имя = "URI" Тогда
ПространствоИмен = ФайлXML . Значение ;
КонецЕсли;
КонецЦикла;
Пока ФайлXML . Прочитать () Цикл
Если ФайлXML . ТипУзла = ТипУзлаXML . КонецЭлемента И ФайлXML . Имя = ИмяУзла Тогда
Возврат;
ИначеЕсли ФайлXML . ТипУзла = ТипУзлаXML . Текст Тогда
ТипОбъекта = ИзXMLТипа ( ИмяТипа , ПространствоИмен );
Если НЕ ТипОбъекта = Неопределено тогда
Объект = XMLЗначение ( ТипОбъекта , ФайлXML . Значение );
КонецЕсли;
ИначеЕсли ФайлXML . ТипУзла = ТипУзлаXML . НачалоЭлемента Тогда
ИмяТекУзла = ФайлXML . Имя ;
Если ФайлXML . Имя = "ЭлементКоллекции" Тогда
ЗагрузитьОбъектРекурсивно ( ФайлXML , Объект . Добавить (), ИмяТекУзла );
Иначе
Если ФайлXML . ПрочитатьАтрибут () Тогда
ЗагрузитьОбъектРекурсивно ( ФайлXML , Объект [ ФайлXML . Значение ], ИмяТекУзла );
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры

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

Доступ к файловой системе из кода конфигурации

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

1. При обращении из кода конфигурации к файлам и каталогам файловой системы следует иметь в виду, что доступ к ним ограничен правами пользователя операционной системы, от имени которого запущено приложение.

1.1. Если доступ к файловой системе осуществляется из кода, выполняемого на клиенте, то он выполняется под правами пользователя, от имени которого запущено приложение (тонкий, толстый или веб-клиент). Как правило, это текущий пользователь операционной системы.

1.2. Если доступ к файловой системе осуществляется из кода, выполняемого на сервере, то:

  • при использовании клиент-серверной информационной базы, доступ ограничен правами пользователя, от имени которого запущен сервер 1С:Предприятия (*);
  • при использовании файловой базы, опубликованной на веб-сервере, доступ ограничен правами пользователя, от имени которого запущен веб-сервер.

* Рабочие процессы могут быть также запущены от имени другого пользователя, отличного от того, под которым запускается агент сервера. Подробнее см. руководство администратора клиент-серверного варианта, описание служебного файла swpuser.ini

Область применения (уточнение): управляемое приложение, обычное приложение.

2. Запрещается выполнять запись каких-либо файлов в каталог исполняемых файлов 1С:Предприятия, получаемого с помощью метода КаталогПрограммы . Использование метода КаталогПрограммы допустимо только для чтения или запуска файлов. Например, при работе в ОС Windows, для запуска копии тонкого клиента 1С:Предприятия текущей версии, допустимо использовать:

3. Даже если не планируется локализация конфигурации на другие языки, следует обеспечивать переносимость файлов, сформированных из кода конфигурации, между различными операционными системами с различными кодировками. Для этого необходимо:

3.1. В именах файлов, автоматически формируемых из кода конфигурации, указывать только английские буквы, а также цифры, а в качестве кодировки текстовых файлов использовать только UTF-8 (именно этот формат предпочтителен, т.к. только с ним корректно работает операционная система macOS).

3.2. В тех случаях, когда имя файла не генерируется системой, а его явно вводит пользователь, разрешить ввод русскоязычных имен, но при этом дать возможность транслитерировать его в англоязычное имя. По умолчанию, если это технически возможно и не снижает удобство работы, рекомендуется предлагать англоязычное имя файла, а для текстовых файлов – сохранение в кодировке UTF-8.

Также эти рекомендации по выбору имени и кодировки файла следует разместить в справке к тем местам программы, где пользователь имеет возможность сохранять файлы и выбирать кодировку.

В конфигурациях на базе Библиотеки стандартных подсистем для транслитерации имен файлов рекомендуется использовать функцию СтроковыеФункцииКлиентСервер.СтрокаЛатиницей .

Работа с временными файлами и каталогами

При необходимости использования временных файлов и каталогов необходимо соблюдать следующие требования:

1. Для получения имени временного файла следует использовать метод ПолучитьИмяВременногоФайла (исключение составляет веб-клиент, см. ниже п. 3). В противном случае возможна некорректная работа конфигурации в многопользовательском режиме, с включенными профилями безопасностями, возникновение проблем с правами доступа к файлам операционной системы, а также неконтролируемое увеличение количества ненужных временных файлов, которые не будут своевременно удалены.

ИмяПромежуточногоФайла = "C:\Временные файлы 1С\TempFile.xml";
Данные.Записать(ИмяПромежуточногоФайла);

У текущего пользователя может не быть прав на запись в указанный каталог. Кроме того, при одновременном выполнении этого кода из двух разных сеансов возникнет ошибка.

При использовании этой функции будет получено уникальное имя, гарантирован доступ к файлу.

Кроме того, при использовании метода ПолучитьИмяВременногоФайла платформа 1С:Предприятие сохраняет контроль над такими файлами и автоматически удаляет их

  • при перезапуске рабочего процесса (если файл был создан на стороне сервера) или клиентского приложения (если файл был создан на стороне клиента);
  • через 20 минут после серверного вызова или сеанса, в котором создан временный файл (при работе в клиент-серверном варианте на платформе 8.3.17 и больше).

Если же имя временного файла было сформировано каким-то другим способом, и прикладной код не удалил (либо по какой-то причине не смог удалить) ранее созданный временный файл, то платформа такой файл не контролирует, и он остается в файловой системе на неопределенное время. Накапливание «потерянных» временных файлов может представлять серьезную проблему, особенно для информационных баз с большим количеством активно работающих пользователей (например, при работе в режиме сервиса).

Таким образом, неправильно :

Каталог = КаталогВременныхФайлов();
ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".xml";
ИмяПромежуточногоФайла = Каталог + ИмяФайла;
Данные.Записать(ИмяПромежуточногоФайла);

Если по каким-то причинам прикладной код не удалит созданный файл (например, между блоками создания и удаления временного файла возникнет штатное или нештатное исключение), этот файл так и останется в каталоге временных файлов.

При использовании метода ПолучитьИмяВременногоФайла будет получено уникальное имя, гарантирован доступ к файлу, а также временный файл будет автоматически удален платформой 1С:Предприятие после завершения рабочего процесса сервера или клиентского приложения.

2. Для создания временного каталога рекомендуется также использовать имя, полученное при помощи метода ПолучитьИмяВременногоФайла (исключение составляет веб-клиент, см. ниже п. 3). Это гарантирует уникальность имени создаваемого каталога при работе в многопользовательском режиме и гарантирует, что после перезапуска рабочего процесса или клиентского приложения временный каталог будет автоматически удален платформой 1С:Предприятие. После этого, внутри созданного каталога можно создавать другие каталоги и файлы без ограничений.

3.1. При выполнении кода веб-клиентом метод ПолучитьИмяВременногоФайла недоступен. Поэтому для формирования имен временных файлов и каталогов необходимо использовать функцию КаталогВременныхФайлов и объект УникальныйИдентификатор .

Каталог = КаталогВременныхФайлов();
ИмяФайла = "TempDataFile.xml";
ИмяПромежуточногоФайла = Каталог + ИмяФайла;
Данные.Записать(ИмяПромежуточногоФайла);

Каталог = КаталогВременныхФайлов();
ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".xml";
ИмяПромежуточногоФайла = Каталог + ИмяФайла;
Данные.Записать(ИмяПромежуточногоФайла);

3.2. Если в конфигурацию встроена Библиотека стандартных подсистем , для создания временных каталогов на стороне клиента необходимо использовать процедуру ФайловаяСистемаКлиент.СоздатьВременныйКаталог .

4. После окончания работы с временным файлом или каталогом, его необходимо удалить самостоятельно. Нельзя рассчитывать на автоматическое удаление файлов и каталогов при следующем запуске платформы, это может привести к исчерпанию свободного места в каталоге временных файлов.

// Работа с файлом
.

// Удаляем временный файл
Попытка
УдалитьФайлы(ИмяПромежуточногоФайла);
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Мой механизм.Действие'"), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;

5. При использовании временных файлов и каталогов на сервере, необходимо полностью завершать работу с ними в рамках одного серверного вызова. При работе конфигурации с использованием кластера серверов, при следующем вызове эти файлы могут стать недоступны, так как код начнет исполняться на другом компьютере. При необходимости сохранить данные между серверными вызовами в пределах одного сеанса следует использовать временное хранилище платформы (методы ПоместитьВоВременноеХранилище , ПолучитьИзВременногоХранилища ).

5.1. В редких случаях может возникнуть необходимость передачи данных во временных файлах между сеансами, например, при подготовке данных для фонового задания, при организации длительного процесса, обслуживающего несколько последовательных вызовов web-сервиса. Необходимо самостоятельно обеспечивать гарантировано общее место хранения, права для доступа к файлам из разных мест их обработки, удаление файлов по истечению сроков их обработки или аварийного завершения процесса обработки. Рекомендуется использовать следующий подход:

  • Для обеспечения доступа со всех возможных мест обработки заводится константа для хранения общего пути к файлам, доступного для доступа со всех серверов кластера;
  • При создании временных файлов их имена заносятся во вспомогательный регистр сведений с сохранением времени создания файла;
  • При штатном прохождении процесса, последняя операция, которой были нужны файлы, перед своим завершением удаляет как сам файл, так и записи о них во вспомогательном регистре;
  • Вспомогательное регламентное задание периодически проверяет наличие записей во вспомогательном регистре, время существования которых заведомо превышает время штатного завершения процесса. При обнаружении таких записей, задание удаляет временные файлы и записи о них.

Передача файлов между клиентом и сервером

1. При одновременной работе с файлом на клиенте и на сервере необходимо использовать передачу файла через временное хранилище (методы ПоместитьФайлы , ПолучитьФайл , ПолучитьФайлы , НачатьПомещениеФайла , ПоместитьВоВременноеХранилище , ПолучитьИзВременногоХранилища ). В общем случае клиент и серверы кластера - это разные компьютеры с разной файловой системой, причем доступ к файлам может происходить под разными пользователями ОС с различными правами.

&НаКлиенте
Процедура ОбработатьФайл()
.
ИмяФайла = "C:\Файлы для обработки\Загрузка.xml";
Результат = ПроизвестиОбработкуНаСервере(ИмяФайла);
.

Чтение = Новый ЧтениеТекста(ИмяФайла);
.

Результат = Чтение.Прочитать();
Возврат Результат;

ИмяФайлаДляОбработки = "C:\Файлы для обработки\Загрузка.xml";
ОписаниеОповещения = Новый ОписаниеОповещения(
"ОбработатьФайлЗавершение", ЭтотОбъект);

НачатьПомещениеФайла(ОписаниеОповещения,,
ИмяФайлаДляОбработки, Ложь,
УникальныйИдентификатор);

&НаКлиенте
Процедура ОбработатьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)

Данные = ПолучитьИзВременногоХранилища(Адрес);
ИмяПромежуточногоФайла = ПолучитьИмяВременногоФайла("txt");
Данные.Записать(ИмяПромежуточногоФайла);

Чтение = Новый ЧтениеТекста(ИмяПромежуточногоФайла);
.
Результат = Чтение.Прочитать();
.

2. Для сохранения данных во временном хранилище между несколькими серверными вызовами, при помещении его в хранилище необходимо использовать параметр УникальныйИдентификаторФормы метода ПоместитьФайл , передав в него идентификатор текущей формы. Такие значения будут удалены из временного хранилища только при закрытии указанной формы. При этом, при повторном помещении того же файла во временное хранилище, предыдущее значение необходимо удалять вручную. Например:

.
// Первый серверный вызов
ИмяФайлаДляОбработки = "C:\Файлы для обработки\Загрузка.xml";
ОписаниеОповещения = Новый ОписаниеОповещения(
"ОбработатьФайлЗавершение", ЭтотОбъект);

НачатьПомещениеФайла(ОписаниеОповещения,,
ИмяФайлаДляОбработки, Ложь,
УникальныйИдентификатор);

&НаКлиенте
Процедура ОбработатьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)

.
Результат = ПроизвестиНачальнуюОбработкуНаСервере(Адрес);
ПродолжитьОбработкуФайла();
.

.
// Второй серверный вызов с той же версией файла
Результат = ПроизвестиПромежуточнуюОбработкуНаСервере(Адрес);
.

// Третий серверный вызов с новой версией файла
ОписаниеОповещения = Новый ОписаниеОповещения(
"ПродолжитьОбработкуФайлаЗавершение", ЭтотОбъект);

НачатьПомещениеФайла(ОписаниеОповещения,,
ИмяФайлаДляОбработки, Ложь,
УникальныйИдентификатор);

Процедура ПродолжитьОбработкуФайлаЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)

При этом во временном хранилище формы останется две копии файлов. Адрес второй копии будет находиться в переменной Адрес , а адрес первой копии будет утерян. Это приводит к затрате дополнительных ресурсов приложения, замедлению работы.

.
// Первый серверный вызов
ИмяФайлаДляОбработки = "C:\Файлы для обработки\Загрузка.xml";

ОписаниеОповещения = Новый ОписаниеОповещения(
"ОбработатьФайлЗавершение", ЭтотОбъект);

НачатьПомещениеФайла(ОписаниеОповещения,,
ИмяФайлаДляОбработки, Ложь,
УникальныйИдентификатор);
.

&НаКлиенте
Процедура ОбработатьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)

.
Результат = ПроизвестиНачальнуюОбработкуНаСервере(Адрес);
ПродолжитьОбработкуФайла();
.

.
// Второй серверный вызов с той же версией файла
Результат = ПроизвестиПромежуточнуюОбработкуНаСервере(Адрес);
.

// Третий серверный вызов с новой версией файла
УдалитьИзВременногоХранилища(Адрес);

ОписаниеОповещения = Новый ОписаниеОповещения(
"ПродолжитьОбработкуФайлаЗавершение", ЭтотОбъект);

НачатьПомещениеФайла(ОписаниеОповещения,,
ИмяФайлаДляОбработки, Ложь,
УникальныйИдентификатор);

&НаКлиенте
Процедура ПродолжитьОбработкуФайлаЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)

3. Если в конфигурацию встроена Библиотека стандартных подсистем для помещения файлов во временное хранилище необходимо использовать процедуры ЗагрузитьФайл и ЗагрузитьФайлы общего модуля ФайловаяСистемаКлиент . Для сохранения данных файла между несколькими серверными вызовами необходимо использовать свойство ИдентификаторФормы параметра ПараметрыЗагрузки :

&НаКлиенте
Процедура ОбработатьФайл()
.
ИмяФайлаДляОбработки = "C:\Файлы для обработки\Загрузка.xml";
ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьФайлЗавершение", ЭтотОбъект);

ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор;
ПараметрыЗагрузки.Интерактивно = Ложь;

ФайловаяСистемаКлиент.ЗагрузитьФайл(ОписаниеОповещения,
ПараметрыЗагрузки, ИмяФайлаДляОбработки);

&НаКлиенте
Процедура ОбработатьФайлЗавершение(ПомещенныйФайл, ДополнительныеПараметры)

Для выгрузки конфигурации в XML мы добавили новый формат, - Иерархический. Теперь это стандартный формат, который предлагает платформа. Чтобы выгрузить файлы в прежнем формате, нужно это указать в явном виде:


В отличие от старого формата, линейного, в котором полное имя объекта конфигурации содержалось в имени результирующего файла .


. новый формат выгрузки, иерархический, формирует структуру каталогов с файлами:


Иерархическая выгрузка позволяет избавиться от проблем, связанных с очень длинными именами файлов. Такие проблемы могли возникать раньше как при выгрузке, так и при переносе файлов между разными файловыми системами (FAT, NTFS, EXT).

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

Вы можете управлять форматом выгрузки при запуске конфигуратора в пакетном режиме. Для этого прежнему параметру DumpConfigToFiles мы добавили новую опцию Format. Если вы хотите выгрузить в старом, линейном формате, это нужно указать в явном виде:

"C:\Program Files (x86)\1cv8\8.3.7.1759\bin\1cv8.exe" DESIGNER /IBName "TestBase" /DumpConfigToFiles "C:\dump" -Format Plain

Без указания этой опции выгрузка выполняется в иерархическом формате. А при загрузке формат определяется автоматически, и никаких дополнительных опций не требуется.

Частичная загрузка конфигурации из файлов XML

Мы реализовали возможность загружать из файлов XML не всю конфигурацию, а только её часть. В первую очередь эта возможность востребована в новой среде разработки 1C:Enterprise Development Tools. Ведь Development Tools ориентированы на работу с крупными конфигурациями, а частичная загрузка помогает ускорить процесс разработки, сократить цикл «редактирование - отладка».

Однако вы можете использовать эту возможность и независимо от Development Tools. Потому что для загрузки отдельных файлов конфигурации используется запуск конфигуратора из командной строки в пакетном режиме. А значит, используя частичную загрузку, вы можете:

  • изменять свойства конфигурации,
  • добавлять, изменять и удалять объекты конфигурации,
  • загружать только некоторые свойства объектов конфигурации без загрузки самих объектов. Например, модули объектов, формы, модули форм, роли и так далее.

Мы сразу хотим обратить ваше внимание на то, что мы реализовали только частичную загрузку, и только из командной строки. Частичной выгрузки нет так же, как нет интерактивных команд конфигуратора, позволяющих загружать часть конфигурации.

Поэтому загрузить только модуль справочника Номенклатура вы можете, например, следующей командой:

"C:\Program Files (x86)\1cv8\8.3.7.1759\bin\1cv8.exe" DESIGNER /IBName "TestBase" /LoadConfigFromFiles "C:\dump" -Files "C:\dump\Catalogs\Номенклатура\Ext\ObjectModule.bsl"

Для частичной загрузки используется прежний параметр LoadConfigFromFiles, и две новых опции: Files и ListFiles. Files позволяет вам перечислить через запятую те файлы, которые нужно загрузить, если таких файлов немного. А если их много, тогда вы можете использовать опцию ListFiles. Она указывает на файл, в котором перечислены XML файлы, которые нужно загрузить.

Кроме этого, для повышения удобства работы, мы разрешили совместное использование в одной строке параметров LoadConfigFromFiles и UpdateDBCfg. Таким образом, теперь за один вызов вы можете загрузить изменения и принять их (обновить конфигурацию базы данных).

Выгрузка/загрузка внешних отчётов и обработок в/из XML

В версии 8.3.8 мы добавили возможность выгружать в XML и загружать внешние отчёты и обработки:


Более того, при работе в конфигураторе вы можете сохранять их сразу в формате XML (Файл - Сохранить как. ). То же самое относится и к открытию:


Также мы добавили возможность сравнить внешний отчёт или обработку с XML выгрузкой. Все эти изменения мы сделали в первую очередь для того, чтобы в новой среде разработки 1C:Enterprise Development Tools обеспечить полноценную работу с внешними отчётами и обработками. Однако и отдельно от Development Tools эти возможности могут быть вам полезны для любых автоматизированных изменений выгруженных XML файлов.

Выгрузить/загрузить внешние отчёты/обработки вы можете не только интерактивно, но и автоматически, запуская конфигуратор в пакетном режиме. Для этого мы добавили два новых параметра: DumpExternalDataProcessorOrReportToFiles и LoadExternalDataProcessorOrReportFromFiles.

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

Какие данные можно выгружать из 1С

В 1С любой конфигурации доступна выгрузка следующей информации:

  • Печатные формы;
  • Отчеты;
  • Таблицы и списки.

Форматы для выгрузки поддерживаются следующие:

  • Microsoft Excel;
  • Microsoft Word;
  • PDF;
  • Выгрузка в CSV;
  • HTML и другие.

Процесс выгрузки печатных форм и отчетов

Сохранение в требуемом формате можно сделать для любой печатной формы или отчета в 1С. Открываем форму или отчет и выбираем в Главном меню Файл – Сохранить как.



Затем мы увидим окно сохранения документа, где нужно присвоить имя и тип файла.



Потенциальные сложности во время выгрузки

Опция «Сохранить как» не всегда может функционировать.



Объясняется это неактивизированной печатной формой или отчетом в настоящий момент. Кликаем мышкой в любом месте и печатная форма становится активной для сохранения.



Можно увидеть, что опция «Сохранить как» уже доступна. Напомним, по любым вопросам касаемо выгрузки и не только вы можете обращаться к нашим консультантам по сопровождению 1С 8.3.

Особенности выгрузки в Excel

Чаще всего требуется произвести выгрузку в табличном формате Excel. Для сохранения данных указываем тип Лист Excel2007 -…(*.xlsx), реже используется старый формат Лист Excel (*.xls):



Выгрузка из 1С в другие форматы (PDF, Word, CSV и др) проводится таким же образом.

Как выгружать произвольные таблицы из 1С

Давайте рассмотрим возможность выгрузки любых данных в случае наличия на это прав.

Используя штатный механизм в 1С, позволяющий выгружать любые списки (к примеру, список документов или элементы справочника), пользователь может получать комплексные данные удобным способом. Так, в командной панели любого списка выбираем группу «Еще» и затем команду «Вывести список»:



После этого нужно определить требуемые колонки и нажать кнопку ОК:



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



Выгрузка невидимых в перечне данных

Часто пользователи сталкиваются с необходимостью добавить в список колонки, присутствующие в документе, но отсутствующие по каким-то причинам в текущем перечне. Например, в перечне «Клиенты» отсутствует поле «Телефон», которое видно только в дополнительной панели с правой стороны.



Для возможности выгрузить телефон из 1С необходимо эти данные сначала внести в список. Нажимаем «Еще – Изменить форму». Из перечня колонок выбираем нужную нам. Стоит отметить, что почти во всех конфигурациях программы имеется поле «Ссылка». При переходе на это поле и нажав кнопку «Добавить поля» нам отобразятся все доступные поля этого справочника. Тут мы и делаем выбор поля «Телефон» и присваиваем ему галочку использования.





После проведения этих этапов база данных клиентов с телефонами готова к выгрузке в файл используя команду «Вывести список».

Читайте также: