29 мар. 2013 г.

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

5 комментариев:

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

    ОтветитьУдалить
  2. Этот комментарий был удален автором.

    ОтветитьУдалить
  3. Спасибо. Очень помогло исправить косяки при обновлении ЗУП 3.1

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