Запрос в цикле к регистру сведений не видит изменений этого регистра в этом цикле

1. DWZ2 18.05.22 04:14 Сейчас в теме
Добрый день!

Есть периодический регистр сведений "АрхивTS", у него есть индексированный ресурс "ИмяTSФайлаСРасширением" типа "Строка". Есть цикл по внешним файлам для заполнения имени. Чтобы не было дублей некрасиво в цикле идёт запрос.

Финиш=Текст.КоличествоСтрок();
		
Для СчСтрок=1 По Финиш Цикл

     // тут очень много всякой разной фигни

     // а не было уже этого TS-файла?
    // запрос в цикле СПЕЦИАЛЬНО,
    // чтобы видеть свежедобавленные записи
     Запрос = Новый Запрос;
     Запрос.Текст = 
				"ВЫБРАТЬ
				|	АрхивTS.ИмяTSФайлаСРасширением КАК ИмяTSФайлаСРасширением
				|ИЗ
				|	РегистрСведений.АрхивTS КАК АрхивTS
				|ГДЕ
				|	АрхивTS.ИмяTSФайлаСРасширением = &ИмяTSФайлаСРасширением";
			
			Запрос.УстановитьПараметр("ИмяTSФайлаСРасширением", ИмяTS_ФайлаУНас);
			
			РезультатЗапроса = Запрос.Выполнить();
			
			ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
			Если ВыборкаДетальныеЗаписи.Следующий() Тогда
				Продолжить;
			КонецЕсли;

// тут ещё много всякой фигни
// заполняем регистр
			
			МенеджерЗаписиРегистраАрхивTS=РегистрыСведений.АрхивTS.СоздатьМенеджерЗаписи();
			
			МенеджерЗаписиРегистраАрхивTS.ИмяTSФайлаСРасширением=ИмяTS_ФайлаУНас;
			МенеджерЗаписиРегистраАрхивTS.Период=ТекущийПериод;

// ещё всякие реквизиты
                      МенеджерЗаписиРегистраАрхивTS.Записать();

КонецЦикла;

Показать


Запрос специально в цикле, чтобы видеть свежедобавленные записи, но он их не видит! Как минимум, при одном пользователе в базе. Возможно, 1С видит, что параметр у запроса не меняется и не выполняет его вновь. Кеш чистил - не помогает.

Как с этим бороться?

В данном конкретном случае я вышел из положения через ТЗ с индексом (заодно и запрос вынес за пределы цикла), но как именно заставить запрос выполняться каждый раз?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
31. DWZ2 19.05.22 19:32 Сейчас в теме +0.18 $m
Решение проблемы:

1. Выполнить запрос 1 раз ПЕРЕД циклом
2. Выгрузить его в ТЗ
3. Проверять, был файл или нет по ТЗ
4. Если его не было - добавлять в ТЗ

Следить, чтобы алгоритм не исполнялся параллельно на разных машинах. Например, через блокировку.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SlavaKron 18.05.22 04:51 Сейчас в теме
(1) Возможно, длина ресурса меньше длины параметра ИмяTS_ФайлаУНас.
3. DWZ2 18.05.22 09:36 Сейчас в теме
4. Sashares 35 18.05.22 09:42 Сейчас в теме
(1)
как именно заставить запрос выполняться каждый раз

Он выполняется каждый раз.
7. lmnlmn 69 18.05.22 10:04 Сейчас в теме
(1) Запросы в коде всегда выполняются. Будет лучше посмотреть отладчиком что в параметр записываете и сравнить с тем что в регистре фактически есть. Со сравнением строк в запросе не было платформенных проблем на моей памяти.
14. DWZ2 18.05.22 21:00 Сейчас в теме
(7) Уже посмотрел и сравнил. Иначе бы не писал сюда.
30. glek 119 19.05.22 16:31 Сейчас в теме
(1) Вопрос: Как у вас определяется ИмяTS_ФайлаУНас?
Внутри цикла не увидел.
5. user1203706 13 18.05.22 09:42 Сейчас в теме
(1) ну так, напиши, для начала:

|ГДЕ
                |    АрхивTS.ИмяTSФайлаСРасширением ПОДОБНО &ИмяTSФайлаСРасширением";
            
            Запрос.УстановитьПараметр("ИмяTSФайлаСРасширением","%"+ СОКРЛП(ИмяTS_ФайлаУНас)+"%");
6. user1203706 13 18.05.22 09:55 Сейчас в теме
Ща выяснится.. что в регистре просто имя фвйла, а ТС пихает имя файла с путём..
11. DWZ2 18.05.22 20:55 Сейчас в теме
(6) Нет, без пути. Более того, имя файла состоит из цифр и минусов, так что регистр и буква "О" вместо нуля тоже мимо.
15. user1203706 13 18.05.22 21:01 Сейчас в теме
(11) Нам отсюда не видно, что в регистре, что в параметрах и КАК ты ЭТО проверяешь.
ЗЫ: чудес на свете не бывает, бывает тольео невнимательность и г-код
17. DWZ2 18.05.22 21:03 Сейчас в теме
(15)
Нам отсюда не видно, что в регистре, что в параметрах и КАК ты ЭТО проверяешь.


Мне видео выложить?

(15)
ЗЫ: чудес на свете не бывает, бывает тольео невнимательность и г-код


И сбой в базе. Почему-то никто об этом ещё ни написал.
8. dehro 5 18.05.22 12:29 Сейчас в теме
Как определил, что не видит?
12. DWZ2 18.05.22 20:59 Сейчас в теме
(8) Через отладчик. Первый раз файла нет, всё проходит дальше, файл добавляется. Второй раз файл есть, Выборка.Следующий() должна возвращать Истину, а она возвращает Ложь и "Продолжить" не срабатывает.
22. dehro 5 18.05.22 21:13 Сейчас в теме
(12)В тот момент когда вернула ложь: запускай запрос в консоли в другом сеансе.
9. igor63 18.05.22 12:41 Сейчас в теме
Для чего ты это вообще затеял?
13. DWZ2 18.05.22 20:59 Сейчас в теме
10. starjevschik 18.05.22 12:53 Сейчас в теме
поставь остановку отладчика на выполнении запроса. Когда остановится, зайди другим сеансом, открой консоль запросов, запиши туда запрос и параметр.
Что будет?
Я ставлю на то, что параметр не так передается.
16. DWZ2 18.05.22 21:01 Сейчас в теме
(10) Параметр так передается.
18. user1203706 13 18.05.22 21:03 Сейчас в теме
Ну и...вот сюда, воткни паузу
 // тут очень много всякой разной фигни
19. user1203706 13 18.05.22 21:07 Сейчас в теме
И.. есть уверенность, что в менеджере регистра нет еще какой хрени , и твоя запись в РС просто не происходит ?
24. DWZ2 19.05.22 01:27 Сейчас в теме
(19) Уверенность есть. Под отладчиком МенеджерЗаписиРегистраАрхивTS.Записать() проходит.

Возможно, я не прав и тему следовало бы назвать "Менеджер записи записывает через раз", но:

1) есть ресурс "НомерЗаписи" и он стабильно увеличивается. Только, если поглядеть в базу, он увеличивается не через 1, как должен, а через 2, иногда и через 6.
2) стоило заменить поиск через запрос на поиск через ТЗ, как всё заработало

Следовательно, запись в регистр ПРОХОДИТ
20. user1203706 13 18.05.22 21:08 Сейчас в теме
+ нам отсюда не видно, как ты в цикле изначально ИмяTS_ФайлаУНас определил
21. user1203706 13 18.05.22 21:09 Сейчас в теме
+ и этот код еще поди, в одной большой транзакции ? ))))
23. DWZ2 19.05.22 01:21 Сейчас в теме
25. user1203706 13 19.05.22 10:42 Сейчас в теме
(24) что такое "поиск через ТЗ" ?
27. DWZ2 19.05.22 12:33 Сейчас в теме
(25) Забиваю в таблицу значений имена всех встреченных файлов, затем вместо запроса ищу в ней.
26. user1203706 13 19.05.22 10:45 Сейчас в теме
И.. у тя в (1) в цикле, переменная ИмяTS_ФайлаУНас не изменяется вообще что ле ?:)
28. DWZ2 19.05.22 12:36 Сейчас в теме
(26) Нет, не изменяется. В смысле, как получает очередное новое или старое значение имени на каждом витке цикла, так в неё больше ничего и не пишется. Только читают.
29. nomad_irk 76 19.05.22 13:54 Сейчас в теме
(28) а какой общий смысл всего этого кода? Почему вы вообще усомнились в том, что что-то в коде работает верно?
gonnahard; +1 Ответить
31. DWZ2 19.05.22 19:32 Сейчас в теме +0.18 $m
Решение проблемы:

1. Выполнить запрос 1 раз ПЕРЕД циклом
2. Выгрузить его в ТЗ
3. Проверять, был файл или нет по ТЗ
4. Если его не было - добавлять в ТЗ

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот