Главная » 1С Предприятие » О ВЫЧИСЛЕНИИ ЛОГИЧЕСКИХ ВЫРАЖЕНИЙ

0

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

пока (ин <= всегоКонстант) и (Метаданные.Константа(ин).Периодический = 0) цикл идеи = Метаданные.Константа(ин).Идентификатор;

Сообщить(иден + " " + Константа.ПолучитьАтрибут(иден));

ин = ин + 1;                      //             Не забываем перейти к следующей константе конецЦикла; // пока (вложенного)

Однако тогда возникнет ошибка исполнения

пока (ин <= всегоКонстант)  и (Метаданные.Константа(ин).Периодический = 0) цикл

{D:\ПPOБA.ERT(14)}: Поле  агрегатного объекта  не обнаружено (Периодический)

Ее  природа  в  том, что  на  некотором шаге  значение  переменной  ин  стало  больше  значения  переменной всегоКонстант.  При  этом  значение  ЛВ

(ин <= всегоКонстант)  и (Метаданные.Константа(ин).Периодический = 0)

независимо от значения  второго выражения отношения   будет ложь. Поэтому в  принципе вычисление второго выражения отношения  избыточно и его можно  не выполнять. Но в 1С оно вычисляется, и, поскольку константы с номером ин = всегоКонстант + 1 нет, возникает описанная  выше ошибка, приводящая к останову программы.

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

если (3 > 2) или (Лог(0) = 1) тогда сообщить("Что-то");

конецЕсли;

Результат  этого  ЛВ, если  первое  подвыражение  истинно,  не  зависит от  значения второго подвыражения, и,  следовательно, оно  могло  бы не  вычисляться.  Однако в  1С ЛВ  вычисляются  полностью, поэтому данный код, поскольку в  нем  вычисляется  1п0, приведет к ошибке исполнения, о которой 1С сообщит следующим образом:

если (3 > 2) или (Лог(0) = 1) тогда

{D:\lCV77\CONFIGMELZ\EXTFORMS\ПРОБA.ERT(3)}: Деление на 0

Источник: Бартеньев О. В. 1С:Предприятие:  программирование для  всех.  Базовые объекты и расчеты на одной дискете. М.: Диалог-МИФИ, 2005. 464 с.

По теме:

  • Комментарии