ЗначениеВСтрокуВнутр(....ПолучитьФорму()) и немного СтрЗаменить

Публикация № 17139

Разработка - Практика программирования

21
Может кто и знает этот фокус, но я был приятно удивлен.
Задача стояла такая - разобраться в структуре описания формы объекта метаданных.
Я взялся за форму списка справочника ...

строка = ЗначениеВСтрокуВнутр(Справочники.Справочник1.ПолучитьФормуСписка());
 
Около часа извращался в сдвижке скобочек "{" и "}" по уровням, чтобы было удобнее выявлять структуру.
 
А потом просто взял и написал вот такой код
Функция ЗаписатьВХМЛ2(вхСтрока)
Перем стр;
стр = "";
//{ Замена символов { и }
Для ном = 1 По СтрЧислоСтрок(вхСтрока) Цикл

тмп = СтрПолучитьСтроку(вхСтрока,ном);

Сообщить(тмп); тмп = СтрЗаменить(тмп,"{","<elem>"); тмп = СтрЗаменить(тмп,"}","</elem>"); стр = стр + тмп КонецЦикла; //} //{ Создание файла XML

Запись =Новый ЗаписьXML();
Запись.ОткрытьФайл("O:\СтруктураФормы.xml");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьБезОбработки(стр);
	

Запись.Закрыть();
//} Возврат "";
КонецФункции

Дополнительно код и комментировать код не буду. Он прост.
И самое приятное, что созданный файл прекрасно открывается и смотрится в XML редакторе.

Удачи тем, кому интересно.
21

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. German 871 27.02.08 11:52 Сейчас в теме
Я тоже вначале об этом думал... но все сделал немного проше .. просто запихал все во вложенный массив
Получить нужную структур не фокус .. куда сложнее данную структуру отредактировать. И преобразовать обратно.. в текст.

По твоему коду .. возникнет конфликт в случае "Опа а это комментарии {" Так что считай скобки """;
Так же описание типов не удастся преобразовать... {Parent,
{"S"}
не изобретай велосипед .. код я могу тебе дать .. уже проработанный в обоих направлениях
12. AlexO 127 28.12.11 23:25 Сейчас в теме
(1) а где код от Германа?
И зачем фигурные скобки в комментариях?
2. German 871 27.02.08 11:55 Сейчас в теме
хотя к xml можно и запрос прикрутить .. так что тут еще и вопрос что лучше ..

Как удалось нащупать флаги?
4. brix8x 491 27.02.08 13:13 Сейчас в теме
(2) До флагов пока не дошел, сейчас планировал утилиту, на вход которой можно закинуть ИБ, на выходе получить кучу xml-ей, и обобщенную статистику.
Код будет кстати (велосипед изобретать, действительно, будет не очень умно), только оговори, пожалуйста, условия распространения или нераспространения кода, а то у меня "по умолчанию" включен режим "отдай тому, кто попросит".

(3) Поясни, пожалуйста, термин "Dialog Stream", это из какой области (сходу не ухватил идею)?
5. Abadonna 3835 27.02.08 14:16 Сейчас в теме
(4) это я не въехал сразу, что речь о 8-ке ;)
3. Abadonna 3835 27.02.08 13:04 Сейчас в теме
А чем Dialog Stream не устроил?
6. German 871 27.02.08 14:31 Сейчас в теме
по утилите все есть в пятой версии Ei данная задача решается достаточно просто..
про статистику не понял ? нафиг ..
10. brix8x 491 06.03.08 12:33 Сейчас в теме
(6) Про статистику и нафига ;-) В тот момент я делал обработку, которую хотел применить как основной инструмент документирования структуры описания метаданных.
http://infostart.ru/profile/16971/projects/1745/
7. kosilov 257 05.03.08 02:13 Сейчас в теме
Поделитесь идеями как выгрузку и загрузку в строку можно практически использовать.
Вроде бы фича, но практическое применение что-то в голову не приходит.
Одна мысль только возникает. Делал как-то управление правами через управление видимостью и доступностью любого элемента любой формы (в УПП). Так вот надо было добавить во все модули форм строчку в процедуры ПриОткрытии() и ПриЗаписи(). У УПП оказалось около 1200!!! таких модулей. Пришлось выгрузить все модули в файлы и специально написаной программой обработать. Программа отобрала нужные модули, нашла нужное место в нужных процедурах и добавила нужную строчку с уникальным для каждого модуля параметром.
Все было хорошо, но только осталась одна нерешенная проблема - там где процедур ПриОткрытии или ПриЗаписи не было, я создавал новые процедуры. Таким образом в тексте они появились, а в соответсткующих свойствах формы нет. Т.е. в свойствах всё равно пришлось прописывать руками по мере надобности.
Так вот к чему я это всё рассказывал. Если бы можно было и свойства форм выгрузить, скорректировать, а потом обработно втянуть, то ...
Но что-то похоже и это реализовать через этот механизм не ососбо удасться. Только если в файле обмена (например) между распределенками при полной выгрузке корректировать. Но синтаксис там такой же.
8. a.v.petuhov 05.03.08 12:08 Сейчас в теме
Отстойный код. Думаю что так будет лучше:

Функция ЗаписатьВХМЛ2(ЗНАЧ вхСтрока)

вхСтрока = СтрЗаменить(вхСтрока,"{","<elem>");
вхСтрока = СтрЗаменить(вхСтрока,"}","</elem>");

Запись = Новый ЗаписьXML();
Запись.ОткрытьФайл("O:СтруктураФормы.xml");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьБезОбработки(вхСтрока);
Запись.Закрыть();

КонецФункции
9. brix8x 491 06.03.08 09:13 Сейчас в теме
(8) Приведенный ниже код, действительно, лучше. Оставив в покое блок сохранения строки в ХМЛ, можно выделить четыре возможных сценария работы со значением вхСтрока.

Варианты <elem> и запятушки
Первые два (0) и (8) малополезны. Разница только в том, что в варианте (8) мы получаем многострочный текст, а в варианте (0), текст "склеен" в одну строку. При этом с точки зрения скорости вариант (8) лучше. О результате: ХМЛ редактор покажет нам в итоге дерево <elem>, в котором в качестве значения текста будут выступать примитывные типы данных, разделенных запятыми. Как в этом случае документировать структуру описания формы неясно.

Вариант <elem> как папка <data> как файл (попытка 1)
Используя следующий код мы можем разделить каждый элемент описания метаданных в отдельный тэг.

Код
   //   Пусть каждая запятая - это признак окончания данных
   //   Пусть скобки { и } признаки папки данных
   
   //   Каждую запятую превращаем в признак конца предыдущего данного - <\data>
   //   и признак начала следующего данного <data>
   выхХМЛТело = СтрЗаменить(вхСтрока,",","</data><data>");
   
   //   Каждая начало блока превращаем в признак начала элемента
   //   и последующим началом блока данных
   выхХМЛТело = СтрЗаменить(выхХМЛТело,"{","<elem><data>");
   
   //   Каждое завершение блока требует признака завершения блока данных
   //   и последующим завершением элемента
   выхХМЛТело = СтрЗаменить(выхХМЛТело,"}","</data></elem>");

Показать полностью


Но при этом получается некрасивая картина в плане того, что каждый <elem> оказывается вложенным в <data> ж-)

Вариант <elem> как папка <data> как файл (окончательный вариант)
Лишь в случае, описанном ниже мы получаем то, что нужно - <elem> как папка, <data> как файл

Код
   
   //{ Получение одной длинной строки
   выхХМЛТело = СтрЗаменить(вхСтрока,СИМВОЛЫ.ПС,"");
   выхХМЛТело = СтрЗаменить(выхХМЛТело,СИМВОЛЫ.ВК,"");
   //}
   
   //{ Замена одинарных символов
   выхХМЛТело = СтрЗаменить(выхХМЛТело,",","</data><data>");
   выхХМЛТело = СтрЗаменить(выхХМЛТело,"{","<elem><data>");
   выхХМЛТело = СтрЗаменить(выхХМЛТело,"}","</data></elem>");
   //}
   
   //{ Удаляем лишние блоки <data><elem> и </data></elem>
   выхХМЛТело = СтрЗаменить(выхХМЛТело,"<data><elem>","<elem>");
   выхХМЛТело = СтрЗаменить(выхХМЛТело,"</elem></data>","</elem>");
   //}

Показать полностью


Теперь мы можем при желании работать с полученными элементами как с объектами файловой системы.
Частично это ответ kosilov-у о практической пользе этого знания.

НО, прошу принять во внимание, то, что в своем первом ответе подсказал German.
Данный прием не дает 100 процентного правильного результата. У меня в HRM из 900 форм, 100 оказались некорректно разобранными. И это совершенно правильно, ибо

1. На данном этапе стоит задача документировать формат описания форм, а не создать парсер.
2. Теперь мы можем создать файл XML Schemа, который и будет окончательным документом о формате описания форм.

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

11. brix8x 491 10.03.08 12:28 Сейчас в теме
В завершении темы предлагаю внимание код, который в ЗиуПе дал мне 100 корректное преобразование предстваления 1С в формат XML.
Код
Функция СтрокаВнутрВХМЛТело4(вхСтрока, выхХМЛТело) Экспорт
   //{ Получение одной длинной строки
   выхХМЛТело = СтрЗаменить(вхСтрока,СИМВОЛЫ.ПС,"");
   выхХМЛТело = СтрЗаменить(выхХМЛТело,СИМВОЛЫ.ВК,"");
   //}
   
   //{ Заменяем символы, критичные для XML
   //   & на &amp;
   //   < на &lt;
   //   > на &gt;
   выхХМЛТело = СтрЗаменить(выхХМЛТело,"&","&amp;");
   выхХМЛТело = СтрЗаменить(выхХМЛТело,"<","&lt;");
   выхХМЛТело = СтрЗаменить(выхХМЛТело,">","&gt;");
   //}
   
   //{ Замена одинарных символов
   выхХМЛТело = СтрЗаменить(выхХМЛТело,",","</data><data>");
   выхХМЛТело = СтрЗаменить(выхХМЛТело,"{","<elem><data>");
   выхХМЛТело = СтрЗаменить(выхХМЛТело,"}","</data></elem>");
   //}
   
   //{ Удаляем лишние блоки <data><elem> и </data></elem>
   выхХМЛТело = СтрЗаменить(выхХМЛТело,"<data><elem>","<elem>");
   выхХМЛТело = СтрЗаменить(выхХМЛТело,"</elem></data>","</elem>");
   //}
   
   //{ Добавляем перенос строки к </data> и к </elem> для удобства поиска различий
   выхХМЛТело = СтрЗаменить(выхХМЛТело,"</elem>","</elem>"+СИМВОЛЫ.ПС);
   выхХМЛТело = СтрЗаменить(выхХМЛТело,"</data>","</data>"+СИМВОЛЫ.ПС);
   //}
   
   Возврат "";   
КонецФункции
Показать полностью


Тестировался на ЗиУП в результате получено:
5 минут на преобразование 961 формы, все формы - корректны.

bambr1975; +1 Ответить
Оставьте свое сообщение

См. также

Приватный блокчейн и 1С популярно 6

Статья no Нет файла Бесплатно (free) Практика программирования Блокчейн

Две предыдущие публикации на эту тему были сфокусированы преимущественно на технической стороне вопроса. Кроме того, их содержание оказалось понятным не каждому специалисту. В этой статье я постараюсь обяснить для всех и, что говорится, «на пальцах»: что такое приватный блокчейн, когда и зачем его следует применять и на что обратить внимание при использовании этой технологии в 1С.

02.09.2019    1879    mkalimulin    140       

Кодогенерация и метагенерация в 1С 26

Статья Программист Нет файла Бесплатно (free) Практика программирования Математика и алгоритмы Разработка

В своем докладе на конференции INFOSTART EVENT 2018 EDUCATION Дмитрий Белозеров рассказал о разработке инструмента, позволяющего программно работать с метаданными 1С и писать скрипты для выполнения тех же действий, которые выполняет разработчик в конфигураторе –  с какими сложностями и нюансами пришлось столкнуться, и что получилось в итоге.

26.08.2019    4514    kirovsbis    28       

Интеграция сценарного тестирования в процесс разработки 81

Статья Программист Нет файла Бесплатно (free) Практика программирования Разработка

Разработчик системы «Тестер» Дмитрий Решитко в своем докладе на конференции INFOSTART EVENT 2018 EDUCATION показывает, что процесс тестирования можно очень плотно интегрировать в процесс разработки, что внедрение тестирования – это возможность развития программиста как такового, позволяющая ему упорядочивать ход мыслей и оставаться «в фокусе». Навыки построения процесса кодирования на стыке с тестированием сокращают время на концентрацию, освобождают от страха перед изменениями и улучшают память разработчика.

08.07.2019    4915    grumagargler    7       

Управляй качеством кода 1С с помощью SonarQube 239

Статья Программист Нет файла Россия Бесплатно (free) Практика программирования

Управляй техническом долгом проектов 1С с помощью SonarQube. В статье рассматривается пример применения SonarQube при разработке.

07.07.2019    18695    olegtymko    197       

Выгрузка документа по условию 5

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Разработка

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    6302    m-rv    2       

Как прикрутить ГУИД к регистру сведений 23

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8 Разработка

... и немного теории обмена данными. В частности, разберем боль всех, кто пишет небанальные обмены данными: как набору записей регистра сведений назначить гуид и далее использовать его в обмене для идентификации этого набора.

16.04.2019    8948    m-rv    16       

О времени и 1С 208

Статья Программист Нет файла Бесплатно (free) Практика программирования Разработка

Основы и особенности работы со временем в 1С. Как избавиться от боли при работе в разных часовых поясах. Что такое момент времени. И другое.

01.04.2019    17228    YPermitin    59       

Пример создания bridge (http api - tcp) для ККТ "Касса №1" ("К1-Ф") 5

Статья Системный администратор Программист Нет файла Россия Кассовые операции Бесплатно (free) Практика программирования Разработка ККМ

Пример создания bridge (http api - tcp) для ККТ "Касса №1" ("К1-Ф"). Данная статья будет полезна интеграторам, программистам, тем кто работает (интегрирует, разрабатывает) различное ТО либо железки. Версия и релиз технологической платформы не имеет значения.

17.03.2019    3315    dmarenin    0       

Быстрее чем INSERT! BULK-операции и примеры использования 112

Статья Системный администратор Программист Нет файла Бесплатно (free) Производительность и оптимизация (HighLoad) Практика программирования Разработка Внешние источники данных Перенос данных из 1C8 в 1C8

Microsoft SQL Server поддерживает так называемые BULK-операции, используемые для быстрого изменения больших объемов данных в базе. В статье пойдет речь о практических примерах их использования. Все примеры сделаны в контексте платформы 1С (а как иначе).

09.03.2019    11025    YPermitin    38       

Как писать понятные коммиты 68

Статья Программист Нет файла Россия Бесплатно (free) Практика программирования Разработка

Как писать сообщения коммитов так, чтобы потом не было мучительно больно.

06.03.2019    8313    Scorpion4eg    35       

Расширяем свой багаж 2

Статья Программист Нет файла Бесплатно (free) Практика программирования Разработка

Алгоритм решения возможной нетиповой задачи на собеседовании.

29.01.2019    3658    scientes    15       

Подготовка ребёнка* к ЕГЭ по информатике. Часть четвертая 4

Статья Программист Нет файла Бесплатно (free) Практика программирования Разработка

Решение систем логических уравнений повышенного уровня сложности.

25.01.2019    3361    vasilev2015    0       

Подготовка ребенка* к ЕГЭ по информатике. Часть вторая 2

Статья Программист Нет файла Бесплатно (free) Практика программирования

Примеры на Паскале. Если сам родитель* - поддержи ! Если сам водила - посигналь !

19.01.2019    3753    vasilev2015    0       

Подготовка к ЕГЭ сына - школьника (по информатике) 9

Статья Программист Нет файла Бесплатно (free) Практика программирования

Примеры на Паскале. Если сам отец - поддержи ! Если сам водила - посигналь !

17.01.2019    4184    vasilev2015    50       

Быстрая отладка экранных форм документов и справочников 19

Статья Программист Нет файла Бесплатно (free) Практика программирования

Трюк элементарный и я думаю, что большинство моих коллег владеет им, но для тех, кто не знает, он может сэкономить большое количество времени.

18.12.2018    4912    milkers    19       

1С + asterisk (автоматический обзвон) часть 1 38

Статья Системный администратор Программист Нет файла Россия Бесплатно (free) Практика программирования WEB Телефония, SIP

Пример реализации автообзвона (с обработкой ответа на отвечающей стороне) с использованием ami asterisk. Данная статья может быть полезна программистам, интеграторам, администраторам. Версия и релиз технологической платформы не имеет значения.

29.11.2018    7831    dmarenin    9       

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С 127

Статья Программист Нет файла v8 v8::blocking 1cv8.cf Бесплатно (free) Математика и алгоритмы Практика программирования

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    22444    ids79    40       

Развитие 1С программиста 51

Статья Программист Нет файла Бесплатно (free) Практика программирования Личная эффективность

Делюсь своим опытом и видением развития 1С программиста.

17.10.2018    14591    pashamak    62       

Вспомогательные инструкции в коде 1С 106

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    21635    tormozit    100       

Записки про metadata.js 54

Статья Программист Нет файла Бесплатно (free) Практика программирования

Отличительные особенности разработки на metadata.js

31.07.2018    9677    1c-intelligence    59       

Учебный курс. Повышение качества разработки. Ошибки программы 97

Статья Программист Нет файла Бесплатно (free) Практика программирования Математика и алгоритмы Рефакторинг и качество кода

Учебный курс по теории и практике программирования. Бесплатно. В виде структурированного текста. Лекции № 3,4,5. Эти лекции посвящены ошибкам программ, их классификации и способам исправления

10.07.2018    16285    Артано    92       

Автоматизируй это! 150

Статья Системный администратор Программист Нет файла Бесплатно (free) Практика программирования

Здравствуйте. Меня зовут Виталий Онянов. Я работаю в компании ФТО. Мы занимаемся внедрением и поддержкой ERP-систем, в том числе и на 1С. Сегодня я хотел бы поделиться нашим опытом автоматизации своих задач и рассказать о том, какие регламентные задания мы настраиваем на серверах наших клиентов. Возможно, кому-то покажется, что это совсем простые и очевидные вещи, но я в своей работе периодически вижу разработчиков, которые делают какие-то задачи руками изо дня в день, и мне бы хотелось донести до них мысль о том, что многие из этих задач можно и нужно автоматизировать.

02.07.2018    16756    Tavalik    12       

Повышаем эффективность разработки правил обмена 125

Статья Программист Нет файла v8 КД ОС Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8

Как повысить скорость и качество разработки правил обмена? Как вести групповую разработку правил обмена? Как облегчить сопровождение правил обмена после передачи в эксплуатацию? Об этом и многом другом вы можете узнать из этой статьи.

25.06.2018    20381    olegtymko    47       

Как сделать запрос на изменение данных 75

Статья Программист Нет файла v8 v8::Запросы 1cv8.cf Бесплатно (free) Практика программирования

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    22335    m-rv    21       

Учебный курс. Повышение качества разработки. Вводная лекция, часть 2 49

Статья Программист Нет файла Бесплатно (free) Практика программирования Математика и алгоритмы

Учебный курс по теории и практике программирования. Бесплатно. В виде структурированного текста. Лекция №2. Эта лекция посвящена абстракциям, их свойствами и практическому применению в рамках классических парадигм программирования.

24.05.2018    11116    Артано    36       

Строим графы средствами 1С (без GraphViz) 43

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

Множество статей на Инфостарте описывают, как работать с компонентой GraphViz, чтобы построить ориентированный граф. Но практически нет материалов, как работать с такими графами средствами 1С. Сегодня я расскажу, как красиво строить графы с минимальным пересечением. Нам этот метод пригодился для отрисовки алгоритмов в БИТ.Финансе, т.к. типовой механизм не устраивал. Еще это может быть полезно для визуализации различных зависимостей: расчета себестоимости, графы аффилированности компаний и т.д. Надеюсь, эта статья поможет сделать мир 1С красивее и гармоничней:) Итак, поехали...

23.05.2018    18119    slozhenikin_com    19       

Распределение расходов пропорционально продажам 9

Статья Программист Пользователь Нет файла v8 v8::ОУ УТ10 УУ Финансовый учет и бюджетирование (FRP) Учет доходов и расходов Бесплатно (free) Практика программирования

Финансовая модель. Распределение административных расходов по подразделениям пропорционально продажам за месяц. Дополнительные реквизиты против бизнес-процессов!

13.05.2018    12160    Rustig    9       

Велостыли: Регламентные задания 17

Статья Программист Нет файла Россия Бесплатно (free) Практика программирования

Переделывая очередное «Костыльное» решение, в голову пришла мысль, собрать все странные решения в одну статью, чтобы была некая библиотека о том, как делать не надо (Навеяно вредными советами). Потом понял, что в одну статью не получится все записать, начну с регламентных заданий. Поясню, в данную статью попали примеры из жизни, которые так или иначе реализованы на механизме регламентных заданий, при этом совершенно не всегда этот подход в принципе оправдан.

09.05.2018    10666    dsdred    28       

Веб-разработка на 1Script. Глава 2 64

Статья Программист Нет файла Бесплатно (free) Практика программирования WEB

Продолжение учебника по веб-разработке с помощью фреймворка Oscript.Web. Структура приложения, основные объекты, URL-маршрутизация, универсальная консоль серверов 1С.

22.04.2018    12563    Evil Beaver    27       

Доброе программирование, или сказки для программистов 8

Статья Программист Нет файла Бесплатно (free) Практика программирования

Я попробовал составить список хорошего и доброго, что помогает читающему код жить легче. Возможно, остальные программисты меня поддержат))

03.03.2018    6498    Gladkov_Anton    9       

Минимализмы 3 356

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Универсальные функции

Очередная серия "минимализмов" [http://infostart.ru/public/306536/, https://infostart.ru/public/460935/]. Также, как и в предыдущих статьях, здесь приведена подборка коротких оригинальных авторских решений некоторых задач. Ранее эти решения были разбросаны по моим комментариям к чужим публикациям.

19.02.2018    37298    ildarovich    44       

Веб-разработка на 1Script. Глава 1 251

Статья Программист Нет файла Бесплатно (free) Практика программирования

Разрабатывать веб-приложения должно быть просто. И для этого 1С-ник не должен страдать, изучая десятки и сотни побочных технологий. В конце прошлого года я анонсировал разработку движка веб-приложений на языке 1С. Я планирую выпустить серию статей, оформленных в виде книги, или серии блог-постов, в которых постепенно будут описаны методики разработки сайтов на нашем любимом языке программирования – 1С.

12.02.2018    26176    Evil Beaver    97       

Версионирование правил обмена в Git 65

Статья Программист Нет файла Windows Бесплатно (free) Практика программирования

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

15.12.2017    13290    bforce    22