Имя: Пароль:
1C
1С v8
Перезагрузка документа в txt
,
0 Silver608
 
29.02.24
20:30
Дано тестовое Задание
Необходимо с помощью программных средств платформы и языка 1С разработать
внешнюю обработку «Перегрузка документа».
В верхнем поле должна быть возможность выбрать любой документ из базы данных.
В нижнем поле указывается путь и имя файла для загрузки. На форме нужно обеспечить
возможность просмотра выгруженного текстового файла.
2. При нажатии кнопки «Выгрузить» информация, содержащаяся в выбранном
пользователем документе, должна выгрузиться в указанный файл. Информация должна
быть исчерпывающей, то есть выгружаться должны данные, чтобы при нажатии кнопки
«Загрузить» в базе создавалась бы копия исходного документа (за исключением номера,
т.к. номера документов уникальные).
3. При написании обработки необходимо использовать Метаданные, это делается
для универсализации программного кода.
4. При написании обработки нельзя использовать функции
«ЗначениеВСтрокуВнутр()», «УникальныеИдентификатор()» и подобные функции,
выгружающие уникальные идентификаторы объектов, а также нельзя делать выгрузку и
загрузку в формате XML или JSON.
1 Silver608
 
29.02.24
20:31
Вот что удалось сделать:

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

    //Создание документа
    НовыйДокумент = Документы[СтрокаТекстовогоФайла].СоздатьДокумент();
    СтрокаТекстовогоФайла = ПрочитанныйТекст.ПрочитатьСтроку();
    
    //Установка даты
    НовыйДокумент.Дата = СтрокаТекстовогоФайла;
    СтрокаТекстовогоФайла = ПрочитанныйТекст.ПрочитатьСтроку();
    
    //Цикл записи
    Пока СтрокаТекстовогоФайла <> Неопределено Цикл
        
        МассивСлов = СтрРазделить(СтрокаТекстовогоФайла,":");
        
        Если МассивСлов.Количество() = 3 Тогда
            
            Если МассивСлов[1] = "Строка" Или МассивСлов[1] = "Число" Или МассивСлов[1] = "Дата" Или МассивСлов[1] = "Булево" Тогда            
                НовыйДокумент[МассивСлов[0]] = МассивСлов[2];
            Иначе
                
                  //Код для поиска по типу
                
            КонецЕсли;
                        
        КонецЕсли;
        
         СтрокаТекстовогоФайла = ПрочитанныйТекст.ПрочитатьСтроку();
    
    КонецЦикла;
        
    НовыйДокумент.Записать();
    
КонецПроцедуры
3 Silver608
 
29.02.24
20:33
Не могу понять как заполнить в реквизиты значения с составным типом
4 Волшебник
 
29.02.24
20:37
(3) Реально пытаетесь понять?
5 Silver608
 
29.02.24
20:39
Я предполагаю, что надо идти в сторону
Метаданные.НайтиПоТипу(), но не могу придумать как это реализовать
6 mikecool
 
29.02.24
20:39
норм такое тестовое задание, на неделю
7 Волшебник
 
29.02.24
20:40
Нет, Вам не туда
8 Silver608
 
29.02.24
20:43
Может дадите удочку👉👈
9 Волшебник
 
29.02.24
20:56
(8) Ладно, дам удочку. Читайте Канта, СП, Гегеля, СП, потом Шопенгауэра и снова СП.
10 Волшебник
 
29.02.24
21:00
Когда я говорю СП, то не шучу. Это приём абстракция. Так дойдёте до чего-то...
11 Silver608
 
29.02.24
22:52
(10) Подскажите в каком направлении хотя бы думать🙏
12 NcSteel
 
29.02.24
22:53
(11) Если реквизит составного типа, то надо бы выгрузить значение и его тип.... Тогда при загрузки будет понятно в каком типе искать ссылку
13 Silver608
 
29.02.24
22:55
(12) почему-то когда выгружаю через ТипЗнч(Значение) он выдаёт просто Организация например
14 NcSteel
 
29.02.24
22:58
(12) При сохранении переменной в текст для сложных объектов выгружается представление. В твоем случае представление "организация"...
15 Silver608
 
29.02.24
23:00
(14) Так вот получается самый главный вопрос как мне получить тот самый тип, я понимаю что там должно быть что-то вроде СправочникСсылка.Организации но не понимаю как это вытащить
16 NcSteel
 
29.02.24
23:01
17 Silver608
 
29.02.24
23:14
(16) Спасибо большое!!!
Реализовал так Метаданные.НайтиПоТипу(ТипЗнч(Значение)).ПолноеИмя()
Причем я даже видел уже эту ветку, но почему то не увидел именно то что мне нужно было