Рисовать блок схемы в 1с
Графическая схема 1С:Предприятие используется в рассматриваемом примере для записи блок-схемы алгоритма. Затем решается задача перевода блок-схемы алгоритма в его линейную схему.
Порядок следования инструкций в линейной схеме определяется содержанием Подсказки элемента (блока) в графической схеме.
Подсказка элемента графической схемы – это его номер в блок-схеме с учетом имеющейся иерархии. Номер завершается точкой. Так, "Начало" - первый элемент блок-схемы имеет номер "1.".
Ветвление "Если – Тогда – Иначе – КонецЕсли" отображается элементом "Условие" графической схемы. Если "Условие" имеет номер (подсказку) "3.", то первый элемент в ветви "Да" этого условия имеет номер "3.1.1.", второй - "3.1.2." и т. д. Соответственно первый элемент этого условия в ветви "Нет" имеет номер "3.2.1.", второй - "3.2.2." и т. д.
Номера-подсказки переносятся в линейную схему алгоритма без изменений.
Алгоритм рассматриваемого примера прост. Его запись в виде линейной схемы:
- Начало.
- Ввод А, Б и В.
- Если А > Б Тогда
3.1.1. Б = В.
Иначе
3.2.1. А = В.
КонецЕсли - Вывод А и Б.
- Останов.
Этот алгоритм записывается в графической схеме в виде блок-схемы. Далее создается код, переводящий блок-схему в линейную схему.
Шаг 1. Осознание информации
Прежде, чем сделать схему, конечно же следует понять и осознать то, что нужно отобразить на этой схеме и навести порядок в собственной голове. Удивительно, но иногда человек пытается нарисовать схему не понимая, что именно он пытается нарисовать. Отсутствие слаженной связи информации в голове не позволяет изобразить это виде связанного набора данных.
Соответственно, первым делом следует разобраться с тем, понимаем ли мы что вообще происходит в процессе, который пытаемся изобразить или нет. Нужно четко разбираться в вопросе и видеть основную логику процесса. Причем, речь идёт как о разработке нового процесса или схемы, так и при описании существующих.
Преобразование блок-схемы в линейную схему
В общем случае алгоритм может содержать следующие блоки:
- Начало.
- Останов.
- Следование.
- Ветвление.
- Выбор.
- Цикл "С параметром".
- Цикл "Пока".
- Цикл "Для каждого".
Ниже приводится упрощенный вариант процедуры перевода блок-схемы в линейную схему, распознающий первые 4 блока из вышеприведенного списка с одним уровнем вложенности. То есть графическая схема может содержать такие элементы, как
- Точка старта.
- Точка завершения.
- Действие.
- Условие.
- Соединительная линия.
Рис. 2. Список элементов блок-схемы, упорядоченный по Подсказке
Линейная схема записывается в текстовый документ "ЛС".
В процедуре прежде формируется список значений "СЗ", содержащий в качестве значений все элементы графической схемы, кроме соединительных линий, а в качестве представлений - их Подсказки.
Далее в цикле перебираются элементы этого списка.
Все элементы, кроме Условия, дают новую строку текстового документа, содержащую Подсказку элемента графической схемы и его наименование. Подсказка и наименование разделяются символом неразрывного пробела - Символ(160).
При обнаружении Условия формируется конструкция Если - Тогда - Иначе - КонецЕсли, в ветвях которой может быть произвольное количество Действий.
// Вызывается при нажатии на кнопку "Линейная схема"
процедура кнопкаВыполнитьНажатие(кнопка)
// грСх - элемент типа ПолеГрафическойСхемы
грСх = элементыФормы.грСх;
сх = грСх.ПолучитьСхему();
схЭгс = сх.ЭлементыГрафическойСхемы;
лС = новый текстовыйДокумент;
сз = новый списокЗначений;
к = 0;
// Формируем список значений из элементов схемы без соединительных линий
пока к < схЭгс.Количество() цикл
эгс = схЭгс[к];
если не типЗнч(эгс) = тип("ЭлементГрафическойСхемыСоединительнаяЛиния") тогда
сз.Добавить(эгс, эгс.подсказка);
конецЕсли;
к = к + 1;
конецЦикла;
сз.СортироватьПоПредставлению();
сз.ВыбратьЭлемент("Сортировка по Подсказке");
к = 0;
вс = сз.Количество();
пока к < вс цикл
эгс = сз[к].значение;
нмр = эгс.подсказка;
к = к + 1;
если типЗнч(эгс) = тип("ЭлементГрафическойСхемыУсловие") тогда
лС.ДобавитьСтроку(нмр + символ(160) + "Если " + эгс.наименование + " Тогда");
кД = к;
кН = к;
нмрД = нмр + "1";
нмрН = нмр + "2";
д = стрДлина(нмрН);
смвл = "";
для л = 1 по д цикл смвл = смвл + символ(160) конецЦикла;
// Ветвь "Да"
однаВетвь(кД, вс, нмрД, д, сз, лС, смвл);
лС.ДобавитьСтроку(смвл + "Иначе");
// Ветвь "Нет"
однаВетвь(кН, вс, нмрН, д, сз, лС, смвл);
лС.ДобавитьСтроку(смвл + "КонецЕсли");
к = макс(кД, кН) - 1;
иначе
лС.ДобавитьСтроку(нмр + символ(160) + эгс.наименование + ".");
конецЕсли;
конецЦикла;
лС.Показать("Линейная схема");
КонецПроцедуры
процедура однаВетвь(кДН, вс, нмрДН, д, сз, лС, смвл)
пока кДН < вс цикл
эгс = сз[кДН].значение;
нмр = сз[кДН].представление;
кДН = кДН + 1;
// Обнаружено действие, следующее сразу после Ветвления
если типЗнч(эгс) = тип("ЭлементГрафическойСхемыДействие") и эгс.групповая тогда прервать конецЕсли;
если лев(нмр, д) = нмрДН тогда
лС.ДобавитьСтроку(смвл + символ(160) + нмр + символ(160) + эгс.наименование + ".")
конецЕсли;
конецЦикла;
конецПроцедуры
Пример получаемого текстового документа показан на рис. 3.
Рис. 3. Линейная схема алгоритма
Если графическая схема создана в макете "мкт", то для ее отображения в форме можно употребить следующий код:
грСх = элементыФормы.грСх;
грСх.Очистить();
// мкт - макет с графической схемой
грСх.УстановитьСхему(получитьМакет("мкт"));
Декоративные линии
Декоративные линии могут использоваться как для соединения декораций, так и самостоятельно. Поддерживается несколько типов декоративных линий и несколько видов стрелок:
Элементы графической схемы
Для создания графической схемы может быть использовано довольно большое количество разнообразных элементов, которые можно разделить на три большие группы:
- элементы, обозначающие точки карты маршрута бизнес-процесса;
- декорации;
- декоративные линии.
Шаг 6. Проработка существующей схемы процесса "от" и "до"
Когда схема нарисована, нужно проверить, соблюдается ли логика и действительно ли по разработанной схеме можно сделать хоть что-то? Если это так, то с задачей мы справились. Но если схема получилась с ошибками и логика прорисовки нарушена, то это будет видно и получится внести изменения.
Сделать, в общем-то, это совсем не сложно. Нужно поставить себя на место того, кто будет читать разработанную схему и проанализировать, можно ли там что-то понять, если ты не знаешь суть происходящего. Часто рекомендуют представить, что мы не знаем вообще ничего и попробовать проработать схему с этой логикой.
Ну а дальше следует проработать всю схему поэтапно и удостовериться, что кирпичиков из блоков вполне хватает. Если это сделать получается, то блок схему мы построили.
Графическая схема — это общий объект встроенного языка. Она является одним из интерфейсных механизмов и позволяет создавать различные организационные, структурные и другие схемы для графического оформления прикладного решения. Графическая схема может использоваться как сама по себе, так и отображаться в формах и отчетах.
Заключение
Демонстрация методов работы с графической схемой выполнена на примере построения блок-схемы алгоритма и ее последующего преобразования в линейную схему. Реализован упрощенный вариант преобразователя, не предполагающий вложенности блоков и оперирующий только половиной возможных блоков: Начало, Останов, Действие и Ветвление. Расширение функционала преобразователя является предметом самостоятельной проработки.
Делюсь советами и накопленным опытом по построению блок-схем. Эта информация будет полезна, в основном, новичкам в IT-сфере. Мы рассмотрим идеологию построения любой схемы, первые шаги и поэтапно изучим, как рационально было бы строить каждую новую схемку. Заодно вспомним две самых популярных программы, которые используются для построений.
Схематический способ представления информации сегодня очень популярен. Схему удобно изучать в ускоренном режиме. В условиях, когда нужно быстро вникнуть в проблему или вопрос очень быстро, а времени на это нет совсем, схема является настоящей панацеей!
В случае, когда мы изображаем информацию, используя различные параметры и блоки для обобщения, речь уже будет идти о так называемых блок-схемах. Блок схема ничем не отличается от самой обычной схемки, которую можно быстро набросать ручкой на листке бумаги, но содержит так называемые блоки. Блок здесь - это группа операций, действий или какая-либо другим образом объединенная в единый массив информация или поток данных. Признаки группировки могут быть самыми разными.
Блок-схемы знакомы всем, кто так или иначе связан с построением схемы бизнес-процессов или с программированием. В этих случаях это буквально неизбежный инструмент, без которого ничего сделать не получится вовсе. Ведь если над вопросом работает сразу несколько специалистов, им нужно иметь возможность обобщать всё в единый алгоритм. Если подобная информация пишется сплошным текстом, то разобраться в ней будет очень сложно.
Схемы можно рисовать самым разным образом. Если схема должна описывать бизнес-процесс, то такую схему принято рисовать определённым образом. Способ её отображения называют нотациями. Тут мы встречаем новое понятие, которое называется нотация бизнес-процессов. В конечно счёте, нотация - это некоторый гост или стиль записи, которого придерживаются для того, чтобы легче понимать друг друга. Нотаций существует несколько. Про это мы уже рассказывали. Соответственно, одним из первых моментов, которые нужно знать для правильного составления схемы - это нотации или условные обозначения. Это первое, что нужно уяснить. Но пожалуй, перейдем к поэтапной методике разработки любой схемы.
Вас могут заинтересовать следующие статьи:
Декорации
Отдельную группу элементов представляют декорации, которые могут иметь несколько различных форм: блок, папка, файл, документ, эллипс, различные виды стрелок и скобок:
Шаг 5. Знать основные правила построения блок-схем
Для удобства полезно знать несколько полезных советов или негласных логичных правил, которые позволят строить поэтапную блок-схему.
- Обязательно в схеме должно присутствовать два блока – это «Начало» и «Конец». Очевидно, что у любого алгоритма или бизнес-процесса может быть только одно начало или только один конец.
- Начальный блок связывается с конечным посредством линий связи, которые могут быть дополнены различными промежуточными операциями. Из всех блоков, кроме конечного, должны выходить линии потока.
- Все блоки удобно пронумеровывать. Так легче ориентироваться и вам при разборе схемы, и тому, кто пытается осмыслить полученный вами результат.
- Не секрет, что линии делятся на входящие и выходящие. Если блоки не начальные или конечные, или концевые для конкретной ветки, то одна и та же линия является для одного блока выходящей, а для другого входящей.
- Допускается наличие разрывов в линиях потока. Это обычное дело! Ведь у каждого ответвления рано или поздно происходит логическое завершение.
- Логика процесса может быть линейная, разветвляющаяся или циклическая. Предположительно, тут вопрос появиться не должно :) Если блоки на прямой линии - это линейный вариант. Если на схеме есть разветвления - то схема разветвляющаяся (всегда реальная схема такая). Циклическая - для программиста обычное дело, а вот для бизнес-аналитика более редкая. Скажем, заправка автомобиля перед каждым рейсом - это циклическая операция.
Шаг 3. Изучить условные обозначения
Условные обозначения или нотации - это как язык общения между людьми. Для того, чтобы понимать друг друга, нужно говорить на одном языке. Собственно говоря, так и появилась необходимость каким-либо образом стандартизировать варианты записи схем. Как и в языках, на которых общаются люди, в блок-схемах есть правила и общая логика изложения. Для всех типов блок-схем существует свод своих требований. Это касается и бизнеса и программирования, и прочих сфер, где возможно встретить схемы как таковые.
В общем-то, обозначения ни на что не влияют. Можно выбрать самые разные нотации, но самое важное, что здесь стоит отметить - возможность понимать друг друга. Обычно перед реализацией проекта или заказчик сам говорит, что работаем в такой-то нотации, или она выбирается произвольно исходя из "набитости" руки специалистов, которые будут с этим работать.
Элементы, обозначающие точки карты маршрута бизнес-процесса
Элементы, обозначающие точки карты маршрута могут быть использованы как для иллюстрации непосредственно бизнес-процессов, так и в качестве элементов различных блок-схем, иллюстрирующих выполнение тех или иных алгоритмов:
1. Как создать справочник в 1С
Задача стоит следующая: необходимо создать справочник 1С, в котором можно будет хранить графические схемы, причем при выборе элемента созданного справочника 1С должна отображаться схема, которую содержит элемент.
Для выполнения задачи первым делом создадим справочник 1С. Назовем его «Графические схемы 1С» и создадим сразу две формы – списка и элемента.
Откроем форму элемента и добавим два реквизита – АдресВХранилище – строка, ГрафическаяСхема – тип графическая схема.
Вынесем схему на форму, а адрес в хранилище будет служебным реквизитом, который виден не будет.
Теперь мы можем создавать схемы, но при записи и повторном открытии ничего не сохранится.
Шаг 2. Научитесь видеть самое важное
Когда есть общее понимание происходящего и мы знаем, что не тыкаем пальцем в небо, а разбираемся в какой-то слаженной системе, следует научиться выделять самое главное. Логика тут простая. Сначала нужно нарисовать или описать "хребет" происходящего, а потом обвешать его дополнительными вспомогательными данными.
Это чем-то напоминает строительство каркасного дома. Сначала строится каркас из бруса, а потом его обивают досками или утепляют.
В случае, если мы описываем бизнес-процесс, то логика такая же. Каждый бизнес держится на каком-то ключевом процессе, а дальше на него, как на дереве ветки, навешиваются самые разные процессы. Скажем, если изобразить самую простую логику бизнеса по перепродажам, то главный процесс будет очень простым: Приобретение у поставщика - перепродажа - получение прибыли. Но если вы только взглянете на бизнес-схему одной только кассы такого магазина, то глаза вылезут на лоб.
Но очевидно, что с такой простенькой схемкой ни одно приложение работать не будет. Поэтому, ту же процедуру нажатия на кнопку нужно значительно развернуть. В реальности это было бы примерно так: Выдать уведомление - получить ответ от пользователя - сгруппировать данные для отправки в единый массив - занести их в рабочий буфер временной памяти - соединиться с сервером - получиться уведомление от сервера о соединении - начать передачу данных - уведомить пользователя - обозначить процедуру как "успешно". Это только частичная расшифровка одной из стадий расшифровки.
Форма отчета с графической схемой
Форма отчета приведена на рис. 1.
Рис. 1. В графической схеме набрана блок-схема алгоритма
Элементы графической схемы имеют Подсказки, приведенные в нижеследующей таблице.
- Каждый блок снабжается Подсказкой, содержащей номер блока в блок-схеме. Принцип нумерации блоков описан выше.
- Действие, следующее после Ветвления, имеет флажок "Групповая". Наличие такого Действия воспринимается процедурой перевода блок-схемы в линейную схему как признак завершения блока Ветвление.
При нажатии на кнопку "Линейная схема" вызывается процедура, строящая по блок-схеме алгоритма его линейную схему.
Шаг 4. Выбор рабочего инструмента
Когда известны все обозначенные моменты и ясно, что именно нужно описать, следует выбрать рабочий инструмент. Схему можно рисовать и на бумаге ручкой, но гораздо проще использовать какие-то современные электронные инструменты.
В зависимости от сложности задачи можно использовать самые разные приложения, но, исходя из нашего опыта, хорошо себя зарекомендовали для решения самых разных задач приложения Visio и Draw.io
Одно из них входит в состав программного продукта Office, является платным и в общем-то, ничем особенно примечательным не отличается. Речь идёт про Visio. Все основные функции там есть. Нарисовать схему практически любой сложности вполне возможно и даже относительно удобно.
А вот второе, которое мы постоянно сами используем в своей работе, выгодно отличается.
Это приложение draw.io. Адрес программы в интернете
Оформление элементов графической схемы
Для всех элементов оформления поддерживается выбор цвета фона, линии, толщины линии. За исключением декоративных линий, поддерживается вставка картинок в элемент оформления. Соединительные и декоративные линии обеспечивают автоматическое скругление изгибов и перемещение некраевых «колен».
Все эти оформительские возможности позволяют создавать хорошо читаемые схемы даже в тех случаях, когда происходит частичное наложение соединительных линий:
Сначала я собирался накатать большую и умную статью по итогам исследования внутреннего формата различных общих объектов 1С - всяких там географических карт, дендрограмм и прочих мокселей. О том, как оно устроено, что означает тот или иной кусок и какая польза может от того получиться. Ряд манипуляций возможен только с сериализованным текстом, ряд действий просто быстрее и удобнее. Так вот, а потом мне здраво указали, что теория нафиг не нужна и вообще подавай конкретные примеры.
Сразу оговорюсь: приоритет этой идеи принадлежит безвестным гениям доледникового периода, а я, позорно протормозив, просто сделал для себя то, о чём писал Diversus ещё в лохматые годы. Но, поскольку сие может служить иллюстрацией, и к тому же более-менее работоспособно, то выкладываю в виде кода некоторые наработки как пример. Пример сериализации графической схемы в текст, работы с текстом, и последующей обратной серализации. Причём сделано это всё примитивно и топорно, безо всяких DOM.
К недостаткам схемы стоит отнести сложность позиционирования (вам самостоятельно придётся прикидывать, куда "сунуть" каждый новый объект), и капризная чувствительность к правке. Перетаскивать добавленные объекты, связанные добавленными стрелочками, не советую - всё рискует разъехаться. Но для "только просмотр" это сгодится более чем. Также, напомню, графическая схема поддерживает событие расшифровки, что делает её не просто иллюстративным инструментом, но и навигационным.
Где это может пригодиться? Начиная от построения простейших отчётов-связок, вроде "Структуры подчинённости", и заканчивая отражением связей метаданных, как это делали в механизмах, изучающих внутреннюю структуру конфигураций. Для цели отрисовки графов может пригодиться; правда, опять же, позиционирование надо продумывать самим, в отличие от стороннего софта, обычно используемого в таких случаях.
Собственно, код и все пояснения по формату в описаниях функций. Особенно см. подробное описание функции ДобавитьФигуру.
Если теги всё-таки побьются, пишите в личку - пришлю исходник как файл.
Кому пригодится - буду рад. Если возникнут пожелания по доработке, тоже отписывайтесь в теме или в личке. А то ведь метода УдалитьФигуру я делать пока не стал, лень-матушка.
В своей предыдущей статье я разбирал способ создания презентаций в 1С среде на основе сохранения картинок в справочник. В ней использовалось сохранение в подчиненный справочник 1С. В данной же статье разберем, как делать нечто похожее, но немного другими способами.
2. Как сохранять графическую схему в созданном регистре 1С
· Измерение «Наименование» – строка;
· Ресурс «Графическая схема 1С» - хранилище значения.
Теперь добавим несколько процедур, первая из которых будет сохранять схему в регистр сведений при изменении.
Создадим событие для схемы «ПриИзменении», с помощью которого при каждом изменении будем помещать схему во временное хранилище 1С.
Следующий этап – запись в регистр сведений при записи элемента. Напишем код, для события «ПриЗаписиНаСервере».
Теперь при записи элемента справочника графическая схема сохраняется в созданном в 1С регистре сведений.
Все что осталось сделать, это с помощью ссылки получить графическую схему из регистра, когда открывается форма. Используем для этого событие «ПриСозданииНаСервере».
Нам удалось добиться того, чтобы при внесении изменений результат сохранялся.
Для полного выполнения поставленной задачи осталось всего лишь создать на форме списка такой же, как на форме элемента реквизит типа «графическая схема 1С», добавить событие «ПриАктивизацииСтроки», получить ссылку с помощью «Элементы.Список.ТекущиеДанные.Ссылка» и получить графическую схему с помощью аналогичного кода в 1С:Предприятие, что использовался в процедуре «ПриСозданииНаСервере» на форме элемента, передав туда ссылку.
Специалист компании ООО «Кодерлайн»
Читайте также: