Skip to content

Commit

Permalink
Наброски отладчика (#16).
Browse files Browse the repository at this point in the history
  • Loading branch information
tsukanov-as committed Dec 14, 2019
1 parent 670d5b9 commit 7a8a121
Show file tree
Hide file tree
Showing 9 changed files with 415 additions and 86 deletions.
24 changes: 24 additions & 0 deletions src/CommonForms/КонвейерЗаданий.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.8">
<CommonForm uuid="f3d9d955-011d-4056-b19f-c1fc833f358b">
<Properties>
<Name>КонвейерЗаданий</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Конвейер заданий</v8:content>
</v8:item>
</Synonym>
<Comment/>
<FormType>Managed</FormType>
<IncludeHelpInContents>false</IncludeHelpInContents>
<UsePurposes>
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
<v8:Value xsi:type="app:ApplicationUsePurpose">MobilePlatformApplication</v8:Value>
</UsePurposes>
<UseStandardCommands>false</UseStandardCommands>
<ExtendedPresentation/>
<Explanation/>
</Properties>
</CommonForm>
</MetaDataObject>
159 changes: 159 additions & 0 deletions src/CommonForms/КонвейерЗаданий/Ext/Form.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
<?xml version="1.0" encoding="UTF-8"?>
<Form xmlns="http://v8.1c.ru/8.3/xcf/logform" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.8">
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1">
<ChildItems>
<Button name="ФормаКомандаШагнуть" id="17">
<Type>CommandBarButton</Type>
<CommandName>Form.Command.КомандаШагнуть</CommandName>
<ExtendedTooltip name="ФормаКомандаШагнутьРасширеннаяПодсказка" id="18"/>
</Button>
</ChildItems>
</AutoCommandBar>
<ChildItems>
<Table name="ЭтапыКонвейера" id="1">
<Representation>Tree</Representation>
<ReadOnly>true</ReadOnly>
<AutoInsertNewRow>true</AutoInsertNewRow>
<EnableStartDrag>true</EnableStartDrag>
<EnableDrag>true</EnableDrag>
<DataPath>ЭтапыКонвейера</DataPath>
<TreeSpecialSearch>false</TreeSpecialSearch>
<ContextMenu name="ЭтапыКонвейераКонтекстноеМеню" id="2"/>
<AutoCommandBar name="ЭтапыКонвейераКоманднаяПанель" id="3">
<Autofill>false</Autofill>
</AutoCommandBar>
<ExtendedTooltip name="ЭтапыКонвейераРасширеннаяПодсказка" id="4"/>
<SearchStringAddition name="ЭтапыКонвейераСтрокаПоиска" id="5">
<AdditionSource>
<Item>ЭтапыКонвейера</Item>
<Type>SearchStringRepresentation</Type>
</AdditionSource>
<ContextMenu name="ЭтапыКонвейераСтрокаПоискаКонтекстноеМеню" id="6"/>
<ExtendedTooltip name="ЭтапыКонвейераСтрокаПоискаРасширеннаяПодсказка" id="7"/>
</SearchStringAddition>
<ViewStatusAddition name="ЭтапыКонвейераСостояниеПросмотра" id="8">
<AdditionSource>
<Item>ЭтапыКонвейера</Item>
<Type>ViewStatusRepresentation</Type>
</AdditionSource>
<ContextMenu name="ЭтапыКонвейераСостояниеПросмотраКонтекстноеМеню" id="9"/>
<ExtendedTooltip name="ЭтапыКонвейераСостояниеПросмотраРасширеннаяПодсказка" id="10"/>
</ViewStatusAddition>
<SearchControlAddition name="ЭтапыКонвейераУправлениеПоиском" id="11">
<AdditionSource>
<Item>ЭтапыКонвейера</Item>
<Type>SearchControl</Type>
</AdditionSource>
<ContextMenu name="ЭтапыКонвейераУправлениеПоискомКонтекстноеМеню" id="12"/>
<ExtendedTooltip name="ЭтапыКонвейераУправлениеПоискомРасширеннаяПодсказка" id="13"/>
</SearchControlAddition>
<ChildItems>
<InputField name="ЭтапыКонвейераОписание" id="14">
<DataPath>ЭтапыКонвейера.Описание</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ЭтапыКонвейераОписаниеКонтекстноеМеню" id="15"/>
<ExtendedTooltip name="ЭтапыКонвейераОписаниеРасширеннаяПодсказка" id="16"/>
</InputField>
</ChildItems>
</Table>
</ChildItems>
<Attributes>
<Attribute name="ЭтапыКонвейера" id="1">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Этапы конвейера</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>v8:ValueTree</v8:Type>
</Type>
<Columns>
<Column name="Описание" id="1">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Описание</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>0</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
</Column>
<Column name="ИдентификаторЗадания" id="2">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Идентификатор задания</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>0</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
</Column>
</Columns>
</Attribute>
<Attribute name="ИдентификаторТекущегоЗадания" id="2">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Идентификатор текущего задания</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>0</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
</Attribute>
<ConditionalAppearance>
<dcsset:item>
<dcsset:selection>
<dcsset:item>
<dcsset:field>ЭтапыКонвейераОписание</dcsset:field>
</dcsset:item>
</dcsset:selection>
<dcsset:filter>
<dcsset:item xsi:type="dcsset:FilterItemComparison">
<dcsset:left xsi:type="dcscor:Field">ЭтапыКонвейера.ИдентификаторЗадания</dcsset:left>
<dcsset:comparisonType>Equal</dcsset:comparisonType>
<dcsset:right xsi:type="dcscor:Field">ИдентификаторТекущегоЗадания</dcsset:right>
</dcsset:item>
</dcsset:filter>
<dcsset:appearance>
<dcscor:item xsi:type="dcsset:SettingsParameterValue">
<dcscor:parameter>ЦветФона</dcscor:parameter>
<dcscor:value xsi:type="v8ui:Color">#99CCFF</dcscor:value>
</dcscor:item>
</dcsset:appearance>
</dcsset:item>
</ConditionalAppearance>
</Attributes>
<Commands>
<Command name="КомандаШагнуть" id="1">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Шагнуть</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Команда шагнуть</v8:content>
</v8:item>
</ToolTip>
<Action>КомандаШагнуть</Action>
</Command>
</Commands>
</Form>
87 changes: 87 additions & 0 deletions src/CommonForms/КонвейерЗаданий/Ext/Form/Module.bsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@

// Copyright 2019 Tsukanov Alexander. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

&НаКлиенте
Перем ДанныеОчередногоОбработчикаЗадания;

&НаКлиенте
Перем ИдентификаторыЗаданий;

&НаКлиенте
Функция ОбработчикЗадания(Задание, СледующийОбработчикЗадания, ОбработчикОшибок) Экспорт

ОбработчикЗадания = КонвейерЗаданийСлужебныйКлиент.ОбработчикЗадания(Задание, СледующийОбработчикЗадания, ОбработчикОшибок);

_ВыполнитьОбработчикЗадания = Новый ОписаниеОповещения(
"_ВыполнитьОбработчикЗадания",
ЭтотОбъект,
ОбработчикЗадания.ДополнительныеПараметры
);

Возврат _ВыполнитьОбработчикЗадания;

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

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

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

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

Стек = Новый Массив;

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

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

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

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

ОчереднойОбработчикЗадания = ПараметрыОбработчикаЗадания.СледующийОбработчикЗадания;

// TODO: формирование дерева в соответствии со структурой заданий-операторов

КонецЦикла;

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

&НаКлиенте
Процедура _ВыполнитьОбработчикЗадания(КонтекстЗадания, ПараметрыОбработчикаЗадания) Экспорт

ДанныеОчередногоОбработчикаЗадания.КонтекстЗадания = КонтекстЗадания;
ДанныеОчередногоОбработчикаЗадания.ПараметрыОбработчикаЗадания = ПараметрыОбработчикаЗадания;

ЭтотОбъект.ИдентификаторТекущегоЗадания = ИдентификаторыЗаданий[ДанныеОчередногоОбработчикаЗадания.ПараметрыОбработчикаЗадания.Задание];

// TODO: вызов для автовыполнения до точки останова

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

&НаКлиенте
Процедура КомандаШагнуть(Команда)

ЭтотОбъект.ИдентификаторТекущегоЗадания = "";

КонвейерЗаданийСлужебныйКлиент._ВыполнитьОбработчикЗадания(
ДанныеОчередногоОбработчикаЗадания.КонтекстЗадания,
ДанныеОчередногоОбработчикаЗадания.ПараметрыОбработчикаЗадания
);

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

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

ДанныеОчередногоОбработчикаЗадания = Новый Структура;
ДанныеОчередногоОбработчикаЗадания.Вставить("КонтекстЗадания");
ДанныеОчередногоОбработчикаЗадания.Вставить("ПараметрыОбработчикаЗадания");

ИдентификаторыЗаданий = Новый Соответствие;

#КонецЕсли
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,34 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

Функция СоздатьЛинию() Экспорт
Функция СоздатьЛинию(Отладка = Ложь) Экспорт

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

Возврат Линия;

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

Процедура НачатьВыполнение(Линия, ОбработчикОшибок, СледующийОбработчикЗадания, ОбщиеПараметры, ИмяВызывающейПроцедуры) Экспорт

Линия.ОбработчикПервогоЗадания = КонвейерЗаданийСлужебныйКлиент.ПостроитьКонвейернуюЛинию(
Линия.Задания,
КонвейерЗаданийСлужебныйКлиент.ПостроитьКонвейернуюЛинию(
Линия,
ОбработчикОшибок,
СледующийОбработчикЗадания
);

Если Линия.Форма <> Неопределено
И Не Линия.Форма.Открыта() Тогда
Линия.Форма.Открыть();
КонецЕсли;

КонвейерЗаданийСлужебныйКлиент.Вызвать(
Линия.ОбработчикПервогоЗадания,
ОбщиеПараметры,
Expand Down
Loading

0 comments on commit 7a8a121

Please sign in to comment.