· равно
· больше
· меньше
· больше или равно
· меньше или равно
· не равно
2.4. Интерфейс «Перечисления»
Данный интерфейс предназначен для ввода и редактирования перечислений, которые используются в дальнейшем при настройке слоев. Каждое перечисление в данном интерфейсе представляет собой линейный справочник. В поле слоя это перечисление является списком значений (выпадающее меню), из которого пользователь выбирает лишь одно.
Интерфейс представлен на рисунках: 7, 8.

Рис.7. Интерфейс «Перечисления» - Заголовок

Рис.8. Интерфейс «Перечисления» - Детализация
Интерфейс имеет иерархическую структуру: Заголовок, Детализация.
Интерфейс содержит в себе следующие поля для заполнения:
Заголовок
№ | Название поля | Описание | Характеристика поля |
1 | Имя перечисления | Наименование перечисления. | Ввод с клавиатуры. Поле, обязательное для заполнения. |
2 | Лицевой счет | Номер лицевого счета. | Ввод с клавиатуры. Выбор из справочника лицевых счетов. |
Детализация
№ | Название поля | Описание | Характеристика поля |
1 | Значение перечисляемого типа | Порядковый номер перечисляемого типа. | Ввод с клавиатуры. Поле, обязательное для заполнения. |
2 | Название значения | Наименование значения. | Ввод с клавиатуры. Поле, обязательное для заполнения. |
3. Основные принципы работы с интерфейсами
1) Любой открытый интерфейс отобразит информацию только после нажатия кнопки
.
2) Чтобы сохранить изменения в базе данных недостаточно просто нажать кнопку «Фиксировать изменения»
. После этого нужно обязательно воспользоваться меню сохранения путем нажатия кнопки «Изменения». Эта кнопка может находиться в трех состояниях:
- изменений нет;
- изменения есть и их нужно сохранить или отменить;
- изменения есть, но они некорректны и система отказывается их сохранять. Также это состояние появляется, если изменения сделаны, а сеть отключена (при условии, что база находится на сервере, а не на данном компьютере).
Во втором случае нужно воспользоваться меню сохранения, которое выглядит так:

Необходимо нажать соответствующую кнопку («Сохранить изменения» или «Отменить изменения»). Причем эти две кнопки активны только во втором случае (
).
Подменю «Аварийное сохранение» активно всегда. Оно может пригодиться в третьем случае (
), когда изменения сделаны, но какие из них некорректны пока не понятно. Тем более если дело в компонентах системы. Также можно сохранять различные варианты настройки слойницы и выбрать затем наиболее удачный. Подменю «Аварийное сохранение» выглядит так:

В данном случае делаем так:
1. Нажимаем кнопку «Сохранить»
2. В появившемся окне называем имя файла, в котором будут сохранены изменения. Причем расширение файла не указываем. Нажимаем «Save».

3. Когда понадобиться восстановить эти сохраненные изменения, нажимаем «Восстановить».
4. В появившемся окне выбираем файл, в котором были сохранены изменения. Нажимаем «Open». Все, данные восстановлены.

3) Изменение вида отображения значений просматриваемого слоя осуществляется с помощью кнопки «Вид»
. Это нужно для детального просмотра одной конкретной записи.
Было:

Стало:

4) Для того чтобы скрыть лишние столбцы в просматриваемом слое, необходимо воспользоваться кнопкой «Столбцы»
. По умолчанию они отображаются все. При нажатии на данную кнопку появится меню выбора отображаемых полей. В нем нужно снять галочки напротив ненужных полей:

4. Порядок работы со слойницей
4.1. Создание структуры типов слоев
Работа со слойницей начинается с создания структуры типов слоев. Перед тем как создавать слои нужно сначала задать иерархическую структуру, в которой будут содержаться слои.
Для этой цели существует интерфейс «Типы слоев». Здесь и нужно задать структуру путем добавления нужных нам типов слоев.
Для задания конкретной структуры необходимо использовать поле «Код». Код предназначен для группировки слоев по их функциональному назначению. Поле является классификатором типа слоя и имеет формат ХХ. ХХ. ХХ. ХХ. Двоичные значения через точку обозначают уровень иерархии. Таким образом, мы можем создать минимум 1 уровень и максимум 4 уровня иерархии. Например, такой код (08.01.01.01) говорит о том, что структура разбита на 4 уровня.
Для наглядности представления того, что здесь написано выше следует посмотреть на рисунок:

- обозначает конечный уровень иерархии (детализации), причем начальный уровень может быть одновременно конечным в случае полного отсутствия иерархии;
- обозначает промежуточный или начальный уровень иерархии (детализации).
Называть создаваемые типы слоев можно как угодно. Обычно их называют по смыслу или в соответствии с названиями слоев, которые будут относиться к этим типам слоев.
Имя таблицы при создании типов слоев везде нужно указывать одно и тоже (LayerData).
4.2. Создание слоев
Следующим этапом работы со слойницей будет создание слоев. Теперь нужно создать слои в соответствии с созданной структурой типов слоев.
Для этой цели существует интерфейс «Редактор слоев». Здесь создаем новую запись в Заголовке и заполняем поля, описанные в разделе 2.2.
1) При заполнении нужно обязательно обратить внимание на поле «Тип слоя». Именно по этому полю будет осуществляться привязка к ранее созданной структуре типов слоев.
Если требуется создать слой с конкретным типом на определенном уровне, то в поле «Тип слоя» нужно указать именно этот уровень, на котором находится нужный тип слоя. Это можно осуществить двумя способами:
· заполнить поле «Тип слоя» прописывая вручную значения кода типа слоя (может применяться в том случае, когда еще не создана структура типов слоев);
· заполнить поле «Тип слоя» автоматически при выборе нужного типа слоя из формы «Выбор типа слоя» (форма открывается нажатием на выделенном поле кнопки
).
2) Таблицу в БД для создаваемых слоев нужно указывать ту, в которой хранятся типы слоев, т. е. LayerData. В случае если мы хотим создать вычислимый слой, то нужно указать таблицу CalcData.
3) Кроме того, нужно также обратить внимание на поле «Алиас». Это поле является идентификатором слоя, поэтому оно уникально и ни в коем случае не должно дублироваться во избежание ошибок в работе системы. Значения этого поля вводятся без пробелов. Называют его обычно именем слоя только в краткой форме и без ПРОБЕЛОВ и ЗАПЯТЫХ. Например, «Имя слоя» - Расчёт себестоимости по ресурсам à «Алиас» - Расч. Себ. Ресурсы.
4) Если создаваемый слой является вычислимым или в нем должна выводиться информация только для просмотра (конечный слой), то в этом случае следует сделать данный слой доступным только для чтения. Для этого нужно поставить галочку в поле «Только для чтения».
5) После того как мы создали все нужные слои, необходимо проверить правильность их соответствия с типами слоев. Это делается следующим образом. Открываем интерфейс «Данные линейно» à в параметрах запроса открываем Справочник слоев (нажатием кнопки
на поле «Слой») à выбираем один из ранее созданных типов слоев:

à нажимаем кнопку детализации
после чего должна появится следующая форма:

Здесь мы и проверяем правильность соответствия слоев с типом слоев. Если все соответствует тому, как было задумано, то приступаем к наполнению созданных слоев полями.
4.3. Наполнение слоев полями
После того как мы создали слои в соответствии со структурой типов слоев и затем проверили правильность соответствия слоев с типом слоев, приступаем к наполнению этих слоев полями. Каждый слой имеет следующие детализации (закладки): Поля слоя, Контрольные соотношения, Обязательный контроль.
На данном этапе нам нужна детализация «Поля слоя» (рис.3). Данная детализация предназначена для ввода описаний полей слоя данных и установки взаимосвязей между слоями посредством описания формул расчета для вычислимых полей.
Чтобы до нее добраться делаем так: открываем интерфейс «Редактор слоев» à подсвечиваем нужный слой в Заголовке и нажимаем кнопку детализации
à далее должна появиться детализация «Поля слоя». В этой закладке мы и будем заполнять полями слой.
На данном этапе нужно заполнить не все параметры полей, а лишь необходимые для того, чтобы наполнить данными создаваемые таблицы (слои) без связей между ними. Поэтому заполняем следующие поля:
· Имя поля
Это поле обязательно заполняем. Оно используется слойницей как ссылка, а также при вычислениях формул. Называем его или на латинском языке или на русском, неважно, главное чтобы ПРОБЕЛОВ и ЗАПЯТЫХ в названии не было. Например, так - «Табельный_номер» или так - «ТабельныйНомер».
· Название колонки
Это поле обязательно заполняем. Его название пишем полностью без сокращений и с пробелами. Именно это название пользователь будет видеть при работе с данной колонкой этого слоя (Табельный номер).
· Имя поля в БД
Это поле обязательно заполняем, т. е. выбираем готовое значение из выпадающего списка перечислений или называем произвольно для вычислимых полей (данные которых не хранятся в базе). Выпадающие значения являются названиями колонок основной таблицы базы данных (LayerData), которые зарезервированы для полей с определенным типом.
Описание возможных значений поля см. в Справочнике для работы со слойницей.
· Тип поля
Это поле обязательно заполняем, т. е. выбираем готовое значение из выпадающего списка перечислений (целое, дробное, строка, сумма и т. п.).
Описание возможных значений поля см. в Справочнике для работы со слойницей.
· Роль поля
Это поле обязательно заполняем, т. е. выбираем готовое значение из выпадающего списка перечислений (системное, ключ, параметр, вычислимый параметр, разыменовка). Роль задает назначение поля. В зависимости от выбранных значений поле будет выполнять разные функции.
* Примечание: ТОЛЬКО при роли «Ключ» текущее поле будет отображаться на панели «Параметры», по которому можно будет группировать записи выбранного слоя в интерфейсе «Данные линейно». При типе «Разыменовка» значение данного поля не будет храниться в текущем слое, оно будет браться из слоя-источника каждый раз при обращении к данному полю. При типе «Вычислимый параметр» значение данного поля также не будет храниться в текущем слое, оно будет вычисляться из полей текущего слоя и временно вставляться в данное поле.
Описание возможных значений поля см. в Справочнике для работы со слойницей.
· Размер поля
Заполнять его нужно только в том случае, если тип данных «Строка».
· Позиция
Это поле заполнять не обязательно. Если нужен конкретный порядок отображения полей в слое, который будет видеть пользователь, тогда поле необходимо заполнить. Значение поля представляет собой порядковый номер отображения полей слоя и имеет иерархическую структуру: ХХ. ХХ. ХХ. Х нужна для некоторых полей типа ФИО (нужно раскрыть это поле). Из-за структуры позиций реальное ограничение на количество полей - чуть более 200.
Для примера:
Если так заполнить поле «Позиция»:

То получим такую отображаемую структуру полей слоя (в интерфейсе «Данные линейно»):


· Ширина
Это поле заполнять не обязательно, но для удобства обычно его заполняют сразу. По умолчанию стоит малая длина и ее обычно не хватает, если название колонки длинное. Длина измеряется в пикселях.
Пример заполнения вышеперечисленных полей:

Когда все поля заполнили – обязательно сохраняем изменения и переходим к следующему этапу.
4.4. Наполнение слоев данными
Задача данного этапа состоит в наполнении тех полей слоя, которые мы создали ранее. Конечно, можно это сделать и после настройки всех параметров полей слоя, но гораздо удобнее настраивать параметры, когда видишь, как они влияют на отображаемые данные слоя. Причем если данных в слое должно быть много, то необязательно наполнять слои всеми данными сразу. Сейчас достаточно наполнить несколько строк для последующей проверки правильности настройки слоя на будущем этапе. Остальными данными слои можно наполнить в конце работы со слойницей.
Для того чтобы наполнить данными созданные слои, нужно воспользоваться интерфейсом «Данные линейно». Здесь заносим данные в соответствующие поля. После чего обязательно сохраняем изменения и переходим к следующему этапу.
4.5. Настройка параметров полей слоев
Этот этап является наиболее сложным и важным, т. к. только при грамотной настройке полей слоев слойница будет работать без ошибок.
На данный момент у нас уже есть заполненные поля в соответствии с разделом 4.3. Теперь нужно заполнить поля, которые непосредственно будут задавать взаимосвязь созданных слоев, а также задавать формулы вычислений. Назовем их полями первостепенной значимости.
4.5.1. Заполнение полей первостепенной значимости
Перечень данных полей:
· Натуральный ключ
· Тип агрегирования
· Имя классификатора
· Перечисление
· Обработчик разыменовок
· Главное поле
· Тип разыменовки
· Формула
· Агрегирующая функция
Натуральный ключ
Галочка ставится напротив того поля, которое является первичным ключом (т. е. напротив того поля, значения которого являются уникальными и никогда не повторяются в разных строках).
Тип агрегирования
Имя классификатора
Доступно только для полей с типом «Классификатор». Здесь прописывается имя классификатора, т. е. его Алиас. Это нужно для того, чтобы связать нужный классификатор с данным слоем.
Например, нужно подключить классификатор так, чтобы значения данного поля брались из него. Для этого обязательно ставим Тип поля «Классификатор», Имя классификатора «ХХХХХ», Обработчик разыменовок «Классификатор». Роль поля в данном случае может быть любая в отличие от типа.
![]()
Перечисление
Предназначено для создания выпадающего меню в поле для заполнения данных. Например, нужно создать перечисление у поля «Должность». Для этого нужно обязательно выбрать Тип поля «Перечисление», Роль поля «Разыменовка». В поле Перечисление необходимо выбрать заготовленное ранее перечисление «Должности» в интерфейсе «Перечисления».
![]()
После такой настройки в слое, который будет видеть пользователь, значения поля должность будут выбираться так:

Обработчик разыменовок
В этом поле указывается тип источника разыменовок:
· Организация
· Лицевой счет
· Классификатор
· Продукция
· Данные слоя
· Код дохода
«Данные слоя» используется для разыменовок из другого слоя (в том числе из слоев созданных пользователем). Все остальное – разыменовки из соответствующих стандартных справочников АС «Бюджет».
На рисунке, приведенном ниже, есть два часто встречающихся варианта применения Обработчика разыменовок. В первом случае - «Данные слоя» - обязательно нужно указать конкретный источник данных для разыменовки в поле «Формула». Во втором случае – «Классификатор» - в качестве конкретного источника данных для разыменовки, обязательно нужно указывается Алиас классификатора в поле «Имя классификатора».
![]()
Главное поле
Используется только с ролью поля «Разыменовка», т. к. предназначено для настройки разыменовок. По главному полю будут подтягиваться значения остальных полей из другого слоя, которые задействованы в разыменовке, т. е. у них Роль поля «Разыменовка».
Например, если нужно подтянуть по полю «Код» следующие поля: «Должность», «Ставка (руб. в час)», то делаем так:

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

В этом случае в слое «Информация о сотрудниках» будет следующая настройка:

Стоит заметить, что Разыменовка НЕ СТАВИТСЯ у ключевого поля. Значение поля «Обработчик разыменовок» ставить нужно только у главного поля. У других подтягиваемых полей можно тоже поставить, но нет никакого смысла. С полем «Формула» - аналогично.
Формула
Это поле может выполнять несколько функций:
Ø «ВзятьИЗ» – используется для вставки, объединения значений полей из слоя-источника в текущий слой;
Ø Создание формул для расчета значений полей;
Ø Указание слоя-источника
I. ВзятьИЗ
Для того чтобы вставить значения полей из одного слоя в соответствующие поля другого нужно воспользоваться специальным интерфейсом «Получить данные из слоя», который вызывается нажатием кнопки «ВзятьИЗ»
. Интерфейс выглядит следующим образом:

Описание полей интерфейса:
o Слой-источник – слой, из которого нужно закачать данные. При нажатии на данное поле появляется интерфейс «Выбор слоя», в котором необходимо выбрать слой-источник.
Левая область «Куда закачивать данные»:
o Номер – порядковый номер строки (проставляется автоматически при добавлении строки);
o Поля текущего слоя – имя поля текущего слоя, в который будут закачиваться данные (значение выбирается из выпадающего списка полей текущего слоя);
o Поля слоя источника – имя поля слоя-источника, из которого будут закачиваться данные (значение выбирается из выпадающего списка полей слоя-источника);
o Разрешена вставка – разрешение/отмена вставки закачиваемых значений (Флаг).
Правая область «Как сопоставить слои»:
o Номер – порядковый номер строки (проставляется автоматически при добавлении строки);
o Поля текущего слоя – имя поля текущего слоя, в который будут закачиваться данные (значение выбирается из выпадающего списка полей текущего слоя);
o Поля слоя источника – имя поля слоя-источника, из которого будут закачиваться данные (значение выбирается из выпадающего списка полей слоя-источника);
Левая область «Куда закачивать данные» используется для того, чтобы сопоставить поля текущего слоя и слоя-источника для закачки данных.
Правая область «Как сопоставить слои» используется, чтобы задать условие сопоставления полей. Здесь нужно выделить ключи (основные поля), по которым будет происходить сопоставление зависимых полей.
ВзятьИЗ можно использовать для любого роля поля КРОМЕ: «разыменовка» и «системное».
Далее рассмотрим типовые случаи использования ВзятьИЗ
1) В общем случае ВзятьИЗ со вставкой делается тогда, когда нужно полностью вставить данные источника в вычислимый слой. Данная операция влияет на количество записей слоя, в который будет произведена вставка.
Например, нужно вычислить количество отработанных часов за месяц из слоя с первичными данными по каждому сотруднику и по каждому месяцу года. Первичный слой наполнен следующими данными:

Настройка ВзятьИЗ будет выглядеть так:

В данном случае координатами (основными полями, т. е. ключевыми) являются: Табельный_номер, Номер_мес, Номер_год. При их сопоставлении сливаются (объединяются, суммируются) значения зависимого поля Кол_отр_часов_день в поле Кол_отр_часов_мес текущего слоя.
Слои сопоставляются ТОЛЬКО по их ключевым полям. Причем ключевое поле в данном случае – не просто поле с ролью «Ключ», от него действительно должны зависеть сопоставляемые поля. То есть эти ключевые поля являются координатами, к которым привязаны зависимые поля.
В результате получаем такую информацию в текущем слое:

2) ВзятьИЗ без вставки используется при необходимости дополнить данные текущего слоя атрибутами из слоя-источника. Например, нужно подтянуть значения полей «Фамилия», «Имя», «Отчество», «Домашний_адрес», «Номер_лиц_счета», «Код» из слоя-источника «Информация о сотрудниках» в текущий слой.
Настройка ВзятьИЗ будет такой:

Слои сопоставляются по одной координате (ключу) «Табельный_номер». Это поле является единственной координатой в слое-источнике и неединственной в текущем слое.
В результате получаем следующую информацию в текущем слое:

После того, как настройка ВзятьИЗ сделана, ее нужно обязательно сохранить нажимаем кнопки «Сохранить». После этого в поле «Формула» пропишется выражение (формула), в котором закодированы сохраненные настройки. Например, запись может иметь вид - ВзятьИз("Спр. Тарифов","Должность_1","Код=Код_1",нет). Такие выражения можно составлять без помощи специального интерфейса ВзятьИЗ (в интерфейсе «Редактор формул»).
Некоторые особенности ВзятьИЗ:
Ø Порядок вычисления слойница определяет автоматически по заданным формулам: если формула ссылается на какое-то поле, значение которого определяется при вычислении других формул, то формулы для того поля будут вычислены раньше. Циклы недопустимы. Для различных видов формул:
a. Простые арифметические выражения: формула определяет значение только того поля, в котором она написана;
b. ВзятьИЗ без вставки: формула определяет значение только того поля, в котором она написана;
c. ВзятьИЗ со вставкой: формула определяет значение поля, в котором она написана, а также значения всех ключей, которые в ней указаны.
Ø Если ВзятьИЗ выполняется со вставкой, то в ключевых атрибутах можно не писать формулу: ключи будут заполнены автоматически при добавлении новой записи из источника.
Ø При подтяжке дополнительных атрибутов из справочника не нужно делать вставку, т. к. набор записей, который необходимо получить в результате, определяется только первичными данными.
Ø Если данные тянем данные в LayerData, то поля, которые являются ключами (по ним сопоставляются подтягиваемые поля) нельзя делать вычислимыми! Иначе подтягиваемые данные будут каждый раз дублироваться, копиться (строчки будут множиться).
ВзятьИЗ вручную
Помимо специального интерфейса «Получить данные из слоя», который позволяет формировать ВзятьИЗ автоматически, существует ручной способ написания ВзятьИЗ.
Для этого используется интерфейс «Редактор формул», вызываемый кнопкой
на текущем поле «Формула». Текст формулы ВзятьИЗ нужно писать в этом интерфейсе. Интерфейс выглядит следующим образом:

Структура формулы ВзятьИЗ определяется ее пятью параметрами, перечисляемыми через запятую в скобках: ВзятьИз("", "", "", 1) или ВзятьИзСФильтром("", "", "", 1, ""). Все параметры должны быть написаны исключительно в следующем порядке:
1. слой-источник;
2. поле слоя-источника;
3. одно или несколько ключевых полей;
4. признак вставки;
5. фильтр.
Все параметры должны быть заполнены.
Далее рассмотрим подробнее каждый параметр.
1) В первом параметре указывается слой-источник, из которого будут вставляться значения нужного поля. Здесь необходимо написать алиас слоя-источника. Причем слой-источник должен быть всегда один. Не может быть несколько слоев-источников, перечисленных через запятую.
2) Во втором параметре указывается имя поля слоя-источника, значения которого нужно вставить в текущее поле текущего слоя (слоя-получателя).
Поле слоя-источника всегда указывается одно.
3) В третьем параметре указывается одно или несколько ключевых полей, по которым подтягиваются значения поля слоя-источника в поле слоя-получателя.
В данном параметре применяется маппинг, т. е. сопоставляется имя ключевого поля слоя-источника с именем текущего ключевого поля слоя-получателя. Все имена ключевых полей перечисляются через запятую.
Формат записи следующий: "Ключ_поле1_слоя-получателя=Ключ_поле1_слоя - источника, Ключ_поле2_слоя-источника=Ключ_поле2_слоя-получателя".
Если имена ключевых полей слоя-источника и слоя-получателя совпадают, то маппинг можно не применять, т. е. написать просто одно название. Например, "KFSR=KFSR, KVR=KVR" à "KFSR, KVR".
Если ключевые поля не указать, то все значения подтягиваемого поля суммируются.
Если нужно подтянуть значения поля (сумма) из слоя1 в слой2 и при этом подтянуть не все значения в столбец один в один, а только в конкретную строку (с кодом 3), то в слое2 пишем так:
ВзятьИз("Слой1","Сумма","Код=3", нет)

4) В четвертом параметре указывается признак вставки. Вставка делается для того, чтобы вставить значения ключевых полей слоя-источника в ключевые поля слоя-получателя.
При отсутствии вставки предполагается, что значения ключевого поля слоя-источника уже есть в ключевом поле слоя-получателя.
Формат записи: да – вставка есть, нет – вставки нет.
Другой формат записи: 1 – вставка есть, 0 – вставки нет.
5) В пятом параметре указывается фильтр для вставляемых значений из поля-источника в поле-получатель.
По умолчанию во ВзятьИЗ фильтр не предусмотрен: ВзятьИз("", "", "", 1). Чтобы добавить фильтр (пятый параметр) нужно изменить формат записи ВзятьИЗ: ВзятьИзСФильтром("", "", "", 1, "").
Фильтр нужен для того, чтобы отсеять лишние значения, которые вставлять не нужно. Фильтр всегда накладывает ограничения на слой-источник до того, как из него будут взяты данные. Фильтр накладывает ограничение на вставляемые значения поля слоя-источника в форме конкретного значения этого поля или нескольких значений. Если нужно наложить ограничения через несколько значений вставляемого поля, то формат записи следующий:
"Поле слоя источника = значение1, Поле слоя источника = значение2".
Также могут быть заданы различные условия ограничения через следующие операторы:
Оператор | Описание |
= | Равенство |
+ | Сложение |
- | Вычитание |
* | Умножение |
/ | Деление |
<, >, <>, <=, >= | Сравнение |
&, AND | Логическое И |
|, OR | Логическое ИЛИ |
NOT | Логическое НЕТ (отрицание) |
^, mod | Остаток от целочисленного деления |
:, div | Целочисленное деление без остатка от деления |
A in [...] | Проверка А наличия в массиве |
A%B | Взятие A% от числа B |
A is [not] null | Проверка А на null (на пустоту – отсутствия значений) |
A? B : C | Выбор по условию А одного из аргументов (true - B, false - C), (Условие)?(Выражение если да):(Выражение если нет) |
A like B | Проверка соответствия A регулярному выражению B |
A between B and C | Проверка на вхождение A в диапазон между В и С |
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 |


