Skip to content

Условие отбора

Условие — это то, чем шаги «Найти объекты» и «Взять N-й» отбирают объекты. Оно живёт внутри самого шага, отдельными строками, и правится там же.

Первая строка условия подписана «Где» — так же, как строки шага

Первая строка условия подписана «Где» — так же, как строки шага. Справа от каждой строки стоит цифра: сколько объектов её пережило.

Из чего состоит строка условия

Section titled “Из чего состоит строка условия”
ГрафаЧто в ней
СвойствоЧто спрашиваем у объекта. Подсказка у поля: «Свойство объекта или колонка проекта». Список раскрывается деревом — свойства модели и колонки проекта. Вписать своё имя можно всегда.
ЗаменаНеобязательная. Заменить что-то в прочитанном значении перед сравнением. Пока замены нет, на её месте стоит узкая кнопка «⇄» с подсказкой «Заменить в значении поля перед сравнением — например “-” на “_”». Нажатие добавляет две клетки: «Что заменить в значении поля» и «На что заменить; пусто — убрать».
ОперацияЧто со свойством делаем. Список зависит от того, чем свойство является — см. ниже.
ЗначениеС чем сравниваем. Подсказка: «С чем сравнить пришедшее. У “одно из” — значения через запятую». Значение бывает вписано, а бывает приходит аргументом вызова: источник выбирается в самой клетке, пункт «вписать значение» либо имя аргумента.
ОтсевЦифра справа: сколько объектов осталось после этой строки. Появляется после пробного запуска.

Замена перед сравнением

Section titled “Замена перед сравнением”

Тот же язык условий работает и в развилке: ромб с вопросом, под ним строки

Тот же язык условий работает и в развилке: ромб с вопросом, под ним строки «Где» и «или» — то же дерево условий, что у «Найти объекты».

Группы: «все» и «хотя бы одно»

Section titled “Группы: «все» и «хотя бы одно»”

Строки условия складываются в группы. У группы есть режим, который выбирается в её первой графе:

РежимЧто означаетКак читается отсев
всеОбъект подходит, когда сошлись все строки группы.Счёт накопительный: каждая строка сужает то, что осталось от предыдущей.
хотя бы одноДостаточно одной сошедшейся строки.Строка показывает своё совпадение, а накопленным итогом становится объединение, приписанное самой группе.

Кнопка «+ условие» добавляет строку, «+ группа» — вложенную группу, «✕ убрать группу» убирает её вместе с условиями.

Какие операции у какого свойства

Section titled “Какие операции у какого свойства”

Список операций зависит от того, чем свойство является. Это одно правило на редактор и на движок: предлагать операцию, которую шаг потом не выполнит, нельзя.

Свойство читается строкой: текст

Section titled “Свойство читается строкой: текст”
ОперацияЧто делает
равноСовпадает целиком, регистр не важен.
не равноНе совпадает целиком.
содержитЗначение встречается внутри.
начинается сЗначение стоит в начале.
заканчивается наЗначение стоит в конце.
подходит под образецРегулярное выражение. С учётом регистра и в любом месте строки; без регистра — (?i) в начале, целиком — ^…$.
пусто / не пустоПоля нет либо оно пустое / поле есть и непустое. Сравнивать не с чем — графа значения пропадает.

Свойство — число, дата или время

Section titled “Свойство — число, дата или время”

Те же «равно / не равно» и «пусто / не пусто», плюс сравнения по величине: больше, меньше, не меньше, не больше. «Содержит» и «начинается с» у числа не предлагаются — кусок числа искать нечего.

Свойство — признак «да / нет»

Section titled “Свойство — признак «да / нет»”

Только равно и не равно, а значение выбирается из списка «да / нет» — это список, а не ввод. «Содержит» и «начинается с» у признака бессмысленны.

У словаря нет значения, у него есть ключи. Поэтому операции другие.

ОперацияЧто делает
есть ключКлюч с таким именем в словаре есть — независимо от того, заполнен ли он.
значение ключаПод ключом лежит это значение.
значение ключа заданоКлюч есть и значение под ним непустое.
значение ключа пустоКлюча нет либо значение под ним пустое.
есть такой, у которогоХодит по записям «ключ — значение»: так находится колонка по образцу имени, а не только по имени целиком.
пусто / не пустоПро сам словарь: есть он вообще или нет.

Две операции: «есть такой, у которого» и пусто / не пусто.

«Есть такой» задаёт вопрос к одному элементу списка, и два условия внутри говорят об одном и том же элементе: «есть датчик с Tag = X и Line = 2» — это один датчик, а не два разных. Ради этого переносился GetKauDeviceFrameArray: кадр ищется как «тот, у которого среди датчиков есть датчик с этим тегом».

Свойство — вложенный объект

Section titled “Свойство — вложенный объект”

Сравнивать его нечем — у объекта берут свойство внутри. Остаётся спросить, есть ли он вообще: пусто / не пусто.

У корневой группы условия есть кнопка «+ порядок». Порядок стоит между отбором и взятием — как ORDER BY между WHERE и выбором строки: он нужен ровно тому, кто берёт по счёту.

Ключом упорядочивания служит то же условие, что и в отборе, плюс сторона: подходящие идут первыми или последними. Сортировки по значению поля нет намеренно — в GAP оба ранжирования написаны так же: OrderByDescending(x => x.SheetName == "OBJ.AiProc"). Сортировать по значению там не понадобилось ни разу.

Порядок пуст — объекты идут в том порядке, в каком их отдал источник.

Что попадает в условие «в пришедшем»

Section titled “Что попадает в условие «в пришедшем»”

Шаг с источником в пришедшем спрашивает не объект проекта, а то, что пришло по связи. Поэтому и подсказки полей у него другие:

  • пришли объекты — поля их типа;
  • пришёл словарь — его ключи (словарь это та же строка данных);
  • пришли тексты или числа — полей у них нет, условием их не спросить. Из них берут по номеру, и шаг это скажет прямо: «Условие спрашивает поля, а пришли тексты — полей у них нет. Уберите условие и порядок: из текстов берут по номеру.»