1с сохранить структуру в файл
Особенности использования сериализации
В 1С:Предприятии для многих типов значений предусмотрена возможность сериализации, то есть сохранения их в том виде, который позволяет записывать значения и потом восстанавливать их. В документации по встроенному языку в описании объектов возможность сериализации указывается отметкой "Сериализуется".
Сериализация предназначена для сохранения значений используемых в рамках информационной базы 1С:Предприятия, в тех случаях, когда их по той или иной причине необходимо хранить или передавать в сериализованном виде.
Следует отметить, что в этом разделе речь идет о сериализации, а не о ХМ L – сериализации. XML – сериализация является отдельной возможностью, предназначенной прежде всего для обмена данными между различными информационными базами 1С:Предприятия, а также для обмена с другими программными системами. Возможность ХМ L – сериализации объектов указывается в документации отдельно.
Существует несколько механизмов 1С:Предприятия, которые используют возможность сериализации значений.
Сохранение значения в файл и восстановление значений из файла
Для этого используются методы ЗначениеВФайл() и ЗначениеИзФайла() . В основном эта возможность может быть использована для сохранения, каких либо временных значений в пределах сеанса или между сеансами.
Сохранение значений в объекте типа ХранилищеЗначения
Эта возможность используется, прежде всего, для записи в информационную базу различных значений, для которых не предусмотрено соответствующих типов полей. Например, таким способом сохраняются картинки, образы файлов. При помещении значения в хранилище значения может использоваться сжатие. Подробнее с этой возможностью рекомендуется ознакомиться в разделе "Хранение данных в полях типа ХранилищеЗначения".
Сохранение параметров пользователя между сеансами
Эта возможность используется системой при сохранении настроек в формах отчетов и обработок. Так же для этого могут быть использованы методы СохранитьЗначение() и ВосстановитьЗначение() . Их рекомендуется использовать для сохранения различных настроек специфичных для конкретного пользователя. Однако таким способом не рекомендуется сохранять существенные данные, потеря которых нежелательна. Эта информация не сохраняется при создании резервных копий информационной базы. Кроме того, эта информация сохраняется только при завершении сеанса работы пользователя и соответственно не будет сохранена при аварийном завершении.
Сохранение значения в строку и восстановление значения из строки
Для этого используются методы ЗначениеВСтрокуВнутр() и ЗначениеИзСтрокиВнутр() . Эти методы реализованы в основном для сохранения функциональной совместимости с 1С:Предприятием 7.7. Использовать их в большинстве случаев не рекомендуется. Для сохранения значений в базу данных рекомендуется использовать объект типа ХранилищеЗначения , а для получения некоторого строкового идентификатора ссылочного значения можно использовать возможность получения уникального идентификатора ссылки (метод УникальныйИдентификатор() ) и соответственно преобразование его к строке.
Если при восстановлении значения ссылки прикладного объекта в конфигурации уже нет соответствующего объекта метаданных, то восстанавливается значение Неопределено .
Следует учитывать, что формат сериализации является внутренним специфическим форматом 1С:Предприятия и не предназначен для разбора другими средствами.
Не рекомендуется разбирать каким-либо способом полученные сериализованные значения, кроме непосредственно восстановления их штатными средствами.
Следует учитывать, что при сериализации используется внутренняя идентификация типов значений. При этом идентификация типов прикладных объектов опирается на внутренние идентификаторы, хранящиеся в метаданных и, соответственно, сериализованные значения не могут восстанавливаться в другой информационной базе, даже если состав метаданных по именам и значениями свойств полностью совпадает с исходной конфигурацией.
Таким образом, сериализацию следует использовать для хранения и передачи значений в рамках информационной базы 1С:Предприятия и не следует использовать для обмена с другими информационными базами и другими программными системами.
В данном примере хочу привести несколько универсальных функций по выгрузке таблицы значений в файл и дальнейшего чтения из файла:
Порядок программных действий при выгрузке в файл выглядит так:
- Подготавливаем таблицу значений (выгружаем из табличной части, выбираем колонки);
- Конвертируем таблицу значений в табличный документ;
- Сохраняем табличный документ в MXL.
При загрузке таблицы порядок действий такой:
- Читаем из файла табличный документ;
- Конвертируем табличный документ в таблицу значений;
- Используем эту таблицу значений в своих целях (загружаем в табличную часть).
Соответственно файл для хранения данных таблицы имеет расширение *.mxl.
Основные функции для реализации поставленной задачи следующие:
ПреобразоватьТДвТЗ – Функция преобразования табличного документа в таблицу значений.
ПреобразоватьТЗвТД – Функция обратного преобразования таблицы значений в табличный документ.
ПрочитатьТЗИзMXL – Читает из файла данные, определяет колонки таблицы и преобразует эти данные в таблицу значений.
ЗаписатьТЗВMXL – Преобразует таблицу значений в табличный документ и записывает его в файл.
Еще небольшой набор функций для вывода таблицы значений в табличный документ. После формирования табличного документа, - сохраняем его в файл mxl.
Табличный документ можно сохранить a файлы следующих типов:
- ANSITXT - Текстовый документ
- DOCX - документ MS Word
- HTML
- HTML3
- HTML4
- HTML5
- MXL
- MXL7
- ODS - Файл Open Office
- PDF - файл Acrobat Readr
- TXT - Текстовый документ
- XLS - файл Excel
- XLS95 - файл Excel95
- XLS97 - файл Excel97
- XLSX - файл Excel2010
Пример выгруженной таблицы значений в файл:
Похожие FAQ
10060 (0x0000274C): Попытка установить соединение была безуспешной 19
Установили новый терминальный сервер, на нем подняли 1С, терминальные пользователе неописуемо довольны, все просто летает :) И вот же надо было такому случиться, главному бухгалтеру не понравилось работать через терминал, а еще у нее свой ноутбук и 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C: Enterprise Development Tools 50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем Cодержимое указанного ниже веб-сайта в этом приложении блокируется. Aboutsecurity_1cv8c.exe 1
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э Google maps : вывод точек на карту и режим панорамы 7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора Посмотреть все результаты поиска похожих
Еще в этой же категории
Ключевые слова и Изображения
Слова упорядочены по частоте использования в тексте
Изображения
Представленные в публикации процедуры были рождены потребностью сохранять настройки внешних обработок с возможностью последующего их использования на других компьютерах и в других информационных базах. Работают они, однако, не только для обработок, но и для любых других объектов 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С:
Хранилище = Новый ХранилищеЗначения(Знч, Новый СжатиеДанных(9));
Сжатие данных в хранилище значений 1С с параметром «9» означает, что данные будут храниться в архивированном виде, с максимальной степенью сжатия.
Чтобы сохранить такое значение в базу данных, нужно создать объект конфигурации (справочник, документ и т.п.), у которого добавить реквизит с типом ХранилищеЗначения.
СправочникСсылка = Справочники.Хранилище.СоздатьЭлемент();
СправочникСсылка.ХранилищеЗначения = Хранилище;
СправочникСсылка.Записать();
Кроме хранения таких значений в базе данных, с помощью хранилища значений 1С, мы также можем сохранить такое значение в файл, например:
Настройки = Новый Структура();
Настройки.Вставить("ПоУмолчанию", Истина);
Настройки.Вставить("Наименование", "Наименование1");
Хранилище = Новый ХранилищеЗначения(Настройки, Новый СжатиеДанных(9));
ЗначениеВФайл("C:\", Хранилище);
Пример – сохранение значения из файла
//Значение - картинка из файла
Файл = Новый Картинка("C:\ФайлКартинки.jpg");
Хранилище = Новый ХранилищеЗначения(Файл, Новый СжатиеДанных(9));
//Значение - произвольный файл
Файл = Новый ДвоичныеДанные("C:\ИсполняемыйФайл.exe");
Хранилище = Новый ХранилищеЗначения(Файл, Новый СжатиеДанных(9));
//Значение - текстовый файл
Файл = Новый ЧтениеТекста("C:\ТекстовыйФайл.txt");
ТекстовыеДанные = Файл.Прочитать();
Хранилище = Новый ХранилищеЗначения(ТекстовыеДанные, Новый СжатиеДанных(9));
Значение, помещенное в хранилище значений 1С нельзя использовать, пока оно там находится. Чтобы работать с ним, его нужно «распаковать» обратно, например:
Знч = Хранилище.Получить();
Если Знч = Неопределено Тогда
Сообщить("Ошибка получения значения из хранилища");
КонецЕсли;
« Как стать программистом 1С » Программирование 1С » Как записать в текстовый файл из 1С
Как записать в текстовый файл из 1С
- На форме организовать выбор файла (формат файла txt)
- Заполнить файл данными
- Ну и сохранить естественно (если файл с данными, то чтобы спросил перезаписать или нет).
Как это сделать?
Организуем форму толстого клиента 1С
Выполним эту задачу на примере формы внешней обработки. Создаем внешнюю обработку, добавляем форму, на форму кидаем поле с типом строка без ограничения длины.
У добавленного нами поля нужно включить кнопку выбора.
Добавим обработчик нажатия.
Обратите внимание, что в модуле у нас появились две функции – одна обработчик нажатия кнопки «Выполнить», которая была автоматически добавлена на форму обработки при ее создании. Другая – добавленный нами обработчик.
Организуем форму тонкого клиента 1С
Пример такой же организации формы на тонком клиенте 1С.
Добавляем реквизит в обработку — неограниченная строка (т.е. длина = 0).
Только что добавленный реквизит вытаскиваем на форму. Чтобы открыть его свойства — нажмите на вытащенном реквизите правой кнопкой мыши.
Свойство КнопкаВыбора установите Да.
Тонкий клиент не добавляет автоматически кнопку. Поэтому нам нужно самостоятельно на форму обработки добавить кнопку Записать.
На закладке Команды добавьте новую команду и нажмите в ее свойствах лупу, чтобы добавить обработчик.
Также перетащите добавленную команду на форму (влево).
В модуле у нас также две функции – одна обработчик нажатия кнопки «Записать», который мы добавили. Другая – добавленный нами обработчик события при выборе.
Программируем выбор [имени и места записи] файла
В Windows есть общепринятый диалог работы с выбором файла.
Из 1С есть доступ к управлению этим диалогом. Для этого существует специальный объект «ДиалогВыбораФайла».
Вот пример кода для нашего случая:
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Диалог.Заголовок = "Выберите имя файла для сохранения";
Диалог.Фильтр = "Текстовый файл(*.txt)|*.txt";
//Вызов собственно диалога на экран
Если Диалог.Выбрать() Тогда
//Сюда попадем только если пользователь нажал ОК
//Сохранение выбранного имени файла (полного имени, значит включая путь к нему)
Если Вы хотите дать возможность выбирать несколько расширений файлов, например txt и rtf, то нужно написать так:
Диалог.Фильтр = "Документ Microsoft Word (*.txt)|*.txt|"
+ "Документ Microsoft Excell (*.rtf)|*.rtf|";
Программируем запись файла на диск
Для записи текстовых файлов в 1С есть объект «ЗаписьТекста».
Работа с ним очень простая.
Вот пример кода для нашего случая:
Файл = Новый ЗаписьТекста(ИмяФайла);
Файл.ЗаписатьСтроку("Привет!");
Файл.ЗаписатьСтроку("Как дела?");
Файл.Закрыть();
Читайте также: