Перегрузка документа, выгрузка и загрузка документа в файл txt

1. user1843468 17.09.22 22:15 Сейчас в теме
Всем привет. Есть задача по выгрузке и загрузке документа в файл txt. Я создал внешнюю обработку
Все действия выполняются из формы внешней обработки. Есть поле для ссылки выгружаемого документа, и путь к файлу txt для выгрузки. При нажатии кнопки "выгрузить" в текстовый документ выгружаются: первой строкой название документа, далее строка типа "реквизит1 - тип_реквизита1, реквизит2 - тип_реквизита2, ..." и т.д. При этом вся информации, помещенная в txt, должна быть достаточной для того, чтобы на их основе создать копию этого документа в бд. Вот формат выгрузки, разработанный мною (формат должен позволять загрузить документ из текстового файла, т.е. создать копию выгруженного документа на основе данных, которые есть в файле txt):

Название документа

Рек1 - тип, Рек2 - тип, Рек3 - тип, ...

Реквизиты:
Рек1 - знач1

Рек2 - знач2
Рек3 - знач3

Табл. части:

Рек1 - тип, Рек2 - тип, Рек3 - тип, ...

Табл._часть1:

знач1, ..., ..., ..., ...
знач2, ..., ..., ..., ...
знач3, ..., ..., ..., ...

Табл._часть2:

знач1, ..., ..., ..., ...
знач2, ..., ..., ..., ...
знач3, ..., ..., ..., ...

Вот код для выгрузки (недоработан):

&НаСервере
Функция ВыгрузитьОбъектНаСервере(СсылкаНаДокумент)
    МассивТекстаДляВыгрузки = Новый Массив;
    ОбъектДокумента = СсылкаНаДокумент.ПолучитьОбъект();
    
    НазваниеДокумента = ОбъектДокумента.Метаданные().Имя;
    
    МассивТекстаДляВыгрузки.Добавить(НазваниеДокумента);
    МассивТекстаДляВыгрузки.Добавить(" ");
    СтрокаРеквизитов = "";
    
    // Выгрузка типов реквизитов

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

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

        ////МассивТекстаДляВыгрузки.Добавить("Табличные части: ");

        ////МассивТекстаДляВыгрузки.Добавить(" ");

        ////СписокТабличныЧастей = Метаданные.Документы[НазваниеДокумента].ТабличныеЧасти;

        ////

        ////Для каждого ТаблЧасть из СписокТабличныЧастей цикл

        ////    МассивТекстаДляВыгрузки.Добавить(ТаблЧасть.Имя);

        ////    МассивТекстаДляВыгрузки.Добавить(" ");

        ////    СтрокиТаблЧасти = ОбъектДокумента[ТаблЧасть.Имя];

        ////    

        ////    Для каждого Реквизит из ТаблЧасть.Реквизиты цикл

        ////        СтрокаТекстовогоФайла = "";

        ////        СтрокаТекстовогоФайла = СтрокаТекстовогоФайла + 

        ////        МассивТекстаДляВыгрузки.Добавить();            

        ////    КонецЦикла;

        ////    

        ////    МассивТекстаДляВыгрузки.Добавить(" ");

        ////КонецЦикла;

        
    Иначе
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Поле ""Путь к Файлу"" не заполнено. Документ не может быть выгружен!";
        Сообщение.Поле = Объект.ПутьКФайлу;
        Сообщение.Сообщить();
    КонецЕсли;
    
    Возврат МассивТекстаДляВыгрузки; 
КонецФункции
Показать


При нажатии кнопки "загрузить" должна создаваться копия выгруженного документа в базе данных. Проблема в том, что я не знаю как преобразовать значения реквизитов, находящиеся в файле txt, которые имеют тип "строка" в нужный тип, соответствующий реквизитам документа. То есть у меня не получается реализовать обработку кнопки "Загрузить". Как это можно сделать?
При этом нельзя использовать функции УникальныйИдентификатор(), ЗначениеВСтрокуВнутр() и подобные функции.
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. ishelper 17.09.22 22:29 Сейчас в теме
М-да, типичное для новичка оформление темы всеми нужными (и ненужными) тегами в стиле:
Прикрепленные файлы:
3. Nykos 17.09.22 22:42 Сейчас в теме
Я что-то не понял. Вы хотите сначала сохранить в определенном формате док в файл, а потом обратно его подгрузить в 1с, или о какой бд идёт речь? Если сторонняя, то ответ на вопрос никто не даст при текущих вводных, если все в рамках иб - чем не устраивает бэкап?
4. user1843468 17.09.22 22:55 Сейчас в теме
(3) Просто подгрузить в 1с, создать копию того документа, который был выгружен в txt
5. Nykos 17.09.22 23:52 Сейчас в теме
Так и не понял смысл сего действа, но можно попробовать работать с уникальным идентификатором. По нему без проблем определишь в какой реквизит положить ссылку на нужный объект
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)