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

29.05.19

Разработка - Математика и алгоритмы

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

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

Была поставлена задача реализовать обработку для сверки данных, которые присылал внешний контрагент, с данными, которые хранятся во внутренней учетной системе. Информация от контрагента поступала в виде таблицы в формате 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 в реквизит формы ДанныеСпецДепа. Теперь эти данные можно использовать при построении итогового отчета. Задача промежуточного хранения решена. Разумеется, изложенное решение не является единственным. Поэтому статья и размещена в категории "Теория программирования".

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

См. также

Метод Дугласа-Пойкера для эффективного хранения метрик

Математика и алгоритмы Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    1714    stopa85    12    

33

Алгоритм симплекс-метода для решения задачи раскроя

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    4314    user1959478    50    

34

Регулярные выражения на 1С

Математика и алгоритмы Инструментарий разработчика Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    7343    4    SpaceOfMyHead    17    

56

Модель распределения суммы по базе

Математика и алгоритмы Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    7817    7    kalyaka    11    

44

Изменения формата файлов конфигурации (CF) в 8.3.16

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Дополнение по формату файлов конфигурации (*.cf) в версии 8.3.16.

16.12.2021    4414    fishca    13    

36

Интересная задача на Yandex cup 2021

Математика и алгоритмы Бесплатно (free)

Мое решение задачи на Yandex cup 2021 (frontend). Лабиринт. JavaScript.

12.10.2021    8793    John_d    73    

46

Механизм анализа данных. Кластеризация.

Математика и алгоритмы Анализ учета Платформа 1С v8.3 Анализ и прогнозирование Бесплатно (free)

Подробный разбор, с примером использования, встроенного механизма кластеризации 1С.

31.08.2021    7713    dusha0020    8    

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

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