|   |   | 
| 
 | Формирование SVG файла через фабрику XDTO | ☑ | ||
|---|---|---|---|---|
| 0
    
        tan76 19.09.24✎ 20:25 | 
        Надумал я генерить svg из под 1С. Загрузил в конфу XSD схемы и через фабрику формирую элементы картинки.
 ГлавныйКонтейнер = ФабрикаXDTO.Создать("http://www.w3.org/2000/svg ,"svgType"); ГлавныйКонтейнер.id = Строка(Новый УникальныйИдентификатор); ГлавныйКонтейнер.width=720; ГлавныйКонтейнер.height=576; Прямоугольник = ФабрикаXDTO.Создать("http://www.w3.org/2000/svg ,"rectType"); Прямоугольник.x="0"; Прямоугольник.y="0"; Прямоугольник.width="400"; Прямоугольник.height="400"; Прямоугольник.fill="#dfdc49"; Прямоугольник.stroke="black"; Прямоугольник.stroke_width="5px"; Прямоугольник.stroke_opacity="0.5"; ГлавныйКонтейнер.rect.Добавить(Прямоугольник); Текст = ФабрикаXDTO.Создать("http://www.w3.org/2000/svg ,"textType"); Текст.x="20"; Текст.y="35"; ГлавныйКонтейнер.text.Добавить(Текст); ЗаписьXML = Новый ЗаписьXML; //ЗаписьXML.ОткрытьФайл("r:\test.svg"); ЗаписьXML.УстановитьСтроку(); ЗаписьXML.ЗаписатьОбъявлениеXML(); ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ГлавныйКонтейнер,"svg","http://www.w3.org/2000/svg Сообщить(ЗаписьXML.Закрыть()); Результат получается такой: <?xml version="1.0"?> <svg xmlns="http://www.w3.org/2000/svg xmlns:xs="http://www.w3.org/2001/XMLSchema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance id="8039b82d-e9e4-4c3e-bb99-364eb187b1fe" width="720" height="576"> <rect fill="#dfdc49" stroke="black" stroke-opacity="0.5" stroke-width="5px" x="0" y="0" width="400" height="400"/> <text x="20" y="35"/> </svg> проблема в том что строка <text x="20" y="35"/> не имеет собственно значения и я не знаю способа его установить. результат должен быть <text x="20" y="35">Мой текст</text>, подскажите, как его достичь, как объекту Текст присвоить содержимое. демка здесь https://disk.yandex.ru/d/WHbtft91PEapzA на 8.3.17.1851 работает точно, остальные релизы как повезет. | |||
| 1
    
        RomanYS 19.09.24✎ 19:15 | 
        на 25й платформе демка не работает     
 | |||
| 2
    
        tan76 19.09.24✎ 19:19 | 
        на 25й не пробовал, работаю на 8.3.17.1851     | |||
| 3
    
        Garykom гуру 19.09.24✎ 20:30 | ||||
| 4
    
        tan76 19.09.24✎ 21:10 | 
        (3) что то я не разобрался как у них там все заработало
 берем пример: об = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema" , "anyType")); ЗначениеАтрибута=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema" , "string"), "840"); об.Добавить(ФормаXML.Атрибут, "http://www.w3.org/2001/XMLSchema" , "id",ЗначениеАтрибута); ГлавныйКонтейнер.text.Добавить(ФормаXML.Элемент, "http://www.w3.org/2001/XMLSchema" , "currency",об); | |||
| 5
    
        tan76 19.09.24✎ 21:14 | 
        получаем ошибку:
 {ОбщаяКоманда.П33Т1.МодульКоманды(62)}: Слишком много фактических параметров ГлавныйКонтейнер.text.Добавить(ФормаXML.Элемент, "http://www.w3.org/2001/XMLSchema , "currency",об); метод "Добавить" с тремя параметрам видимо применим к объектуxdto у меня же ГлавныйКонтейнер.text это списокxdto, я туда готовый объект со значением добавить должен но у ФабрикаXDTO.Создать тоже только два параметра, куда подсунуть нужный текст? | |||
| 6
    
        tan76 19.09.24✎ 21:21 | 
        попробовал добавить значениеXDTO
 НужныйМнеТекст=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2000/svg" , "textType"), "Проверочка"); ГлавныйКонтейнер.text.Добавить(НужныйМнеТекст); падает с ошибкой: {ОбщаяКоманда.П33Т1.МодульКоманды(55)}: Ошибка при вызове метода контекста (Создать) НужныйМнеТекст=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2000/svg" , "textType"), "Проверочка"); по причине: Несоответствие типов (параметр номер '2') | |||
| 7
    
        tan76 20.09.24✎ 09:10 | 
        Помощь все ещё нужна, я в тупике.
 переформулирую проблему, код Текст = ФабрикаXDTO.Создать("http://www.w3.org/2000/svg" ,"textType"); создает объектXDTO со всеми нужными атрибутами, осталось только при создании или после установить само текстовое значение объекта. Как это сделать? | |||
| 8
    
        Asmody 20.09.24✎ 09:34 | 
        (7) У свойства типа объекта есть свойство Форма.
  Тебе нужно то, у которого Форма = Текст | |||
| 9
    
        Dzenn гуру 20.09.24✎ 09:41 | 
        (0) в (8) нужный ответ. Просто объяви ещё одно свойство типа текст. Хотя не очень понимаю твою необходимость генерить свг через иксдто )     | |||
| 10
    
        tan76 20.09.24✎ 10:13 | 
        (8) у "textType" свойства с такой формой нет. Добавить не удалось  так как схема перестает быть валидной.
 Ошибка проверки модели XDTO: xdto-objectType-3.5.5 тип: textType пакет: http://www.w3.org/2000/svg Недопустимая форма XML представления 'Text' свойства 'Свойство1' | |||
| 11
    
        tan76 20.09.24✎ 10:05 | 
        (9) первоначально казалось что это удобней чем поэлементная запись xml. + я не силен в svg а схема дает шаблон в котором есть все нужное для дальнейшей работы.     | |||
| 12
    
        Dzenn гуру 20.09.24✎ 10:36 | 
        (11) можешь ссылку на первоисточник xsd скниуть? посмотрю тоже, интересная затея     | |||
| 13
    
        tan76 20.09.24✎ 11:02 | 
        (12) поищу, я их несколько пробовал и не вчера, давно это было. В 1С загрузилась лишь одна, та что в демке     | |||
| 14
    
        tan76 20.09.24✎ 11:37 | 
        (12) скорей всего использованы эти схемы
 http://www.w3.org/TR/2002/WD-SVG11-20020108/xml.xsd http://www.w3.org/TR/2002/WD-SVG11-20020108/xlink.xsd http://www.w3.org/TR/2002/WD-SVG11-20020108/SVG.xsd | |||
| 15
    
        Asmody 20.09.24✎ 14:03 | 
        Вообще-то, никто не обещал, что Пакет XDTO будет совместим с любым XSD.     | |||
| 16
    
        tan76 20.09.24✎ 16:53 | 
        не решаемая задача?     | |||
| 17
    
        big 20.09.24✎ 19:16 | 
        XML-файл можно формировать разными способами. Зачем зацикливаться на средствах 1С:8.хх ?
 з.ы. вообще то xml - это просто текстовый файл. Можно крутить как хочешь ;) | |||
| 18
    
        Garykom гуру 20.09.24✎ 20:58 | 
        (16) Не тупи
 Текст.Добавить("тут string") | |||
| 19
    
        tan76 20.09.24✎ 23:45 | 
        (18) к сожалению так просто не работает     | |||
| 20
    
        tan76 20.09.24✎ 23:58 | 
        (18) если добавлять по СП
 Текст.Добавить(<Форма>, <URIПространстваИмен>, <ЛокальноеИмя>, <ЭлементДанных>) то проблема уже в первом параметре так как СП прямо говорит что <Форма> (обязательный) Тип: ФормаXML. Форма XML представления произвольного свойства. Может принимать значения Элемент или Атрибут. а мне насколько я понимаю нужно ФормаXML.Текст ежели добавлять как ФормаXML.Элемент то результат шляпа <text x="20" y="35"> <text xmlns="">Проверочка</text> </text> | |||
| 21
    
        DiMel_77 21.09.24✎ 10:17 | 
        Круто завернули (через XDTO формировать пакеты). Отпишитесь если выйдет. У меня в свое время получилось только через ДокументDOM сделать. 
 Как то так было сделано: ТекстФигуры = ДокументDOM.СоздатьЭлемент("text"); ТекстФигуры.УстановитьАтрибут("x", КоординатаX); ТекстФигуры.УстановитьАтрибут("y", КоординатаY); ТекстФигуры.УстановитьАтрибут("text-anchor", "middle"); ТекстовыйУзел = ДокументDOM.СоздатьТекстовыйУзел(Текст); ТекстФигуры.ДобавитьДочерний(ТекстовыйУзел); Я бы не связывался с XDTO в данном вопросе... | |||
| 22
    
        tan76 21.09.24✎ 10:40 | 
        (17)(21) Тут вся выгода в именно в схеме, так сказать инструмент и инструкция в одном флаконе. Для прямоугольника и круга можно и в блокнотике набросать в ручную. Но есть необходимость создавать сложные рисунки, и всё работает шикарно, кроме текста. Не хочу эту идею забрасывать, надеюсь довести до результата.     | |||
| 23
    
        DiMel_77 22.09.24✎ 10:09 | 
        (22) Посмотрел я схему, там прикол в том. что в свойствах типа объекта "textType" установлен смешанный тип. Это означает, что текстовое содержимое блока может содержать вложенные теги. Например так:
 <text x="10" y="30"> You are <tspan>not</tspan> a banana! </text> А это означает, что необходимо использовать ПоследовательностьXDTO. В результате добавление текстового элемента осуществляется так: Текст = ФабрикаXDTO.Создать("http://www.w3.org/2000/svg" ,"textType"); Текст.x="20"; Текст.y="35"; ПоследовательностьXDTO = Текст.Последовательность(); ПоследовательностьXDTO.Добавить("Текст для проверки"); ГлавныйКонтейнер.text.Добавить(Текст); Не за что :) | |||
| 24
    
        tan76 22.09.24✎ 20:11 | 
        (23) Да как же не за что, очень даже есть за что!!! Спасибо! сам я бы до такого не додумался.     | |||
| 25
    
        oleg_km 23.09.24✎ 00:03 | 
        (23) А я-то думал, почему текст приходится читать через ПоследовательностьXDTO. А оказывается возможны еще вложенные теги     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |