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

ошибку выдает тут:
            Элемент = Справочники[ПолноеИмяСпр].найтипокоду(КодЗначения).ссылка;

Значение не является значением объектного типа (ссылка)
{ВнешняяОбработка.ПерегрузкаДокумента.Форма.ФормаОбработки.Форма(276)}:Элемент = Справочники[ПолноеИмяСпр].найтипокоду(КодЗначения).ссылка;
{ВнешняяОбработка.ПерегрузкаДокумента.Форма.ФормаОбработки.Форма(130)}:ЗагрузитьДокументСФайлаНаСервере(Объект.ПутьКФайлу);
1 WerLym
 
12.06.25
15:22
Пример Файла:
ЗаказПокупателя
20.04.2022 0:00:00
Автор=Абдулов Юрий Владимирович#Пользователи
АдресДоставки=
АдресДоставкиЗначение=
АдресДоставкиЗначенияПолей=
АдресЭП=
БанковскийСчет=40702852520120154223, в 044525350 "АМБ БАНК" (ПАО)#БанковскиеСчета
БанковскийСчетКонтрагента=#БанковскиеСчета
ВалютаДокумента=руб.#Валюты
ВариантЗавершения=#ВариантыЗавершенияЗаказа
Вес=0
ВидЗаказа=Основной#ВидыЗаказовПокупателей
ВидимостьИндикатораТребуетсяРасчет=Нет
ВидОперации=Заказ на продажу#ВидыОперацийЗаказПокупателя

ТабличныеЧасти;Запасы|ДатаОтгрузки=29.05.2025 0:00:00
ТабличныеЧасти;Запасы|Спецификация=
ТабличныеЧасти;Запасы|Содержание=
ТабличныеЧасти;Запасы|ПроцентАвтоматическойСкидки=5
ТабличныеЧасти;Запасы|СуммаАвтоматическойСкидки=615
ТабличныеЧасти;Запасы|Количество=1
ТабличныеЧасти;Запасы|КлючСвязи=1
ТабличныеЧасти;Запасы|СтранаПроисхождения=
ТабличныеЧасти;Запасы|НомерГТД=
ТабличныеЧасти;Запасы|Партия=
ТабличныеЧасти;Запасы|Вес=0
ТабличныеЧасти;Запасы|Объем=0
ТабличныеЧасти;Запасы|НомерВариантаКП=0
2 lubitelxml
 
12.06.25
15:45
Справочники[ПолноеИмяСпр].найтипокоду(КодЗначения).ссылка; - у тебя по коду не найден элемент. И "ссылка" в конце лишняя - он и так ссылку вернет
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.