Добрый день!

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

```1c
    Финиш=Текст.КоличествоСтрок();

    Для СчСтрок=1 По Финиш Цикл

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

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

    Запрос.УстановитьПараметр("ИмяTSФайлаСРасширением", ИмяTS_ФайлаУНас);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Если ВыборкаДетальныеЗаписи.Следующий() Тогда
    Продолжить;
    КонецЕсли;

    // тут ещё много всякой фигни
    // заполняем регистр

    МенеджерЗаписиРегистраАрхивTS=РегистрыСведений.АрхивTS.СоздатьМенеджерЗаписи();

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

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

    КонецЦикла;
```

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

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

В данном конкретном случае я вышел из положения через ТЗ с индексом (заодно и запрос вынес за пределы цикла), но как именно заставить запрос выполняться каждый раз?
---
Решение проблемы:

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

Следить, чтобы алгоритм не исполнялся параллельно на разных машинах. Например, через блокировку.
---
Возможно, длина ресурса меньше длины параметра ИмяTS_ФайлаУНас.
---
К сожалению, нет.
---
как именно заставить запрос выполняться каждый раз
Он выполняется каждый раз.
---
Запросы в коде всегда выполняются. Будет лучше посмотреть отладчиком что в параметр записываете и сравнить с тем что в регистре фактически есть. Со сравнением строк в запросе не было платформенных проблем на моей памяти.
---
Уже посмотрел и сравнил. Иначе бы не писал сюда.
---
Вопрос: Как у вас определяется ИмяTS_ФайлаУНас?
Внутри цикла не увидел.
---
ну так, напиши, для начала:

```1c
    |ГДЕ
    | АрхивTS.ИмяTSФайлаСРасширением ПОДОБНО &ИмяTSФайлаСРасширением";

    Запрос.УстановитьПараметр("ИмяTSФайлаСРасширением","%"+ СОКРЛП(ИмяTS_ФайлаУНас)+"%");
```
---
Ща выяснится.. что в регистре просто имя фвйла, а ТС пихает имя файла с путём..
---
Нет, без пути. Более того, имя файла состоит из цифр и минусов, так что регистр и буква "О" вместо нуля тоже мимо.
---
Нам отсюда не видно, что в регистре, что в параметрах и КАК ты ЭТО проверяешь.
ЗЫ: чудес на свете не бывает, бывает тольео невнимательность и г-код
---
Нам отсюда не видно, что в регистре, что в параметрах и КАК ты ЭТО проверяешь.

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

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

И сбой в базе. Почему-то никто об этом ещё ни написал.
---
Как определил, что не видит?
---
Через отладчик. Первый раз файла нет, всё проходит дальше, файл добавляется. Второй раз файл есть, Выборка.Следующий() должна возвращать Истину, а она возвращает Ложь и "Продолжить" не срабатывает.
---
В тот момент когда вернула ложь: запускай запрос в консоли в другом сеансе.
---
Для чего ты это вообще затеял?
---
Затеял - что?
---
поставь остановку отладчика на выполнении запроса. Когда остановится, зайди другим сеансом, открой консоль запросов, запиши туда запрос и параметр.
Что будет?
Я ставлю на то, что параметр не так передается.
---
Параметр так передается.
---
Ну и...вот сюда, воткни паузу

```1c
    // тут очень много всякой разной фигни
```
---
И.. есть уверенность, что в менеджере регистра нет еще какой хрени , и твоя запись в РС просто не происходит ?
---
Уверенность есть. Под отладчиком МенеджерЗаписиРегистраАрхивTS.Записать() проходит.

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

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

Следовательно, запись в регистр ПРОХОДИТ
---
+ нам отсюда не видно, как ты в цикле изначально ИмяTS_ФайлаУНас определил
---
+ и этот код еще поди, в одной большой транзакции ? ))))
---
Транзакции нет.
---
что такое "поиск через ТЗ" ?
---
Забиваю в таблицу значений имена всех встреченных файлов, затем вместо запроса ищу в ней.
---
И.. у тя в (1) в цикле, переменная ИмяTS_ФайлаУНас не изменяется вообще что ле ?:)
---
Нет, не изменяется. В смысле, как получает очередное новое или старое значение имени на каждом витке цикла, так в неё больше ничего и не пишется. Только читают.
---
а какой общий смысл всего этого кода? Почему вы вообще усомнились в том, что что-то в коде работает верно?
---
Решение проблемы:

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

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