Рассмотрим пример будем использовать в качестве параметра этой функции число, таблицу значений и объект какого-нибудь справочника.

Green FiLin’s blog
В продолжение к посту XDTO-пакеты, xml, xml schema несколько слов о неименованных типах.
Давайте посмотрим, что будет, если в конструкторе XDTO-пакета к свойству добавить определение типа и, в свою очередь, добавить туда еще свойств:
Как видите, свойства «Адрес» и «Телефон» сложного типа («ОбъектXDTO»). А телефон еще и списковый тип (я задал «Максимальное количество» равное трем).
Как видите, имени у типа нет, но сам объект «ТипОбъектаXDTO» существует. Значит, адрес мы можем заполнить вот таким кодом:
Теперь и с телефонами ситуация проясняется. Свойство «Телефон» имеет тип «СписокXDTO», а синтакс-помощник говорит, что у этого типа есть метод «Добавить», которому передается «ОбъектXDTO». Вот код, который добавляет телефоны:
Напоследок хочу подарить вам небольшую рекурсивную процедуру, которая заполняет все свойства вот таких неименованных типов, кроме списковых:
Естественно, вы можете доработать ее по своему вкусу.
На сегодня на этом все, а вам я желаю хорошего дня и хорошего кода.
Таблица значений 1С | Блог 1С программиста
37 комментариев:
Столкнулся с такой проблемой: если у типа элемента схемы с типом определенным в самой схеме не указать префикс «tns:» то у созданного объекта XDTO отсутствуют свойства.
Пример:
xs:element name=»АдрОрг» type=»tns:АдрТип»
xs:complexType name=»АдрТип»
Любопытно. Обязательно указывать префикс? Теперь понятно почему у меня не получались такие вещи.
Только вот Ваш пример:
телефонТип = клиентТип.Свойства.Получить(«Телефон»).Тип;
нТелефон = ФабрикаXDTO.Создать(телефонТип);
нТелефон.КодГорода = «495»;
нТелефон.Номер = «737-92-57»;
нТелефон.Добавочный = «*0»;
клиент.Телефон.Добавить(нТелефон);
У меня не сработал, пришлось в СписокXDTO добавлять элементы:
НовТелефон = Фабрика.Создать(телефонТип);
НовТелефон.phone.Добавить(«79261111111»);
Сообщение.phones = НовТелефон;
Т.е. проведем аналогию:
У Вас: НовТелефон.phone = «7921111111»;
У Меня: НовТелефон.phone.Добавить(«79261111111»);
В моем примере списочным типом является поле «клиент.Телефон».
Такое ощущение, что у вас список это не «клиент.Телефон», а «клиент.Телефон.Номер» или, говоря языком вашего примера, «НовТелефон.phone» это список.
Хотя, возможно что-то поменялось с релизом платформы. Не могли бы вы сообщить номер релиза платформы и прислать cf-файл?
Спасибо большое автору, статья очень помогла разобраться. Грамотно написано и ничего лишнего.
Огромное спасибо, несколько дней логову ломал, а тут все отлично написано
Два вопроса:
1. Что за окно на скриншотах «Выражение». Как его отыкрыть?
2. Как настроить xdto так, чтобы можно было в объекте сохранять неограниченное число сделющих узлов:
paramValue
или
paramValue
т.е. какие сущности в дереве xdto создать и какие им назначить свойства?
«Выражение» это отладка. Делаете точку останова и жмете Shift+F9.
По неограниченному количеству узлов — это списки. Посмотрите как создаются телефоны в примере, так же ваши списки.
Это механизм при Записи в XML. А как работать с неименованными типа при чтении из файла XML?
При чтении работать точно так же. Загружаете XML и смотрите отладчиком (или как вам нужно) на тип в XDTO.
А как быть в такой ситуации, не понимаю, что записывать в any
подскажи пожалуйста. не могу победить так называемый __content
xs:complexType name=»header»
xs:simpleContent
xs:extension base=»xs:string»
xs:attribute name=»version_xmlfile» type=»xs:string» use=»required»/
/xs:extension
/xs:simpleContent
/xs:complexType
при создании xml все происходит отлично. в цикле он видит __content как элемент массива
СтрокаHEAD.guid_station = «Зн1»;
СтрокаHEAD.__content = «Зн2»;
а вот при считывании xml — отказывается его видеть. что не так делаю?
Недавно сталкивался с похожими трудностями, залейте пожалуйста xml, который вы пытаетесь читать на http://pastebin.ru/
А-то тут в сообщениях сложно понять.
Нужно использовать метод таблицы значений Индекс IndexOf , которая получает индекс строки в коллекции строк таблицы значений.

Бесплатные программы русские. Программирование 1С
(Эта статья относится к циклу статей 1С с нуля; программирование 1с с нуля; таблица значений 1с)
В прошлой статье я рассказывал о создании таблицы значений 1с и способам обращения к данным, которые в ней содержатся.
Давайте расширим эти знания, для более удобной работы с таблицей значений. Начнем с некоторых полезных свойств таблицы значений.
1. Перебор строк таблицы значений при помощи индексов строк (номеров строк)
Метод ТаблицаЗначений.Количество() — возвращает количество строк в таблице значений.
Напоминаю, что если метод ТаблицаЗначений.Количество() показал, что в таблице 5 строк, то индексы(номера) этих строк такие: 0, 1, 2, 3, 4.
Предположим, что мы имеем таблицу значений 1С с колонкой «ФамилияКлиента»
Если мы желаем перебрать все строки таблицы значений при помощи индекса строк, мы должны использовать заголовок цикла, как в следующем примере. В нем мы выводим на экран содержимое колонки «ФамилияКлиента» для каждой строки, то есть, по-сути, печатаем весь столбец с фамилиями клиентов.
Итак:
Промокоды на Займер на скидки
Обратите внимание, что счетчик цикла мы наращиваем до значения, равного числу строк таблицы минус один: НашаТаблица.Количество() — 1
Давайте выясним, что означает код: НашаТаблица[НомерСтроки]. Это и есть обращение к конкретной строке таблицы значений по ее индексу (номеру).
В следующем примере я покажу, как НашаТаблица[НомерСтроки] возвращает нам объект, который имеет тип «СтрокаТаблицыЗначений» .
В дополнительную переменную я помещаю результат обращение к строке по номеру: СтрокаТаблицы = НашаТаблица[НомерСтроки]
Далее, получив объект — одну строку таблицы значений в виде переменной СтрокаТаблицы, мы можем работать отдельно с этим объектом-строкой. Пример ниже делает тоже самое, что и пример выше, только в нижнем примере использована «лишняя» переменная СтрокаТаблицы
Если внутри цикла мы напишем такой код: Сообщить(СтрокаТаблицы) — этот код НЕ выведет на экран данные из текущей строки таблицы значений (например фамилию клиента и прочее).
Все правильно, потому что переменная СтрокаТаблицы представляет собой объект и доступ к данным осуществляется через свойства и методы этого объекта — а если написать Сообщить(СтрокаТаблицы), то на экран будет выведена информация о типе переменной СтрокаТаблицы: СтрокаТаблицыЗначений.
Например, код СтрокаТаблицы.ФамилияКлиента как раз означает доступ к данным, хранящимся в колонке «ФамилияКлиента» у текущей строки-объекта. Чем мы и воспользовались в примере, чтобы вывести фамилии всех клиентов, хранящиеся в таблице значений. Перебирая все строки и выводя на экран по очереди эти самые фамилии.
2. Перебор строк таблицы значений при помощи цикла перебора коллекции «Для Каждого. «
Для перебора строк таблицы значений 1С мы можем воспользоваться другим вариантом цикла. Это специальный цикл для перебора элементов объектов-коллекций. Таблица значений 1с представляет из себя так называемую коллекцию. В данном случае — коллекцию строк.
Green FiLin s blog: XDTO-пакеты. Неименованные типы
В произвольную переменную СтрокаТаблицы при каждом проходе цикла автоматически присваивается объект-строка таблицы значений.

Структура
Структура представляет собой коллекцию пар КлючИЗначение. При этом ключ может быть только строковым и должен удовлетворять требованиям, предъявляемым к именованию переменных встроенного языка, т.е. ключом не может выступать строка “123ключ”. К значениям структуры можно обращаться как к свойствам объекта. При этом ключ используется как имя свойства.
Пары Ключ-значение можно обойти циклом Для каждого … Из … Цикл, проверить существует ли свойство(ключ) структуры можно методом Свойство().
Структура используется обычно для хранения небольшого количества значений, каждое из которых имеет некоторое имя.
Как добавить новые строки?
Таблица значений
Таблица значений предназначена для хранения значений в табличном виде. Все основные операции с таблицей производятся именно через этот объект. Он позволяет манипулировать строками таблицы значений и предоставляет доступ к коллекции колонок. Колонки могут быть различных типов (в том числе множественных).
У таблицы значений есть метод Сортировать(), с помощью которого можно сортировать таблицу сразу по нескольким колонкам. С помощью метода Итог() можно сразу получить сумму колонки.
Можно выполнить запрос по таблице значений. Для этого необходимо чтобы все колонки таблицы значений были строго типизированы, т.е. вот такую таблицу нельзя отправить в запрос:
Причем, в запросе необходимо сразу поместить выбранную таблицу во временную, а после этого выполнять действия с ней.
В управляемом приложении данный объект доступен только на сервере! Другими словами, попытка создать на клиенте равно как и передать таблицу значений с сервера на клиент приведет к ошибке.
Микрофинансирование → Микрокредиты → Специальные предложения → Скачать файлы → Обзор Быстроденег → Предмет договора → Ответственность сторон → Отличные наличные→ Экспресс займы