![]() |
![]() |
![]() |
|
Восстановление документа из файла 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
|
Справочники[ПолноеИмяСпр].найтипокоду(КодЗначения).ссылка; - у тебя по коду не найден элемент. И "ссылка" в конце лишняя - он и так ссылку вернет
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |