Компонент «Форматно-логический контроль»

Компонент «Форматно-логический контроль» обеспечивает проверку корректности вводимых данных при заполнении форм и реестров.

Настройка правил форматно-логического контроля

При создании формы, реестра предоставляется возможность настройки дополнительных ограничений на ввод данных.

Нажмите иконку «Ограничения» на странице просмотра формы (реестра) непосредственно над таблицей формы (реестра).

_images/a39.png

При нажатии на иконку «Ограничения» появляется всплывающее окно настройки ограничений (в окне настройки есть подсказки, примеры правил).

Условные обозначения

При записи правил ячейка формы (реестра) обозначается как в MS Excel (латинская буква указывает на столбец, число указывает на номер строки). Например, ячейка в 3-й строке 4-го столбца обозначается D3.

Если правило задается для всех ячеек столбца (или строки), используйте символ «*». Например, весь 2-й столбец можно задать как «B*», всю 2-ю строку как «*2» .

Каждое правило записывается с новой строки.

Строка (или часть строки), начинающаяся с символа «#», не учитывается и рассматривается как комментарий.

Результатом сравнения с пустой ячейкой всегда является истинное значение.

Условные обозначения операций, используемых при записи правил:

  • арифметически знаки: сумма «+», разность «-«, произведение «*», деление «/»,
  • открывающая «(» и закрывающая «)» скобки,
  • знаки строгого неравенства: меньше «<», больше «>»,
  • знаки не строгого неравенства: меньше или равно «<=», больше или равно «>=»,
  • знаки равенства «==» и неравенства «!=»,
  • логическое отрицание «not», логическое И «and», логическое ИЛИ «or»,
  • абсолютное значение (модуль числа) «abs()»,
  • длина строки (значения в ячейке) «len()»,
  • наличие значения в ячейке «есть()»,
  • закрытие ячейки для ввода «$»,
  • сообщение об ошибке «@»,
  • комментарий «#».

Если введенное в ячейку значение не удовлетворяет заданным для этой ячейки правилам, оно не сохраняется, на экране соответствующая ячейка в форме (реестре) подсвечивается красным цветом, а при наведении на нее появляется всплывающая подсказка с указанием нарушенного условия.

При задании правила можно задать сообщение об ошибке, которое выводится на экран при нарушении данного правила. Для этого после записи правила введите символ «@» и далее - текст сообщения.

В отличие от раскрасок, в правилах форматно-логического контроля не предусмотрены ограничения, действующие в зависимости от заданных условий. Исключение составляют только правила закрытия ячеек на ввод (см. раздел Запрет на заполнение в зависимости от значений других ячеек).

Контроль обязательности заполнения

Для контроля ввода данных в ячейки, обязательные для заполнения, применяется операция «есть()»

есть(А2)    # ячейка А2 обязательна для заполнения

Запрет на ввод данных в ячейку

Для закрытия ячейки на ввод используется символ «$»:

$ А2    # ячейка А2 закрыта для ввода данных

Можно закрыть сразу всю строку или весь столбец:

$ *2    # строка 2 закрыта для ввода данных
$ D*    # столбец D закрыт для ввода данных

Возможен вариант закрытия перечня ячеек, строк, столбцов:

$ А2 *7 B12 A3 D*    # ячейки А2, B12, A3, а также строка *7 и столбец D* закрыты для ввода данных

Существует и другой способ закрытия ячейки для ввода - с помощью условия неравенства ячейки самой себе:

A2!=A2      # ячейка А2 закрыта для заполнения (условие неравенства самому себе)
A*!=A*      # столбец А* закрыт для заполнения (условие неравенства самому себе)

Запрет на ввод данных в ячейку в зависимости от значений в других ячейках

Чтобы закрыть ячейки на ввод в случае невыполнения определенного условия, задайте правило в формате «(условие) $ (номера ячеек, строк, столбцов, которые должны быть закрыты в случае невыполнения условия)». Например:

G1!=13 $ B1   # если значение в ячейке G1 равно 13, ячейка B1 закрыта для ввода
G*!="Утверждено" $ A* B*  # если в какой-либо строке в столбце G содержится текст "Утверждено", то в столбцах A, B ячейки данной строки закрыты для ввода

Сравнение с константой

Для того чтобы введенное значение было равно (меньше, меньше или равно, больше, больше или равно, не равно) указанной константе, запишите нужное равенство (неравенство) с использованием условных обозначений.

Примеры:

C1>100      # значение в ячейке С1 должно быть больше 100
*2==55      # значения в ячейках второй строки должны быть равны 55
C3!=2       # значение в ячейке С3 должно быть не равно 2
B*<=1       # значения в ячейках столбца B должны быть меньше или равны 1

Если ячейка - пустая, равенство (неравенство) считается выполненным.

Правило может содержать объединение или пересечение условий, заданных равенствами/неравенствами.

Примеры:

С1>15 or C1<3                              # показатель в ячейке С1 не может принимать значения от 3 до 15
A2<=15 and A2!=3                           # показатель в ячейке A2 может принимать любые значения, меньшие или равные 15, за исключением значения 3
(B*>=20 or B*<=10) and (B*>=1 and B*<=30)  # в ячейках столбца B могут содержаться либо числа от 1 до 10, либо числа от 20 до 30

Сравнение со значением в другой ячейке

Для того чтобы введенное значение было равно (меньше, меньше или равно, больше, больше или равно, не равно) значению в указанной ячейке, запишите нужное равенство (неравенство) с использованием условных обозначений.

Примеры:

C1>A2       # значение в ячейке С1 должно быть больше значения в ячейке A2
*3!=A2      # значения в ячейках 3-ей строки не должны быть равны значению в ячейке A2
A*==B*      # в каждой строке значение в столбце A должно быть равно значению в столбце B
*1<=*5      # в каждом столбце значение в 1-й строке должно быть меньше или равно значению в 5-й строке

Если одна из сравниваемых ячеек - пустая, равенство (неравенство) считается выполненным.

Правило может содержать объединение или пересечение условий, заданных равенствами/неравенствами.

Примеры:

С*>15 or C*<3      # в ячейках столбца С могут содержаться либо числа меньшие 3, либо числа большие 15
A2<=B5 and A2!=3   # в ячейке A2 может содержаться любое значение, меньшее или равное значению в ячейке B5, за исключением числа 3
B*>=A* or B*<=C*   # в каждой строке значение в столбце B должно быть либо больше или равно значению в столбце A, либо меньше или равно значению в столбце C

Сравнение с выражением

Для того чтобы введенное значение было равно (меньше, меньше или равно, больше, больше или равно, не равно) выражению, содержащему константы и значения в указанных ячейках, связанные операциями сложения, вычитания, умножения, деления, запишите нужное равенство (неравенство) с использованием условных обозначений.

Примеры:

(A* + B*) / 4 == C*         # значения в столбце С равны сумме значений в столбцах А и В в той же строке, деленной на 4

Если одна из сравниваемых ячеек - пустая, равенство (неравенство) считается выполненным.

Контроль длины строки

Для того чтобы длина строки текста в ячейке была равна (меньше, меньше или равна, больше, больше или равна, не равна) указанному целому числу, используйте операцию «len()», например:

len(C3)>=3    # в ячейке С3 значение показателя должно состоять как минимум из 3 знаков

Вывод заданного текста в сообщении об ошибке

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

G* > 0 @  Все плановые показатели объема должны быть больше нуля
A3 > 4 @  Должно быть больше 4!

Значение, меньшее или равное 0, в ячейке столбца G не сохранится, в правом верхнем углу экрана будет выведено сообщение «Значение не удовлетворяет условию: Все плановые показатели объема должны быть больше нуля».

Значение, меньшее или равное 4, в ячейке A3 не сохранится, в правом верхнем углу экрана будет выведено сообщение «Значение не удовлетворяет условию: Должно быть больше 4!».

Когда все ограничения введены, нужно нажать кнопку «Сохранить».

_images/a40.png

Закрытые для заполнения ячейки в форме, реестре окрашиваются в серый цвет.

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

_images/a150.png