Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
25 ноя 2024, 22:48

Чтение txt

Автор Bitaxa, 16 мар 2018, 17:33

0 Пользователей и 1 гость просматривают эту тему.

Bitaxa

Добрый день!
У меня в файле записаны данные документа. В Виде [ИмяРеквизита]:[ЗначениеРеквизита].В файле может быть один из документов информационной базы. Я по кнопке на форме создаю новый документ нужного вида. Но не могу понять, как мне при чтение файла заполнять реквизиты.
Может есть какие-то идеи?

AIFrame

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

ИмяРеквизита = МассивПодстрок[0];
Примитивный = ?(МассивПодстрок[1] = "1", Истина, Ложь);
ТипМетаданных = МассивПодстрок[2];
ПутьКДанным = МассивПодстрок[3];
Значение = МассивПодстрок[4];
Если Примитивный Тогда
    Объект[ИмяРеквизита] = Значение;
Иначе
    СсылкаНаЗначение = неопределено;
    Если ТипМетаданных = "Справочники" Тогда
        СсылкаНаЗначение = Справочники[ПутьКДанным].НайтиПоНаименованию(Значение);
    ИначеЕсли ТипМетаданных = "Документы" Тогда
        СсылкаНаЗначение = Документы[ПутьКДанным].НайтиПоНаименованию(Значение);
        // И прочие механизмы поиска, которые придумаешь.
    КонецЕсли;
    Объект[ИмяРеквизита] = СсылкаНаЗначение;   
КонецЕсли;


Допустим у тебя записано две строки:
1 = "НаименованиеПолное:1:Строка:-:ЙЦУКЕН"
2 = "Владелец:0:Справочники:Контрагенты:Вася Пупкин"
И код будет в итоге интерпретирован как
1. Объект.НаименованиеПолное = "ЙЦУКЕН";
2. Объект.Владелец = Справочники.Контрагенты.НайтиПоНаименованию("Вася Пупкин");



Bitaxa

Цитата: AIFrame от 16 мар 2018, 18:47
"[ИмяРеквизита]:[ЗначениеРеквизита]" - это одна строка. Строку надо разбить в массив.
Почти во всех конфах уже есть готовые функции в общих модулях для такого.
МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("[ИмяРеквизита]:[ЗначениеРеквизита]",":",Истина);

Спасибо большое!
А этот код в общем модуле надо писать??

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск