Skip to content

Commit

Permalink
Наброски отладчика (#16).
Browse files Browse the repository at this point in the history
  • Loading branch information
tsukanov-as committed Dec 15, 2019
1 parent 7a8a121 commit c1ad499
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 29 deletions.
3 changes: 3 additions & 0 deletions src/CommonForms/КонвейерЗаданий/Ext/Form.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
</Button>
</ChildItems>
</AutoCommandBar>
<Events>
<Event name="OnOpen">ПриОткрытии</Event>
</Events>
<ChildItems>
<Table name="ЭтапыКонвейера" id="1">
<Representation>Tree</Representation>
Expand Down
88 changes: 74 additions & 14 deletions src/CommonForms/КонвейерЗаданий/Ext/Form/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -26,31 +26,84 @@

&НаКлиенте
Процедура ПодготовитьОтладочныйКонтекстЛинии(Линия) Экспорт

ОчереднойОбработчикЗадания = Линия.ОбработчикПервогоЗадания;


Этапы = ЭтотОбъект.ЭтапыКонвейера.ПолучитьЭлементы();
Этапы.Очистить();

Стек = Новый Массив;
Корень = Этапы.Добавить();
Корень.Описание = "Этапы конвейера:";
Корень.ИдентификаторЗадания = "_";
Этапы = Корень.ПолучитьЭлементы();

Пока ОчереднойОбработчикЗадания <> Неопределено Цикл

ПараметрыОбработчикаЗадания = ОчереднойОбработчикЗадания.ДополнительныеПараметры;
Стек = Новый Массив;

НовыйЭтап = Этапы.Добавить();
НовыйЭтап.Описание = ПараметрыОбработчикаЗадания.Задание.ИмяПроцедуры;
НовыйЭтап.ИдентификаторЗадания = Строка(Новый УникальныйИдентификатор);
Для Каждого Задание Из Линия.Задания Цикл;

ИдентификаторыЗаданий[ПараметрыОбработчикаЗадания.Задание] = НовыйЭтап.ИдентификаторЗадания;
ИмяПроцедуры = Задание.ИмяПроцедуры;

ОчереднойОбработчикЗадания = ПараметрыОбработчикаЗадания.СледующийОбработчикЗадания;
Если ИмяПроцедуры = "_ВыполнитьОператорЕсли" Тогда
НовыйЭтап = ДобавитьЭтап(Этапы, Задание);
Стек.Добавить(Этапы);
Этапы = НовыйЭтап.ПолучитьЭлементы();
ИначеЕсли ИмяПроцедуры = "_ВыполнитьОператорИначеЕсли"
Или ИмяПроцедуры = "_ВыполнитьОператорИначе" Тогда
Этапы = ВзятьПоследнееЗначение(Стек);
НовыйЭтап = ДобавитьЭтап(Этапы, Задание);
Этапы = НовыйЭтап.ПолучитьЭлементы();
ИначеЕсли ИмяПроцедуры = "_ВыполнитьОператорКонецЕсли" Тогда
Этапы = СнятьПоследнееЗначение(Стек);
НовыйЭтап = ДобавитьЭтап(Этапы, Задание);
Иначе
НовыйЭтап = ДобавитьЭтап(Этапы, Задание);
КонецЕсли;

КонецЦикла;

РазвернутьЭтапы();

КонецПроцедуры

&НаКлиенте
Процедура РазвернутьЭтапы()

Для Каждого Этап Из ЭтотОбъект.ЭтапыКонвейера.ПолучитьЭлементы() Цикл

// TODO: формирование дерева в соответствии со структурой заданий-операторов
Элементы.ЭтапыКонвейера.Развернуть(Этап.ПолучитьИдентификатор(), Истина);

КонецЦикла;

КонецПроцедуры

&НаКлиенте
Функция ДобавитьЭтап(Этапы, Задание)

НовыйЭтап = Этапы.Добавить();
НовыйЭтап.Описание = Задание.ИмяПроцедуры;
НовыйЭтап.ИдентификаторЗадания = Строка(Новый УникальныйИдентификатор);

ИдентификаторыЗаданий[Задание] = НовыйЭтап.ИдентификаторЗадания;

Возврат НовыйЭтап;

КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ВзятьПоследнееЗначение(Стек)

КонецПроцедуры
Возврат Стек[Стек.ВГраница()];

КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция СнятьПоследнееЗначение(Стек)

ИндексВершиныСтека = Стек.ВГраница();
Значение = Стек[ИндексВершиныСтека];
Стек.Удалить(ИндексВершиныСтека);

Возврат Значение;

КонецФункции

&НаКлиенте
Процедура _ВыполнитьОбработчикЗадания(КонтекстЗадания, ПараметрыОбработчикаЗадания) Экспорт
Expand All @@ -76,6 +129,13 @@

КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)

РазвернутьЭтапы();

КонецПроцедуры

#Если Клиент Тогда

ДанныеОчередногоОбработчикаЗадания = Новый Структура;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@
Задание = Задания[ИндексЗадания];
ПараметрыЗадания = Задание.ДополнительныеПараметры;

Если СтекТочекВходаПослеИсключения.Количество() > 0 Тогда // взять с вершины стека
ПараметрыЗадания.ОбработчикЗаданияОператорИсключение = СтекТочекВходаПослеИсключения[СтекТочекВходаПослеИсключения.ВГраница()];
Если СтекТочекВходаПослеИсключения.Количество() > 0 Тогда
ПараметрыЗадания.ОбработчикЗаданияОператорИсключение = ВзятьПоследнееЗначение(СтекТочекВходаПослеИсключения);
КонецЕсли;

Если СледующийОбработчикЗадания = Неопределено Тогда
Expand Down Expand Up @@ -84,7 +84,7 @@
СтекОбработчиковЕслиЛожь.Добавить(ОбработчикЗадания);

// Заданию перед оператором "Иначе" нужно установить следующий обработчик = "КонецЕсли"
СледующийОбработчикЗадания = СтекОбработчиковКонецЕсли[СтекОбработчиковКонецЕсли.ВГраница()];
СледующийОбработчикЗадания = ВзятьПоследнееЗначение(СтекОбработчиковКонецЕсли);;

ИначеЕсли ИмяПроцедурыЗадания = "_ВыполнитьОператорИначеЕсли" Тогда

Expand All @@ -101,7 +101,7 @@
СтекОбработчиковЕслиЛожь.Добавить(ОбработчикЗадания);

// Заданию перед оператором "ИначеЕсли" нужно установить следующий обработчик = "КонецЕсли"
СледующийОбработчикЗадания = СтекОбработчиковКонецЕсли[СтекОбработчиковКонецЕсли.ВГраница()];
СледующийОбработчикЗадания = ВзятьПоследнееЗначение(СтекОбработчиковКонецЕсли);

ИначеЕсли ИмяПроцедурыЗадания = "_ВыполнитьОператорЕсли" Тогда

Expand Down Expand Up @@ -601,6 +601,12 @@

КонецФункции

Функция ВзятьПоследнееЗначение(Стек)

Возврат Стек[Стек.ВГраница()];

КонецФункции

Функция ИзвлечьЗначение(Значение) Экспорт

Если ТипЗнч(Значение) = Тип("ФиксированнаяСтруктура")
Expand Down
12 changes: 6 additions & 6 deletions src/ConfigDumpInfo.xml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<ConfigDumpInfo xmlns="http://v8.1c.ru/8.3/xcf/dumpinfo" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" format="Hierarchical" version="2.8">
<ConfigVersions>
<Metadata name="CommonForm.КонвейерЗаданий" id="f3d9d955-011d-4056-b19f-c1fc833f358b" configVersion="c01bbdb8afe65040818eb0752841c57300000000"/>
<Metadata name="CommonForm.КонвейерЗаданий.Form" id="f3d9d955-011d-4056-b19f-c1fc833f358b.0" configVersion="31e907eccbc4cd44848f69159678fb8c00000000"/>
<Metadata name="CommonForm.КонвейерЗаданий" id="f3d9d955-011d-4056-b19f-c1fc833f358b" configVersion="05eca52cbbe49f4b99fa8a1df1ad03d900000000"/>
<Metadata name="CommonForm.КонвейерЗаданий.Form" id="f3d9d955-011d-4056-b19f-c1fc833f358b.0" configVersion="b98a005b33116b49baa475f1a5d619b800000000"/>
<Metadata name="CommonModule.КонвейерЗаданийКлиент" id="28f2dd03-2f14-4187-a768-0b2afb5fa23c" configVersion="a83ecac8e1ee814ca47d28d90f141fb900000000"/>
<Metadata name="CommonModule.КонвейерЗаданийКлиент.Module" id="28f2dd03-2f14-4187-a768-0b2afb5fa23c.0" configVersion="98d375f14272764ca42b627e8f347c1900000000"/>
<Metadata name="CommonModule.КонвейерЗаданийСлужебныйКлиент" id="eb2339d6-54b8-48b1-b6a7-4573054c8e9f" configVersion="56ef167e498dd947961a394c1d8d5ca300000000"/>
<Metadata name="CommonModule.КонвейерЗаданийСлужебныйКлиент.Module" id="eb2339d6-54b8-48b1-b6a7-4573054c8e9f.0" configVersion="4f523f91da911246804b647661b6868000000000"/>
<Metadata name="CommonModule.КонвейерЗаданийСлужебныйКлиент" id="eb2339d6-54b8-48b1-b6a7-4573054c8e9f" configVersion="0e686abb6e1dc346b7969615d025b52400000000"/>
<Metadata name="CommonModule.КонвейерЗаданийСлужебныйКлиент.Module" id="eb2339d6-54b8-48b1-b6a7-4573054c8e9f.0" configVersion="a46224b7ebbdf349b2dc9cdd32a34b2d00000000"/>
<Metadata name="Configuration.Коза" id="56034ef7-a376-4eb4-b6c6-63da1cf4bf08" configVersion="ed0ca9eaeafb8040979ab6c579ed8be900000000"/>
<Metadata name="Configuration.Коза.ClientApplicationInterface" id="02b26372-c74f-4d2b-803a-25cae1b5f1d6.b" configVersion="a56f5d4fd4e58044a04c5d58191d7a6300000000"/>
<Metadata name="DataProcessor.Тест" id="748e6340-51d7-4f7d-83cf-f72a9e2823d3" configVersion="8ee3a1db6b56064da168ccb80ea6998b00000000"/>
Expand All @@ -17,8 +17,8 @@
<Metadata name="DataProcessor.Тест.ManagerModule" id="748e6340-51d7-4f7d-83cf-f72a9e2823d3.2" configVersion="ca8b107f9f2ab64985b4bb4d49f8a5d000000000"/>
<Metadata name="DataProcessor.Тест.ObjectModule" id="748e6340-51d7-4f7d-83cf-f72a9e2823d3.0" configVersion="cc1527646ce43d41a618a771507cf06d00000000"/>
<Metadata name="DataProcessor.Тест2" id="55be2ae7-a1b5-4228-9359-f6d59bcad6a2" configVersion="4a8183c20ab3ba4aaced832d324c84f600000000"/>
<Metadata name="DataProcessor.Тест2.Form.Форма" id="3895f34c-ffe0-4b51-b83e-8a9dafa6bb86" configVersion="2d310ca8ea47464fa7b63d3a8149c4cc00000000"/>
<Metadata name="DataProcessor.Тест2.Form.Форма.Form" id="3895f34c-ffe0-4b51-b83e-8a9dafa6bb86.0" configVersion="c5f00234eeb4eb44a67ecb89850ab17800000000"/>
<Metadata name="DataProcessor.Тест2.Form.Форма" id="3895f34c-ffe0-4b51-b83e-8a9dafa6bb86" configVersion="12fd248d750bd947975057ec6269207300000000"/>
<Metadata name="DataProcessor.Тест2.Form.Форма.Form" id="3895f34c-ffe0-4b51-b83e-8a9dafa6bb86.0" configVersion="42517415fffa7b4aa9e35631a466ff8e00000000"/>
<Metadata name="Language.English" id="5ba4282e-8f1b-4b4b-8314-e7af79bd4761" configVersion="517ad4de38dcc04e996b766f5260ade300000000"/>
<Metadata name="Language.Русский" id="c7e95bef-98a0-4aea-8265-378b5738362c" configVersion="ee7ec4f4d69d3b4e8bfe72fdcf17bcf100000000"/>
</ConfigVersions>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,19 +30,19 @@

Конвейер.Оператор_Если(Линия, "ПроверкаУсловия", ЭтотОбъект, Новый Структура("ОбщиеПараметры, Значение", ОбщиеПараметры, КодВозвратаДиалога.Да));

Конвейер.ПроизвольноеЗадание(Линия, "ЗаданиеПриветствие", ЭтотОбъект, "Ответ: Да");
Конвейер.ПроизвольноеЗадание(Линия, "ЗаданиеОтвет", ЭтотОбъект, "Ответ: Да");

Конвейер.Оператор_ИначеЕсли(Линия, "ПроверкаУсловия", ЭтотОбъект, Новый Структура("ОбщиеПараметры, Значение", ОбщиеПараметры, КодВозвратаДиалога.Нет));

Конвейер.ПроизвольноеЗадание(Линия, "ЗаданиеПриветствие", ЭтотОбъект, "Ответ: Нет");
Конвейер.ПроизвольноеЗадание(Линия, "ЗаданиеОтвет", ЭтотОбъект, "Ответ: Нет");

Конвейер.Оператор_ИначеЕсли(Линия, "ПроверкаУсловия", ЭтотОбъект, Новый Структура("ОбщиеПараметры, Значение", ОбщиеПараметры, КодВозвратаДиалога.Отмена));

Конвейер.ПроизвольноеЗадание(Линия, "ЗаданиеПриветствие", ЭтотОбъект, "Ответ: Отмена");
Конвейер.ПроизвольноеЗадание(Линия, "ЗаданиеОтвет", ЭтотОбъект, "Ответ: Отмена");

Конвейер.Оператор_Иначе(Линия);

Конвейер.ПроизвольноеЗадание(Линия, "ЗаданиеПриветствие", ЭтотОбъект, "Что-то пошло не так");
Конвейер.ПроизвольноеЗадание(Линия, "ЗаданиеОтвет", ЭтотОбъект, "Что-то пошло не так");

Конвейер.Оператор_КонецЕсли(Линия);

Expand Down Expand Up @@ -71,7 +71,7 @@
КонецПроцедуры

&НаКлиенте
Процедура ЗаданиеПриветствие(Результат, Текст) Экспорт
Процедура ЗаданиеОтвет(Результат, Текст) Экспорт

Сообщить(Текст);

Expand Down

0 comments on commit c1ad499

Please sign in to comment.