Добрый день.
Суть вопроса. Есть обработка позволяющая выгрузить любой выбранный документ в txt файл вот в таком виде:
ПоступлениеТоваров
17.03.2021 18:13:17
Контрагент=Частное лицо
ДоговорКонтрагента=покупка 1
Номенклатура=стул
Цена=24 124
Количество=1
Сумма=24 124Скрытый текст
Где первые 2 строки это наименование документа и его дата.
Нужно написать обработку позволяющую загрузить эти данные в новый созданный документ.
Часть кода я уже написал. сейчас вопрос каки образом можно перечислить реквизиты шапки и реквизитыТЧ найти эти же реквизиты в текстовом файлы взять от туда значения и прописать в документ?
код который сейчас создает документ только с датой.
[1C-CODE&НаСервере
Процедура загрузитьНаСервере()

Документ = Новый ТекстовыйДокумент;
Документ.Прочитать("C:\1C\2.txt",КодировкаТекста.UTF8);

Для Индекс = 1 По Документ.КоличествоСтрок() Цикл
     Сообщить(Документ.ПолучитьСтроку(Индекс));

НаименованиеДокумента=документ.ПолучитьСтроку(1);
ДатаДокумента=документ.ПолучитьСтроку(2);

КонецЦикла;

Сообщить(""+ДатаДокумента);
Сообщить(""+НаименованиеДокумента);
Новыйдокумент = документы[НаименованиеДокумента].СоздатьДокумент();
Новыйдокумент.Дата = Дата(ДатаДокумента);

НовыйДокумент.записать();
КонецПроцедуры[/1C-CODE]]Скрытый текст
---
```1c
    ПолноеИмя = ДокументОбъект.РеквизитДоговорыКонтрагентов.Метаданные().ПолноеИмя()
```
---
в итоге родил такую обработку. не судите строго это в принципе первое что я самостоятельно написал.

```1c
    &НаСервере
    Процедура выгрузитьНаСервере(ДокСсылка)
    Текст = Новый ТекстовыйДокумент;

    //получаем имя документа и дату создания
    ИмяДокумента = ДокСсылка.Метаданные().Имя;
    ДатаДокумента = ДокСсылка.Дата;
    //прописываем первыми 2 строками имя документа и дату
    текст.ДобавитьСтроку(" + ИмяДокумента);
    текст.ДобавитьСтроку(" + ДатаДокумента);

    //перебираем все имеющиеся реквизиты шапки документа
    для каждого Шреквизит из ДокСсылка.метаданные().Реквизиты цикл
    //проверяем если реквизит имеет тип справочникссылка
    Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Докссылка["+Шреквизит.имя])) = ложь тогда
    //проверяем если реквизит имеет тип перечисление
    если перечисления.ТипВсеСсылки().СодержитТип(ТипЗнч(Докссылка["+Шреквизит.имя]))=ложь тогда
    текст.ДобавитьСтроку("+ Шреквизит.Имя+"="+Докссылка["+Шреквизит.имя])
    иначе
    ПолноеИмяПеречисления=ДокСсылка[Шреквизит.имя].метаданные().имя;
    текст.ДобавитьСтроку("+ Шреквизит.Имя+"="+Докссылка["+Шреквизит.имя]+"#"+ПолноеИмяПеречисления)
    конецесли;
    иначе
    ПолноеИмяСпр=ДокСсылка[Шреквизит.имя].метаданные().имя;
    текст.ДобавитьСтроку("+ Шреквизит.Имя+"="+Докссылка["+Шреквизит.имя].код+"&"+ПолноеИмяСпр);
    конецесли;
    конецЦикла;

    //заполняем реквизитытабличных частей документа
    Для каждого ТабЧасть из докссылка.Метаданные().ТабличныеЧасти Цикл //Определеяем имена табличных частей
    Для каждого ТекСтрока из Докссылка[ТабЧасть.имя] цикл //используя имя табличной части получить строки ТЧ
    для каждого ТЧреквизит из Табчасть.реквизиты цикл //находясь на строке ТЧ перебираем реквизиты ТЧ
    //проверяем если реквизит имеет тип справочникссылка
    Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ТекСтрока["+ТЧреквизит.имя])) = ложь тогда
    текст.ДобавитьСтроку("ТабличныеЧасти;"+ТабЧасть.Имя+"'"+ ТЧреквизит.Имя+"="+ТекСтрока["+ТЧреквизит.имя]);
    иначе
    текст.ДобавитьСтроку("ТабличныеЧасти;"+ТабЧасть.Имя+"'"+ ТЧреквизит.Имя+"="+ТекСтрока["+ТЧреквизит.имя].код);
    конецесли;
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;

    //записывае текст в файл
    Текст.Записать(сохранитькак);
    КонецПроцедуры

    &НаКлиенте
    Процедура выгрузить(Команда)
    ВыгрузитьНаСервере(ДокСсылка);
    КонецПроцедуры

    &НаСервере
    Процедура загрузитьНаСервере()
    Документ = Новый ТекстовыйДокумент;
    Документ.Прочитать(ПутьКФайлу,КодировкаТекста.UTF8);
    //так как мы значем точно,что первые 2 строки текстового файла, это название документа и его дата то сразу прописываем переменные
    Для Индекс = 1 По Документ.КоличествоСтрок() Цикл
    НаименованиеДокумента=документ.ПолучитьСтроку(1);
    ДатаДокумента=документ.ПолучитьСтроку(2);
    КонецЦикла;
    //создаем документ с наименование документа из текстового файла и прописываем ему дату.
    Новыйдокумент = документы[НаименованиеДокумента].СоздатьДокумент();
    Новыйдокумент.Дата = Дата(ДатаДокумента);
    //так как первые 2 строки уже определены,они нам не нужны по этому начинаем цикл с 3 строки
    Для Индекс = 3 По Документ.КоличествоСтрок() Цикл
    Стр = Документ.Получитьстроку(Индекс);
    //прописываем разделители
    Разделитель = найти(стр,"=");
    РазделительТЧ=найти(стр,"'");
    РазделительУТЧ=найти(стр,";");
    РазделительТСпр = найти(стр,"&");
    РазделительПеречисления = найти(стр,"#");
    //получаем имена,значения и тип реквизитов.
    КодЗначения=сред(стр,Разделитель+1,РазделительТСпр-Разделитель-1);
    НаименованиеРеквизита = Лев(стр,Разделитель-1);
    ПолноеИмяСпр=сред(стр,РазделительТСпр+1);
    ПолноеИмяПеречисления = сред(стр,РазделительПеречисления+1);
    НаименованиеПер=сред(стр,Разделитель+1,РазделительПеречисления-Разделитель-1);
    ИмяТЧ=сред(стр,РазделительУТЧ+1,РазделительТЧ-РазделительУТЧ-1);
    НаименованиеРТЧ=сред(стр,РазделительТЧ+1,Разделитель-РазделительТЧ-1);
    УсловиеДляТЧ= Найти(стр,"ТабличныеЧасти");
    //проверяеместь ли упоминание, что это реквизит ТЧ
    Если УсловиеДляТЧ=0 тогда
    //Получаем реквизит шапки
    Шреквизит=НовыйДокумент.Метаданные().Реквизиты[НаименованиеРеквизита];
    //проверяем есть ли упоминание что этот реквизит должен быть справочникссылка. если да то ищем по коду,получаем ссылку и присваиваем значение реквизиту
    если РазделительТСпр <> 0 тогда
    Элемент = Справочники[ПолноеИмяСпр].найтипокоду(КодЗначения).ссылка;
    новыйдокумент["+Шреквизит.имя]=Элемент;
    иначе
    //проверяем есть ли упоминание что это перечисление.если да то получаем перечисление и прописываем его в значение, если нет то просто берем значение и прописываем его в реквизит
    если РазделительПеречисления <> 0 тогда
    перечисление = перечисления[полноеимяперечисления][наименованиеПер];
    новыйдокумент["+Шреквизит.имя]=перечисление;
    иначе
    новыйдокумент["+Шреквизит.имя]=КодЗначения;
    конецесли;
    конецесли;
    иначе
    //получаем реквизит ТЧ
    ТЧреквизит=Новыйдокумент.метаданные().ТабличныеЧасти[ИмяТЧ].реквизиты[НаименованиеРТЧ];
    //так как у нас в документах во всех ТЧ есть реквизит "номенклатура" то по нему будем определять нужно ли создовать новую строку в ТЧ
    Если НаименованиеРТЧ="Номенклатура" тогда
    НоваяСтрока = новыйдокумент[ИмяТЧ].Добавить();
    //проверяем если реквизит имеет тип справочникссылка(у нас в документах состовной тип данных есть только в реквизитах шапки по этому там сделанно по другому)
    если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(НоваяСтрока["+ТЧреквизит.имя])) = истина тогда
    ПолноеИмяСпр=НоваяСтрока[ТЧреквизит.имя].метаданные().имя;
    Элемент = Справочники[ПолноеИмяСпр].найтипокоду(КодЗначения).ссылка;
    НоваяСтрока["+ТЧреквизит.имя]=Элемент;
    иначе
    НоваяСтрока[ТЧреквизит.имя] = КодЗначения;
    конецЕсли;
    иначе
    если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(НоваяСтрока["+ТЧреквизит.имя])) = истина тогда
    ПолноеИмяСпр=НоваяСтрока[ТЧреквизит.имя].метаданные().имя;
    Элемент = Справочники[ПолноеИмяСпр].найтипокоду(КодЗначения).ссылка;
    НоваяСтрока["+ТЧреквизит.имя]=Элемент;
    иначе
    НоваяСтрока[ТЧреквизит.имя] = КодЗначения;
    конецЕсли;
    конецЕсли;
    конецЕсли;
    КонецЦикла;
    Новыйдокумент.записать();
    КонецПроцедуры

    &НаКлиенте
    Процедура загрузить(Команда)
    загрузитьНаСервере();
    КонецПроцедуры

    &НаКлиенте
    Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогВыбораФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогВыбораФайла.ПолноеИмяФайла = ПутьКФайлу;
    Фильтр = НСтр("ru = 'Текст'; en = 'Text'")
    + "(*.txt)|*.txt";
    ДиалогВыбораФайла.Фильтр = Фильтр;
    ДиалогВыбораФайла.МножественныйВыбор = Ложь;
    ДиалогВыбораФайла.Заголовок = "Выберите каталог";

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

    ДиалогВыбораФайла.Показать(ОповещениеЗавершения);

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

    &НаКлиенте
    Процедура ВыборФайлаЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
    Если ВыбранныеФайлы <> Неопределено Тогда
    ПутьКФайлу = ВыбранныеФайлы[0];
    КонецЕсли;
    КонецПроцедуры

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

    ДиалогВыбораФайла.ПолноеИмяФайла = ПутьКФайлу;
    Фильтр = НСтр("ru = 'Текст'; en = 'Text'")
    + "(*.txt)|*.txt";
    ДиалогВыбораФайла.Фильтр = Фильтр;
    ДиалогВыбораФайла.МножественныйВыбор = Ложь;
    ДиалогВыбораФайла.Заголовок = "Выберите каталог";

    Оповещения = Новый ОписаниеОповещения("СохранениеФайлаЗавершение", ЭтаФорма);

    ДиалогВыбораФайла.Показать(Оповещения);

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

    &НаКлиенте
    Процедура СохранениеФайлаЗавершение(ВыбранныеФайлыС, ДополнительныеПараметры) Экспорт
    Если ВыбранныеФайлыС <> Неопределено Тогда
    сохранитькак = ВыбранныеФайлыС[0];
    КонецЕсли;
    КонецПроцедуры
```
---
У Вас неправильная структура файла для начала:
Секция документа должна быть однозначно определена например текстом НачалоДокумента. А дальше уже дело техники разобрать файл
---
Тут можно проверить и на Метаданные.Документы.Найти()
Типа так

```1c
    Перем ТекущийДокумент;
    // --- бла бла бла
    Если не Метаданные.Документы.Найти(ТекущаяСтрока) = неопределено Тогда
    Если не ТекущийДокумент = Неопределено Тогда
    //Записываем предыдущий документ;
    ТекущийДокумент.Записать();
    КонецЕсли;
    ТекущийДокумент = Документы[ТекущаяСтрока].СоздатьДокумент();
    КонецЕсли;
```
---
Если знаете структуру txt и она всегда одинаковая то читайте строку файла, находите в строке свои данные и заполняйте документ
---
заранее незнаем. в том то и сложность, что выгруженный документ всегда может быть разный. соответственно набор реквизитов неизвестен заранее.
---
При загрузке ищите по метаданным наличие реквизита по имени, если есть - заполняйте.
---
можно пример кода. знаний не хватает.
---
Обработку для вас написать ? ;)

И что значит "взять из файла значение", у вас это просто строки, их как-то надо будет обрабатывать при чтении, искать в базе по наименованию, например, а значит надо понимать какой это справочник.
Т.е. простого решения не будет.
---
в общем после долгого шевеления мозгами родил такой код.

```1c
    Процедура загрузитьНаСервере()

    Документ = Новый ТекстовыйДокумент;
    Документ.Прочитать("C:\1C\2.txt",КодировкаТекста.UTF8);

    Для Индекс = 1 По Документ.КоличествоСтрок() Цикл

    НаименованиеДокумента=документ.ПолучитьСтроку(1);
    ДатаДокумента=документ.ПолучитьСтроку(2);
    КонецЦикла;
    Для Индекс = 3 По Документ.КоличествоСтрок() Цикл
    Стр = Документ.Получитьстроку(Индекс);
    Разделитель = найти(стр,"=");
    //РазделительКода = найти(стр,";");
    КодЗначения=сред(стр,Разделитель+1);
    Наименование = Лев(стр,разделитель-1);
    Значение = сред(стр,Разделитель+1);

    Новыйдокумент = документы[НаименованиеДокумента].СоздатьДокумент();
    Новыйдокумент.Дата = Дата(ДатаДокумента);

    для каждого Шреквизит из Новыйдокумент.метаданные().Реквизиты цикл
    ИмяСправочника="+ ТипЗнч(Новыйдокумент["+Шреквизит.имя]);
    Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Новыйдокумент["+Шреквизит.имя])) = истина тогда
    Элемент = Справочники[ИмяС
    правочника].найтипокоду(Значение).получитьОбъект();
    Новыйдокумент["+Шреквизит.имя]=Элемент иначе
    Новыйдокумент[Шреквизит.имя].Наименование=Значение;
    Сообщить(Новыйдокумент["+Шреквизит.имя].код+ "==="+Новыйдокумент[Шреквизит.имя].Наименование);

    конецесли;
    КонецЦикла;
    КонецЦикла;
    //НовыйДокумент.записать();
    КонецПроцедуры
```

есть ИмяСправочника одним словом то все нормально но если к примеру 2 словами например Договор Контрагента то соответственно выдает ошибку. как еще можно получить название справочника?
---
Выгружайте в файл одним словом: ДоговорКонтрагента, либо убирате пробелы при загрузке с помощью СтрЗаменить()
---
а через метаданные нового документа разве никак нельзя получить имя справочника в виде "ДоговорыКонтрагентов"
---
Можно получить полное имя объекта метаданных, например: Справочник.ДоговорыКонтрагентов
---
Насколько я знаю - он не заведует выгрузкой. Он получает готовые файлы откуда-то со стороны.
---
В таком случае могут быть проблемы с определением типа объекта и упасихоспади иметь в конфигурации одноименные объекты разных типов.
---
верно, как вариант убрать пробелы, т.к. идентификаторы (наименования справочников, документов и других метаданных) пишутся без пробелов
---
Я вам скажу больше - наименования справочников и их синонимы иногда вообще не совпадают!
---
так я немного запутался. в итоге как получить имя справочника в виде ДоговорыКонтрагентов из реквизита документа с типом справочникссылка. потому что если я выбирают типзнч то он мне выдает тип в виде "Договоры Контрагентов". как еще получить я пока не знаю подскажите пожалуйста.
---
```1c
    ПолноеИмя = ДокументОбъект.РеквизитДоговорыКонтрагентов.Метаданные().ПолноеИмя()
```
---
спасибо получил в итоге для своего кода вот таким способом ПолноеИмяСправочника= Новыйдокумент[Шреквизит.Имя].Метаданные().Полноеимя()
---
в результате выполнения кода не присваиваются значения для реквизитов с типом справочникссылка. в чем ошибка?

```1c
    Для Индекс = 3 По Документ.КоличествоСтрок() Цикл
    Стр = Документ.Получитьстроку(Индекс);
    Разделитель = найти(стр,"=");
    КодЗначения=сред(стр,Разделитель+1);
    НаименованиеСпр = Лев(стр,разделитель-1);

    Шреквизит=Новыйдокумент.метаданные().Реквизиты[наименованиеспр];
    ПолноеИмяСпр=Новыйдокумент[Шреквизит.имя].метаданные().имя;
    Элемент = Справочники[ПолноеИмяСпр].найтипокоду(КодЗначения).получитьОбъект();
    новыйдокумент["+Шреквизит.имя]=Элемент;

    сообщить(новыйдокумент["+Шреквизит.имя]);
```
---
Ну естественно. Ссылочному реквизиту нельзя присвоить объектное значение...
---
как тогда вставить значение?
---
Надо просто вставлять значение правильного типа. Ссылочного.
Я разве пишу не в той кодировке?
---
я понял что нужно вставить значение ссылочного типа. как получить ссылку на элемент справочника?
---
отбой вопроса сделал так Элемент = Справочники[ПолноеИмяСпр].найтипокоду(КодЗначения).ссылка; получил значение с типом справочник ссылка.
---
А можно еще и вот так:

```1c
    Справочники[ПолноеИмяСпр].найтипокоду(КодЗначения).Cсылка.Cсылка.Cсылка.Cсылка.Cсылка.Cсылка;
```
---
вопрос почему вот такое выражение не работает ТЧреквизит=Новыйдокумент.метаданные()[наименованиеспр];
в наименованиеспр я передаю ТабличныеЧасти.Товары.Реквизиты.Номенклатура
---
Потому что у объекта Новыйдокумент.метаданные() нет свойства "ТабличныеЧасти.Товары.Реквизиты.Номенклатура", есть свойство "ТабличныеЧасти".
---
понял спасибо.
---
хорошо тогда так почему не работает ТЧреквизит=Новыйдокумент.метаданные().ТабличныеЧасти[ИмяТЧ].реквизиты[НаименованиеРТЧ];
где ИмяТЧ=товары НаименованиеРТЧ=Номенклатура
---
почему не работает Если в документе есть табличная часть "Товары" с реквизитом "Номенклатура", то должно работать, иначе смотрите описание ошибки. Ваш код можно сделать безопаснее:
```1c
    МетаданныеТЧ = Новыйдокумент.Метаданные().ТабличныеЧасти.Найти(ИмяТЧ);
    Если МетаданныеТЧ <> Неопределено Тогда
    МетаданныеРеквизита = МетаданныеТЧ.Реквизиты.Найти(НаименованиеРТЧ);
    Если МетаданныеРеквизита <> Неопределено Тогда

    КонецЕсли;
    КонецЕсли;
```
---
ошибка вот такая
{Обработка.ВыгрузкаФайлов.Форма.Форма.Форма(87)}: Поле объекта не обнаружено (Товары')
ТЧреквизит=Новыйдокумент.метаданные().ТабличныеЧасти[ИмяТЧ].реквизиты[НаименованиеРТЧ];
при этом Табличная часть с названием Товары в документе есть.
в отладчике во такая строка вычисляется. мб есть какие то нюансы?
Новыйдокумент.метаданные().ТабличныеЧасти.Товары.реквизиты.номенклатура
---
Товары' Апостроф - опечатка?
---
точняк. неправильно посчитал количество символов. спасибо.
---
в итоге родил такую обработку. не судите строго это в принципе первое что я самостоятельно написал.

```1c
    &НаСервере
    Процедура выгрузитьНаСервере(ДокСсылка)
    Текст = Новый ТекстовыйДокумент;

    //получаем имя документа и дату создания
    ИмяДокумента = ДокСсылка.Метаданные().Имя;
    ДатаДокумента = ДокСсылка.Дата;
    //прописываем первыми 2 строками имя документа и дату
    текст.ДобавитьСтроку(" + ИмяДокумента);
    текст.ДобавитьСтроку(" + ДатаДокумента);

    //перебираем все имеющиеся реквизиты шапки документа
    для каждого Шреквизит из ДокСсылка.метаданные().Реквизиты цикл
    //проверяем если реквизит имеет тип справочникссылка
    Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Докссылка["+Шреквизит.имя])) = ложь тогда
    //проверяем если реквизит имеет тип перечисление
    если перечисления.ТипВсеСсылки().СодержитТип(ТипЗнч(Докссылка["+Шреквизит.имя]))=ложь тогда
    текст.ДобавитьСтроку("+ Шреквизит.Имя+"="+Докссылка["+Шреквизит.имя])
    иначе
    ПолноеИмяПеречисления=ДокСсылка[Шреквизит.имя].метаданные().имя;
    текст.ДобавитьСтроку("+ Шреквизит.Имя+"="+Докссылка["+Шреквизит.имя]+"#"+ПолноеИмяПеречисления)
    конецесли;
    иначе
    ПолноеИмяСпр=ДокСсылка[Шреквизит.имя].метаданные().имя;
    текст.ДобавитьСтроку("+ Шреквизит.Имя+"="+Докссылка["+Шреквизит.имя].код+"&"+ПолноеИмяСпр);
    конецесли;
    конецЦикла;

    //заполняем реквизитытабличных частей документа
    Для каждого ТабЧасть из докссылка.Метаданные().ТабличныеЧасти Цикл //Определеяем имена табличных частей
    Для каждого ТекСтрока из Докссылка[ТабЧасть.имя] цикл //используя имя табличной части получить строки ТЧ
    для каждого ТЧреквизит из Табчасть.реквизиты цикл //находясь на строке ТЧ перебираем реквизиты ТЧ
    //проверяем если реквизит имеет тип справочникссылка
    Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ТекСтрока["+ТЧреквизит.имя])) = ложь тогда
    текст.ДобавитьСтроку("ТабличныеЧасти;"+ТабЧасть.Имя+"'"+ ТЧреквизит.Имя+"="+ТекСтрока["+ТЧреквизит.имя]);
    иначе
    текст.ДобавитьСтроку("ТабличныеЧасти;"+ТабЧасть.Имя+"'"+ ТЧреквизит.Имя+"="+ТекСтрока["+ТЧреквизит.имя].код);
    конецесли;
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;

    //записывае текст в файл
    Текст.Записать(сохранитькак);
    КонецПроцедуры

    &НаКлиенте
    Процедура выгрузить(Команда)
    ВыгрузитьНаСервере(ДокСсылка);
    КонецПроцедуры

    &НаСервере
    Процедура загрузитьНаСервере()
    Документ = Новый ТекстовыйДокумент;
    Документ.Прочитать(ПутьКФайлу,КодировкаТекста.UTF8);
    //так как мы значем точно,что первые 2 строки текстового файла, это название документа и его дата то сразу прописываем переменные
    Для Индекс = 1 По Документ.КоличествоСтрок() Цикл
    НаименованиеДокумента=документ.ПолучитьСтроку(1);
    ДатаДокумента=документ.ПолучитьСтроку(2);
    КонецЦикла;
    //создаем документ с наименование документа из текстового файла и прописываем ему дату.
    Новыйдокумент = документы[НаименованиеДокумента].СоздатьДокумент();
    Новыйдокумент.Дата = Дата(ДатаДокумента);
    //так как первые 2 строки уже определены,они нам не нужны по этому начинаем цикл с 3 строки
    Для Индекс = 3 По Документ.КоличествоСтрок() Цикл
    Стр = Документ.Получитьстроку(Индекс);
    //прописываем разделители
    Разделитель = найти(стр,"=");
    РазделительТЧ=найти(стр,"'");
    РазделительУТЧ=найти(стр,";");
    РазделительТСпр = найти(стр,"&");
    РазделительПеречисления = найти(стр,"#");
    //получаем имена,значения и тип реквизитов.
    КодЗначения=сред(стр,Разделитель+1,РазделительТСпр-Разделитель-1);
    НаименованиеРеквизита = Лев(стр,Разделитель-1);
    ПолноеИмяСпр=сред(стр,РазделительТСпр+1);
    ПолноеИмяПеречисления = сред(стр,РазделительПеречисления+1);
    НаименованиеПер=сред(стр,Разделитель+1,РазделительПеречисления-Разделитель-1);
    ИмяТЧ=сред(стр,РазделительУТЧ+1,РазделительТЧ-РазделительУТЧ-1);
    НаименованиеРТЧ=сред(стр,РазделительТЧ+1,Разделитель-РазделительТЧ-1);
    УсловиеДляТЧ= Найти(стр,"ТабличныеЧасти");
    //проверяеместь ли упоминание, что это реквизит ТЧ
    Если УсловиеДляТЧ=0 тогда
    //Получаем реквизит шапки
    Шреквизит=НовыйДокумент.Метаданные().Реквизиты[НаименованиеРеквизита];
    //проверяем есть ли упоминание что этот реквизит должен быть справочникссылка. если да то ищем по коду,получаем ссылку и присваиваем значение реквизиту
    если РазделительТСпр <> 0 тогда
    Элемент = Справочники[ПолноеИмяСпр].найтипокоду(КодЗначения).ссылка;
    новыйдокумент["+Шреквизит.имя]=Элемент;
    иначе
    //проверяем есть ли упоминание что это перечисление.если да то получаем перечисление и прописываем его в значение, если нет то просто берем значение и прописываем его в реквизит
    если РазделительПеречисления <> 0 тогда
    перечисление = перечисления[полноеимяперечисления][наименованиеПер];
    новыйдокумент["+Шреквизит.имя]=перечисление;
    иначе
    новыйдокумент["+Шреквизит.имя]=КодЗначения;
    конецесли;
    конецесли;
    иначе
    //получаем реквизит ТЧ
    ТЧреквизит=Новыйдокумент.метаданные().ТабличныеЧасти[ИмяТЧ].реквизиты[НаименованиеРТЧ];
    //так как у нас в документах во всех ТЧ есть реквизит "номенклатура" то по нему будем определять нужно ли создовать новую строку в ТЧ
    Если НаименованиеРТЧ="Номенклатура" тогда
    НоваяСтрока = новыйдокумент[ИмяТЧ].Добавить();
    //проверяем если реквизит имеет тип справочникссылка(у нас в документах состовной тип данных есть только в реквизитах шапки по этому там сделанно по другому)
    если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(НоваяСтрока["+ТЧреквизит.имя])) = истина тогда
    ПолноеИмяСпр=НоваяСтрока[ТЧреквизит.имя].метаданные().имя;
    Элемент = Справочники[ПолноеИмяСпр].найтипокоду(КодЗначения).ссылка;
    НоваяСтрока["+ТЧреквизит.имя]=Элемент;
    иначе
    НоваяСтрока[ТЧреквизит.имя] = КодЗначения;
    конецЕсли;
    иначе
    если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(НоваяСтрока["+ТЧреквизит.имя])) = истина тогда
    ПолноеИмяСпр=НоваяСтрока[ТЧреквизит.имя].метаданные().имя;
    Элемент = Справочники[ПолноеИмяСпр].найтипокоду(КодЗначения).ссылка;
    НоваяСтрока["+ТЧреквизит.имя]=Элемент;
    иначе
    НоваяСтрока[ТЧреквизит.имя] = КодЗначения;
    конецЕсли;
    конецЕсли;
    конецЕсли;
    КонецЦикла;
    Новыйдокумент.записать();
    КонецПроцедуры

    &НаКлиенте
    Процедура загрузить(Команда)
    загрузитьНаСервере();
    КонецПроцедуры

    &НаКлиенте
    Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогВыбораФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогВыбораФайла.ПолноеИмяФайла = ПутьКФайлу;
    Фильтр = НСтр("ru = 'Текст'; en = 'Text'")
    + "(*.txt)|*.txt";
    ДиалогВыбораФайла.Фильтр = Фильтр;
    ДиалогВыбораФайла.МножественныйВыбор = Ложь;
    ДиалогВыбораФайла.Заголовок = "Выберите каталог";

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

    ДиалогВыбораФайла.Показать(ОповещениеЗавершения);

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

    &НаКлиенте
    Процедура ВыборФайлаЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
    Если ВыбранныеФайлы <> Неопределено Тогда
    ПутьКФайлу = ВыбранныеФайлы[0];
    КонецЕсли;
    КонецПроцедуры

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

    ДиалогВыбораФайла.ПолноеИмяФайла = ПутьКФайлу;
    Фильтр = НСтр("ru = 'Текст'; en = 'Text'")
    + "(*.txt)|*.txt";
    ДиалогВыбораФайла.Фильтр = Фильтр;
    ДиалогВыбораФайла.МножественныйВыбор = Ложь;
    ДиалогВыбораФайла.Заголовок = "Выберите каталог";

    Оповещения = Новый ОписаниеОповещения("СохранениеФайлаЗавершение", ЭтаФорма);

    ДиалогВыбораФайла.Показать(Оповещения);

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

    &НаКлиенте
    Процедура СохранениеФайлаЗавершение(ВыбранныеФайлыС, ДополнительныеПараметры) Экспорт
    Если ВыбранныеФайлыС <> Неопределено Тогда
    сохранитькак = ВыбранныеФайлыС[0];
    КонецЕсли;
    КонецПроцедуры
```
---
Если выгрузку в текстовый файл писали тоже вы, советую сделать через JSON, там и структура файла будет и парсить очень легко, не говоря уже о скорости выгрузки и загрузки, а так же длине кода.
---
Добрый день. продолжаю допиливать данную обработку. теперь столкнулся вот с реквизитом у которого значение выглядит вот в таком виде:
{

"value": "Москва Нагорная улица 34",

"comment": "",

"type": "Адрес",

"country": "РОССИЯ",

"addressType": "Муниципальный"

}
как мне сказать системе при загрузке что все что сидит в скобках это значение для выбранного реквизита?
---
как мне сказать системе при загрузке что все что сидит в скобках это значение для выбранного реквизита? Сначала погуглить "1С загрузка JSON"
---
1С загрузка JSON т.е. другого варианта нет нужно всю выгрузку переделывать через Json?
---
нужно всю выгрузку переделывать через Json? Зачем "всю"? Только этот реквизит: выделить его как строку JSON и прочитать, методика неоднократно описана:
https://its.1c.ru/db/intgr83/content/10/hdoc
https://wonderland.v8.1c.ru/blog/sredstva-raboty-s-json/

В крайнем случае можно распарсить просто как текст - JSON ведь тоже текст по сути.
---
по условию задачи мне нужно разработать свой вариант загрузки и выгрузки. по этому вариант с JSON не подходит.
в ходе гуглинга я понял что данное значение является многострочной строкой. у меня получилось пры выгрузке передать в файл в месте с этим значением и количество строк теперь вопрос такой можно как то при загрузке опираясь на число строк переданное из файла получить всю многостроковую строку разом для записи ее в значение реквизита.