Имя: Пароль:
1C
1С v8
Загрузка данных в регистр сведений.
0 lirt82
 
27.02.26
08:14
Всем привет. Конфигурация самописная, имеется сформированная таблица значений ДанныеСВебсайта, которая содержит информацию об адресах сотрудников компании (колонка Сотрудник, АдресПроживания, ГородПроживания и т.п.), данные в таблице актуальные, так как вводятся изначально на сайте компании и полученные в моменте через http-запрос в обработке.
Необходимо данные из ТЗ "ДанныеСВебсайта" актуализировать с самописным независимым периодическим регистром сведений "АдресаСотрудниковКомпании". У этого регистра 1 измерение "Сотрудник" тип справочник ссылка сотрудники и несколько ресурсов Город, Адрес и т.д.
Можно было сразу загрузить ТЗ в регистр НаборАдресовСотрудников.Загрузить(ДанныеСВебсайта); но в этом случае затрутся все записи регистра, этого нельзя допускать так как регистр должен хранить историю. Также в регистре есть записи сделанные вручную пользователем(их нужно проверить на актуальность (срезом последних)).
В итоге как правильно скрестить обе таблицы (таблица данных с вебсайта с таблицей регистра сведений) и актуализировать записи если они есть (напрм. в регистре сведении может быть запись с актуальным адресом но с пустым значением ресурса Город) или отсутствие записи тогда добавляем новую.
Таблица с вебсайта содержит больше тысячи строк следовательно как сделать скрещивание производительным, желательно без обхода в цикле результата и тысяч раз обращении в базе к набору для поиска, записи изменении?
Такая актуализация данных сайта с данными в базе будет происходить на постоянной основе.
1 Fish
 
гуру
27.02.26
08:19
Соединение в запросе.
2 Fish
 
гуру
27.02.26
08:21
+(1) А вообще, данных недостаточно. Например, что значит "актуализировать записи если они есть", если регистр периодический и "регистр должен хранить историю"?
Не очень понятно.
3 AAA
 
27.02.26
08:33
Я тоже ничего не понял. Если периодический, то обновляйте запись или записи на требуемую дату. А с точки зрения объема 1000 записей в файле это смешно, чтобы над этим морочиться, если конечно грузите не каждые 10 сек
4 Stepashkin
 
27.02.26
08:39
(0) Запрос с параметром в виде ТЗ с соединением.
5 Мультук
 
гуру
27.02.26
08:41
(0)



0) Загружаем таблицу значений в ВТ_ТАБ

1) Получаем срез последних регистра в ВТ_СРЕЗ

2) Объединяем два запроса

2.1) Измененные записи

ВЫБРАТЬ
  ....

ИЗ 
   ВТ_СРЕЗ как т1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ТАБ как т2 
ПО т1.Сотрудник = т2.Сотрудник
ГДЕ
   т1.АдресПроживания <> т2.АдресПроживания
   или т.п.


2.2) Новые записи


ВЫБРАТЬ
  ....

ИЗ 
   ВТ_ТАБ как т2 ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СРЕЗ как т1 
ПО т1.Сотрудник = т2.Сотрудник
ГДЕ
   т1.Сотрудник is NULL


3) Результат запроса вносим в регистр с помощью МенеджерЗаписи

P.S.
Считаем что, то что пришло с сайта, априори важнее/правильнее, того что в регистре.

P.P.S.
Если не секрет, чем вы занимались (судя по профилю) последние 16 лет ?
6 Stepashkin
 
27.02.26
08:42
(5) Я тоже удивился.
7 lirt82
 
27.02.26
09:17
(5) 3) Результат запроса вносим в регистр с помощью МенеджерЗаписи
обходя результат запроса в цикле и по количеству строк в результате столько же раз устанавливаем отбор для менеджера.
8 Fish
 
гуру
27.02.26
09:18
(7) И что тебя смущает?
9 lirt82
 
27.02.26
09:48
(8) количество обращении к базе в цикле
10 Fish
 
гуру
27.02.26
09:53
(9) Сгруппируй по периодам и пиши наборами. Но при смехотворном количестве +-1000 строк, имхо, нет смысла заморачиваться с этим.
11 Stepashkin
 
27.02.26
09:57
(10) Да, 1000 строк ни о чем.
12 Fish
 
гуру
27.02.26
10:04
К тому же, на последних платформах, при записи набора можно использовать режим замещения Добавление или Слияние.
13 Мультук
 
гуру
27.02.26
10:08
(7)

тт = ТекущаяДата();

Для строка из тз Цикл

   мен = РегистрСведений.МойНяшныйРегистр.СоздатьМенеджерЗаписи();
   ЗаполнитьЗначенияСвойств(мен, строка); 
   мен.Период = тт;
   мен.Записать();

КонецЦикла;


Да, неявные отборы тут есть.
Но увы.

Можно поступить по новому, но для этого нужно читать вот это и пробовать

https://infostart.ru/1c/articles/2508120/
14 lirt82
 
27.02.26
10:46
(5) пункт 2) соединить 2 таблицы или ОБЪЕДИНИТЬ ВСЕ?
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.