Доброго времени суток. Я новичок в 1с. Поступила задача принять на работу людей из .csv файла, пошарясь по форумам и ютубу получилось загузить .csv файл и программно создать и записать документ, но почему-то не заполняются данные в документе. Подскажите что я сделал не так?

```1c
    &НаКлиенте
    Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Проводник = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Проводник.Заголовок = "Выберите файл для загрузки";

    Если Объект.ФорматФайла = "CSV" Тогда
    Фильтр = "Текстовый документ (*.csv)|*.csv";
    ИначеЕсли Объект.ФорматФайла = "XLS" Тогда
    Фильтр = "Текстовый документ (*.xls)|*.xls";
    ИначеЕсли Объект.ФорматФайла = "TXT" Тогда
    Фильтр = "Текстовый документ (*.txt)|*.txt";
    Иначе
    Возврат;
    КонецЕсли;

    Проводник.Фильтр = Фильтр;

    Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект);
    Проводник.Показать(Оповещение);

    КонецПроцедуры

    &НаКлиенте
    Процедура ПослеВыбораФайла(ВыбранныеФайлы, ДополнительныеПараметры)Экспорт

    Если ВыбранныеФайлы = Неопределено Тогда
    Возврат;
    КонецЕсли;

    Объект.ПутьКФайлу = ВыбранныеФайлы[0];
    КонецПроцедуры

    &НаСервере
    Процедура Загрузить_CSV(Файл_CSV)

    ТЗ = Новый ТаблицаЗначений;
    // Важно! Чтобы в значениях НЕ встречался используемый разделитель
    Используемый_разделитель = ";";

    //*** Если есть шапка таблицы ***
    Шапка_CSV = Файл_CSV.ПолучитьСтроку(1);
    // Чтение и разделение на отдельные значения в массив (по разделителю)
    Массив_CSV = СтрРазделить(Шапка_CSV, Используемый_разделитель);
    //Для каждого СтрМас Из Массив_CSV Цикл
    // Сообщить(Строка(СтрМас));
    //КонецЦикла;
    Сообщить(Шапка_CSV);
    //***************************

    Для Каждого СтрокаНом Из Массив_CSV Цикл
    // Удаляем пробелы т.к. в названии столбцов они не допускаются
    ИмяБП = СтрЗаменить(СтрокаНом," ",");
    ТЗ.Колонки.Добавить(ИмяБП,, СтрокаНом);
    КонецЦикла;

    Для НомерСтроки=2 по Файл_CSV.КоличествоСтрок() Цикл // Если без шапки, то начинаем с первой строчки

    // Получаем строку по-порядку
    Строка_CSV = Файл_CSV.ПолучитьСтроку(НомерСтроки);
    Сообщить(Строка_CSV);
    // Разделяем с помощью выбранного разделителя каждую строку на столбцы
    Массив_CSV = СтрРазделить(Строка_CSV, Используемый_разделитель);
    //Для каждого СтрМас Из Массив_CSV Цикл
    // Сообщить(Строка(СтрМас));
    //КонецЦикла;

    НоваяСтрочка= ТЗ.Добавить();// Добавляем строку в ТЗ

    Для Ном_Столбца= 0 по Массив_CSV.Количество()-1 Цикл
    //Сообщить("Номер ст: "+Строка(Ном_Столбца));
    ТекЗначение_CSV = Массив_CSV[Ном_Столбца];
    ИмяКолонки_CSV = ТЗ.Колонки[Ном_Столбца].Имя;
    НоваяСтрочка[ИмяКолонки_CSV] = ТекЗначение_CSV;
    КонецЦикла;
    КонецЦикла;
    Сообщить(Строка(ТЗ.Количество()));
    //Возврат ТЗ;
    ДокПрием = Документы.ПриемНаРаботу.СоздатьДокумент();
    ДокПрием.Дата = ТекущаяДата();
    ДокПрием.Комментарий = "#Документ создан автоматически обработкой";

    Для Каждого Строка_CSV ИЗ ТЗ Цикл

    НовыйСотрудник = ДокПрием.Сотрудники.Добавить();
    НовыйСотрудник.Сотрудник = Строка_CSV.Наименование;
    НовыйСотрудник.Период = Строка_CSV.ДатаПриема;
    НовыйСотрудник.СтруктурнаяЕдиница = Строка_CSV.Подразделение;
    НовыйСотрудник.Должность = Строка_CSV.Должность;
    КонецЦикла;
    ДокПрием.Записать();
    Сообщить("Запись документа Прием на работу успешно выполнен");

    КонецПроцедуры

    &НаКлиенте
    Процедура ПрочитатьФайл(Команда)

    Файл_CSV = Новый ТекстовыйДокумент;
    Файл_CSV.Прочитать(Объект.ПутьКФайлу);
    Загрузить_CSV(Файл_CSV);
    КонецПроцедуры
```
---
собственно ответили уже, но видимо не дошло
НовыйСотрудник.Сотрудник - тип значения какой? думается, что СправочникСсылка.Что-то-там
НовыйСотрудник.Период - тип значения какой? думается Дата

а что приходит в csv? думается текст, а значит у вас везде (Строка_CSV.Наименование, Строка_CSV.ДатаПриема и т.д.) типы значений Строка

а что будет если попытаться в значение, например Дата программно записать Строку? думается - ничего, что собственно наблюдается в результате формирования документа

по факту нужно:
1. привести читаемые значения из csv к типам
2. проверить наличие в справочниках полученных значений
3. при отсутствии создать элемент справочника и получить ссылку
4. записать приведенные значения в документ

и тогда все получится
---
Если у вас не заполнены справочники Сотрудников, должностей и подразделений, то здесь же можно их и заполнять.
Примерно так:

```1c
    НовыйСотрудник = ДокПрием.Сотрудники.Добавить();

    НовыйФИО = Справочники.Сотрудники.СоздатьЭлемент();
    НовыйФИО.Наименование = Строка_CSV.Наименование;
    ... и проч. реквизиты
    НовыйФИО.Записать();

    НовыйСотрудник.Сотрудник = НовыйФИО;
```
---
Надо достать не путь, а ссылку на Сотрудника, ссылку на подразделение и ссылку на должность. Используя, например, НайтиПоНаименованию(). Дату из строки конвертировать в тип дата.
Примерно так:

```1c
    НовыйСотрудник.Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию(Строка_CSV.Наименование);
    НовыйСотрудник.Период = Дата(Строка_CSV.ДатаПриема);
    НовыйСотрудник.СтруктурнаяЕдиница = Справочники.Подразделения.НайтиПоНаименованию(Строка_CSV.Подразделение);
    НовыйСотрудник.Должность = Справочники.Должности.НайтиПоНаименованию(Строка_CSV.Должность);
```
---
НовыйСотрудник.Сотрудник = Строка_CSV.Наименование;
        НовыйСотрудник.Период = Строка_CSV.ДатаПриема;
        НовыйСотрудник.СтруктурнаяЕдиница = Строка_CSV.Подразделение;
        НовыйСотрудник.Должность = Строка_CSV.Должность;
В общем-то, ты пытаешься засунуть строку туда, где требуется ссылка на объект или другой тип данных. Сотрудника, должность, и подразделение надо найти в соответствующих справочниках и поставить найденные ссылки, строку даты надо конвертировать в дату.
---
Т.е. в справочнике "Сотрудники" надо достать путь к сотруднику, должности и подразделению? Вот сотрудник: ПутьКДанным - Список.Наименование. Так же и с остальным?
И как мне тогда писать? НовыйСотрудник.Сотрудник = Список.Наименование? просто тогда же у меня данных не будет если справочник не заполнен. или как-то по другому надо этот цикл переделать?
---
собственно ответили уже, но видимо не дошло
НовыйСотрудник.Сотрудник - тип значения какой? думается, что СправочникСсылка.Что-то-там
НовыйСотрудник.Период - тип значения какой? думается Дата

а что приходит в csv? думается текст, а значит у вас везде (Строка_CSV.Наименование, Строка_CSV.ДатаПриема и т.д.) типы значений Строка

а что будет если попытаться в значение, например Дата программно записать Строку? думается - ничего, что собственно наблюдается в результате формирования документа

по факту нужно:
1. привести читаемые значения из csv к типам
2. проверить наличие в справочниках полученных значений
3. при отсутствии создать элемент справочника и получить ссылку
4. записать приведенные значения в документ

и тогда все получится
---
Если у вас не заполнены справочники Сотрудников, должностей и подразделений, то здесь же можно их и заполнять.
Примерно так:

```1c
    НовыйСотрудник = ДокПрием.Сотрудники.Добавить();

    НовыйФИО = Справочники.Сотрудники.СоздатьЭлемент();
    НовыйФИО.Наименование = Строка_CSV.Наименование;
    ... и проч. реквизиты
    НовыйФИО.Записать();

    НовыйСотрудник.Сотрудник = НовыйФИО;
```
---
Надо достать не путь, а ссылку на Сотрудника, ссылку на подразделение и ссылку на должность. Используя, например, НайтиПоНаименованию(). Дату из строки конвертировать в тип дата.
Примерно так:

```1c
    НовыйСотрудник.Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию(Строка_CSV.Наименование);
    НовыйСотрудник.Период = Дата(Строка_CSV.ДатаПриема);
    НовыйСотрудник.СтруктурнаяЕдиница = Справочники.Подразделения.НайтиПоНаименованию(Строка_CSV.Подразделение);
    НовыйСотрудник.Должность = Справочники.Должности.НайтиПоНаименованию(Строка_CSV.Должность);
```
---
НайтиПоНаименованию попробуйте
---
Проще создавать отдельные доки приема на каждого....
Проще создать и потом работать с ними....
Вот точно кадравики будут нырять в этот документ 1000500 раз
---
Всем спасибо большое, разобрался!)