Про обчислення логічних ВИСЛОВІВ

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

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

Повідомити (іден + ” + КонстантаПолучітьАтрібут (іден))

ін = ін + 1 / / Не забуваємо перейти до наступної константі конецЦікла / / Поки (вкладеного)

Однак тоді виникне помилка виконання

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

{D: \ ПPOБAERT (14)}: Поле агрегатного обєкта не виявлено (Періодичний)

Її природа в тому, що на деякому кроці значення змінноїинстало більше значення змінної всегоКонстантПри цьому значення ЛВ

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

незалежно від значення другого вираження ставлення буде брехня Тому в принципі обчислення другого вираження ставлення надлишково і його можна не виконувати Але в 1С воно обчислюється, і, оскільки константи з номером ін = всегоКонстант + 1 немає, виникає описана вище помилка, що приводить до останову програми

Розглянемо тепер конструкцію якщо з ЛВ, що складається з двох подвираженій відносини, обєднаних логічною операцією АБО:

якщо (3> 2) або (Лог (0) = 1) тоді повідомити (Щось)

КонецЕсли

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

якщо (3> 2) або (Лог (0) = 1) тоді

{D: \ lCV77 \ CONFIGMELZ \ EXTFORMS \ ПРОБAERT (3)}: Поділ на 0

Джерело: Бартеньев О В 1С: Підприємство: програмування для всіх Базові обєкти та розрахунки на одній дискеті М: Діалог-МІФІ, 2005 464 с

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*