Как настроить смартфоны и ПК. Информационный портал

Использование условий если в 1с. Логические операции (1с предприятие)

Применяются следующие логические операции:

НЕ логическое НЕ (отрицание); И логическое И;

ИЛИ логическое ИЛИ.

Операндами логических операций должны быть логические выражения. В табл. 2.5 приведены результаты логических операций над логическими выражениями ЛВ1 и ЛВ2, принимающими значения истина (И) или ложь (Л).

Таблица истинности

Таблица 2.5

ЛВ1 ЛВ2 ЛВ1 И ЛВ2 ЛВ1 ИЛИ ЛВ2 НЕ ЛВ1
И И И И Л
И Л Л И Л
Л И Л И И
Л Л Л Л И

Операция отрицания является унарной операцией, располагаемой слева от операнда. Все остальные рассмотренные операции являются бинарными.

2.6.5. ПРИОРИТЕТ ВЫПОЛНЕНИЯ ОПЕРАЦИЙ

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

Приоритет выполнения операций

Таблица 2. б

% *,/ +, НЕ И ИЛИ <, <=, >, >=, =, <>

Замечание. Каждая ячейка таблицы содержит операции с равным приоритетом.

Пример:

8 % 2 * 3 // Вернет 0
8 % (2 * 3) // Вернет 2

Поскольку логические операции старше операций отношения, то ошибочно следующее логическое выражение:

3>2и4< 5 // Так неверно

так как первоначально оценивается логическое подвыражение 2и 4

операнды которого не есть истина или ложь. А это неверно.

Зато верно логическое выражение

(3 > 2) и (4 < 5) // Это истина Пример. Вычислить результат логического выражения

(х / а = 1) или (б / (а + б) < 1) и не (б = а) или (х <> 6) при х = 6.0, а = 2.0 и б=3.0.

Вычислив результат операций подвыражений, заключенных в круглые скобки, по лучим:

ложь или истина и не ложь или ложь.

ложь или истина и истина или ложь. После выполнения истина и истина: ложь или истина или ложь. Окончательный результат: истина.

2.7. МАССИВЫ

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

Число элементов массива называется его размером. Размером массива может быть только целочисленная буквальная константа.

Оператор перем а;

объявляет одномерный массив (вектор) а из пяти элементов. Элементы массива имеют следующие имена: а, а, а, а и а. В этих именах величины 1-5 индексы элементов массива.

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

для ин = 1 по 5 цикл

Присваивания

изменят соответственно значения 2-го и 5-го элементов массива а.

В общем случае в качестве индексов массива могут использоваться числовые выражения, называемые индексными выражениями. Например:

а = 9.1; // Меняем значение 3-го элемента массива а

Если индексное выражение массива вычисляется с нецелым значением, то в каче стве индекса берется целая часть этого значения. Например:

а = 9.1; // Меняем значение 1 -го элемента массива а

Значение индекса не должно выходить за границы массива. Так, при работе с ранее объявленным массивом а из пяти элементов ошибочны операторы

Элементы одного и того же массива могут быть разного типа. Например:

а = ‘25.11.01’; // Элемент типа Дата Элементы массива могут быть агрегатного типа. Например:

сСотр= СоздатьОбъект(“Справочник.Сотрудники”);

табл = СоздатьОбъект(“Таблица”);

Массив не может в качестве элементов содержать другие массивы.

Массив может быть формальным параметром программного компонента (процедуры или функции). При этом размер массива не указывается, а квадратные скобки сохраняются. Для определения размера переданного процедуре (функции) массива используется встроенная функция Разм.

Пример:

процедура ИнициализацияМассива(а) перем ин, размА;

размА = Разм(а); // Встроенная функция Разм вернет размер массива а

для ин = 1 по размА цикл

а[ин] = 1; // Теперь все элементы массива равны единице конецЦикла;

конецПроцедуры // ИнициализацияМассива

процедура Выполнить() перем а;

// Вызов процедуры, устанавливающей начальные значения элементов массива

// Ее фактическим параметром является имя массива ИнициализацияМассива(а);

конецПроцедуры // Выполнить

Сейчас программа 1С существует в разных версиях и обличьях, люди работают в «семерке» т.е. в 1С 7.7 и в «восьмерке» которые бывают 8.0, 8.1, 8.2 и 8.3. На практике, на текущий момент 99.9% пользователей программы 1С работают в 7.7, 8.2, и 8.3 , чем же они отличаются?

Программа 1С 7.7 известная многим своим уже довольно устаревшим интерфейсом, все-же она имеет преимущество в размерах баз и в скорости запуска и работ, а значит имеет место быть на рынке программ автоматизации учета, хотя сейчас данную программу уже и не продают, но люди ей пользуются, и фирма 1С до сих пор поддерживает эту программу, т.е. для нее выходят обновления.
Но тема статьи все же не о 7.7 а об отличиях 8.2 и 8.3. (и для информации отличие между 7.7 и 8.* значительны на столько, что базы для семерки не запустятся на платформе 8.* и наоборот, т.е. 7.7 и 8.* это как-бы совсем разные программы, а вот 8.2 и 8.3 очень похожи, просто 8.3 новее)

Программа 1С состоит из платформы 1С и баз 1С, т.е. платформа 1С это программа которая запускает базы 1С.

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

Существуют разные конфигурации 1С для разного учета, т.е., например, для бухгалтерского учет может быть конфигурация под названием «Бухгалтерия предприятия» или другие, для торговли может использоваться конфигурация например «Управление торговлей» или «Розница» или другие, для учета кадров и расчета зарплаты, например «Зарплата и управление персоналом», также существуют конфигурации для комплексного учета, например для автоматизации завода.
Конфигураций существуют много, несколько сотен разных конфигураций для разного учета.

Все эти конфигурации могут создаваться для работы в 1С 7.7 или 8.2 или 8.3 в чем же отличия и зачем тут написано про конфигурации если 8.2 и 8.3 и даже 7.7 это платформы? Сейчас разберемся.

Каждая платформа имеет в себе разные возможности для создания конфигураций, и чем выше версия платформы, тем больше у этой платформы функционала и возможностей.
Если нам нужна база 1С с конфигурацией скажем «Бухгалтерия предприятия», с версией релиза например «3.0.60.44» и мы попытаемся найти о ней информацию, то мы выясним что для работы этой конфигурации и этого релиза на потребуется платформа не ниже чем 8.3, более того не ниже чем 8.3.10.2466, это значит платформа 8.2 нам уже не подойдет!

Конфигураций для платформы 1С 8.* и существует много но их можно разделить на 2 подвида это конфигурации (1) c «обычными формами», и (2) c «управляемыми формами»
«Обычные» — значит такие же как и были раньше, например похожие на 1С 7.7, а «Управляемые» это более современные формы, более красивые, которыми легче управлять при их создании.

Как понять в моей базе 1С формы обычные или управляемые?

Если в верху программы вы видите строку «менюшек» с названиями такие как «Файл», «Правка», или «Операции», «Сервис», «Окна», «Справка», а главное вы можете нажать на них и вниз «выпадет» подменю с выбором подпунктов, значит у вас конфигурация с обычными формами.

Если у вас в верху нет подобных «менюшек», но есть в верху или слева либо в других частях программы ссылки, на на веб-сайте, т.е. вы на них наводите и они тут же становятся подчеркнутыми, они могут иметь названия такие как «Главное», или «Продажи», «Закупки», «Администрирование» или «НСИ и администрирование» или другие подобные ссылки или картинки, и при нажатии на них у вас не «выпадает» список подменю, а открывается в центре программы информация или отдельное окно, значит у вас конфигурация с «управляемыми формами», они как правило более красивые и современные на вид. Если вы знаете что у вас интерфейс «Такси», значит это точно управляемые формы.

Ранее, когда еще не было платформы 8.3 а была только 8.2 и обычные формы, тогда только начали разрабатываться конфигурации на управляемых формах, появилась платформа 8.3 и у чуть позже у многих людей платформа 8.3 начала ассоциироваться с управляемыми формами, а уже платформа 8.2 с обычными. Так и укрепилось понятие, что у кого-то 1С 8.2 (т.е. база 1С с конфигурацией на обычных формах) , а у кого-то 1С 8.3 (т.е. база 1С с конфигурацией на управляемых формах).
На самом деле платформа 8.3 новее чем 8.2 а значит может работать со всеми конфигурациями для 1С 8.*, НО! Если у вас платформа 8.3, а база с конфигурацией на обычных формах, то про вас могут сказать что у вас 1С 8.2 и это важно понимать!

Также важно понимать что у вас может быть платформа 8.2 а конфигурация на управляемых формах, то про вас могут сказать что у вас 1С 8.3! Многим так быстрее, удобнее и привычнее.
Т.е. большинству без разницы какая у них платформа и если у них база с обычными формами — то это 1С 8.2! если с управляемыми — то 8.3!

Исходя из данного факта и устоявшегося мнения в терминах, на нашем сайте вы можете встретить обработки 8.2 или 8.3 это не означает что для обработки важно какая у вас платформа, это означает что она, обработка, будет работать либо в базе с обычными формами либо только с управляемыми , а бывают еще универсальные обработки у них в названии будет написано (8.2 и 8.3) или (8.2/8.3) или (8.2-8.3) или (8.*)

Ниже примеры некоторых популярных конфигураций 1С на обычных формах т.е. называют 1С 8.2:
— Бухгалтерия предприятием 2.0.*.*
— Управление торговлей 10.3.*.*
— Розница 1.1.*.*
— Зарплата и управление персоналом 2.5.*.*

Теперь примеры некоторых популярных конфигураций 1С на управляемых формах т.е. такие называют 1С 8.3:
— Бухгалтерия предприятием 3.0.*.*
— Управление торговлей 11.*.*.*
— Розница 2.*.*.*
— Зарплата и управление персоналом 3.*.*.*
— Управление нашей фирмой 1.6.*.*

Краткая версия всей статьи или ответ на вопрос: какая у меня 1С 8.2 или 8.3?

Если у вас в базе 1С после того как вы ее откроете в верху есть строка из «менюшек» с названиями к примеру «Файл», «Правка», или «Операции», «Сервис», «Окна», «Справка», и при нажатии вниз «выпадет» подменю с выбором подпунктов, то такую базу называют 1С 8.2 и для нее могут подойти только те обработки, отчеты, расширения, в названиях которых есть «8.2» и не подойдут те обработки, в названии которых есть «8.3»

Если нет такой строки из «менюшек», а есть ссылки, при наведении на которых эти ссылки сразу подчеркиваются, они могут иметь названия Главное» или «Руководителю» или «Продажи», «Закупки», «Администрирование» или «НСИ и администрирование» или другие подобные ссылки или даже картинки. значит — это база 1С 8.3 и для нее могут подойти только те обработки, отчеты, расширения, в названиях которых есть «8.3» и не подойдут те обработки в названии которых есть «8.2»

Исключение это универсальные обработки, отчеты в названиях которых есть и 8.2 и 8.3 т.е. в названии будет написано (8.2 и 8.3) или (8.2/8.3) или (8.2-8.3) или (8.*)

К полям запроса можно применять различные функции. В этом разделе я рассмотрю наиболее часто применяемые (лично мною) из них.

ДАТАВРЕМЯ - задает константное поле с типом Дата. Синтаксис:

ДАТАВРЕМЯ(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)
Запрос.Текст =
"ВЫБРАТЬ
| ДАТАВРЕМЯ(2013, 1, 1) КАК ОМГ";//1 января 2013

РАЗНОСТЬДАТ - возвращает разность 2-х дат в указанном измерении (год, месяц, день, час, минута, секунда). Синтаксис:

РАЗНОСТЬДАТ(<Дата1>, <Дата2>, <Тип>)
Запрос.Текст =
"ВЫБРАТЬ
| РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2013, 2, 28), ДАТАВРЕМЯ(2013, 1, 1), ДЕНЬ)
| КАК ДнейДоКонцаЗимы";

ЗНАЧЕНИЕ - задает константное поле с предопределенной записью одной из таблиц БД, также можно передать пустую ссылку. Синтаксис:

ЗНАЧЕНИЕ(<Имя>)
Запрос.Текст =
"ВЫБРАТЬ
//предопределенный элемент справочника
| ЗНАЧЕНИЕ(Справочник.Валюты.Рубли) КАК Рубль,
//пустая ссылка на документ
| ЗНАЧЕНИЕ(Документ.СчетНаОплатуПокупателю.ПустаяСсылка) КАК ПустойСчет,
//значение перечисления
| ЗНАЧЕНИЕ(Перечисление.ПолФизическихЛиц.Мужской) КАК Мужчина,
//предопределенный счет из плана счетов
| ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Товары) КАК Счет_41";

ВЫБОР - аналог конструкции ЕСЛИ для языка запросов 1С. Синтаксис:

ВЫБОР
КОГДА <Выражение> ТОГДА <Выражение>
ИНАЧЕ <Выражение>
КОНЕЦ
Запрос.Текст =
"ВЫБРАТЬ
//если цена меньше 100, то запрос все равно вернет 100
//в противном случае запрос вернет реальную цену
| ВЫБОР
| КОГДА Товары.Цена > 100
| ТОГДА Товары.Цена
| ИНАЧЕ 100
| КОНЕЦ КАК Цена
|ИЗ

ССЫЛКА <Имя таблицы>
Запрос.Текст =
"ВЫБРАТЬ
//если тип значения регистратора документ Приходная,
//тогда запрос вернет "Поступление товаров", иначе "Реализация товаров"
| ВЫБОР
| КОГДА Остатки.Регистратор ССЫЛКА Документ.Приходная
| ТОГДА ""Поступление товаров""
| ИНАЧЕ ""Реализация товаров""
| КОНЕЦ КАК ВидДвижения
|ИЗ
| РегистрНакопления.Остатки КАК Остатки";

МЕЖДУ - проверяет значение на вхождение в диапозон. Синтаксис:

МЕЖДУ <Выражение> И <Выражение>
Запрос.Текст =
//получим все товары в диапазоне цен от 100 до 1000
"ВЫБРАТЬ
| Товары.Товар
|ИЗ
|ГДЕ
| Товары.Цена МЕЖДУ 100 И 1000";

В и В ИЕРАРХИИ - проверяют наличие значения в передаваемом списке. В ИЕРАРХИИ также развернет иерархические элементы вниз и поищет значение среди подчиненных элементов. Синтаксис:

В(<СписокЗначений>), В ИЕРАРХИИ(<СписокЗначений>)
Запрос.Текст =
//получим все субсчета 41-го и 10-го счета
"ВЫБРАТЬ
| Хозрасчетный.Ссылка КАК Счет
|ИЗ
| ПланСчетов.Хозрасчетный КАК Хозрасчетный
|ГДЕ
| Хозрасчетный.Ссылка В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Товары),
| ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Материалы))";

ПОДОБНО - позволяет сравнивать строку с шаблоном, используется когда строка поиска жестко не определена. Построение шаблона:

  • % (процент): последовательность, содержащая любое количество произвольных символов
  • _ (подчеркивание): один произвольный символ
  • [...] (в квадратных скобках один или несколько символов): любой одиночный символ из перечисленных внутри квадратных скобок. В перечислении могут задаваться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона
  • [^...] (в квадратных скобках значок отрицания, за которым следует один или несколько символов): любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания

Синтаксис:

ПОДОБНО "<ТекстШаблона>"
Запрос.Текст =
//найдем все стулья в справочнике номенклатура
"ВЫБРАТЬ
| Товары.Товар
|ИЗ
| Справочник.Товары КАК Товары
|ГДЕ
| Товары.Наименование ПОДОБНО ""тул%""";
//этот запрос вернет Стул, стул, стульчик, стул офисный и т.д.,
//но стол в этом списке не окажется

ЕСТЬNULL - если поле не определено, то определяет его в указанное выражение. Синтаксис:

ЕСТЬNULL(<Выражение>, <Выражение>)
Запрос.Текст =
//Если поле не определено (NULL)? то присвоим ему пустую ссылку
"ВЫБРАТЬ
| ЕСТЬNULL(Товары.Ссылка, ЗНАЧЕНИЕ(Справочник.Товары.ПустаяСсылка)) КАК Товар
|ИЗ
| Справочник.Товары КАК Товары";

Замечу, что NULL следует обязательно обрабатывать, т.к. это очень "капризный" тип (в системе "1С:Предприятие 8" определен специальный тип NULL с одним элементом). Если вы попытаетесь сравнить со значением данного типа или присвоить его, то обязательно нарветесь на ошибку, поэтому не забывайте о данной конструкции. Когда может выскочить NULL:

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

Это далеко не полный список функций языка запросов 1С 8, если заинтересует работа каких-либо еще - пишите в комментариях.

Здравствуйте дорогие читатели. Я уже писал о таких примитивных типах данных как NULL и Строка, а сегодня рассмотрим примитивный тип данных Число (Number) .

Числовым у нас может быть реквизит объекта конфигурации или переменные в .

Максимально допустимая разрядность числа составляет 38 знаков, длина целой части не может превышать 32 символа, точность — 10 символов. Хотя в переменных можно оперировать числами превышающих разрядность в 38 символов, но в ИБ (информационную базу) можем записывать значения с длинной целой части не больше 32-х знаков.

Над данными числового типа применимы операции: +, -, *, /, (), %(остаток от деления нацело 10%3=1).

Математические функции для чисел можно посмотреть в синтакс помощнике
Общее описание встроенного языка-> Встроенные функции-> Функции по работе с типом Число

Из всех функции, которые там приведены лично мне пока пришлось работать только с двумя:
Окр(<Число>, <Разрядность>, <РежимОкругления>) Функция округляет исходное число до нужной разрядности в соответствии с заданным режимом округления.
Параметры: <Число> (обязательный), Исходное число. Остальные параметры не обязательны.

// Округлим цену до копеек ОкругленнаяЦена = Окр(Цена, 2 ); // Округлим цену до сотен рублей ОкругленнаяЦена = Окр(Цена, - 2 );

Цел(<Число>) — Функция вычисляет целую часть переданного числа, полностью отсекая дробную часть.

Пример: МожноКупить = Цел (Наличность / Цена );

Если вы сталкивались в задачах с другими функциями, напишите примеры в комментариях.

Часто на практике встречается преобразование типов данных из строки в число, для этих целей есть функция Число().

Функция Число() — Преобразует полученный параметр (параметр обычно строкового типа) в значение типа Число.
Пример: КонтрольноеЧисло = Число (Прав (СтраховойНомер , 2 ));

Типа Булево преобразуется в число:
Ложь преобразуется в 0;
Истина преобразуется в 1.

Приоритет арифметических операций:
1) ()
2) Унарные арифметические операции (+, -)
3) *, /, %
4) Бинарные арифметические операции (+, -)
5) Операции сравнения (>,>=,
6) НЕ
7) И
ИЛИ

Приведу еще пару функций которые полезны при работе с Числом

Формат(<Значение>, <ФорматнаяСтрока>) Функция формирует удобное для чтения представление значений.
Параметры: <Значение> (обязательный) Тип параметра: Число; Дата; Булево.

Форматную строку удобно задавать, вызвав: Конструктор форматной строки

Макс(<Значение1>,…,<ЗначениеN>) Функция определяет максимальное значение из полученных параметров.
Параметры: <Значение1>,…,<ЗначениеN> (обязательный) и могут иметь один Тип: Число; Строка; Дата; Булево.

Пример:
// Пример для чисел

A = Макс(1 , 2 , 3 ); // A = 3

Мин(<Значение1>,…,<ЗначениеN>) Из полученных параметров функция определяет минимальное значение.



Полный синтаксис (нажмите, чтобы раскрыть)

Условный оператор "Если"

Описание:

Оператор Если управляет выполнением программы, основываясь на результате одного или более логических выражений. Оператор может содержать любое количество групп операторов, возглавляемых конструкциями ИначеЕсли - Тогда .

Синтаксис:

Параметры:

Если Ключевое слово, которое начинает структуру оператора условного выполнения. <Логическое выражение> Логическое выражение . Тогда Операторы, следующие за Тогда выполняются, если результатом логического выражения является значение Истина . // Операторы Исполняемый оператор или последовательность таких операторов. ИначеЕсли Логическое выражение, следующее за ключевым словом ИначеЕсли , вычисляется только тогда, когда условия в Если и всех предшествующих ИначеЕсли оказались равны Ложь . Операторы, следующие за конструкцией ИначеЕсли - Тогда , выполняются, если результат логического выражения в данном ИначеЕсли равен Истина . Иначе Операторы, следующие за ключевым словом Иначе , выполняются, если результаты логических выражений в конструкции Если и всех предшествующих конструкциях ИначеЕсли оказались равны Ложь . КонецЕсли Ключевое слово, которое завершает структуру оператора условного выполнения.

Тернарный условный оператор

Описание:

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

Синтаксис:

? (< Логическое выражение> , < Выражение 1 > , < Выражение 2 > )

Параметры:

Возвращаемое значение:

Результат вычисления одного из результирующих выражений.

&НаКлиенте Процедура ВыполнитьКод(Команда) /// Как составить оператор Если в 1с 8.3, 8.2 Если 1 > 0 Тогда // Истина // блок операторов Сообщить("Компьютер выполнит все команды из этого блока." ) ; Сообщить("Один больше нуля." ) ; КонецЕсли ; Если 1 < 0 Тогда // Ложь Сообщить("Один меньше нуля." ) ; Иначе Сообщить("Сработает именно эта ветка условного оператора (#А)." ) ; Сообщить("Один больше нуля." ) ; КонецЕсли ; Если 1 < 0 Тогда // Ложь Сообщить("Один меньше нуля." ) ; ИначеЕсли 1 = 0 Тогда // Ложь Сообщить("Один равен нулю." ) ; Иначе Сообщить("Сработает именно эта ветка условного оператора (#Б)." ) ; Сообщить("Один больше нуля." ) ; КонецЕсли ; /// Как составить тернарный оператор? в 1с 8.3, 8.2 Текст = ? (1 > 2 , "Один больше двух." , "Один не больше двух." ) ; Сообщить(Текст) ; // выведет "Один не больше двух." КонецПроцедуры /// Скачать и выполнить эти примеры на компьютере

Лучшие статьи по теме