|
|
|
Как присвоить строке тип хранлище значений?
|
|||
|---|---|---|---|
|
#18+
Есть строка - она точно содержит в себе картинку - фактическу нужно выполнить только методо строка.получить(). Но проблема в том что тип(Строка)- это строка а не хранилище значений. Преамбула. Включаем версионирование объектов. Включаем его и для справочника - хранилище дополнительной информации. В одном из элементов справочника содержится картинка. И по сути получается что картинка первый раз упакована в хранилище значений в этом элементе справочника. Второй раз в регистре сведений версии объектов (там тоже тип хранилище значений). Но когда мы извлекаем из регистра сведений .получить() получаем все с типом строка... Задача как раз в том чтобы присвоить этой строке тип хранилище значений и еще раз воспользоваться методом получить. Ниже приведен пример - как выглядит информация полученная из регистра сведений после метода .получить(). Побайтно сравнивал с картинкой - не то <?xml version="1.0" encoding="UTF-8"?> <CatalogObject.ХранилищеДополнительнойИнформации xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CatalogObject.ХранилищеДополнительнойИнформации"> <Ref>964dfd1f-be43-11df-bb95-e03fd99327b1</Ref> <DeletionMark>false</DeletionMark> <Description/> <ВидДанных>Изображение</ВидДанных> <ИмяФайла>Фото 366.jpg</ИмяФайла> <Объект xsi:type="CatalogRef.Номенклатура">dfddf12c-e133-11d8-937c-000d884f5d5e</Объект> <Хранилище>AgFTS2/0iI3BTqDV67a9oKcNdZLNasJAEMe3H5CiiLdeI9tDc0jAoG3wZJ+id+vHWbxsQMQlFxdSyKv0KPTQPIDQVxB66a29JdDidGY31rXQmZ1df/+/O7ua3DMTH88vc37F/fHt5CaMwm7QC4cPQXc0HAe97gSn9mDcwQwHo9Bv1OYdv0NLe+Fz7gchjTYJWmvUFr6eqfPutDqCnWC2Wuf68zuql7h6WC2sO+0bj/3u+BtSDyalWShJwinPc1RADwZgFkqSaPovHHGMsRBHqIQlINpMaLETr2wWsZoZnmqO1Ypzz+Ik4ZxbfK047tizk3gqwRRVQ2J1zCRYjM1NP2GOQ04MT/VxB18zNuM8sVnNvAzAsEO9VVYqCQU1dAxm8BllUHFWPm5eP6MLBZrJBfQlcazdDYhptG7i9+OsAHIZi1IHj1sWgrhQ9WhN110Kw3Idpczy66nxHRQo1pWPDw6+Uoroqfr/l6CjODxasf9x+A68oSUBdqwPJXNhiyWZu2PM/WasaVeJW+3CO5/ZtcVX1a4cNawmlrsv1F3c2we6lmTwAw==</Хранилище> <ТекстФайла>AQEIAAAAAAAAAO+7v3siVSJ9</ТекстФайла> </CatalogObject.ХранилищеДополнительнойИнформации> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 10:29 |
|
||
|
Как присвоить строке тип хранлище значений?
|
|||
|---|---|---|---|
|
#18+
Есть строка - она точно содержит в себе картинку - фактическу нужно выполнить только методо строка.получить(). Но проблема в том что тип(Строка)- это строка а не хранилище значений. Преамбула. Включаем версионирование объектов. Включаем его и для справочника - хранилище дополнительной информации. В одном из элементов справочника содержится картинка. И по сути получается что картинка первый раз упакована в хранилище значений в этом элементе справочника. Второй раз в регистре сведений версии объектов (там тоже тип хранилище значений). Но когда мы извлекаем из регистра сведений .получить() получаем все с типом строка... Задача как раз в том чтобы присвоить этой строке тип хранилище значений и еще раз воспользоваться методом получить. Ниже приведен пример - как выглядит информация полученная из регистра сведений после метода .получить(). Побайтно сравнивал с картинкой - не то ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 10:30 |
|
||
|
Как присвоить строке тип хранлище значений?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. Так работает, значит дело не в хранилище. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 11:11 |
|
||
|
Как присвоить строке тип хранлище значений?
|
|||
|---|---|---|---|
|
#18+
З.Ы. Сдается мне, что если получать значение через ПрочитатьXML(), то в полученном объекте хранилище значения будет именно хранилищем, а не строкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 12:13 |
|
||
|
Как присвоить строке тип хранлище значений?
|
|||
|---|---|---|---|
|
#18+
Нет региЗ.Ы. Сдается мне, что если получать значение через ПрочитатьXML(), то в полученном объекте хранилище значения будет именно хранилищем, а не строкой.Думал уже об этом. Тип то задан "<ТекстФайла>", а если не задан - то попробовать самому вписать тег. Вечером опробую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 12:41 |
|
||
|
Как присвоить строке тип хранлище значений?
|
|||
|---|---|---|---|
|
#18+
// Процедура считывает данные XML из файла и заполняет структуры данных // // Возвращаемое значение: // Структура, содержащая два соответствия: ТабличныеЧасти, Реквизиты // Структура хранения данных: // Соответствие ТабличныеЧасти, которое содержит в себе значения табличных частей // формат: // СоответствиеИмя1 -> ТаблицаЗначений1 // | | ... | // Поле1 Поле2 ПолеM1 // // СоответствиеИмя2 -> ТаблицаЗначений2 // | | ... | // Поле1 Поле2 ПолеM2 // // // СоответствиеИмяN -> ТаблицаЗначенийN // | | ... | // Поле1 Поле2 ПолеM3 // // Соответствие ЗначенияРеквизитов // ИмяРеквизита1 -> Значение1 // ИмяРеквизита2 -> Значение2 // ... // ИмяРеквизитаN -> ЗначениеN // Функция РазборПредставленияОбъектаXML(СтрокаXML, Ссылка) // содержит имя метаданного измененного объекта Перем ИмяОбъекта; // Содержит положение маркера в дереве XML. // Требуется для идентификации текущего элемента. Перем УровеньЧтения; // Содержат значения реквизитов справочников / документов ЗначенияРеквизитов = Новый ТаблицаЗначений; ЗначенияРеквизитов.Колонки.Добавить("НаименованиеРеквизита"); ЗначенияРеквизитов.Колонки.Добавить("ЗначениеРеквизита"); ЗначенияРеквизитов.Колонки.Добавить("ТипРеквизита"); ТабличныеЧасти = Новый Соответствие; ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(СтрокаXML); // уровень позиции маркера в иерархии XML: // 0 - уровень не задан // 1 - первый элемент (имя объекта) // 2 - описание реквизита или табличной части // 3 - описание строки табличной части // 4 - описание поля строки табличной части УровеньЧтения = 0; ТабличныеЧастиМТД = Ссылка.Метаданные().ТабличныеЧасти; ТипЗначения = ""; // основной цикл разбора по XML Пока ЧтениеXML.Прочитать() Цикл Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда УровеньЧтения = УровеньЧтения + 1; Если УровеньЧтения = 1 Тогда // указатель на первом элементе XML - корень XML ИмяОбъекта = ЧтениеXML.Имя; ИначеЕсли УровеньЧтения = 2 Тогда // указатель на втором уровне - это реквизит или имя табличной части ИмяРеквизита = ЧтениеXML.Имя; Если ТабличныеЧастиМТД.Найти(ИмяРеквизита) <> Неопределено Тогда ИмяТабличнойЧасти = ИмяРеквизита; // создаем новую таблицу значений в таблице соответствий Если ТабличныеЧасти[ИмяТабличнойЧасти] = Неопределено Тогда ТабличныеЧасти.Вставить(ИмяТабличнойЧасти, Новый ТаблицаЗначений); КонецЕсли; КонецЕсли; НовоеЗР = ЗначенияРеквизитов.Добавить(); НовоеЗР.НаименованиеРеквизита = ИмяРеквизита; Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда Пока ЧтениеXML.ПрочитатьАтрибут() Цикл Если ЧтениеXML.ТипУзла = ТипУзлаXML.Атрибут И ЧтениеXML.Имя = "xsi:type" Тогда НовоеЗР.ТипРеквизита = ЧтениеXML.Значение; КонецЕсли; КонецЦикла; КонецЕсли; ИначеЕсли (УровеньЧтения = 3) и (ЧтениеXML.Имя = "Row") Тогда // указатель на поле табличной части ТабличныеЧасти[ИмяТабличнойЧасти].Добавить(); ИначеЕсли УровеньЧтения = 4 Тогда // указатель на поле табличной части ИмяПоляТЧ = ЧтениеXML.Имя; // Таблица = ТабличныеЧасти[ИмяТабличнойЧасти]; Если Таблица.Колонки.Найти(ИмяПоляТЧ)= Неопределено Тогда Таблица.Колонки.Добавить(ИмяПоляТЧ); КонецЕсли; КонецЕсли; ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда УровеньЧтения = УровеньЧтения - 1; ТипЗначения = ""; ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда Если (УровеньЧтения = 2) Тогда // значение реквизита НовоеЗР.ЗначениеРеквизита = ЧтениеXML.Значение; //ЗначенияРеквизитов[ИмяРеквизита] = ЧтениеXML.Значение; ИначеЕсли (УровеньЧтения = 4) Тогда // значение реквизита ПоследняяСтрока = ТабличныеЧасти[ИмяТабличнойЧасти].Получить(ТабличныеЧасти[ИмяТабличнойЧасти].Количество()-1); ПоследняяСтрока[ИмяПоляТЧ] = ЧтениеXML.Значение; КонецЕсли; КонецЕсли; КонецЦикла; // 2-й этап: из списка реквизитов исключаем табличные части Для Каждого Элемент Из ТабличныеЧасти Цикл ЗначенияРеквизитов.Удалить(ЗначенияРеквизитов.Найти(Элемент.Ключ)); КонецЦикла; //ТабличныеЧастиМТД Для Каждого ЭлементСоответствия Из ТабличныеЧасти Цикл Таблица = ЭлементСоответствия.Значение; Если Таблица.Колонки.Количество() = 0 Тогда ТаблицаМТД = ТабличныеЧастиМТД.Найти(ЭлементСоответствия.Ключ); Если ТаблицаМТД <> Неопределено Тогда Для Каждого ОписаниеКолонки Из ТаблицаМТД.Реквизиты Цикл Если Таблица.Колонки.Найти(ОписаниеКолонки.Имя)= Неопределено Тогда Таблица.Колонки.Добавить(ОписаниеКолонки.Имя); КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; Результат = Новый Структура; Результат.Вставить("Реквизиты", ЗначенияРеквизитов); Результат.Вставить("ТабличныеЧасти", ТабличныеЧасти); Возврат Результат; КонецФункции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 12:51 |
|
||
|
Как присвоить строке тип хранлище значений?
|
|||
|---|---|---|---|
|
#18+
Не помогает. При считывании, Хранилище всегда имеет тип строка. Интересно а встроенный парсер - по логике должен уметь распознавать тип.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 12:52 |
|
||
|
Как присвоить строке тип хранлище значений?
|
|||
|---|---|---|---|
|
#18+
Через ПрочитатьXML() - это и есть встроенный парсер. Версии объектов сериализуются целиком, а не пишутся пореквизитно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 13:38 |
|
||
|
Как присвоить строке тип хранлище значений?
|
|||
|---|---|---|---|
|
#18+
Там же: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 13:41 |
|
||
|
Как присвоить строке тип хранлище значений?
|
|||
|---|---|---|---|
|
#18+
З.Ы. В самом XML-представлении нет необходимости задавать тип значения реквизита т.к. оно будет прочитано ровно в той же конфигурации, в какой и записывалось. Поэтому он (тип) там и не задан. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 13:56 |
|
||
|
|

start [/forum/topic.php?fid=28&msg=36855391&tid=1522014]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
192ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 490ms |

| 0 / 0 |
