Перезагрузка документа в txt

1. Palach608 29.02.24 21:53 Сейчас в теме
Дано тестовое Задание
Необходимо с помощью программных средств платформы и языка 1С разработать
внешнюю обработку «Перегрузка документа».
В верхнем поле должна быть возможность выбрать любой документ из базы данных.
В нижнем поле указывается путь и имя файла для загрузки. На форме нужно обеспечить
возможность просмотра выгруженного текстового файла.
2. При нажатии кнопки «Выгрузить» информация, содержащаяся в выбранном
пользователем документе, должна выгрузиться в указанный файл. Информация должна
быть исчерпывающей, то есть выгружаться должны данные, чтобы при нажатии кнопки
«Загрузить» в базе создавалась бы копия исходного документа (за исключением номера,
т.к. номера документов уникальные).
3. При написании обработки необходимо использовать Метаданные, это делается
для универсализации программного кода.
4. При написании обработки нельзя использовать функции
«ЗначениеВСтрокуВнутр()», «УникальныеИдентификатор()» и подобные функции,
выгружающие уникальные идентификаторы объектов, а также нельзя делать выгрузку и
загрузку в формате XML или JSON.
По теме из базы знаний
Найденные решения
6. YozZzhik 29.02.24 23:05 Сейчас в теме
(5) Выгружаете в текстовый док. тип значения реквизита: Метаданные.НайтиПоТипу(ТипЗнч(Объект.РеквизитСоставногоТипа)).Имя

При заполнении из текстового документа обращаемся к нужному объекту по индексу:
НовыйДокумент.Реквизит = Справочники[ИмяТипаИзTXT].НайтиПонаименованию("Наименование")

А искал бы я по коду, так практичнее
VyacheslavShilov; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Palach608 29.02.24 21:53 Сейчас в теме
Вот что удалось сделать:

&НаСервере
Процедура ВырузитьОбъектНаСервере()
    
    //Объявление переменных
    ТекстовыйДок = Новый ТекстовыйДокумент;
    МетаданныеОбъекта = Объект.Документ.Метаданные().Реквизиты;
    Дата = Объект.Документ.Метаданные().СтандартныеРеквизиты.Дата.Имя;
    ДокументПуть = Объект.Документ.Метаданные().ПолноеИмя();
    
    //Добавление прочих значений
    ТекстовыйДок.ДобавитьСтроку(Объект.Документ.Метаданные().Имя);
    ТекстовыйДок.ДобавитьСтроку(ПолучитьДатуДокумента(ДокументПуть,Дата));
    
    //Цикл записи реквезитов
    Для Каждого Реквизит Из Объект.Документ.Метаданные().Реквизиты Цикл                
        
        ИмяРеквизита = Реквизит.Имя;
        
        Значение = ПолучитьЗначениеРеквизита(ДокументПуть,ИмяРеквизита);
        //ТипРеквизита = Значение.Тип.Типы()[0];
        ТипРеквизита =  ТипЗнч(Объект.Документ[ИмяРеквизита]);  
        
        ТекстовыйДок.ДобавитьСтроку(ИмяРеквизита + ":" + ТипРеквизита + ":" + Значение);
        ТекстовыйДок.Записать(Объект.Файл, КодировкаТекста.UTF8);
        
    КонецЦикла;
    
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьОбъектНаСервере()
        
    //Работа с текстом
    ПрочитанныйТекст = Новый ЧтениеТекста(Объект.Файл,КодировкаТекста.UTF8);
    СтрокаТекстовогоФайла = ПрочитанныйТекст.ПрочитатьСтроку();

    //Создание документа
    НовыйДокумент = Документы[СтрокаТекстовогоФайла].СоздатьДокумент();
    СтрокаТекстовогоФайла = ПрочитанныйТекст.ПрочитатьСтроку();
    
    //Установка даты
    НовыйДокумент.Дата = СтрокаТекстовогоФайла;
    СтрокаТекстовогоФайла = ПрочитанныйТекст.ПрочитатьСтроку();
    
    //Цикл записи
    Пока СтрокаТекстовогоФайла <> Неопределено Цикл
        
        МассивСлов = СтрРазделить(СтрокаТекстовогоФайла,":");
        
        Если МассивСлов.Количество() = 3 Тогда
            
            Если МассивСлов[1] = "Строка" Или МассивСлов[1] = "Число" Или МассивСлов[1] = "Дата" Или МассивСлов[1] = "Булево" Тогда            
                НовыйДокумент[МассивСлов[0]] = МассивСлов[2];
            Иначе
                
                  //Код для поиска по типу
                
            КонецЕсли;
                        
        КонецЕсли;
        
         СтрокаТекстовогоФайла = ПрочитанныйТекст.ПрочитатьСтроку();
    
    КонецЦикла;
        
    НовыйДокумент.Записать();
    
КонецПроцедуры
Показать
VyacheslavShilov; +1 Ответить
3. Palach608 29.02.24 21:54 Сейчас в теме
Не могу понять как заполнить в реквизиты значения с составным типом
4. starjevschik 29.02.24 22:28 Сейчас в теме
Сделаю за 50% зп за следующий год.
5. Palach608 29.02.24 22:35 Сейчас в теме
Да мне хотя бы направление нужно в какую сторону думать, пытался реализовать через Метаданные.НайтиПоТипу(), но ничего не получилось
Предполагаю еще, что можно как-то так примерно
НовыйДокумент.Реквизит = Справочники.Организации.НайтиПонаименованию("Рога и копыта")
Но не могу тогда понять как получить сам Справочники.Организации...
6. YozZzhik 29.02.24 23:05 Сейчас в теме
(5) Выгружаете в текстовый док. тип значения реквизита: Метаданные.НайтиПоТипу(ТипЗнч(Объект.РеквизитСоставногоТипа)).Имя

При заполнении из текстового документа обращаемся к нужному объекту по индексу:
НовыйДокумент.Реквизит = Справочники[ИмяТипаИзTXT].НайтиПонаименованию("Наименование")

А искал бы я по коду, так практичнее
VyacheslavShilov; +1 Ответить
7. Palach608 29.02.24 23:19 Сейчас в теме
(6) Да буквально только что на forum.mista.ru подсказали сделать тоже самое, попробовал, все работает, Спасибо большое!!
8. Palach608 29.02.24 23:55 Сейчас в теме
(6) Оказалось, что все работает только в отладчике, при обработке выдает ошибку
Значение не является значением объектного типа (Имя)
И я снова в тупике и прихожу к вам за помощью
9. Palach608 01.03.24 00:10 Сейчас в теме
(8) https://forum.infostart.ru/forum9/topic197851/ проблема один в один как тут, но я не понял как ее решили
10. Palach608 01.03.24 11:45 Сейчас в теме
11. G_111642984642199456171 05.11.24 20:01 Сейчас в теме
(9) Можешь скинуть свою обработку или код, как ты с этим разобрался
12. user2104808 06.11.24 08:17 Сейчас в теме
(11)
Можешь скинуть
Осеннее сборище халявщиков, решающих одну и ту же задачу. Открытие сезона.
G_111642984642199456171; user2107191; +2 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот