Спортивное поле своими руками

Спортивное поле своими руками
Спортивное поле своими руками
Спортивное поле своими руками
Спортивное поле своими руками
Спортивное поле своими руками

Список работ

1С:Предприятие. Графическая схема

Содержание

Графическая схема 1С:Предприятие используется в рассматриваемом примере для записи блок-схемы алгоритма. Затем решается задача перевода блок-схемы алгоритма в его линейную схему.
Порядок следования инструкций в линейной схеме определяется содержанием Подсказки элемента (блока) в графической схеме.
Подсказка элемента графической схемы – это его номер в блок-схеме с учетом имеющейся иерархии. Номер завершается точкой. Так, "Начало" - первый элемент блок-схемы имеет номер "1.".
Ветвление "Если – Тогда – Иначе – КонецЕсли" отображается элементом "Условие" графической схемы. Если "Условие" имеет номер (подсказку) "3.", то первый элемент в ветви "Да" этого условия имеет номер "3.1.1.", второй - "3.1.2." и т. д. Соответственно первый элемент этого условия в ветви "Нет" имеет номер "3.2.1.", второй - "3.2.2." и т. д.
Номера-подсказки переносятся в линейную схему алгоритма без изменений.
Алгоритм рассматриваемого примера прост. Его запись в виде линейной схемы:

  1. Начало.
  2. Ввод А, Б и В.
  3. Если А > Б Тогда
      3.1.1. Б = В.
    Иначе
      3.2.1.  А = В.
    КонецЕсли
  4. Вывод А и Б.
  5. Останов.

Этот алгоритм записывается в графической схеме в виде блок-схемы. Далее создается код, переводящий блок-схему в линейную схему.

Форма отчета приведена на рис. 1.

Блок-схема алгоритма в графической схеме 1С:Предприятие

Рис. 1. В графической схеме набрана блок-схема алгоритма

Элементы графической схемы имеют Подсказки, приведенные в нижеследующей таблице.

Имя Заголовок Подсказка ТочкаСтарта Начало 1. ДействиеВводДанных Ввод А, Б и В 2. УсловиеАБольшеБ А > Б 3. ДействиеБПрисвоитьВ Б = В 3.1.1. ДействиеАПрисвоитьВ А = В 3.2.1. ДействиеВыводДанных Вывод А и Б 4. ТочкаЗавершения Останов 5.

Замечания:

  1. Каждый блок снабжается Подсказкой, содержащей номер блока в блок-схеме. Принцип нумерации блоков описан выше.
  2. Действие, следующее после Ветвления, имеет флажок "Групповая". Наличие такого Действия воспринимается процедурой перевода блок-схемы в линейную схему как признак завершения блока Ветвление.

При нажатии на кнопку "Линейная схема" вызывается процедура, строящая по блок-схеме алгоритма его линейную схему.

В общем случае алгоритм может содержать следующие блоки:

  1. Начало.
  2. Останов.
  3. Следование.
  4. Ветвление.
  5. Выбор.
  6. Цикл "С параметром".
  7. Цикл "Пока".
  8. Цикл "Для каждого".

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

  • Точка старта.
  • Точка завершения.
  • Действие.
  • Условие.
  • Соединительная линия.

Список значений элементов графической схемы

Рис. 2. Список элементов блок-схемы, упорядоченный по Подсказке

Линейная схема записывается в текстовый документ "ЛС".
В процедуре прежде формируется список значений "СЗ", содержащий в качестве значений все элементы графической схемы, кроме соединительных линий, а в качестве представлений - их Подсказки.
Далее в цикле перебираются элементы этого списка.
Все элементы, кроме Условия, дают новую строку текстового документа, содержащую Подсказку элемента графической схемы и его наименование. Подсказка и наименование разделяются символом неразрывного пробела - Символ(160).
При обнаружении Условия формируется конструкция Если - Тогда - Иначе - КонецЕсли, в ветвях которой может быть произвольное количество Действий.

// Вызывается при нажатии на кнопку "Линейная схема"
процедура кнопкаВыполнитьНажатие(кнопка)
 // грСх - элемент типа ПолеГрафическойСхемы
 грСх = элементыФормы.грСх;
 сх = грСх.ПолучитьСхему();
 схЭгс = сх.ЭлементыГрафическойСхемы;
 лС = новый текстовыйДокумент;
 сз = новый списокЗначений;
 к = 0;
 // Формируем список значений из элементов схемы без соединительных линий
 пока к < схЭгс.Количество() цикл
  эгс = схЭгс[к];
  если не типЗнч(эгс) = тип("ЭлементГрафическойСхемыСоединительнаяЛиния") тогда
   сз.Добавить(эгс, эгс.подсказка);
  конецЕсли;
  к = к + 1;
 конецЦикла;
 сз.СортироватьПоПредставлению();
 сз.ВыбратьЭлемент("Сортировка по Подсказке");
 к = 0;
 вс = сз.Количество();
 пока к < вс цикл
  эгс = сз[к].значение;
  нмр = эгс.подсказка;
  к = к + 1;
  если типЗнч(эгс) = тип("ЭлементГрафическойСхемыУсловие") тогда
   лС.ДобавитьСтроку(нмр + символ(160) + "Если " + эгс.наименование + " Тогда");
   кД = к;
   кН = к;
   нмрД = нмр + "1";
   нмрН = нмр + "2";
   д = стрДлина(нмрН);
   смвл = "";
   для л = 1 по д цикл смвл = смвл + символ(160) конецЦикла;
   // Ветвь "Да"
   однаВетвь(кД, вс, нмрД, д, сз, лС, смвл);
   лС.ДобавитьСтроку(смвл + "Иначе");
   // Ветвь "Нет"
   однаВетвь(кН, вс, нмрН, д, сз, лС, смвл);
   лС.ДобавитьСтроку(смвл + "КонецЕсли");
   к = макс(кД, кН) - 1;
  иначе
   лС.ДобавитьСтроку(нмр + символ(160) + эгс.наименование + ".");
  конецЕсли;
 конецЦикла;
 лС.Показать("Линейная схема");
КонецПроцедуры
процедура однаВетвь(кДН, вс, нмрДН, д, сз, лС, смвл)
 пока кДН < вс цикл
  эгс = сз[кДН].значение;
  нмр = сз[кДН].представление;
  кДН = кДН + 1;
  // Обнаружено действие, следующее сразу после Ветвления
  если типЗнч(эгс) = тип("ЭлементГрафическойСхемыДействие") и эгс.групповая тогда прервать конецЕсли;
  если лев(нмр, д) = нмрДН тогда
   лС.ДобавитьСтроку(смвл + символ(160) + нмр + символ(160) + эгс.наименование + ".")
  конецЕсли;
 конецЦикла;
конецПроцедуры

Пример получаемого текстового документа показан на рис. 3.

Линейная схема алгоритма в текстовом документе

Рис. 3. Линейная схема алгоритма

Если графическая схема создана в макете "мкт", то для ее отображения в форме можно употребить следующий код:

грСх = элементыФормы.грСх;
грСх.Очистить();
// мкт - макет с графической схемой
грСх.УстановитьСхему(получитьМакет("мкт"));

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

  1. Синтаксис-помощник 1С:Предприятие.

Список работ

Спортивное поле своими руками Спортивное поле своими руками Спортивное поле своими руками Спортивное поле своими руками Спортивное поле своими руками Спортивное поле своими руками Спортивное поле своими руками Спортивное поле своими руками Спортивное поле своими руками Спортивное поле своими руками

Лучшие статьи:



Инструкция комод своими руками

Как сделать фандеры своими

Как сделать кракелюр трещинками

Как сделать для зимней чертика

Схема вертикального бойлера