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

Как можно настроить цикл <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. После завершения цикла запустите `Записать()` для записи всех собранных записей в регистр.

С помощью такого подхода вы сможете записатель корректные, уникальные данные о каждом транспортном средстве, не дублируя информацию о последнем водителе.
С первого взгляда - какая-то чушь. Со второго - еще большая чушь! <br/> <br/> 1) Тут два цикла - верхний по всем существующим записям РегистрыСведений.ДанныеСотрудников, а вложенный по всем строкам начиная со второй. Уже это само по себе не имеет смысла, так как выходит, что цель программы - записать в ячейку НомерТС значение из последней строки файла. <br/> <br/> 2) Записывать набор записей внутри цикла по его же записям - это ужасная идея!!! Откинем вероятный код из модуля набора записей, который может изменять состав и/или последовательность строк, но и тогда это просто расточительно - на каждом витке цикла записывать одно и то же <br/> <br/> 3) Ужасное наименование переменных, чтобы запутать самого себя! Если транспортное средство ищется в базе по первой колонке из файла, то какого лешего ее назвали "Водитель", а не "Транспорт"??? Если в колонку НомерТС записывается значение из второй колонки файла, какого лешего ее назвали "Транспорт", а не "НомерТранспорта"??? <br/> <br/> 4) Что за странная установка наименования транспортного средства? Если в базе выполняется поиск по наименованию из переменной Водитель (хотя на самом деле там Транспорт), то именно это значение и нужно записать в название, чтобы поиск сработал на следующем витке цикла! А вовсе не сайд-эффекты по справочнику Сотрудников с помощью Справочники.Сотрудники.НайтиПоНаименованию(Водитель): <br/> 4.1) В справочнике Сотрудников может не существовать нужного элемента и в отличии от Транспорта тут нет создания недостающего элемента (в принципе он и не нужен, так как в этом коде справочник "Сотрудники" нигде не используется) <br/> 4.2) Если менять представление в настройках справочник "Сотрудники" и/или в менеджере справочника, то платформа 1С ничего не подскажет о том, что в коде загрузки транспорта может что-то сломаться. Поэтому сайд-эффекты запрещено применять всюду кроме разовых обработок для правки данных, когда риск осознается. <br/> <br/> 5) Алгоритм не имеет смысла. Подозреваю, что в файле указан транспорт для существующих пользователей, по которому нужно обновить регистр ДанныеСотрудников. Тогда нужно: <br/> 5.1) Сначала пройти по файлу и сформировать таблицу (можно структуру или соответствие), в которую поместить данные по владению транспортом. <br/> 5.2) В цикле по файлу проверять существование транспорта в базе не по наименованию "моя тайота", а по гос.номеру или по вин-коду. <br/> 5.3) Сотрудника тоже желательно искать не по ФИО, а по табельному номеру, налоговому или паспортному номеру. <br/> 5.4) В регистр ДанныеСотрудников не имеет смысл помещает номер автомобиля - так как все будущие операции потребуют поиск по реквизиту "номер" для каждой строчки! Нужно поместить ссылку на элемент справочника "Транспорт" <br/> 5.5) Имея таблицу (можно структуру или соответствие) из пункта 5.1 проходим циклом по ее строкам, создаем менеджер записи с отбором по Сотруднику-Владельцу, если запись выбирается, то устанавливаем ссылку на транспорт и записываем.
Похожие вопросы