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

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    3162    stopa85    12    

38

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

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

19.10.2023    7550    user1959478    51    

36

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

Расширение (+ обработка) представляют собою математический тренажер. Ваш ребенок сможет проверить свои знание на математические вычисление до 100.

2 стартмани

29.09.2023    3107    maksa2005    8    

26

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

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

1 стартмани

09.06.2023    10902    7    SpaceOfMyHead    18    

61

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

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.

03.04.2023    4357    RustIG    9    

25

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

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

23.11.2022    3527    gzharkoj    14    

25

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

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

1 стартмани

21.03.2022    9041    7    kalyaka    11    

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

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