СТРУКТУРА ПРОЦЕДУР І ФУНКЦІЙ

Процедури і функції мають схожу структуру:

Процедура | Функція Імя ([[3начіт] Парам1 = [значення ^]], ..,

[[Знач] Парампі=  [значеніеп]]) [Експорт]

[Невиконувані оператори оголошення змінних]

[Виконувані оператори] КонецПроцедури | КонецФункции

Ключове слово, або атрибут, Експорт вказується для процедур і функцій, що розташовуються в глобальному модулі (розд 16), в тому випадку, якщо їх треба зробити доступними для виклику в модулях форм

Процедури викликаються у вигляді окремого оператора з дотриманням наступного синтаксису:

Імя_процедури([Парам1], .., [парамn])

Функції, як правило, викликаються з виразів, але можуть, так само як і процедури, викликатися у вигляді окремо оператора:

Імя_функциі([Парам1],.., [Парампі])

Функція, якщо вихід з неї здійснюється не в результаті виконання оператора Повернення вираз

а по оператору КонецФункции повертає число 0

Функція, в якій немає оператора

Повернення вираз

завжди повертає нуль

Зауваження  При програмуванні функції слід виходити з неї по оператору Повернення вираз

навіть якщо вираз це константа нуль Наприклад, функціїф1 і ф2

функція ф1 (а) функція ф2 (а)

якщо а> 0 тоді якщо а> 0 тоді повернення 2 * а повернення 2 * а

інакше КонецЕсли повернення 0 КонецФункции / / ф2

КонецЕсли КонецФункции / / ф1

повертають однаковий результат, однак варіант зф1відповідає прийнятому для функцій стилю програмування, чого не можна сказати про функціїф2Втім, в даній ситуації функціюф1 краще записати так:

функція ф1 (a)

повернення (а> 0, 2 * а, 0) КонецФункции / / ф1

Процедури і функції можуть викликатися тільки з тих процедур і функцій модуля, раніше яких розташовані або вони самі, або їх попереднє опис (розд 144) Наприклад, у модулі з кодом

функція ф1 (а)

повернення (а> 0, 2 * а, 0)

. КонецФункции / / ф1

процедура п 1 (д) далі / / Попередній опис процедури п \

процедура Виконати () перем б

б = 25 * ф1 (3) п1 (б) Повідомити (б)

КонецПроцедури / / Виконати

функція ф2 (з) повернення с / 2

КонецФункции / / ф2

процедура п1 (д)

д = 4 * ф2 (д) + 5 КонецПроцедури / / п1

/ / Б = 15 функція ф1 викликається з виразу

// б = 35 б фактичний параметр процедури п1

/ / Д фактичний параметр процедури n1

/ / Д = 4 * 75 + 5 = 35

з процедури Виконати можна викликати функціюф1і процедуру nl,  але не можна викликати функціюф2

Зауваження:

1 Попередній опис процедури (функції) повинно абсолютно точно дублювати заголовок процедури (функції) Так, не допускаються розбіжності імен параметрів, і якщо заголовок процедури (функції) забезпечений ключовим словом Експорт, то воно повинне бути присутнім і в тексті попереднього опису перед ключовим словом Далі Наприклад:

процедура П3 (д1, д2) експорт далі / / Попередній опис процедури ПЗ

2 Перелік імен процедур і функцій модуля можна переглянути, натиснувши, перебуваючи в конфігураторі, на іконкуна панелі інструментів Текстовий редактор Так, для вищенаведеного набору процедур і функцій, якщо їх розмістити, наприклад, в модулі обробки Проба, ми отримаємо наведений на рис 28 список (сортування імен не задане)

Рис 28 Вікно виводу списку процедур і функцій модуля

На початок будь-якої процедури (функції) або на її попереднє опис можна переміститися, вибравши у вищенаведеному вікні необхідний рядок і натиснувши на кнопку Перейти

2101&nbsp&nbsp&nbsp ПАРАМЕТРИ ПРОЦЕДУР І ФУНКЦІЙ

Обмін даними між програмними компонентами 1С здійснюється через глобальні обєкти, змінні модуля (розд 144), діалогу (розд 15) і параметри процедур і функцій Додатково від функції можна отримати і використовувати у виразі повертається нею значення

Параметри, які використовуються при виклику процедури або функції, називаютьсяфактичнимиТак, в виразі, що стоїть в правій частині оператора присвоювання

д = 4 * ф2 (д) + 5 / /д = 4 * 75 + 5 = 35

з процедури п \попереднього розділу параметрдфункціїф2є фактичним

Параметри, що стоять в заголовку процедури (функції), в тому числі і в заголовку, присутньому в тексті попереднього опису, називаютьсяформальнимиТаким є, наприклад, параметр з в наступному заголовку:

функція ф2 (с) / / с формальний параметр функції ф2

При виклику процедури (функції) між фактичними і формальними параметрами встановлюється відповідність: формальний параметр з номером доадресує фактичний параметр (або його копію) з номером к

Розглянемо процедуру П3з трьома формальними параметрамиа, б івНехай за призначенням перший параметр будевхідним,тобто передавальним дані в процедуру, другийвихідним,тобто повертають дані в зухвалу програму, а третійвхідним-вихідним Формальні параметри використовуються у процедурі як звичайні змінні Оголошувати формальні параметри в тілі процедури допомогою оператора Перем не можна

процедура ПЗ (а, б, в)

перем с / /з проміжна змінна процедури П3

с = 3 * а

б = с в 2 / / Визначаємо значення параметрів б і в в = в + б + с / 3

КонецПроцедури / / ПЗ

Звернемося до з з процедури Виконати обробки Проба, використавши в якості фактичних параметрів змінні а1, а2 і а3

процедура Виконати () перем а, а2, аЗ ОчістітьОкноСообщеній () а = 1

аЗ = 3

ПЗ (а, а2, аЗ) / / Виклик процедури П3

Повідомити (а2 = + а2 + ; аЗ = + аЗ) КонецПроцедури / / Виконати

При такому виклику формального параметру апроцедури П3відповідає фактичний параметр а, формального параметру б фактичний параметра2 і формального параметру в фактичний параметр а3 Зрозуміло, що при виклику параметр а одержить значення 1, а параметрв значення 3 Параметрб матиме порожнє значення Як видно з прикладу, імена формальних і фактичних параметрів можуть і збігатися і відрізнятися

Зауваження   З усіх присутніх у процедурі Виконати змінних обовязково оголошення тільки змінної а2,в іншому випадку її не можна використовувати в якості фактичного параметра процедури П3, Або більш широко операндом будь-якого виразу

Після виконання П3 у вікні повідомлень виявимо наступний результат: а2 = -2 а3 = 2

Наведене нами поділ параметрів на вхідні, вихідні та вхідні-вихідні є умовним, що випливають із способу їх вживання в програмі На місці будь-якого фактичного параметра може стояти константа Наприклад, виклик

П3 (1, а2, аЗ) / / Перший фактичний параметр константа

повністю еквівалентний вищенаведеним

Більш того, константа може бути і на місці третього параметра: П3 (1, а2, 3)

хоча відповідний йому формальний параметр змінюється в тілі процедури з

У загальному випадку на місці фактичного параметра може бути будь правильно побудоване вираз Наприклад:

П3 (3 * а * а, а2, 3) / / На місці першого параметра вираз 3 * а * а

Приклади з викликомП3показують, що при виході з процедури фактичний параметр, якщо він є змінною, приймає значення формального параметра У цьому випадку говорять, що фактичні параметри передаються позасланні(Формальний параметр адресує фактичний параметр безпосередньо) Можна, однак, встановити і інший спосіб передачі параметрівза значенням Для цього в списку фор мальних параметрів перед параметром, переданим за значенням, слід поставити ключове слово (атрибут) Знач, наприклад

процедура П3 (а, б, знач в)

КонецПроцедури / / П3

У цьому випадку формальний параметр адресує копію фактичного параметра і зміни формального параметра не відбиваються на значенні фактичного Дійсно, звернувшись до модифікованої процедурі П3

перем а2

аЗ = 3

/ / Параметр а2 передається за посиланням, а параметр а3 за значенням

П3 (1, а2, аЗ) / / Виклик процедуриП3

Повідомити (а2 = + а2 + ; аЗ = + аЗ)

знайдемо у вікні повідомлень текст а2 = -2 аЗ = 3

Як і очікувалося, значення а3 залишилося без змін

За значенням параметри передаються, якщо є необхідність захистити фактичний параметр від змін у процедурі або функції Розглянемо наступний код:

функція ф1 (а) а = 2 * а повернення а

КонецФункции / / ф1

функція ф2 (знач а) а = 2 * а повернення а

КонецФункции / / ф2

процедура Виконати () ОчістітьОкноСообщеній () х = 1

КонецПроцедури / / Виконати

З прикладу видно різницю між передачею параметрів за посиланням (функціяф1)

і передачею параметрів за значенням (функціяф2)

Зауваження   Системні константи (РазделітельСтраніц, РазделітельСтрок і СімволТабуляціі) при використанні їх у фактичних формальних параметрах сприймаються як передані за посиланням змінні Цю неточність можна поправити, передаючи їх, якщо в цьому є необхідність, в програмні компоненти за значенням

Формальні параметри процедур і функцій єнеобовязковимиТобто відповідні їм фактичні параметри можуть бути опущені Наступні за ними коми повинні бути при цьому збережені Наприклад, до вищенаведеної проце дуре П3 можна звернутися, опустивши все, крім останнього, параметри:

П3 (,, аЗ)

При такому виклику і такої організації процедури П3 у виразах, де присутні формальні параметри аіб, Використовуються порожні значення Можна, однак, у формальні параметри встановити значення за замовчуванням, які будуть використовуватися у виразах за відсутності відповідних їм фактичних параметрів Для цього використовується наступний синтаксис заголовка процедури:

процедура П3 (а = 1, б = -2, в = 3)

перем с / /з проміжна змінна процедури П3

с = 3 * а

б = с в 2 / / Визначаємо значення параметрів б і в

в = в + б + с / 3 КонецПроцедури / / П3

Тепер, коли для останнього формального параметра в задано значення за умолЛ чанію, можна, викликаючи ПЗ, опустити і відповідний йому фактичний параметр не зберігаючи попередню йому кому:

П3 (1, а2) / /а2= -2 (Верно)

Якщо ж кома збережена, то процедура П3 поверне інше, помилкове значення а2:

П3 (1, а2,) / /а2= 1 (ошібка)

Оскільки компілятор помилку не відслідковує, що загалом-то дивно, потрібно дотримуватися загального правила звернення до процедури (функції) без останніх пара-

метрів: Якщо процедура (функція) викликається без останніх параметрів, то їх розділяють коми і кома, що відокремлює ці параметри від присутнього фактичного параметра, опускаються. Наприклад:

/ / Процедура П3 викликана без двох останніх параметрів П3 (а)

При викликах процедур змінні, використовувані як фактичні параметри, можуть змінювати свій тип Наприклад:

процедура п4 (а)

а = рядок; КонецПроцедури / / п4

процедура Виконати () ОчістітьОкноСообщеній () а = 1

КонецПроцедури / / Виконати

Нагадаємо, що формальними параметрами можуть бути не тільки скалярні змінні довільного типу, а й масиви (розд 26) У цьому випадку відповідні фактичні параметри також повинні бути масивами

Зауваження   Формальні параметри можуть мати агрегатний тип даних, в чому ми змогли переконатися, наприклад, в розд 113, розглядаючи контекст обробки Відповідні фактичні параметри в цьому випадку повинні мати той же тип

Джерело: Бартеньев О В 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>

*

*