Организация хранения промежуточных данных

Публикация № 1068691

Программирование - Теория программирования

Изменение реквизита формы промежуточное хранение данных

3
Организация хранения промежуточных данных в процедуре сверки.

Не могу сказать, как часто вопросы такого рода  возникают перед разработчиками, но мне он встретилась и вот как я на него ответил.

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

 

Теперь немного кода.  У формы есть команда Load (загрузить). Она выполняет следующие действия.

&НаКлиенте
Процедура Load(Команда)
	mFile=new File(Объект.глФайлОбмена);
	ОписаниеОповещения = Новый ОписаниеОповещения("ПередатьФайлНаСерверЗавершение", ЭтаФорма,mFile.Расширение);
	
    НачатьПомещениеФайла(ОписаниеОповещения,,Объект.глФайлОбмена,Ложь,УникальныйИдентификатор);
КонецПроцедуры

&НаКлиенте
Процедура ПередатьФайлНаСерверЗавершение(Знач Успешно, Адрес, Знач ВыбранноеИмяФайла, Знач ДополнительныеПараметры) экспорт
   LoadНаСервере(Адрес,ДополнительныеПараметры);
КонецПроцедуры

 Файл помещается во временной хранилище на сервере, затем вызывается обработчик оповещения. Теперь приведем код процедуры LoadНаСервере.

&НаСервере
Процедура LoadНаСервере(Адрес,Расширение)
	//....................................
	//Шаг 1.
	//....................................
	lib=РеквизитФормыВЗначение("Объект")    ;
	DepoList=РеквизитФормыВЗначение("СписокДепозитов");
	vt=lib.Main(Адрес,Расширение,DepoList)            ;
	//....................................
	//Шаг 2.	
	//....................................
	//редактируем колонки у реквизита ДанныеСпецдепа
    приемник=РеквизитФормыВЗначение("ДанныеСпецДепа");
	мУдалить=новый массив;
	для каждого кол из приемник.Колонки цикл
		если vt.Колонки.Найти(кол.Имя)=неопределено тогда
			мУдалить.Добавить("ДанныеСпецДепа."+кол.Имя);
		конецесли;
	конеццикла;	
	мДобавить=новый массив;
	для каждого кол из vt.Колонки цикл
		если приемник.Колонки.Найти(кол.Имя)=неопределено тогда
			НоваяКолонка = Новый РеквизитФормы(Кол.Имя,Кол.ТипЗначения, "ДанныеСпецДепа");
			мДобавить.Добавить(НоваяКолонка);
		конецесли;
	конеццикла;	
	ИзменитьРеквизиты(мДобавить,мУдалить);
	//....................................
	//Шаг 3.
	//....................................
	ЗначениеВРеквизитФормы(vt,"ДанныеСпецДепа");
	ЗначениеВРеквизитФормы(DepoList,"СписокДепозитов");
	
	ЗначениеВРеквизитФормы(lib,"Объект")
 КонецПроцедуры

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

3

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. VmvLer 29.05.19 09:00 Сейчас в теме
изложение грамотное - это однозначно плюс.

правда, я не понял чем не устроило хранилище или помещение тз в менеджер временных таблиц набор данных запрос(или набор данных объект) отчета?
Оставьте свое сообщение