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












1. Введение

Язык программы 1С является структурно-объектным. Этот язык можно назвать как промежуточный язык между языками высокого уровня и языками скриптов, напрмиер такми как VBA.
По своей сути приложение 1С работает как бы с двумя модулями. Первый модуль - это ядро или движек. По сути это компилятор, который переводит код а также описание печатных и графических форм на экран или принтер. Второй модуль - база данных, с которой работет первый модуль. Оба модуля взаимосвязаны и работать самомтсоятельно не могут. Второй модуль отвечает за доступ к базе, а также за манипуляцию с ифнормацией в базе.
В 1С версии 7.7 существет 1 встроенных механизм доступа к базам данных и один механизм, который использует внешний интерфейс доступа к базам данных.
Первый механизм - доступ к базе формата dbf (по сути доступ не к базе а к каждому отдельному файлу). Используемая версия dbf - DBASE II, с соответсвующими ограничениями и недостаткатками этой старой версии.
Второй механизм - доступ к базе в формате MS SQL Server используя соединение через ODBC (так называемый ODBC провайдер доступа к MS SQL Server), который поставляется вместе с MS SQL Server. Изначально версия 7.7 разрабатывалась под SQL Server 6.5 (а точнее она дорабатывалась версии 7.5, которая работала на более ранних версиях SQL Server). На момент написания статьи актуальным релизом 1С (рели 7.70.027) поддерживаются версии SQL Server 6.5, 7.0. SQL2000, про поддержку SQL 2005 информация отсутствует. Но автор провел тест на подключение к SQL Server 2005 релиза 7.70.027 и тест законлился неудачей. Т.е. можно предположить что официально 27 релиз не поддерживает SQL Server 2005 (но эту проблему можно решить почитат здесь: ).
Для понимания того как работает 1С рассмотрим как 1С хранит и как запускает код на выполнение. Весь код 1С физически находится или в файле 1Cv7.md, или во внешних отчетах обработках (*.ert) (существует также возможность подгружать модули с внешних файлов, но это частный случай и он рассматриваться не будет). Запускается код на выполнение поэтапно. Это значит что код компилируется и запускается на выполнение по мере необходимости (а точнее тогда, когда осуществляется доступ к объекту или к форме объекта). Исключение составляет лишь глобальный модуль, его компиляция просиходит в момент запуска самой 1С (точнее после инициализации базы данных). Остальные же модули не компилируются в момент запуска 1С, а копмилируются лишь при обращении к этому модулю через форму или объект. Это приводит к тому, что синтаксис контроль надо проверять самому или же смотреть на синтаксические ошибки уже в момент работы приложения.

2. Объектная структура 1С

Логически код 1С хранится в модулях (модуль в понимании языка 1С - код, который запускается на выполнение). В 1С все модули можно разделить на 3 большие категории: 1 - глобальный модуль, модули обьектов 1С, модули обработок и отчетов. С точки зрения 1С под объектом понимается часть общего набора сущностей, что есть в конкретной базе данных, которые обладают одинаковыми свойствами, имеют одинаковый набор методов и выполняют однотипные функции с информацией или с базой данных. Следует отметить, что не все объекты 1С имеют модули, но в то же время некоторые объекты имеют более одного модуля. Обычно модули привязываются к формам. Форма с точки зрения 1С - это окно с набором своих атрибутов и реквизитов. Не все объекты имеют свои формы, в тоже время некоторые объекты имеют несколько форм. Обычно это форма конкртеного элемента или же форма списка элементов.
Следует учесть, что 1С работает с базой данных, в то же время некоторые объекты не хранятся в базе данных.
Т.е. первая классификация объектов может быть по тому, информация по объектам хранится в базе или не в базе, назовем первый тип обьектов Информационные, а второй тип - Неинформационные. Все информационные объекты хранятся в базе данных, в одной или нескольких таблицах. Работа с инофрмационными объектами всегда предполагает позиционирование на конкретную запись в таблице, которая идентифицирует объект. Это значит, что для обращения к такому объекту надо каким то образом перейти на требуемую запись в базе данных. Обычно для такого переходя используются методи 1С.
Очень хорошей особенностью 1С является то, что часть вновь созданных объектов могут иметь тип уже существующего объекта. Такие объекты называются типообразующие. Те типы, которые не образуют данных для вновь созданных объектов - нетипообразующие. Все типообразующие объекты есть информационными, т.е. они хранятся в базе данных. В понимании 1С типообразующие объекты - это агрегатные объекты.
В то же время, в 1С есть базовые типы, которые существуеют независимо от создаваемых объектов. Эти типы также хранятся в базе, но эти данные не есть объектами с точки зрения 1С, а они есть атрибутами информационных обьектов.
Также, важной классификацией объектов есть их типизация по тем признакам, по которым они делятся в самом описании базы данных. Вот эти объекты:
  • Константы.
  • Справочники.
  • Документы.
  • Журналы документов.
  • Перечисдения.
  • Отчеты.
  • Обработки.
  • Планы счетов.
  • Виды субконто.
  • Операция.
  • Проводка.
  • Регистры.
  • Журналы расчетов.
  • Виды расчетов.
  • Группы расчетов.
  • Календари.
Кроме этого существуют нетипизирующие объекты, которые не являются информационными и которые не присутствуют в дереве настройки конфигурации:
  • Текст.
  • XBase.
  • БухгалтерскиеИтоги.
  • КорректныеПроводки.
  • ПравилоПерерасчета.
  • Последовательность.
  • Периодический.
  • СписокЗначений.
  • ТаблицаЗначений.
  • Таблица.
  • Запрос.
  • Картинка.
  • ФС (Файловая система).
Почти ко всем с перечисленных типов объектов можно получить доступ в модулях посредством функции создания объектов СоздатьОбъект().Общаю структуру описаных классификаций объектов можно представить в виде такой матрицы:
Типы объектов Информационные Типообразующие СоздатьОбъект() Наличие модулей
Константы
Справочники + + + +
Документы + + + +
Журналы документов +
Перечисдения +
Отчеты +
Обработки +
Планы счетов + + + +
Виды субконто +
Операция + + +
Проводка + +
Регистры +
Журналы расчетов + +
Виды расчетов + +
Группы расчетов
Календари +
Текст +
XBase +
БухгалтерскиеИтоги +
КорректныеПроводки + +
ПравилоПерерасчета +
Последовательность + +
Периодический +
СписокЗначений +
ТаблицаЗначений +
Таблица +
Запрос +
Картинка +
ФС (Файловая система) +
Число +
Строка +
Дата +

3. Язык 1С. Модульность

Как уже было сказано весь текст программного кода делится по модулям.
Вцелом модули можно структурировать так:
Отдельная база данных
Глобальный модуль.
Модули Справочников.
Модули Форм списков справочников.
Модуль элемента справочников.
Модуль группы справочников
Модули документов.
Модуль формы документов.
Модуль документов.
Модули журналов документов.
Модуль форми журналов документов.
Модули плана счетов.
Модуль формы счета.
Модули форм списков планов счетов.
Модули операции.
Модуль операции.
Модули форм списков операции.
Модули проводки.
Модули форм списков журналов проводок.
Модули журналов расчетов.
Модули форм списков журналов расчетов.
Модули видов расчетов.
Модули расчетов.
Модули отчетов.
Модуль формы отчетов.
Модули обработок.
Модуль формы обработки.
Т.е. в пределах одной базы, с каждого модуля объекта доступен только глобальный модуль. Все остальные модули изолированные и их взаимосвязь без обращений к конкретному спозиционированному объекту невозможна. Но в тож время с каждого модуля доступны атрибуты (и часть методов, которые определены как системные функции) верхнего уровня. Следует отметить, что написанные пользовательские функции и процедуры не есть методами объектов и их вызов как методов невозможен.
Уровень изоляции атрибутов и переменных идет снизу вверх. Так переменные глобального модуля доступны во всех модулях, точно так же и функции и процедуры глобального модуля. В то же время атрибуты объектов доступны во всех модулях этих объектов, а вот методы делятся на те что доступны и недоступны.

4. Общее положения написания модулей

Семантика языка 1С такова что весь текст модуля делится на операторы и коментарии. Концом оператора является символ ";". Операторы состоят с выражений.

4.1.Коментарии

Коментарии в 1С только построчные (поблочных нет). комментарий начинается с двух символов "// " и заканчивается символом конца строки (т.е. до конца строки).

4.2. Имена переменных, процедур и функций

Именем переменной, пользовательской процедуры или функции может быть любая последовательность букв, цифр и знаков подчеркивания "_", начинающаяся с буквы или знака подчеркивания "_". Вновь создаваемые имена не должны совпадать с зарезервированными словами языка или именами существующих процедур и функций, доступных на момент выполнения. Распознавание имен переменных, процедур и функций ведется без учета регистра букв.

4.3. Зарезервированные слова

Приведенные далее ключевые слова являются зарезервированными и не могут использоваться в качестве создаваемых имен переменных и объявляемых процедур и функций. В данном варианте языка каждое из ключевых слов имеет два представления — русское и английское. Английское представление является традиционным для языков программирования. Ключевые слова в русском и английском представлении могут свободно смешиваться в одном исходном тексте. Регистр букв ключевых слов не имеет значения. Ниже приведен список ключевых слов в обоих вариантах представления.

ИначеЕсли

СтрДлина

КонецЕсли

Контекст

Продолжить

Прервать

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

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

Предупреждение

КонецЦикла

Процедура

4.4. Структура программного модуля

Структуру программного модуля можно подразделить на следующие разделы:

  • раздел определения переменных;
  • раздел процедур и функций;
  • раздел основной программы.

В конкретном программном модуле любой из разделов может отсутствовать.

Раздел определения переменных размещается от начала текста модуля до первого оператора Процедура или оператора Функция или любого исполняемого оператора. В этом разделе могут находиться только операторы объявления переменных Перем.

Раздел процедур и функций размещается от первого оператора Процедура или оператора Функция до любого исполняемого оператора вне тела описания процедур или функций.

Раздел основной программы размещается от первого исполняемого оператора вне тела процедур или функций до конца модуля. В этом разделе могут находиться только исполняемые операторы. Раздел основной программы исполняется в момент запуска модуля на выполнение (см. «Виды программных модулей»). Обычно в разделе основной программы имеет смысл размещать операторы инициализации переменных какими-либо конкретными значениями, которые необходимо провести до первого вызова любой из процедур или функций модуля.

5. Формат описания виражений и преобразования типов

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

5.1.Типы данных в выражениях и формат их записи.

Рассмотрим подробнее элементы выражений и арифметические операции, используемые для работы с ними.

Числа

Числа записываются цифрами от 0 до 9; при необходимости записать дробное число целая часть отделяется от дробной части точкой ".".
Например:
45 - положительное целое число
-12 - целое отрицательное число
16.67 - дробное положительное число.

Для работы с числамиможно использовать предусмотренные арифметические операции (см. ниже).

Даты

Даты записываются в виде последовательности символов такого формата:
"ДД.ММ.ГГ"
или
"ДД.ММ.ГГГГ" ,
где:
ДД - число месяца. Обязательно записывается двумя цифрами: если число месяца меньше 9, впереди ставится 0, например «02»;
ММ - номер месяца, также записывается двумя цифрами;
ГГ (ГГГГ) - год, может записываться двумя или четырьмя цифрами.

Например: "01.01.2007"

Необходимо обратить внимание, что даты указываются только в одинарных кавычках. При такой записи последовательность символом вида "01.01.2007" будет восприниматься и обрабатываться системой 1С:Предприятие как дата, а не как последовательность символов, "изображающих" дату. Почему это важно - мы расскажем чуть ниже.

Кроме конкретных дат, во встроенном языке существует такое понятие как «пустая дата». Пустая дата задается последовательностью "00.00.00". Обычно, пустая дата используется для сравнения. Получить пустую дату можно также при помощи метода преобразования Дата(0).

Примечание.

Типа Время в 1С нет, точно так же как и нет типа ДатаВремя.

Строковые величины

Строковые величины представляют собой последовательности символов, заключенных в двойные или одинарные кавычки. Пример: "Пример строки ".

Если необходимо в строковой величине указать кавычки, следует использовать 2 символа кавычек подряд. Например, при записи в формуле содержания операции строковая величина вида

" Пример строки ""строка в кавычках"""

сформирует в содержании операции строку

Пример строки "строка в кавычках"

В рассмотренном примере в строковой величине:
первый символ кавычек - это открывающая кавычка строковой величины в целом;
2 символа кавычек подряд - это открывающая кавычка и в результирующей строке они заменены одним символом кавычек;
3 символа кавычек подряд - это группа, состоящая из: 2-х кавычек - закрывающей кавычки, которые в результирующей строке заменены одним символом кавычек, и одной кавычки - закрывающей кавычки строковой величины в целом.

Как показывает практика, почему-то именно указание кавычек в строковых величинах вызывает некоторые трудности. Хотя ничего сложного в этом нет, нужно только помнить простое правило: первая и последняя кавычка - по одному символу, а все кавычки внутри них - по два символа.

У строковых величин существует понятие "пустая строка". Пустая строка задается парой кавычек: "". Пустая строка обладает всеми свойствами "нормальной" строковой величины, однако не имеет длины.

5.2. Арифметические операции

Теперь рассмотрим арифметически операции, используемые в языке 1С (Оп - "операнд"):

Однако применение арифметических операций имеет определенные особенности, в зависимости от типов операндов.

С числовыми величинами можно использовать все перечисленные выше арифметические операции, практически без ограничений.

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

Например, результатом выражения:

"Пример строки " + "январь 2007 года"

будет строка

Пример строки январь 2007 года

Обратите внимание, что строковые величины присоединяются одна к другой без изменения - длина результирующей строковой величины равно сумме длин соединяемых строковых величин. Чтобы результатом операции конкатенации была "читабельная" строка, следует не забывать про концевые и лидирующие пробелы в присоединяемых строках, как это сделано, например, в строке "Пример строки " .

Операцией конкатенации можно соединять более двух строковых величин одновременно. Например, допустимо такое выражение:

"Иванов" + " " + "Иван" +" " + "Иванович"

Результатом будет строка

Иванов Иван Иванович

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

К дате можно прибавить число, например:

"02.08.2000"+2

и результатом выражения будет дата, более поздняя, чем первое слагаемое, на количество дней, равных второму слагаемому. В данном случае результатом будет 04.08.2000, или 4 августа 2000 г.

"02.03.2000"-2

в этом случае, мы получим дату, более раннюю, чем уменьшаемое. Необходимо отметить, что при таком увеличении или уменьшении дат выполняется корректный переход между месяцами и годами, то есть учитывается количество дней в месяце, високосные года, и так далее. В нашем примере результатом выражения будет, конечно же, не 00.03.2000, а 29.07.2000 - 29 февраля 2000 года.

"02.10.2000" - "02.08.2000"

в этом случае результатом будет количество дней между уменьшаемым и вычитаемым.

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

"02.08.2000" + "02.10.2000"

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

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

Например, в выражении

«Амортизация за » + Формат(РабочаяДата(), «Д ММММГГГГ»)

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

5.3. Автоматическое преобразование типов

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

В процессе составления выражений может возникнуть необходимость в преобразовании типов данных отдельных операндов выражений в соответствии с правилами. Для этого во встроенном языке существуют специально предназначенные для этого функции. Приведем для примера уже знакомое нам выражение:

"Амортизация за " + Формат(РабочаяДата(), "Д ММММГГГГ")

В этом выражении второй операнд РабочаяДата(), имеющий тип "дата", преобразуется к типу "строка" при помощи функции Формат() .

Однако, система 1С:Предприятие перед вычислением выражений "умеет" автоматически преобразовывать операнды разных типов к одному типу, руководствуясь при этом правилами преобразования типов .

Для базовых типов определены следующие правила преобразования:

Число -> Строка

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

Дата -> Строка

Дата преобразованная к строковому типу имеет вид ДД.ММ.ГГ, где ГГ — две цифры года, ММ — числовое обозначение месяца (01, ..., 12), ДД — день месяца.

Строка -> Число

Строка преобразуется в число пока это возможно. Получившееся число считается результатом преобразования. (Например, строка "1.22 Glass" будет преобразована к числу 1.22). Если в начале строки не имеется ничего, что могло бы быть проинтерпретировано как число, то результат равен 0.

Дата -> Число

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

Строка -> Дата

Если в начале строки содержится что-то, что может быть проинтерпретировано как строковое представление даты в виде ДД.ММ.ГГ, где ГГ — две цифры года, ММ — числовое обозначение месяца (01, ..., 12), ДД — день месяца, то будет произведено соответствующее преобразование. В противном случае значение даты будет нулевым.

Число -> Дата

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

Итак, прежде всего, следует помнить, что тип результат выражения определяется по типу первого операнда этого выражения . К типу первого операнда приводятся остальные операнды. Зная это правило, можно и предвидеть тип результата выражения в целом, и управлять типом результата.

Например, результатом выражения

2+"А"

будет число 2, потому что первый операнд выражения имеет числовой тип, а второй операнд, в соответствии с правила преобразования типов, стал равен 0.

Однако, стоит немного изменить выражение, написав так:

""+ 2+"А"

как его результат радикально поменяется: результатом выражения станет строка "2А".

Почему так произошло? Выше мы рассказывали про понятие "пустой строки", которая обладает всеми свойствами строковой величины, в том числе и типом "строка". В нашем примере пустая строка является первым операндом выражения, и при вычислении выражения все его операнды были преобразованы к типу "строка" в соответствии с правилами преобразования типов.

Еще один пример. Выше мы подчеркивали, что величина типа "дата" задается символьной строкой в одинарных кавычках, а такая же последовательность символов, но уже в двойных кавычках, является строкой. Теперь мы это проиллюстрируем на примерах.

Как мы уже говорили, результатом выражения "02.08.2000"+2 будет дата 04.08.2000. Но, указав первый операнд в двойных кавычках:

"02.08.2000"+2

мы получим совершенно иной результат - строку "02.08.20002".

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

0+ "23"+45

мы получим в результате число 68, потому что выражение в целом имеет тип "число", а символьная строка в соответствии с правилами преобразования типов, была успешно преобразована в число 45.

Тут уместно вспомнить и про пустую дату. Что будет результатом выражения "00.00.00"+ 2+"02.08.2000"? Конечно же, дата 04.08.2000 (4 августа 2000 года), потому что первым операндом выражения была величина типа "дата".

Наоборот, убрав пустую дату

2+"02.08.2000"

мы получим в результате 2451761 - это число дней с нулевой даты до 2 августа 2000 года, плюс еще 2 дня.

5.4. Логические операторы сравнения

В 1С существуют такие логические выражения для базовых типов данных.

> Больше

< Меньше

<> Не равно

Эти логические выражения можно применять для всех трех базовых типов данных.

По отношению с числовим типом данных - проблем не возникает, сравнивается стандартное число (целое или дробное).

Для строковых величин сравнение происходит ко их так назЫваемым "scan-кодам" (в понимании 1С такой код можно получить с помощью метода КодСимв()). Сравнение производится посимвольно. Так если сравниваются строки равной длины, то сравниваются последовательно коды соотвествующих символов. Сравнение происходит до первого неравенства в строке (если строка состоит больще чем с одного символа). Если сравниваются строки разной длины, то недостающие значение в операторе дополняются символами пустой строки (не с символом пробел (Код= 32)). Т.е. значение пробела (КодСимв(32)) больше значения пустой строки.

Для типов дата сраванивается сама дата (но не исключено что 1С перед сравнением дату переводит в число, которе равно количеству дней от Дата(0)).

6. Проблемы округления

При ведении автоматизированного бухгалтерского учета пользователи нередко сталкиваются с так называемыми "проблемами округления" - ситуациями, когда из-за округления различных расчетных величин, таких, как себестоимость, какой-либо налог, на разных этапах расчетов, появляются "зависающие копейки" в итоговых результатах.

Например, такая ситуация:
Приходуется 16 единиц товара по цене (включая НДС) 110,50 грн.
- общая стоимость составляет 110,50 * 16 = 1768 грн.
- НДС (по ставке 20%, в том числе) составляет 1768 * 20 / 120 = 294,67 грн.

Если теперь этот товар продать "поштучно" без всякой наценки, НДС будет другим:
- НДС одной единицы товара составит 110,50 * 20 / 120 = 18,42 грн.
- НДС всех 16 единиц составит 18,42 * 16 = 294,72 грн.

Разница в НДС между "групповым" приходом и "поштучной" продажей составляет 5 копеек. Не имея добавочной стоимости, мы остались должны в бюджет 5 копеек в виде налога с нее.

Заметим, что, приходуя товар, мы не могли считать НДС "поштучно" - вычисляя размер налога в стоимости одной единицы товара и умножая на количество товара. В этом случае могут быть еще большие потери округления. Например, если цена одной единицы товара 3 копейки, то чему равен НДС?

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

В типовых конфигурациях "1С:Предприятия", где это возможно, учитываются и корректно обрабатываются подобные ситуации. Например, если оприходованы 3 единицы товара общей стоимостью 1 гривня, то первые две единицы спишутся по себестоимости 33 копейки, а последняя - 34 копейки. Но не все случаи округлений можно учесть в алгоритмах, в том числе нельзя корректно обработать в программе вышеприведенный пример с пятью копейками НДС.
В некоторых случаях избежать подобных ошибок можно, назначая "подходящую" цену товара, - чтобы от нее нацело, без остатка, вычислялся НДС. Но это правило применимо только продажным ценам - закупочные же цены выбирать не приходится. В остальных случаях пользователям программы необходимо проанализировать, откуда возникли "зависающие копейки" и принять решение, как с ними следует поступить.

7. Ограничения системы V77

Дата
Дата - корректно работает в диапазоне дат от 01.01.0000 до 31.12.9999
Дата(0) соответствует 1721061 дню от даты 01.01.0000
При попытке уйти в минусовые даты - 31.12.0001 система работает некорректно, так как работает с 0 даты, т.е.: Дата("01.01.0000")-1 = 00.01.00. Функция формата для таких дат вообще не работает.

Число
максимальное количество значений = 64 (64 знака).

Строка
Максимальное количество значений = ограничивается свободной физической памятью (без файла подкачки), Предполагается что знаков не может быть больше 2^32-1.

Документ
Документ - может быть создано 9999 видов документов.
Документ может иметь и корректно работать имея не больше 9999 строк.
Максимальная длина кода - 20, т.е. может быть теоретически создано всего (27+33+10)^20 документов (70^20 = 7,9792266297612001e+36).
Всего в системе может быть не больше (длина ID кода в журнале=9), практически длина ID в 6 символов (3 на УРИБ) 36^6 = 2176782336 документов.
Количество введенных документ с одинаковым временем ограничивается 36^4 = 1679616

Выражение - это математическая или логическая формула, по которой вычисляется значение. Математическое выражение может стоять справа от знака равенства в операторах присваивания, быть параметром процедур или функций, индексом массива переменных. Логическое выражение может быть условием в управляющих операторах Если, Пока, Для. Выражения состоят из констант, переменных и функций, связанных символами логических и/или арифметических операций.

Арифметические операции

В языке определены следующие виды арифметических операций:

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

Замечание
При выполнении операции % (остаток от деления) оба операнда операции округляются до целого значения
.

Операция конкатенации

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

Пример :

· Для того, чтобы удалить ненужные пробелы, используются системные функции СокрЛ и СокрП. ФИО = СокрП(Фамилия) + " " + СокрП(Имя) + " " + СокрП(Отчество);

В любом языке программирования существуют операторы ветвления (условные операторы) . Когда в зависимости от истинности некоторого условия выполняется один либо другой набор команд.

В языке программирования 1С этой цели служит конструкция

Если < Логическое выражение> Тогда //Набор команд 1 ИначеЕсли < Логическое выражение> Тогда //Набор команд 2 Иначе //Набор команд 3 КонецЕсли ;

Алгоритм работы достаточно прост. По очереди проверяются логические выражения следующие за операторами Если и ИначеЕсли . Как только очередное логическое выражение принимает значение Истина выполняется набор команд, следующих за этим логическим выражением. Больше никаких проверок не делается и выполнение блока Если…КонецЕсли; на этом завершается. Если у всех логических выражений значение оказалось Ложь , будет выполнен набор команд, следующих за оператором Иначе .
Конструкция ИначеЕсли <Логическое выражение> Тогда может повторяться столько раз сколько необходимо. При этом она может вообще не использоваться как и оператор Иначе . То есть в простейшем случае мы имеем:

Если < Логическое выражение> Тогда //Набор команд КонецЕсли ;

В логических выражениях могут применяться математические операторы сравнения (=, >, <, >=, <=, <>) и булевы операции (И, ИЛИ, НЕ). Важно понимать, что логическое выражение должно возвращать либо Ложь либо Истина .

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

&НаКлиенте Функция ПроверитьПрава() Возврат Истина ; КонецФункции &НаКлиенте Функция ПолучитьКакоеТоЧисло() Возврат 1 ; КонецФункции &НаКлиенте Процедура ПримерыЛогическихВыражений() Отказ = Ложь ; Если НЕ Отказ Тогда //Набор команд КонецЕсли ; Если ПолучитьКакоеТоЧисло() = 1 Тогда //Набор команд КонецЕсли ; Если ПроверитьПрава() Тогда //Набор команд КонецЕсли ; КонецПроцедуры

А теперь рассмотрим одну особенность, связанную с использованием булевых операций. Допустим у нас есть вот такая конструкция:

Если < ЛогическоеВыражение_1> ИЛИ < ЛогическоеВыражение_2> Тогда

Совершенно очевидно, что если у нас ЛогическоеВыражение_1 = Истина , то проверять на истинность ЛогическоеВыражение_2 нет никакого смысла, т.к. в этом случае все равно ЛогическоеВыражение_1 ИЛИ ЛогическоеВыражение_2 = Истина . И начиная с версии 8.0 платформа так и поступает, т.е. последующие логические выражения будет вычисляться только в том случае, если уже вычисленные не позволяют однозначно определить результат в целом. Знание этого факта позволяет избежать ошибок и сократить количество кода.
В качестве примера обратимся к распространенной ситуации, когда у нас есть реквизит составного типа и нам надо проверить его на заполненность. Пусть у нас есть реквизит составного типа Контрагент , который может принимать тип Справочник.Физлица либо Справочник.Организации . На время этого примера забудем про функцию ЗначениеЗаполнено() . Как известно когда у нас еще не выбран тип составного реквизита, его значение равно Неопределено . Таким образом реквизит незаполнен, когда его значение неопределено либо пустая ссылка. И мы можем записать наше условие в двух вариантах:

// Вариант_1 Если Контрагент = Неопределено ИЛИ Контрагент. Пустая() Тогда Сообщение = Новый СообщениеПользователю; Сообщение. Текст = "Не выбран контрагент" ; Сообщение. Сообщить() ; КонецЕсли ; // Вариант_2 Если Контрагент. Пустая() ИЛИ Контрагент = Неопределено Тогда Сообщение = Новый СообщениеПользователю; Сообщение. Текст = "Не выбран контрагент" ; Сообщение. Сообщить() ; КонецЕсли ;

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

В некоторых случаях можно применять сокращенную запись конструкции с условием. Синтаксис ее следующий:

? (< Логическое выражение> , < ВыражениеЕслиИстина> , < ВыражениеЕслиЛожь> )

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

Если Отказ Тогда ТекстСообщения = "Ошибка" ; Иначе ТекстСообщения = "Операция завершена" ; КонецЕсли ;

записать всего одной строчкой:

ТекстСообщения = ? (Отказ, "Ошибка" , "Операция завершена" ) ;

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Система компоновки данных _ Язык выражений системы компоновки данных

Содержание
1 Язык выражений системы компоновки данных
2 Литералы
2.1 Строка
2.2 Число
2.3 Дата
2.4 Булево
2.5 Значение
3 Операции над числами
3.1 Унарный –
3.2 Унарный +
3.3 Бинарный -
3.4 Бинарный +
3.5 Произведение
3.6 Деление
3.7 Остаток от деления
4 Операции над строками
4.1 Конкатенация (Бинарный +)
4.2 Подобно
5 Операции сравнения
5.1 Равно
5.2 Не равно
5.3 Меньше
5.4 Больше
5.5 Меньше или равно
5.6 Больше или равно
5.7 Операция В
5.8 Операция проверки наличия значения в наборе данных
5.9 Операция проверки значения на NULL
5.10 Операция проверки значения на неравенство NULL
6 Логические операции
6.1 Операция НЕ
6.2 Операция И
6.3 Операция ИЛИ
7 Агрегатные функции
7.1 Сумма
7.2 Количество
7.3 Количество различных
7.4 Максимум
7.5 Минимум
7.6 Среднее
8 Другие операции
8.1 Операция ВЫБОР
9 Правила сравнения двух значений
10 Работа со значением NULL
11 Приоритеты операций
12 Функции языка выражений системы компоновки данных
12.1 Вычислить
12.2 Уровень
12.3 НомерПоПорядку
12.4 НомерПоПорядкуВГруппировке
12.5 Формат
12.6 НачалоПериода
12.7 КонецПериода
12.8 ДобавитьКДате
12.9 РазностьДат
12.10 Подстрока
12.11 ДлинаСтроки
12.12 Год
12.13 Квартал
12.14 Месяц
12.15 ДеньГода
12.16 День
12.17 Неделя
12.18 ДеньНедели
12.19 Час
12.20 Минута
12.21 Секунда
12.22 Выразить
12.23 ЕстьNull
12.24 Функции общих модулей

Язык выражений системы компоновки данных

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

Выражения используются в следующих подсистемах:

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

Литералы

В выражении могут присутствовать литералы. Возможны литералы следующих типов:

  • Строка;
  • Число;
  • Дата;
  • Булево.

Строка

Строковый литерал записывается в символах «”», например:

“Строковой литерал“


При необходимости использования внутри строкового литерала символа «”», следует использовать два таких символов.

Например:

“Литерал ““в кавычках“““

Число

Число записывается без пробелов, в десятичном формате. Дробная часть отделяется при помощи символа «.». Например:

Дата

Литерал типа дата записывается при помощи ключевого литерала ДАТАВРЕМЯ (DATETIME). После данного ключевого слова, в скобках, через запятую перечисляются год, месяц, день, часы, минуты, секунды. Указание времени не обязательно.

Например:
ДАТАВРЕМЯ(1975, 1, 06) – Шестое января 1975 года
ДАТАВРЕМЯ(2006, 12, 2, 23, 56, 57) – Второе декабря 2006 года, 23 часа 56 минут 57 секундода, 23 часа 56 минут 57 секунд

Булево

Булевы значения могут быть записаны при помощи литералов Истина (True), Ложь (False).

Значение

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

Операции над числами

Унарный –

Данная операция предназначена для изменения знака числа на обратный. Например:
-Продажи.Количество

Унарный +

Данная операция не выполняет над числом никаких действий. Например:
+Продажи.Количество

Бинарный -

Данная операция предназначена для вычисления разности двух чисел. Например:
ОстаткиИОбороты.НачальныйОстаток – ОстаткиИОбороты.КонечныйОстаток
ОстаткиИОбороты.НачальныйОстаток - 100
400 – 357

Бинарный +

Данная операция предназначена для вычисления суммы двух чисел. Например:
ОстаткиИОбороты.НачальныйОстаток + ОстаткиИОбороты.Оборот
ОстаткиИОбороты.НачальныйОстаток + 100
400 + 357

Произведение

Данная операция предназначена для вычисления произведения двух чисел. Например:
Номенклатура.Цена * 1.2
2 * 3.14

Деление

Данная операция предназначена для получения результата деления одного операнда на другой. Например:
Номенклатура.Цена / 1.2
2 / 3.14

Остаток от деления

Данная операция предназначена для получения остатка от деления одного операнда на другой. Например:
Номенклатура.Цена % 1.2
2 % 3.14

Операции над строками

Конкатенация (Бинарный +)

Данная операция предназначена для конкатенации двух строк. Например:
Номенклатура.Артикул + “: ”+ Номенклатура.Наименование

Подобно

Данная операция проверяет соответствие строки переданному шаблону.

Значением оператора ПОДОБНО является ИСТИНА, если значение <Выражения> удовлетворяет шаблону, и ЛОЖЬ в противном случае.

Следующие символы в <Строке_шаблона> имеют смысл, отличный от просто очередного символа строки:

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

Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки. Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать <Спецсимвол>, указанный после ключевого слова СПЕЦСИМВОЛ (ESCAPE).

Например, шаблон
“%АБВ[абвг]\_абв%” СПЕЦСИМВОЛ “\”

означает подстроку, состоящую из последовательности символов: буквы А; буквы Б; буквы В; одной цифры; одной из букв а, б, в или г; символа подчеркивания; буквы а; буквы б; буквы в. Причем эта последовательность может располагаться, начиная с произвольной позиции в строке.

Операции сравнения

Равно

Данная операция предназначена для сравнения двух операндов на равенство. Например:
Продажи.Контрагент = Продажи.НоменклатураОсновнойПоставщик

Не равно

Данная операция предназначена для сравнения двух операндов на неравенство. Например:
Продажи.Контрагент Продажи.НоменклатураОсновнойПоставщик

Меньше

Данная операция предназначена для проверки того, что первый операнд меньше второго. Например:
ПродажиТекщие.Сумма

Больше

Данная операция предназначена для проверки того, что первый операнд больше второго. Например:
ПродажиТекщие.Сумма > ПродажиПрошлые.Сумма

Меньше или равно

Данная операция предназначена для проверки того, что первый операнд меньше либо равен второму. Например:
ПродажиТекщие.Сумма

Больше или равно

Данная операция предназначена для проверки того, что первый операнд больше либо равен второму. Например:
ПродажиТекщие.Сумма >= ПродажиПрошлые.Сумма

Операция В

Данная операция осуществляет проверку наличия значения в переданном списке значений. Результатом операции будет Истина, в случае, если значение найдено, или Ложь - в противном случае. Например:
Номенклатура В (&Товар1, &Товар2)

Операция проверки наличия значения в наборе данных

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

Операция проверки значения на NULL

Данная операция возвращает значение Истина в случае, если значение является значением NULL. Например:
Продажи.Контрагент ЕСТЬ NULL

Операция проверки значения на неравенство NULL

Данная операция возвращает значение Истина в случае, если значение не является значением NULL. Например:
Продажи.Контрагент ЕСТЬ НЕ NULL

Логические операции

Логические операции принимают в качестве операндов выражения, имеющие тип Булево.

Операция НЕ

Операция НЕ возвращает значение Истина в случае, если ее операнд имеет значение Ложь, и значение Ложь в случае, если ее операнд имеет значение Истина. Например:
НЕ Документ.Грузополучатель = Документ.Грузоотправитель

Операция И

Операция И возвращает значение Истина в случае, если оба операнда имеют значение Истина, и значение Ложь в случае, если один из операндов имеет значение Ложь. Например:
Документ.Грузополучатель = Документ.Грузоотправитель И Документ.Грузополучатель = &Контрагент

Операция ИЛИ

Операция ИЛИ возвращает значение Истина в случае, если один из операндов имеет значение Истина, и Ложь в случае, если оба операнда имеют значение Ложь. Например:
Документ.Грузополучатель = Документ.Грузоотправитель ИЛИ Документ.Грузополучатель = &Контрагент

Агрегатные функции

Агрегатные функции осуществляют некоторое действие над набором данных.

Сумма

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

Количество

Функция Количество рассчитывает количество значений отличных от значения NULL. Например:
Количество(Продажи.Контрагент)

Количество различных

Эта функция рассчитывает количество различных значений. Например:
Количество(Различные Продажи.Контрагент)

Максимум

Функция получает максимальное значение. Например:
Максимум(Остатки.Количество)

Минимум

Функция получает минимальное значение. Например:
Минимум(Остатки.Количество)

Среднее

Функция получает среднее значение для значений, отличных от NULL. Например:
Среднее(Остатки.Количество)

Другие операции

Операция ВЫБОР

Операция Выбор предназначена для осуществления выбора одного из нескольких значений при выполнении некоторых условий. Например:
Выбор Когда Сумма > 1000 Тогда Сумма Иначе 0 Конец

Правила сравнения двух значений

Если типы сравниваемых значений отличаются друг от друга, то отношения между значениями определяются на основании приоритета типов:
NULL (самый низший);
Булево;
Число;
Дата;
Строка;
Ссылочные типы

Отношения между различными ссылочными типами определяются на основе ссылочных номеров таблиц, соответствующих тому или иному типу.

Если типы данных совпадают, то производится сравнение значений по следующим правилам:
у типа Булево значение ИСТИНА больше значения ЛОЖЬ;
у типа Число обычные правила сравнения для чисел;
у типа Дата более ранние даты меньше более поздних;
у типа Строка - сравнения строк в соответствии с установленными национальными особенностями базы данных;
ссылочные типы сравниваются на основе своих значений (номера записи и т. п.).

Работа со значением NULL

Любая операция, в которой значение одного из операндов NULL, будет давать результат NULL.

Есть исключения:
операция И будут возвращать NULL только в случае, если ни один из операндов не имеет значение Ложь;
операция ИЛИ будет возвращать NULL только в случае, если ни один из операндов не имеет значение Истина.

Приоритеты операций

Операции имеют следующие приоритеты (первая строка имеет низший приоритет):
ИЛИ;
И;
НЕ;
В, ЕСТЬ NULL, ЕСТЬ НЕ NULL;
=, <>, <=, <, >=, >;
Бинарный +, Бинарный – ;
*, /, %;
Унарный +, Унарный -.

Функции языка выражений системы компоновки данных

Вычислить

Функция Вычислить предназначена для вычисления выражения в контексте некоторой группировки. Функция имеет следующие параметры:
Выражение. Тип Строка. Содержит вычисляемое выражение;
Группировка. Тип Строка. Содержит имя группировки, в контексте которой необходимо вычислить выражение. В случае если в качестве имени группировки используется пустая строка, вычисление будет выполнено в контексте текущей группировки. В случае если в качестве имени группировки будет использована строка ОбщийИтог, вычисление будет выполнено в контексте общего итога. В остальных случаях вычисление будет выполняться в контексте родительской группировки с таким именем. Например:
Сумма(Продажи.СуммаОборот) / Вычислить("Сумма(Продажи.СуммаОборот)", "ОбщийИтог")

В данном примере в результате получится отношение суммы по полю "Продажи.СуммаОборот" записи группировки к сумме того же поля во всей компоновке.

Уровень

Функция предназначена для получения текущего уровня записи.

Пример:
Уровень()

НомерПоПорядку

Получить следующий порядковый номер.

Пример:
НомерПоПорядку()

НомерПоПорядкуВГруппировке

Возвращает следующий порядковый номер в текущей группировке.

Пример:
НомерПоПорядкуВГруппировке()

Формат

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

Форматная строка задается в соответствии с форматной строкой 1С:Предприятие.

Параметры:
Значение;
Форматная строка.

Пример:
Формат(РасходныеНакладные.СуммаДок, "ЧДЦ=2")

НачалоПериода

Параметры:

    • Минута;
    • День;
    • Неделя;
    • Месяц;
    • Квартал;
    • Декада;
    • Полугодие.

Пример:
НачалоПериода(ДатаВремя(2002, 10, 12, 10, 15, 34), "Месяц")

Результат:

01.10.2002 0:00:00

КонецПериода

Функция предназначена для выделения определенной даты из заданной даты.

Параметры:

  • Дата. Тип Дата. Заданная дата;
  • Тип периода. Тип Строка. Содержит одно из значений:
    • Минута;
    • День;
    • Неделя;
    • Месяц;
    • Квартал;
    • Декада;
    • Полугодие.

Пример:
КонецПериода(ДатаВремя(2002, 10, 12, 10, 15, 34), "Неделя")

Результат:

13.10.2002 23:59:59

ДобавитьКДате

Функция предназначена для прибавления к дате некоторой величины.

Параметры:

  • Тип увеличения. Тип Строка. Содержит одно из значений:
    • Минута;
    • День;
    • Неделя;
    • Месяц;
    • Квартал;
    • Декада;
    • Полугодие.
Величина – на сколько необходимо увеличить дату. Тип Число. Дробная часть игнорируется.

Пример:
ДобавитьКДате(ДатаВремя(2002, 10, 12, 10, 15, 34), "Месяц", 1)

Результат:

12.11.2002 10:15:34

РазностьДат

Функция предназначена для получения разницы между двумя датами.

Параметры:

  • Выражение. Тип Дата. Исходная дата;
  • Выражение. Тип Дата. Вычитаемая дата;
  • Тип разности. Тип Строка. Содержит одно из значений:
    • Секунда;
    • Минута;
    • День;
    • Месяц;
    • Квартал;

Пример:
РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2002, 10, 12, 10, 15, 34),
ДАТАВРЕМЯ(2002, 10, 14, 9, 18, 06), "ДЕНЬ")

Результат:

Подстрока

Данная функция предназначена для выделения подстроки из строки.

Параметры:

  • Строка. Тип Строка. Строка, из которой выделяют подстроку;
  • Позиция. Тип Число. Позиция символа, с которого начинается выделяемая из строки подстрока;
  • Длина. Тип Число. Длина выделяемой подстроки.

Пример:
ПОДСТРОКА(Контрагенты.Адрес, 1, 4)

ДлинаСтроки

Функция предназначена для определения длины строки.

Параметр:
Строка. Тип Строка. Строка, длину которой определяют.

Пример:
Строка(Контрагенты.Адрес)

Данная функция предназначена для выделения года из значения типа Дата.

Параметр:
Дата. Тип Дата. Дата, по которой определяют год.

ГОД(РасхНакл.Дата)

Квартал

Данная функция предназначена для выделения номера квартала из значения типа Дата. Номер квартала в норме находится в диапазоне от 1 до 4.

Параметр
Дата. Тип Дата. Дата, по которой определяют квартал

КВАРТАЛ(РасхНакл.Дата)

Месяц

Данная функция предназначена для выделения номера месяца из значения типа Дата. Номер месяца в норме находится в диапа-зоне от 1 до 12.
Дата. Тип Дата. Дата, по которой определяют месяц.
МЕСЯЦ(РасхНакл.Дата)

ДеньГода

Данная функция предназначена для получения дня года из значения типа Дата. День года в норме находится в диапазоне от 1 до 365(366).
Дата. Тип Дата. Дата, по которой определяют день года.
ДЕНЬГОДА(РасхНакл.Дата)

День

Данная функция предназначена для получения дня месяца из значения типа Дата. День месяца в норме находится в диапазоне от 1 до 31.
Дата. Тип Дата. Дата, по которой определяют дня месяца.
ДЕНЬ(РасхНакл.Дата)

Неделя

Данная функция предназначена для получения номера недели года из значения типа Дата. Недели года нумеруются, начиная с 1.
Дата. Тип Дата. Дата, по которой определяют номера недели.
НЕДЕЛЯ(РасхНакл.Дата)

ДеньНедели

Данная функция предназначена для получения дня недели из значения типа Дата. День недели в норме находится в диапазоне от 1 (понедельник) до 7(воскресенье).
Дата. Тип Дата. Дата, по которой определяют день недели.
ДЕНЬНЕДЕЛИ(РасхНакл.Дата)

Данная функция предназначена для получения часа суток из значения типа Дата. Час суток находится в диапазоне от 0 до 23.
Дата. Тип Дата. Дата, по которой определяют час суток.
ЧАС(РасхНакл.Дата)

Минута

Данная функция предназначена для получения минуты часа из значения типа Дата. Минута часа находится в диапазоне от 0 до 59.
Дата. Тип Дата. Дата, по которой определяют минута часа.
МИНУТА(РасхНакл.Дата)

Секунда

Данная функция предназначена для получения секунды минуты из значения типа Дата. Секунда минуты находится в диапазоне от 0 до 59.
Дата. Тип Дата. Дата, по которой определяют секунды минуты.
СЕКУНДА(РасхНакл.Дата)

Выразить

Данная функция предназначена для выделения типа из выражения, которое может содержать составной тип. В случае, если выражение будет содержать тип, отличный от требуемого типа, будет возвращено значение NULL.

Параметры:
Преобразуемое выражение;
Указание типа. Тип Строка. Содержит строку типа. Например, "Число", "Строка" и т.п. Кроме примитивных типов данная строка может содержать имя таблицы. В этом случае будет осуществлена попытка выразить к ссылке на указанную таблицу.

Пример:
Выразить(Данные.Реквизит1, "Число(10,3)")

ЕстьNull

Данная функция возвращает значение второго параметра в случае, если значение первого параметра NULL.

В противном случае будет возвращено значение первого параметра.

Пример:
ЕстьNULL(Сумма(Продажи.СуммаОборот), 0)

Функции общих модулей

Выражение механизма компоновки данных может содержать вызовы функций глобальных общих модулей конфигурации. Никакого дополнительно синтаксиса для вызова таких функций не требуется.

Пример:
СокращенноеНаименование(Документы.Ссылка, Документы.Дата, Документы.Номер)

В данном примере будет осуществлен вызов функции "СокращенноеНаименование" из общего модуля конфигурации.

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

Кроме того, функции общих модулей не могут быть использованы в выражениях пользовательских полей.

Php?http://wiki.kint.ru/index.php/Язык_выражений_системы_компоновки_данных_(1Cv82)#.D0.9A.D0.BE.D0.BD.D0.B5.D1.86.D0.9F.D0.B5.D1.80.D0.B8.D0.BE.D0.B4.D0.B0

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
http://сайт

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

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

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

Операндами логических операций должны быть логические выражения. В табл. 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; // Теперь все элементы массива равны единице конецЦикла;

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

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

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

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

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

gastroguru © 2017