Каким образом можно записывать НаборЗаписей регистра сведений в процессе выполнения цикла?

Как можно настроить цикл <b>НаборовЗаписей</b> в процессе перебора строк файла, чтобы каждый транспорт записывался в регистр в соответствующую пустую колонку <b>НомерТС</b>, а не дублировал <b>номерТС</b> последнего водителя для всех строк? Currently, the code records the <b>номерТС</b> of the last driver from the file in each entry consecutively. 
  • 16 апреля 2025 г. 10:35
Ответы на вопрос 2
Чтобы записывать значения в регистр сведений корректно, необходимо правильно организовать цикл, который будет обрабатывать строки файла и записывать информацию в соответствующие колонки. Предположим, что у вас есть файл, в котором каждая строка содержит данные о транспорте и водителе. Нужно убедиться, что вы обновляете значения для каждого транспортного средства, а не записываете одно и то же значение для всех строк.

Вот пример, как это можно сделать в 1С:

```1C
// Открываем файл и создаем набор записей для регистра сведений
Файл = ОткрытьФайл("путь_к_файлу");
НаборЗаписей = РегистрыСведений.ИмяРегистра.СоздатьНаборЗаписей();

// Читаем строки файла
Пока Файл.ЧитатьСтроку(Строка) Цикл
    // Разбиваем строку на составляющие
    Данные = РазделитьСтроку(Строка, ";"); // Предположим, что данные разделены точкой с запятой

    // Проверяем, что в строке достаточно данных
    Если ЗначениеЗаполнено(Данные[0]) И ЗначениеЗаполнено(Данные[1]) Тогда
        НовыйПроводка = НаборЗаписей.Добавить();
        
        // Заполняем поля набора записей
        НовыйПроводка.НомерТС = Данные[0]; // Предполагаваем, что первый элемент - номер ТС
        НовыйПроводка.Водитель = Данные[1]; // Второй элемент - водителя
        // Заполните другие поля при необходимости

        // Подготовка к записи набора записей в регистр
        // Дополнительные действия могут быть здесь
    КонецЕсли;
КонецЦикла;

// Записываем все записи в регистр
НаборЗаписей.Записать();
```

### Основные моменты

1. Используйте метод `СоздатьНаборЗаписей()` для создания нового набора записей для вашего регистра сведений.
2. В каждом проходе цикла создавайте новую запись с помощью метода `Добавить()`, а не обновляйте уже существующую.
3. Заполняйте нужные поля с актуальными данными из каждой строки файла.
4. После завершения цикла запустите `Записать()` для записи всех собранных записей в регистр.

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

1) Тут два цикла - верхний по всем существующим записям РегистрыСведений.ДанныеСотрудников, а вложенный по всем строкам начиная со второй. Уже это само по себе не имеет смысла, так как выходит, что цель программы - записать в ячейку НомерТС значение из последней строки файла.

2) Записывать набор записей внутри цикла по его же записям - это ужасная идея!!! Откинем вероятный код из модуля набора записей, который может изменять состав и/или последовательность строк, но и тогда это просто расточительно - на каждом витке цикла записывать одно и то же

3) Ужасное наименование переменных, чтобы запутать самого себя! Если транспортное средство ищется в базе по первой колонке из файла, то какого лешего ее назвали "Водитель", а не "Транспорт"??? Если в колонку НомерТС записывается значение из второй колонки файла, какого лешего ее назвали "Транспорт", а не "НомерТранспорта"???

4) Что за странная установка наименования транспортного средства? Если в базе выполняется поиск по наименованию из переменной Водитель (хотя на самом деле там Транспорт), то именно это значение и нужно записать в название, чтобы поиск сработал на следующем витке цикла! А вовсе не сайд-эффекты по справочнику Сотрудников с помощью Справочники.Сотрудники.НайтиПоНаименованию(Водитель):
4.1) В справочнике Сотрудников может не существовать нужного элемента и в отличии от Транспорта тут нет создания недостающего элемента (в принципе он и не нужен, так как в этом коде справочник "Сотрудники" нигде не используется)
4.2) Если менять представление в настройках справочник "Сотрудники" и/или в менеджере справочника, то платформа 1С ничего не подскажет о том, что в коде загрузки транспорта может что-то сломаться. Поэтому сайд-эффекты запрещено применять всюду кроме разовых обработок для правки данных, когда риск осознается.

5) Алгоритм не имеет смысла. Подозреваю, что в файле указан транспорт для существующих пользователей, по которому нужно обновить регистр ДанныеСотрудников. Тогда нужно:
5.1) Сначала пройти по файлу и сформировать таблицу (можно структуру или соответствие), в которую поместить данные по владению транспортом.
5.2) В цикле по файлу проверять существование транспорта в базе не по наименованию "моя тайота", а по гос.номеру или по вин-коду.
5.3) Сотрудника тоже желательно искать не по ФИО, а по табельному номеру, налоговому или паспортному номеру.
5.4) В регистр ДанныеСотрудников не имеет смысл помещает номер автомобиля - так как все будущие операции потребуют поиск по реквизиту "номер" для каждой строчки! Нужно поместить ссылку на элемент справочника "Транспорт"
5.5) Имея таблицу (можно структуру или соответствие) из пункта 5.1 проходим циклом по ее строкам, создаем менеджер записи с отбором по Сотруднику-Владельцу, если запись выбирается, то устанавливаем ссылку на транспорт и записываем.
Похожие вопросы