29 мар. 2013 г.

Простой способ сохранения таблицы значений в файл

Для использования данных таблицы значений в сторонних программах необходимо выгружать их в текстовый файл, dbf, XML, Excel, либо другие. Но если данные таблицы планируется использовать только в 1С, то можно использовать такие методы, как XMLСтрока/XMLЗначение, либо ЗначениеВФайл/ЗначениеИзФайла. Мне, например, это пригодилось, когда пришлось формировать большой объем различных по виду документов с последующей правкой процедур проведения. Поэтому, чтобы можно было быстро восстановить перечень обрабатываемых документов после применения исправлений, я как раз и использовал эти способы.

Разберем на примере обработки для УТ 11 методы XMLСтрока/XMLЗначение. В этом случае таблицу значений необходимо предварительно поместить в ХранилищеЗначения.


&НаСервере
Функция ПолучитьДанныеТЗ()

 ДанныеТЗ = Новый ХранилищеЗначения(ТЗ.Выгрузить());
 Возврат XMLСтрока(ДанныеТЗ);

КонецФункции// ПолучитьДанныеТЗ()

&НаСервере
Процедура ЗагрузитьДанныеТЗ(Данные)

 ДанныеТЗ = XMLЗначение(Тип("ХранилищеЗначения"), Данные).Получить();
 Если ТипЗнч(ДанныеТЗ) = Тип("ТаблицаЗначений") Тогда
  ТЗ.Загрузить(ДанныеТЗ);
 КонецЕсли;

КонецПроцедуры // ЗагрузитьДанныеТЗ()

&НаКлиенте
Процедура СохранитьТЗ(Команда)
 
 ИмяФайла = ПолучитьИмяФайла(РежимДиалогаВыбораФайла.Сохранение);
 Если ПустаяСтрока(ИмяФайла) Тогда
  Возврат;
 КонецЕсли;
 
 ФайлТЗ = Новый ТекстовыйДокумент;
 ФайлТЗ.УстановитьТекст(ПолучитьДанныеТЗ());
 ФайлТЗ.Записать(ИмяФайла);
 
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьТЗ(Команда)
 
 ИмяФайла = ПолучитьИмяФайла(РежимДиалогаВыбораФайла.Открытие);
 Если ПустаяСтрока(ИмяФайла) Тогда
  Возврат;
 КонецЕсли;
 
 ФайлТЗ = Новый ТекстовыйДокумент;
 ФайлТЗ.Прочитать(ИмяФайла);
 ЗагрузитьДанныеТЗ(ФайлТЗ.ПолучитьТекст());
 
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьТЗСервер()
 
 Запрос = Новый Запрос;
 Запрос.Текст = 
  "ВЫБРАТЬ
  | ПоступлениеТоваровУслуг.Ссылка КАК Документ,
  | ПоступлениеТоваровУслуг.Контрагент,
  | ПоступлениеТоваровУслуг.Дата
  |ИЗ
  | Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг";

 ТЗ.Загрузить(Запрос.Выполнить().Выгрузить());

КонецПроцедуры // ЗаполнитьТЗСервер()

&НаКлиенте
Процедура ЗаполнитьТЗ(Команда)
 
 ЗаполнитьТЗСервер();
 
КонецПроцедуры

&НаКлиенте
Функция ПолучитьИмяФайла(Режим)
 
 ВыборФайла = Новый ДиалогВыбораФайла(Режим);
 ВыборФайла.ПолноеИмяФайла = "";
 Фильтр = "Таблица значений 1С(*.1ct)|*.1ct";
 ВыборФайла.Фильтр = Фильтр;
 ВыборФайла.МножественныйВыбор = Ложь;
 ВыборФайла.Выбрать();
 
 Возврат ВыборФайла.ПолноеИмяФайла;
 
КонецФункции
 

2 комментария:

  1. Надежда В.15 мая 2018 г., 05:29

    Большое спасибо. Инструмент очень интересный. Сделали большую работу по восстановлению информации из первичной базы.

    ОтветитьУдалить