Ознакомьтесь с нашей политикой обработки персональных данных

URL
  • ↓
  • ↑
  • ⇑
 
00:56 

XDTO-пакеты. Неименованные типы

Настоящий дворянин и программист
В продолжение к посту XDTO-пакеты, xml, xml schema несколько слов о неименованных типах.



Давайте посмотрим, что будет, если в конструкторе XDTO-пакета к свойству добавить определение типа и, в свою очередь, добавить туда еще свойств:





Как видите, свойства "Адрес" и "Телефон" сложного типа ("ОбъектXDTO"). А телефон еще и списковый тип (я задал "Максимальное количество" равное трем).






Вот XML-схема этого пакета:


< xs:schema xmlns:tns="www.1c.ru/demos/products"
xmlns:xs="www.w3.org/2001/XMLSchema"
targetNamespace="www.1c.ru/demos/products"
attributeFormDefault="unqualified" elementFormDefault="qualified">
< xs:complexType name="Клиент">
< xs:sequence>
< xs:element name="Фамилия" type="xs:string"/>
< xs:element name="Имя" type="xs:string"/>
< xs:element name="Адрес">
< xs:complexType>
< xs:sequence>
< xs:element name="Город" type="xs:string"/>
< xs:element name="Улица" type="xs:string"/>
< xs:element name="Дом" type="xs:int"/>
< /xs:sequence>
< /xs:complexType>
< /xs:element>
< xs:element name="Телефон" maxOccurs="3">
< xs:complexType>
< xs:sequence>
< xs:element name="КодГорода" type="xs:string"/>
< xs:element name="Номер" type="xs:string"/>
< xs:element name="Добавочный" type="xs:string"/>
< /xs:sequence>
< /xs:complexType>
< /xs:element>
< /xs:sequence>
< /xs:complexType>
< /xs:schema>


Вот код, который создает объект этого типа:


    клиентТип = ФабрикаXDTO.Тип("www.1c.ru/demos/products", "Клиент");
клиент = ФабрикаXDTO.Создать(клиентТип);




При создании объекта типа "Клиент" мы получим следующую картину:





Заполнить реквизиты "Фамилия" и "Имя" несложно:


    клиент.Фамилия = "Нуралиев";
клиент.Имя = "Борис";


Телефоны рассмотрим немного позже, а вот как заполнить реквизит "Адрес"? По логике, это нужно сделать как в примере с номенклатурой и единицами измерения из предыдущей статьи. Создать "ОбъектXDTO" с типом таким же, как у свойства "Адрес". Но у этого типа нет самостоятельного имени, а значит, вызвать "ФабрикаXDTO.Тип(...)", чтобы получить этот самый тип, не получится. Но это не значит, что самого типа нет. Просто он содержится в типе "клиентТип". Давайте посмотрим на него более внимательно:





Как видите, имени у типа нет, но сам объект "ТипОбъектаXDTO" существует. Значит, адрес мы можем заполнить вот таким кодом:


    клиент.Адрес = ФабрикаXDTO.Создать(клиентТип.Свойства.Получить("Адрес").Тип);
клиент.Адрес.Город = "Москва";
клиент.Адрес.Улица = "Селезневская";
клиент.Адрес.Дом = 21;


Теперь и с телефонами ситуация проясняется. Свойство "Телефон" имеет тип "СписокXDTO", а синтакс-помощник говорит, что у этого типа есть метод "Добавить", которому передается "ОбъектXDTO". Вот код, который добавляет телефоны:


    телефонТип = клиентТип.Свойства.Получить("Телефон").Тип;

нТелефон = ФабрикаXDTO.Создать(телефонТип);
нТелефон.КодГорода = "495";
нТелефон.Номер = "737-92-57";
нТелефон.Добавочный = "*0";
клиент.Телефон.Добавить(нТелефон);

нТелефон = ФабрикаXDTO.Создать(телефонТип);
нТелефон.КодГорода = "495";
нТелефон.Номер = "681-44-07";
нТелефон.Добавочный = "*0";
клиент.Телефон.Добавить(нТелефон);


В итоге я получил вот такой XML:


< ?xml version="1.0" encoding="UTF-8" ?> 
< Клиент xmlns="www.1c.ru/demos/products"
xmlns:xs="www.w3.org/2001/XMLSchema"
xmlns:xsi="www.w3.org/2001/XMLSchema-instance">
< Фамилия>Нуралиев< /Фамилия>
< Имя>Борис< /Имя>
< Адрес>
< Город>Москва< /Город>
< Улица>Селезневская< /Улица>
< Дом>21< /Дом>
< /Адрес>
< Телефон>
< КодГорода>495< /КодГорода>
< Номер>737-92-57< /Номер>
< Добавочный>*0< /Добавочный>
< /Телефон>
< Телефон>
< КодГорода>495< /КодГорода>
< Номер>681-44-07< /Номер>
< Добавочный>*0< /Добавочный>
< /Телефон>
< /Клиент>


Напоследок хочу подарить вам небольшую рекурсивную процедуру, которая заполняет все свойства вот таких неименованных типов, кроме списковых:


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


Естественно, вы можете доработать ее по своему вкусу.



На сегодня на этом все, а вам я желаю хорошего дня и хорошего кода.



@темы: , xml, ООП

23:02 

Кассовый аппарат

Настоящий дворянин и программист
А вы говорите - фискальные регистраторы, термопечать, связь с базой, встроенный модем, беспроводные модули.
Вот где контроль и учет, вот где мощь железная. И грохотали же эти "феликсы" когда-то по магазинам.

@темы: забавное

23:41 

Доклад про Agile

Настоящий дворянин и программист
Коллеги, мой доклад про agile на конференции это только треть.
Полная версия доступна по ссылке.

Там есть и прекрасный доклад Тимофея Евграшина о том что такое agile и зачем он нужен.
И впечатления Михаила Фридмана, руководителя в отделе которого "наступил Scrum".

03:16 

Опять не писатель

Настоящий дворянин и программист
Чукча опять не писатель, а читатель. А скорее делатель.
Уважаемые мои читатели, простите за долгое молчание. Жизнь бьет ключом, внимание занимает стартап и клуб. Кстати, клуб на "перезагрузке". Все будет, но будет немного иначе. Приходите на финальную встречу.

А еще скоро Инфостарт 2014, не забываем.

@темы: текущее, события

19:15 

Апач и 1С

Настоящий дворянин и программист
Апач спал, лишь одним ухом подслушивая 80-ый порт.
Внезапно в ухо кто то свистнул.
- Что такое? -спросил апач.
- Запрос пришел, - сказал 80-ый порт. Держи, обрабатывай.
- И че там? - спросил апач.
- Я хз, алиас вот какой то "my1c" и потом много буков, разбирайся сам.
Апач взял алиас повертел его в руках и крикнул
- Эй, таблица алиасов, просыпайся, че за фигня ко мне прилетела из 80-го порта?
- Этот алиас соответствует директории c:\inetpub\wwwroot\my1c, - сказала таблица алиасов, не открывая глаза.
Апач растолкал конфиг,
- эй, тут фигня какая то прилетела, что там у нас в c:\inetpub\wwwroot\my1c ?
Конфиг пошуршал своими учетными карточками.
- Приложение там какое то, собственно дело это не наше, у этих запросов хэндлер свой назначен, перебирать их.
- Какой хэндлер?
- Какой то 1c-application, отстань, дай поспать
Апач понятия не имел, что это за хэндлер.
- Подгружаемые модули, подъем! - заорал Апач.
- Испуганные модули вскочили с коек и едва успев накинуть на себя одежду, выстроились в ряд.
- Итак, уроды багнутые, какой то хрен, решив, что он может будить меня в любое время суток, послал мне запрос, с хэндлером 1c-application. И не дай божи вам сейчас не признаться, чей это гребаный хэндлер, введу в вечный суспенд!
- не мой! - крикнул быстрый пхп модуль
- и не мой, - крикнул толстый соап модуль
- ваще не мой вроде хэндлер - сказали одновременно скрытные братья tls и ssl.
И только робкий wsap22.dll побледнел и не мог вымолвить ни слова.
Апач подошел к нему вплотную
- Урод багнутый, призавайся, твой хэндлер. Счас тебе его с заднего адреса засуну!
- Мой, вроде, - замямлил wsap22
- А раз он твой, то сорвался и собрал быстренько весь запрос из 80-го порта. Чтобы там ни байта не осталось. Чтобы порт чистый был. Закончишь доложишь. Даю на это 1 секунду,
- Есть, - произнес wsap22
- Что-что? Потери какие-то. ..
- Есть, товарищ вебсервер Апач 2.2
И wsap22 метнулся собирать рассыпавшийся запрос
- Остальным, отбой, - крикнул веб сервер. Модули бросились на кровати.
wsap22 собрав запрос в папку, прошил зелеными нитками и сверху приклеил ярлычок. Так любил сервер 1С.
С папочкой пришел он к серверу 1С, который никогда не спал и все время чем то был занят. Никто не знал чем, но жрал много, требуя носить еду к нему в кабинет.
- Что там у нас? - спросил сервер 1С.
- Запросик вот, по веб пришел. Я все подшил и оформил как вы любите.
Спасибо, Владимир.

@темы: хумор

16:05 

Евгений Гилев, видео КД

Настоящий дворянин и программист
04:25 

Вопросы к собеседованию

Настоящий дворянин и программист
00:15 

Не грузи

Настоящий дворянин и программист
Сортировка в танце была, а теперь логика на грузах.



Что дальше?

@темы: забавное

13:07 

Устаревшие конфигурации (еще на 8.0 было)

Настоящий дворянин и программист


@темы: , хумор

01:14 

О некоторых ТЗ

Настоящий дворянин и программист
Бывает так, что присылают ТЗ. Очень подробное, многостраничное, мелким шрифтом.
Сразу представляется это -

Спасибо, ЛЛео.

@темы: хумор

18:10 

Вы хотите об этом поговорить?

Настоящий дворянин и программист
Я давно хотел поговорить о документации, которая сопровождает разработку.
Собственно, так и сделаю на девятой встрече. Приходите - http://club-1c.zfilin.org.ua/2014/03/blog-post.html

@темы: события

21:19 

СведенияОВнешнейОбработке

Настоящий дворянин и программист
В УТ3 (как и в УТ11) внешние отчеты подключаются немного иначе, чем раньше.
Теперь в модуле объекта должна быть вот такой минимально необходимый код:

Функция СведенияОВнешнейОбработке() Экспорт

НазваниеОтчета = "Название вашего отчета";

РегистрационныеДанные = Новый Структура;
РегистрационныеДанные.Вставить("Вид", "ДополнительныйОтчет");
РегистрационныеДанные.Вставить("Наименование", НазваниеОтчета);
РегистрационныеДанные.Вставить("Версия", "1.0");
РегистрационныеДанные.Вставить("БезопасныйРежим", Истина);
РегистрационныеДанные.Вставить("Информация", "Информация про отчет");

тзКоманды = Новый ТаблицаЗначений;
тзКоманды.Колонки.Добавить("Идентификатор");
тзКоманды.Колонки.Добавить("Представление");
тзКоманды.Колонки.Добавить("Модификатор");
тзКоманды.Колонки.Добавить("ПоказыватьОповещение");
тзКоманды.Колонки.Добавить("Использование");

СтрокаКоманды = тзКоманды.Добавить();
СтрокаКоманды.Представление = НазваниеОтчета;
СтрокаКоманды.ПоказыватьОповещение = Ложь;
СтрокаКоманды.Использование = "ОткрытиеФормы";
СтрокаКоманды.Идентификатор = НазваниеОтчета;

РегистрационныеДанные.Вставить("Команды", тзКоманды);

Возврат
РегистрационныеДанные;

КонецФункции
Пока положу, как памятку, конечно с этим нужно будет разобраться более внимательно.

@темы: 

14:09 

Инфостарт поздравляет всех одинэсников с 23 февраля!

Настоящий дворянин и программист
Что бы там ни говорили, а на красивых девушек всегда приятно посмотреть.


@темы: забавное

14:13 

Тортик

Настоящий дворянин и программист
Самый лучший подарок, какой только можно придумать -



@темы: наш самый лучший проект

04:04 

Неконструктивные приемы коммуникаций

Настоящий дворянин и программист
Люблю смотреть выступления Александра Орлова.
Рассказывает про умные вещи, складно, красиво. Шутит, держит аудиторию.
Сам смотрю и вам советую.

Там же сразу появляются ссылки на другие видео Стратоплана с интригующими названиями, вроде "Типология людей с точки зрения восприятия времени" или "Роли переговорщика в жестких переговорах". Любопытно весьма.

@темы: менеджерское, ссылка

14:53 

О личной эффективности

Настоящий дворянин и программист
Макс Дорофеев продолжает серию вебинаров с коллегами-психологами.
В этот раз речь пойдет о личной эффективности.
Это как раз та тема, которая понятна в теории, но как-то очень плохо работает на практике. Надо послушать.

@темы: вебинар, события

22:52 

IE 2014

Настоящий дворянин и программист
Нет нужды долго описывать что это за событие. Это - Infostart EVENT 2014

@темы: события

23:58 

Клуб черного 1С-ника

Настоящий дворянин и программист
У нас очередной клуб. В этот раз это вебинар о создании мобильного приложения и встреча.
Добро пожаловать.

@темы: события

16:57 

Бесконечная прокрутка

Настоящий дворянин и программист
Может, нам вообще отказаться от всей этой затеи с кнопкой «Назад»? Идея «верните меня туда, где я только что был», похоже, слишком сложна для современного веба.
xkcd

@темы: хумор

17:45 

Как будто ты никогда не продалбывал сроки!

Настоящий дворянин и программист
Про один вебинар с Максом Дорофеевым я уже писал, теперь готовится следующий, с интригующим заголовком "Как будто ты никогда не продалбывал сроки!"

Обещают ответ на животрепещущий вопрос “Почему проекты никогда не завершаются вовремя (хотя все умные и перезаложились по срокам)?”
Обязательно надо послушать.

Регистрироваться там же на странице.

@темы: вебинар

Green FiLin's blog

главная