|
Загрузка данных в регистр сведений. Philix, Garykom, craxx, Шурик71, Timon1405, Мультук, Chameleon1980, Михаил_, H A D G E H O G s, alex_kld_2024, ass1c, Гость из Мариуполя, Джордж1, Lama12, ГдеСобакаЗарыта, АгентБезопаснойНацио, АнализДанных, Fish, BOOL, FirstLineSupport, sergeyshimkov, tulke, Волшебник, torgm, alexxx961503, nick86, AlexKimp, mikecool, Ivanich, lirt82, Telcher, yurikmellon2, ReaLg, Seriy_Volk, AAA, shuhard, Кир Пластелинин, calmius, San787, Группа неравнодушных, DeeK, paramedic, alexis_nov, vova1122, Stepashkin, N1troZeus, Greeen, Ёпрст, vbus, RomaH, Fedor-1971, Vstur, qwerty, evorle145, Prog_man, d4rkmesa, 2S, skafandr
| ☑ | ||
|---|---|---|---|---|
|
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
✎
12:30
|
(5) пункт 2) соединить 2 таблицы или ОБЪЕДИНИТЬ ВСЕ?
разобрался, получилось как нужно. Мультук реально гуру. |
|||
|
15
Stepashkin
27.02.26
✎
13:39
|
(14) ОБЪЕДИНИТЬ - это когда данные из второй таблицы добавляются в первую таблицу, СОЕДИНЕНИЕ соединяет две таблицы по условию.
|
|||
|
16
Garykom
гуру
27.02.26
✎
13:50
|
(0)
В итоге как правильно скрестить обе таблицы
Нанять программиста? |
|||
|
17
Garykom
гуру
27.02.26
✎
14:29
|
(5) Имхо не надо делать все это запросами и разом с кучей записей
Особенно когда уровня не хватает Уко ну напишите сначала добавлени/обновление нужных записей простым кодом в цикле Отладьте все, запустите в прод И вот когда уже будут жаловаться на тормоза - начинайте попытки оптимизировать Только обязательно учитывать возможные глюки соединений, когда упс и дубли по ключам )) |
|||
|
18
lirt82
27.02.26
✎
14:41
|
(17) до прода не дойдет :) на стадии кода ревью завернут с замечаниями. Кстати вариант с кодом в цикле я сделал и протестил самостоятельно.
|
|||
|
19
ass1c
27.02.26
✎
15:40
|
Можно попробовать пойти еще дальше. Эту относительно новую фишку платформы еще не использовал, но "возможно" она существенно ускоряет процесс изменения записей:
РежимЗамещения (ReplacementMode) Доступен, начиная с версии 8.3.25. Описание: Определят набор возможных режимов замещения при записи набора записей регистра сведений. Значения: Добавление (Append) Замещение (Replace) Обновление (Update) Слияние (Merge) Удаление (Delete) НаборЗаписей = РегистрыНакопления._ДемоОстаткиТоваровВМестахХранения.СоздатьНаборЗаписей();
НаборЗаписей.РасширенныеРежимыЗамещения = Истина;
НаборЗаписей.Отбор.Сбросить();
Для Индекс = КоличествоОбновляемыхЗаписей По КоличествоНедостающихЗаписей - 1 Цикл
ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), НедостающиеЗаписи[Индекс]);
КонецЦикла;
НаборЗаписей.Записать(РежимЗамещения.Добавление); |
|||
|
20
Garykom
гуру
27.02.26
✎
16:06
|
(18) У вас там предпочитают красивый/быстрый но потенциально кривой код да?
Который без конкретных данных даже на ошибки не проверить |
|||
|
21
Garykom
гуру
27.02.26
✎
16:10
|
(19) А нафига?
Зачем извращаться когда правильный метод работы с РС - многопоточность Хотим быстрее - не надо разом кучу записей удалять/добавлять или обновлять Можно и по одной но в кучу потоков |
|||
|
22
ass1c
27.02.26
✎
16:29
|
(21) Я просто считаю что эта информация имеет место быть в данной ветке. А нафига и как её использовать уже каждый решит сам в меру своего опыта и интеллектуальных способностей
|
|||
|
23
Timon1405
27.02.26
✎
17:35
|
(19)(22) оно для регистров подчиненных регистратору, а у ТС независимый. RTFM!
|
|||
|
24
Мультук
гуру
27.02.26
✎
17:48
|
(23)
>> оно для регистров подчиненных регистратору, а у ТС независимый Намекаете, что опять программисты 1С не читают свои же мануалы. А потом, эвон - пишут в РС без регистратора Набор = РегистрыСведений.НекийРегистрБезРегистратора.СоздатьНаборЗаписей(); Набор.Загрузить(Этапы); Набор.Записать(РежимЗамещения.Слияние); |
|||
|
25
ass1c
27.02.26
✎
17:57
|
(23) (24) надо поискать информацию. Частично видимо реализовали уже что-то...
Для набора записей независимого регистра сведений реализованы дополнительные режимы записи: Слияние - в этом случае в информационной базе происходит обновление записей, совпадающих по ключевым полям с записываемым набором записей, а остальные записи набора просто добавляются в регистр. Удаление - в этом случае происходит удаление из информационной базы записей, совпадающих по ключевым полям с записями, присутствующими в наборе записей. |
|||
|
26
ass1c
27.02.26
✎
17:58
|
(23) это что получается не RTFM!?
|
|||
|
27
Timon1405
27.02.26
✎
18:51
|
(24)(25) вы правы, нашёл доку
https://its.1c.ru/db/v8326doc#bookmark:dev:TI000002774 |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |