Имя: Пароль:
1C
 
Из текстового файла выделить строки и преобразовать их в ссылки для заполнения реквизитов документа.
0 __user__
 
14.09.22
01:50
Добрый день. Есть файл txt, в который помещаются реквизиты документа. Необходимо эти значения присвоить реквизитам нового документа. Как можно преобразовать строку из текстового файла в ссылочный тип?
1 Garykom
 
гуру
14.09.22
04:33
УстановитьСсылкуНового() ?
2 ИС-2
 
naïve
14.09.22
07:14
смотря в каком виде информация в текством файле. Если коды, то НайтиПоКоду или создание нового элемента, если гуиды, то см (1)
3 DrZombi
 
гуру
14.09.22
07:34
(0)   Как-то так.

УИД_Строкой = Строка(Новый УникальныйИдентификатор()); //Замена значения из файла в виде строки

//Создать новый элемент...
УИД = Новый УникальныйИдентификатор(УИД_Строкой);  //Этот УИД будет новой ссылкой

НоваяСсылкаНа_Элемент = Справочники.Контрагенты.ПолучитьСсылку(УИД); //Он еще не записан, а ссылка уже есть :)

МойСпр = Справочники.Контрагенты.СоздатьЭлемент();
МойСпр.УстановитьСсылкуНового(НоваяСсылкаНа_Элемент);
4 АгентБезопасной Нацио
 
14.09.22
07:46
(1) (2) (3) телепатирую: у него в файле что-то типа ООО Василек, ИП пупкин, 100 рублей - и ему надо создать в конторе Василек ПКО от Пупкина на стольник...
5 Serg_1960
 
14.09.22
08:34
(4) Телепатирую: автору GUIDы, преобразованные из строки, нужны для заполнения реквизитов документа... интуиция мне подсказывает, что по этим реквизитам можно определить тип(вид) метаданных.
6 Serg_1960
 
14.09.22
08:41
PS: всё станет гораздо сложнее, когда автор озвучит уточнение, что текстовый файл - это сообщение обмена с внешней БД :)
7 АгентБезопасной Нацио
 
14.09.22
08:44
(6) ...причем не 1с
9 Мультук
 
гуру
14.09.22
09:09
(0)

>> Добрый день. Есть файл txt, в который помещаются реквизиты документа.

Далее обычно приводят короткий пример на 3-4 строки и столько же столбцов.
После этого форум перестаёт играть в телепатию.
10 __user__
 
15.09.22
23:48
(4) (5) (9) (2) Все действия выполняются из формы внешней обработки. Есть поле для ссылки выгружаемого документа, и путь к файлу txt для выгрузки. При нажатии кнопки "выгрузить" в текстовый документ выгружаются: первой строкой название документа, далее строка типа "реквизит1 - тип_реквизита1, реквизит2 - тип_реквизита2, ..." и т.д.
Вот формат выгрузки, разработанный мною (формат должен позволять загрузить документ из текстового файла, т.е. создать копию выгруженного документа на основе данных, которые есть в файле txt):

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

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

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

Табл. части:

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

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

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

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

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

Вот код для выгрузки:

&НаСервере
Функция ВыгрузитьОбъектНаСервере(СсылкаНаДокумент)
    МассивТекстаДляВыгрузки = Новый Массив;
    ОбъектДокумента = СсылкаНаДокумент.ПолучитьОбъект();
    
    НазваниеДокумента = ОбъектДокумента.Метаданные().Имя;
    
    МассивТекстаДляВыгрузки.Добавить(НазваниеДокумента);
    МассивТекстаДляВыгрузки.Добавить(" ");
    СтрокаРеквизитов = "";
    
    // Выгрузка типов реквизитов
    Для каждого Реквизит из ОбъектДокумента.Метаданные().Реквизиты Цикл
        Если НЕ ОбъектДокумента.Метаданные().Реквизиты.Индекс(Реквизит) = ОбъектДокумента.Метаданные().Реквизиты.Количество() - 1 Тогда
            СтрокаРеквизитов = СтрокаРеквизитов + Реквизит.Имя;
            СтрокаРеквизитов = СтрокаРеквизитов + " - ";
            СтрокаРеквизитов = СтрокаРеквизитов + Реквизит.Тип + " , ";
        Иначе
            СтрокаРеквизитов = СтрокаРеквизитов + Реквизит.Имя;
            СтрокаРеквизитов = СтрокаРеквизитов + " - ";
        КонецЕсли;
    КонецЦикла;
    МассивТекстаДляВыгрузки.Добавить(СтрокаРеквизитов);
    Если ЗначениеЗаполнено(Объект.ПутьКФайлу) Тогда
        
        // Выгрузка реквизитов
        МассивТекстаДляВыгрузки.Добавить("Реквизиты: ");
        МассивТекстаДляВыгрузки.Добавить(" ");
        Для каждого Реквизит из ОбъектДокумента.Метаданные().Реквизиты Цикл
            СтрокаДляДобавления = "";
            Если НЕ ЗначениеЗаполнено(ОбъектДокумента[Реквизит.Имя]) Тогда
                СтрокаДляДобавления = СтрокаДляДобавления + Реквизит.Имя + " - " + "_ _ _ _";    
            Иначе
                СтрокаДляДобавления = СтрокаДляДобавления + Реквизит.Имя + " - " + ОбъектДокумента[Реквизит.Имя];
            КонецЕсли;
            МассивТекстаДляВыгрузки.Добавить(СтрокаДляДобавления);
        КонецЦикла;
        МассивТекстаДляВыгрузки.Добавить(" ");
        
        // Выгрузка табличных частей
        ////МассивТекстаДляВыгрузки.Добавить("Табличные части: ");
        ////МассивТекстаДляВыгрузки.Добавить(" ");
        ////СписокТабличныЧастей = Метаданные.Документы[НазваниеДокумента].ТабличныеЧасти;
        ////
        ////Для каждого ТаблЧасть из СписокТабличныЧастей цикл
        ////    МассивТекстаДляВыгрузки.Добавить(ТаблЧасть.Имя);
        ////    МассивТекстаДляВыгрузки.Добавить(" ");
        ////    СтрокиТаблЧасти = ОбъектДокумента[ТаблЧасть.Имя];
        ////    
        ////    Для каждого Реквизит из ТаблЧасть.Реквизиты цикл
        ////        СтрокаТекстовогоФайла = "";
        ////        СтрокаТекстовогоФайла = СтрокаТекстовогоФайла +
        ////        МассивТекстаДляВыгрузки.Добавить();            
        ////    КонецЦикла;
        ////    
        ////    МассивТекстаДляВыгрузки.Добавить(" ");
        ////КонецЦикла;
        
    Иначе
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Поле ""Путь к Файлу"" не заполнено. Документ не может быть выгружен!";
        Сообщение.Поле = Объект.ПутьКФайлу;
        Сообщение.Сообщить();
    КонецЕсли;
    
    Возврат МассивТекстаДляВыгрузки;
КонецФункции
11 __user__
 
15.09.22
23:52
При нажатии кнопки "загрузить" должна создаваться копия выгруженного документа в базе данных. Проблема в том, что я не знаю как преобразовать значения реквизитов, которые имеют тип "строка" в нужный тип. При этом нельзя использовать функции УникальныйИдентификатор(), ЗначениеВСтрокуВнутр() и подобные фукнции
12 Serg_1960
 
16.09.22
10:33
(10) Если Вы используете конструкцию "СтрокаДляДобавления = СтрокаДляДобавления + Реквизит.Имя + " - " + ОбъектДокумента[Реквизит.Имя];", то выводится не само значение, а представление значения. Если Вам, действительно, нужны GUIDы ссылок, то можно использовать XMLСтрока():

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