Контакти

Механізм основних форм. Призначення обробників подій за допомогою підписок на події Створення нової передплати

Модулі об'єктів існують у прикладних об'єктів (документи, довідники, плани рахунків тощо) і призначені в основному для обробки стандартних подій типу запису. Тут же можна розташовувати умови типу перевірки коректності даних. Важливо розуміти, що обробка події запису можуть розташовуватися також і в модулі форми, але вона буде відпрацьовувати тільки при інтерактивноюроботи з об'єктом. Якщо ж об'єкт записується програмно, то виконуватиметься обробник події саме з модуля об'єкта.
Модуль об'єкта може бути відкритий за відповідною кнопкою на закладці.
Список зумовлених процедур - обробників подіймодулів об'єктів:

  • Модуль об'єкта довідника:
    • При Установці Нового Коду
    • При копіюванні
    • ОбробкаЗаповнення
    • ПередЗаписом
    • ПріЗаписи
    • ПередВидаленням
    • ОбробкаПеревіркиЗаповнення
  • Модуль об'єкта документа:
    • ОбробкаПроведення
    • ОбробкаЗаповнення
    • При УстановціНовогоНомера
    • При копіюванні
    • ПередЗаписом
    • ПріЗаписи
    • ПередВидаленням
    • Обробка ВидаленняПроведення
    • ОбробкаПеревіркиЗаповнення
  • Модуль об'єкта звіту:
    • ОбробкаПеревіркиЗаповнення
    • ПриКомпонівціРезультату
    • УстановитиЗаголовкиПолів
  • Модуль об'єкта обробки:
    • ОбробкаПеревіркиЗаповнення
  • Модуль об'єкта плану виду характеристик:
    • При Установці Нового Коду
    • При копіюванні
    • ОбробкаЗаповнення
    • ПередЗаписом
    • ПріЗаписи
    • ПередВидаленням
    • ОбробкаПеревіркиЗаповнення
  • Модуль об'єкта плану рахунків:
    • При копіюванні
    • ОбробкаЗаповнення
    • ПередЗаписом
    • ПріЗаписи
    • ПередВидаленням
    • ОбробкаПеревіркиЗаповнення
  • Модуль об'єкта плану видів розрахунків:
    • При копіюванні
    • ОбробкаЗаповнення
    • ПередЗаписом
    • ПріЗаписи
    • ПередВидаленням
    • ОбробкаПеревіркиЗаповнення
  • Модуль об'єкта бізнес-процесу:
    • При УстановціНовогоНомера
    • При копіюванні
    • ОбробкаЗаповнення
    • ПередЗаписом
    • ПріЗаписи
    • ПередВидаленням
    • ОбробкаПеревіркиЗаповнення
  • Модуль об'єкта завдання:
    • При УстановціНовогоНомера
    • При копіюванні
    • ОбробкаЗаповнення
    • ПередЗаписом
    • ПріЗаписи
    • ПередВидаленням
    • Обробка інтерактивної активації
    • ОбробкаПеревіркиВиконання
    • ПередВиконанням
    • ПередІнтерактивнимВиконанням
    • При виконанні
    • ОбробкаПеревіркиВиконання

Питання 06.18 іспиту 1С: Професіонал з платформи. Де розміщуються процедури-обробники подій прикладних об'єктів, наприклад, ПріЗаписи, ПередВидалення?

  1. У модулі форми
  2. У модулі об'єкта
  3. У модулі програми
  4. Таких подій у прикладних об'єктів немає

Розбір вищий.

Питання 06.41 іспиту 1С: Професіонал з платформи. За допомогою команди "Додати Обробник" можна призначити обробник події на:

  1. COM об'єкт
  2. екземпляр об'єкта 1С:Підприємство (призначати на події модуля об'єкта)
  3. екземпляр об'єкта "Форма"
  4. вірні 1,2 відповіді
  5. вірні 1,2,3 відповіді

Звернемося до синтаксу-помічника. У прикладах розібрано екземпляри об'єктів і COM об'єкти.

Додати Обробник (AddHandler)

Синтаксис:

ДодатиОбробник<Событие>, <ОбработчикСобытия>;

Параметри:

<Событие>

Подія, якій додається обробник.

Подія задається у формі<Выражение>.<Имя_события>, де:


<Выражение>- довільне вираження вбудованою мовою, результатом якого має бути об'єкт, до події якого додається обробник;

<Имя_события>- Ідентифікатор (ім'я) події.


<ОбработчикСобытия>

Процедура/функція-обробник події.

Обробником події може бути метод об'єкта вбудованої мови. Тоді<ОбработчикСобытия>задається як<Выражение>.<Имя_обработчика>, де:


<Выражение>- довільне вираження вбудованою мовою, результатом якого має бути об'єкт, метод якого служить обробником події;

<Имя_обработчика>- Ім'я методу оброблювача події.


Також як обробник події може бути задана процедура/функція, що знаходиться в області видимості. У цьому випадку обробник події визначається як ім'я процедури/функції.

Опис:

Додає обробник події.

При додаванні обробника події проводиться перевірка відповідності числа параметрів події кількості параметрів методу, що призначається як обробник.

Приклад:


Обробка = Обробки. Контроль документа. Створити (); Накладна = Документи. Накладна. Створити Документ() ; ДодатиОбробник Накладна. При Записи, Обробка. ПріЗаписиДокумента; msword = Новий COMОб'єкт ("Word.Application"); ДодатиОбробник msword. DocumentChange , ПриЗмініДокументу;

Процедура ПриЗмініДокументу() Повідомити ( "Документ змінено"); КінецьПроцедури


***

Питання 06.36 іспиту 1С: Професіонал з платформи. При визначенні обробника події на COM об'єкт кількість параметрів у процедурі - обробнику:

  1. дорівнює кількості параметрів відповідної події об'єкта
  2. на один параметр більше, ніж у відповідної події об'єкта (перший параметр містить сам об'єкт COM)
  3. на один параметр більше, ніж у відповідної події об'єкта (останній параметр містить сам об'єкт COM)
  4. завжди один параметр (сам об'єкт COM)

Правильна відповідь перша, При додаванні обробника події проводиться перевірка відповідності числа параметрів події кількості параметрів методу, що призначається як обробник.

Питання 06.37 іспиту 1С: Професіонал з платформи. При визначенні підписки на подію кількість параметрів у процедурі - обробнику:

  1. така процедура не матиме параметрів

Правильна відповідь перша. Приклад коду в обробнику події:

Процедура ПриЗмініДокументу(Відмова)
КінецьПроцедури

Приклад коду процедури-обробника:

Процедура ПриЗмініДокументу(Джерело, Відмова)

КінецьПроцедури


Питання 06.38 іспиту 1С: Професіонал з платформи. При визначенні обробника події на екземпляр об'єкта 1С:Підприємство кількість параметрів у процедурі - обробнику:

  1. дорівнює кількості параметрів відповідного оброблювача події, розташованого в модулі об'єкта
  2. на один параметр більше, ніж у відповідного оброблювача події, розташованого в модулі об'єкта (перший параметр містить сам об'єкт)
  3. на один параметр більше, ніж у відповідного оброблювача події, розташованого в модулі об'єкта (останній параметр містить сам об'єкт)
  4. така процедура не матиме параметрів
  5. завжди один параметр (сам об'єкт, для якого визначалася передплата)

Правильна відповідь друга, аналогічно минулому питанню.

Питання 06.40 екзамену 1С: Професіонал з платформи. При призначенні оброблювача події на об'єкт (примірник об'єкта 1С:Підприємство, COM об'єкт) процедура, що відповідає за відпрацювання даної події, повинна бути розташована:

  1. обов'язково у глобальному загальному модулі
  2. обов'язково в не глобальному загальному модулі
  3. обов'язково в модулі програми
  4. вибір модуля не важливий, у "межах видимості"

Правильна відповідь четверта, див. витримку з синтакс-помічника.

У об'єкту Документє свій набір подій, з допомогою яких розробник може втрутитися у процес запису документа у базі даних використовуючи обробники цих подій. Залежно від виду дії, яку виконає користувач, події документа викликаються певною послідовністю.
Існують такі основні види дій для документа:

  • Записати
  • Провести
  • Провести та закрити
  • Скасування проведення
Розглянемо послідовність виконання подій при кожній дії.

Дія Записати

Для непроведеного документа послідовність виконання подій під час запису документа з форми буде такою:
  1. Модуль об'єкта – перед записом (починається транзакція, документ ще не записаний);
  2. Модуль форми (&На сервері) - при записі на сервері (фіксація транзакції);
Зауважимо, що для розширення форми документа платформа 1С за замовчуванням встановлює значення Істинадля якості ПриЗаписіПерепроводити, Тому, при записі проведеного документа з форми платформа 1С виконає автоматично його перепроведення. У цьому випадку для проведеного документа послідовність виконання подій під час запису з форми буде такою:
  1. Модуль форми (&На Клієнті) - перед записом;
  2. Модуль форми (&На сервері) - обробка перевірки заповнення на сервері;
  3. Модуль об'єкта – обробка перевірки заповнення;
  4. Модуль форми (&На сервері) - перед записом на сервері;
  5. Модуль об'єкта - перед записом (початок транзакції, документ ще записаний);
  6. Модуль об'єкта – при записі (документ записаний);
  7. Модуль об'єкта – обробка проведення (формування набору записів рухів документа);
  8. Модуль форми (&На сервері) - при записі на сервері (записаний набір записів рухів документа, фіксація транзакції);
  9. Модуль форми (&На сервері) - після запису на сервері;
  10. Модуль форми (& На Клієнті) - після запису.
Якщо для якості ПриЗаписіПерепроводитивстановити значення Брехня, Тоді послідовність виконання подій при записі проведеного документа з форми буде такою самою як і для непроведеного документа.

Послідовність виконання подій під час запису документа з форми, у якого заборонено проведення (властивість Проведеннявстановлено на значення Заборонити) буде наступною:
На відміну від документа, у якого дозволено проведення, у цьому випадку відсутня подія ОбробкаПроведення. Але, при записі проведеного документа з переведенням та при записі документа, у якого заборонено проведення, крім самого запису, у контексті форми та в контексті об'єкта викликається також подія ОбробкаПеревіркиЗаповнення. Ця подія викликається розширенням форми для перевірки заповнення реквізитів під час запису або під час проведення документа у формі.

Дія Провести

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

Дія Провести та закрити

Послідовність виконання подій аналогічна дії провести (див. рисунок 2).

Дія Скасування проведення

Ця дія ініціює запис документа і запускає наступну послідовність подій:
  1. Модуль форми (&На Клієнті) - перед записом;
  2. Модуль форми (&На сервері) - перед записом на сервері;
  3. Модуль об'єкта – перед записом (початок транзакції);
  4. Модуль об'єкта – обробка видалення проведення (видалення рухів);
  5. Модуль об'єкта – при записі (рухи видалені, документ записаний);
  6. Модуль форми (&На сервері) - після запису на сервері (фіксація транзакції);
  7. Модуль форми (& На Клієнті) - після запису.
Якщо дії виконуються не з форми (виконуються програмно), відмінності полягають у тому, що не виконуються події форми!

У об'єкту Документє свій набір подій, з допомогою яких розробник може втрутитися у процес запису документа у базі даних використовуючи обробники цих подій. Залежно від виду дії, яку виконає користувач, події документа викликаються певною послідовністю.
Існують такі основні види дій для документа:

  • Записати
  • Провести
  • Провести та закрити
  • Скасування проведення
Розглянемо послідовність виконання подій при кожній дії.

Дія Записати

Для непроведеного документа послідовність виконання подій під час запису документа з форми буде такою:
  1. Модуль об'єкта – перед записом (починається транзакція, документ ще не записаний);
  2. Модуль форми (&На сервері) - при записі на сервері (фіксація транзакції);
Зауважимо, що для розширення форми документа платформа 1С за замовчуванням встановлює значення Істинадля якості ПриЗаписіПерепроводити, Тому, при записі проведеного документа з форми платформа 1С виконає автоматично його перепроведення. У цьому випадку для проведеного документа послідовність виконання подій під час запису з форми буде такою:
  1. Модуль форми (&На Клієнті) - перед записом;
  2. Модуль форми (&На сервері) - обробка перевірки заповнення на сервері;
  3. Модуль об'єкта – обробка перевірки заповнення;
  4. Модуль форми (&На сервері) - перед записом на сервері;
  5. Модуль об'єкта - перед записом (початок транзакції, документ ще записаний);
  6. Модуль об'єкта – при записі (документ записаний);
  7. Модуль об'єкта – обробка проведення (формування набору записів рухів документа);
  8. Модуль форми (&На сервері) - при записі на сервері (записаний набір записів рухів документа, фіксація транзакції);
  9. Модуль форми (&На сервері) - після запису на сервері;
  10. Модуль форми (& На Клієнті) - після запису.
Якщо для якості ПриЗаписіПерепроводитивстановити значення Брехня, Тоді послідовність виконання подій при записі проведеного документа з форми буде такою самою як і для непроведеного документа.

Послідовність виконання подій під час запису документа з форми, у якого заборонено проведення (властивість Проведеннявстановлено на значення Заборонити) буде наступною:
На відміну від документа, у якого дозволено проведення, у цьому випадку відсутня подія ОбробкаПроведення. Але, при записі проведеного документа з переведенням та при записі документа, у якого заборонено проведення, крім самого запису, у контексті форми та в контексті об'єкта викликається також подія ОбробкаПеревіркиЗаповнення. Ця подія викликається розширенням форми для перевірки заповнення реквізитів під час запису або під час проведення документа у формі.

Дія Провести

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

Дія Провести та закрити

Послідовність виконання подій аналогічна дії провести (див. рисунок 2).

Дія Скасування проведення

Ця дія ініціює запис документа і запускає наступну послідовність подій:
  1. Модуль форми (&На Клієнті) - перед записом;
  2. Модуль форми (&На сервері) - перед записом на сервері;
  3. Модуль об'єкта – перед записом (початок транзакції);
  4. Модуль об'єкта – обробка видалення проведення (видалення рухів);
  5. Модуль об'єкта – при записі (рухи видалені, документ записаний);
  6. Модуль форми (&На сервері) - після запису на сервері (фіксація транзакції);
  7. Модуль форми (& На Клієнті) - після запису.
Якщо дії виконуються не з форми (виконуються програмно), відмінності полягають у тому, що не виконуються події форми!

Програмістові, який має небагато досвіду на платформі 1С 8.2, буває складно розібратися: ПередЗаписом, ПриЗапису, ПісляЗапису, на сервері, на клієнті, в модулі форми, в модулі об'єкта, а-а-а-а-аааа.....
Саме таке складне почуття нерозуміння було спершу і в мене. У процесі навчання та реального досвіду була створена ця шпаргалка, метою якої було "розкласти все по поличках", щоб було чітке розуміння в якому випадку який обробник потрібно використовувати і в якій послідовності вони запускаються під час запису об'єктів.

Навіщо нам взагалі потрібні ці обробники?
Найчастіше програмісту потрібно перевизначити стандартну поведінку системи під час запису об'єктів, саме: скасувати запис, у разі якихось умов; запитати додаткову інформацію користувача; дозаповнити реквізити; щось ще записати до бази даних на підставі цього запису; щось змінити на формі після запису тощо. і т.п. Кожен програміст рано чи пізно стикається з подібними завданнями, тому знати призначення та послідовність запуску цих подій програмісту, який працює на платформі 1С 8.2, необхідно.

У модулі форми чи модулі об'єкта?
Спочатку треба визначитися, чи потрібні нам дані форми? Чи записуватиметься програмним способом або лише інтерактивно? Чи будемо вести діалог із користувачем?
Справа в тому, що частина подій виконується на рівні модуля форми і це означає, що вони виконуються лише при інтерактивному записі, а також у цих подіях ми можемо звертатися до даних форми, вести діалог із користувачем.
Інша частина подій виконується на рівні модуля об'єкта як при інтерактивному, так і при програмному записі.
Тому можна відразу визначитися з обробником модуля форми або модуля об'єкта працюватимемо.

Модуль форми: на клієнті чи сервері?
Далі, якщо обраний модуль форми, треба визначитися який обробник знадобиться: виконуваний на клієнті, чи виконуваний на сервері. Якщо буде потрібно діалог з користувачем, то на клієнті, або на сервері. Їх можна відрізнити на ім'я директиви компіляції або на ім'я обробника (коли на сервері, це пишеться в імені, наприклад ПередЗаписомНа Сервере()).

Як вибрати конкретний обробник?
Вибір залежить від поставленого завдання. Що конкретно можна робити в кожному обробнику опишу нижче, а поки що приклад.

Приклад вибору обробників подій запису об'єкта:
Бувають завдання, коли потрібно використовувати кілька обробників для вирішення одного завдання. Наприклад, треба запитати інформацію у користувача під час запису: «Створюватимемо новий документ на підставі цього запису?» і, якщо користувач відповість ствердно, то треба створити новий документ з посиланням на об'єкт, що записується. Причому запис нового документа слід виконувати у транзакції, т.к. якщо поточний запис з якихось причин буде скасовано, то вже створений і записаний документ не повинен залишитися в базі даних.
Для вирішення цього завдання потрібно використовувати обробники події модуля форми з двох причин:
1) Діалог з користувачем можливий лише на клієнті, а клієнтські обробники є лише у модулі форми. Для діалогу будемо використовувати клієнтську процедуру модуля форми ПередЗаписом() і збережемо відповідь користувача в параметрі цієї процедури «ПараметриЗапису».
2) А в процедурі ПріЗаписуНа Сервері() модуля форми приймемо цей параметр і залежно від нього створюватимемо документ чи ні. Чому саме ця процедура? Посилання буде отримано тільки після запису, але оскільки нам потрібно записувати в транзакції, то потрібно використовувати процедури до завершення транзакції, але вже мають посилання на об'єкт, що записується. ПередЗаписом() не підходить, оскільки ще немає посилання, а ПісляЗапису() не підходить, оскільки транзакція вже завершена. Залишається ПріЗапис(), але перед нами постає вибір: модуля форми або модуля об'єкта? Оскільки обробник події ПріЗапису() модуля об'єкта не містить параметр, що містить відповідь користувача, а подія ПріЗаписуНаСервері() модуля форми містить, то відповідь очевидна-використовуємо цю подію ПріЗаписуНаСервері() модуля форми тому що:
1) Ця подія виконується в транзакції 2) Містить параметр «ПараметриЗапису», в якому вже міститься відповідь користувача, який передався з процедури ПередЗаписом() 3) Посилання вже створене і можна створювати новий документ, використовуючи це посилання.

Ну і тепер послідовність запуску подій (у тому порядку, в якому вони перераховані) і невеликі подробиці:
Багато обробників мають параметр «Відмова». Там, де цей параметр присутній означає, що в цьому обробнику ще можна відмовитися від запису, надавши параметру "Відмова" значення Істина, і тоді запис зроблено не буде.
1) Модуль форми ПередЗаписом (Відмова, Параметри Запису)
Виконується на клієнті!
Цей обробник слід використовувати, якщо необхідно організувати діалог із користувачем перед тим, як записати об'єкт. Запросити додаткову інформацію, попередити про що-небудь, дати можливість відмовитися тощо.
Другий параметр цього обробника «Параметри запису» має тип «Структура». У документів ці параметри заповнюються системою визначеними параметрами РежимЗапису, РежимПроведення. Можна додати свої.
Ці параметри передаються між подіями форми ПередЗаписомНа Сервері, ПриЗаписуНаСервері, ПісляЗаписуНаСервері, де їх можна благополучно використовувати. Наприклад, при записі регістра відомостей, треба зробити запис в інший регістр відомостей старе значення ресурсу. Можна передати старе значення в ці параметри і вже в ПріЗаписіНа Сервері зробити запис в інший регістр.
2) Модуль форми Обробка Перевірки Заповнення На Сервері (Відмова, Перевірені Реквізити)
3) Модуль об'єкта Обробка Перевірки Заповнення (Відмова, Реквізити, що перевіряються)

Ці два обробники перевірки заповнення реалізуються через параметр «Реквізити, що перевіряються» типу Масив, що містить реквізити, які треба перевіряти (тобто яким встановлено властивість перевірки заповнення «Видавати помилку»)
І якщо з цього масиву прибрати реквізит, то перевірятись він не буде, якщо додати, то виконуватиметься перевірка заповнення.
Таким чином, можна сказати, що ці два обробники подій призначені:
Для включення у перевірку заповнення тих реквізитів, які мають властивості «ПеревіркаЗаповнення» вказано «Не перевіряти». Для цього треба додати цей реквізит у масив параметр «Реквізити, що перевіряються»
Щоб виключити з автоматичної перевірки реквізити, які мають властивість перевірки заповнення «Видавати помилку» залежно від умов. Для цього треба видалити цей реквізит із масиву параметра «Реквізити, що перевіряються»
Є кілька особливостей, які необхідно враховувати:
Якщо у форми з якої записується об'єкт у властивостях не встановлено «Перевіряти Заповнення Автоматично», тоді ці обробники перевірки заповнення не викликаються і перевірки не відбуваються!
Викликаються лише під час інтерактивного запису! Під час програмного запису не викликаються. Для перевірки потрібно використовувати метод об'єкта Перевірити Заповнення (), який ініціює запуск цих подій.
Для документів, які мають можливість проведення, ці події перевірки заповнення викликаються лише під час проведення!
Обидві ці події виконуються на сервері, відмінність у тому, що Обробка Перевірки Заповнення На Сервері () це подія модуля форми і, отже, є доступ до даних форми. А Обробка Перевірки Заповнення () - подія модуля об'єкта.
4) Модуль форми ПередЗаписомНа Сервері(Відмова, ПоточнийОб'єкт, ПараметриЗапису)
У цьому обробнику можна доповнити реквізити об'єкта або провести додаткові перевірки. Є доступ до даних форми. Існує параметр ПоточнийОб'єкт.
Параметр ПоточнийОб'єкт має тип класу «об'єкт» залежно від типу об'єкта, що записується (ДовідникОб'єкт,ДокументОб'єкт і т.д). Тобто. екземпляр класу об'єкт створено, і можна звернутися до його властивостей та методів, але до бази даних ще не записано.
Початок транзакції
5) Модуль об'єкта ПередЗаписом (Відмова)
У цьому обробнику можна доповнити реквізити об'єкта або провести додаткові перевірки.
Для документів до параметрів даного обробника додаються ще два параметри: Режим Записи, Режим Проведення.
Запис
6) Модуль об'єкта При Установці НовогоНомера (Стандартна Обробка, Префікс)
Виникає в момент, коли встановлюється номер нового документа, завдання або бізнес-процесу.
Або При Установці Нового Коду (Стандартна Обробка, Префікс)
Виникає у момент, коли виконується встановлення нового коду елемента довідника, вузла плану обміну або коду плану видів характеристик.
Ці події викликаються об'єктів у яких вказано властивість «Автонумерація» і лише нових об'єктів.
Якщо встановити параметр Стандартна Обробка значення Брехня, то новий номер генеруватися не буде і можна програмно задати код об'єкта в цьому обробнику.
7) Модуль об'єкта ПріЗапису (Відмова)
Викликається після запису об'єкта до бази даних, але до закінчення транзакції запису.
Посилання вже є і можна записати до бази даних додаткові дані на основі поточного об'єкта, використовуючи це посилання.
Наприклад, при записі створювати інший документ, що містить реквізит посилання на записуваний.
8) Модуль форми При Запису На Сервері (Відмова, Поточний Об'єкт, Параметри Запису)
Викликається після запису об'єкта до бази даних, але до закінчення транзакції запису. Є доступ до даних форми. Є останній шанс відмовитись від запису.
Параметр ПоточнийОб'єкт має тип класу «об'єкт» залежно від типу об'єкта, що записується (ДовідникОб'єкт,ДокументОб'єкт і т.д). Можна звернутися до його властивостей та методів.
Завершення транзакції
9) Модуль форми ПісляЗаписуНа Сервері(ПоточнийОб'єкт, ПараметриЗапису)
Виконується на сервері.
Можна використовувати для того, щоб візуально щось відобразити на формі.
10) Модуль форми ПісляЗапису (Параметри Запису)
Виконується на клієнті!
Можна використовувати для того, щоб візуально щось відобразити на формі або попередити користувача.

Увага! Перед вами ознайомлювальна версія уроку, матеріали якого можуть бути неповними.

Увійдіть на сайт як учень

Увійдіть як учень, щоб отримати доступ до матеріалів школи

Створення конфігурацій 1С: додаємо обробку

Продовжуємо вивчення азів створення конфігурацій на 1С.

На цьому уроці ми разом створимо нову обробку, а потім напишемо для неї команди, які демонструють роботу із довідником "Співробітники".

Повертаємось у конфігуратор та відкриваємо дерево конфігурації.

Додаємо нову обробку

Правою кнопкою натискаємо на розділі "Обробки" та вибираємо пункт "Додати":

Відкрилося вікно створення нової обробки. Перейдемо на закладку "Основні" та вкажемо як ім'я обробки "Обробка Довідників":

Створюємо форму для обробки

Перейдемо на закладку "Форми" натиснемо на зелений плюсик, щоб додати нову форму (візуальне представлення нашої обробки):

З'явився конструктор створення форми. Залишимо все за замовчуванням і натиснемо "Готово":

Відкрилася нова форма:

Створюємо нову команду для форми

Перейдемо на закладку "Команда" -> "Команда форми":

Додамо нову команду (зелений плюсик):

І у властивостях нової команди вкажемо ім'я "Висновок Усіх Співробітників":

Натисніть у її властивостях на лупу поруч із полем " Дія " , щоб задати обробник команди. Виберемо варіант створення обробника "На Клієнті" та натиснемо "ОК":

Нас перенесло в модуль форми в процедуру-обробник команди "Висновок Усіх Співробітників":

Пишемо код оброблювача команди

Тепер наше завдання написати код внутрішньою мовою 1С, який перебиратиме всі елементи довідника "Співробітники".

Відразу хочу сказати, що цей код не можна писати прямо в процедурі "Висновок Усіх Співробітників", оскільки вона виконується на клієнті (зверніть увагу на спеціальну сходинку перед процедурою "& На Клієнті"). Спроба прочитати дані з бази в процедурі клієнта завжди буде призводити до помилки (поки просто запам'ятайте це).

Тому давайте допишемо наприкінці модуля процедуру такого виду:

Зверніть увагу, що перед нею я вказав ознаку "На сервері". Це означає, що вона буде виконуватися на сервері, а значить, ми можемо з неї читати дані довідника.

Тепер організуємо виклик цієї процедури з клієнтської "Висновок Всіх Співробітників":

Тут така логіка:

  1. Користувач викликає команду "Виведення Всіх Співробітників" (наприклад, натисканням на кнопку, якої у нас ще правда немає)
  2. Команда запускає однойменну процедуру-обробник "Висновок Усіх Співробітників" на клієнті (адже кнопка, а значить і команда знаходяться на клієнті)
  3. Клієнтська процедура "Виведення всіх Співробітників" робить виклик серверної процедури "Виведення всіх співробітників на сервері"
  4. Серверна процедура "Висновок Усіх Співробітників На Сервері" читає дані довідника з бази та виводить їх у вікно повідомлень

Нам залишилася зовсім небагато - написати код процедури "Висновок Усіх Співробітників На Сервері", який пробігається по елементах довідника "Співробітники" і виводить їх у вікно повідомлень.

Це насправді нескладно. Обхід усіх довідників у 1С однотипний. А значить навчившись це робити зараз із довідником "Співробітники", ви зможете робити також і з будь-якими іншими довідниками.

Для доступу до даних довідника використовується менеджер, доступ до якого здійснюється так:

Менеджер = Довідники. Співробітники;

У цьому реченні ключова частина знаходиться праворуч від знака одно. Ліворуч - це просто змінна, в яку ми зберігаємо менеджер, щоб працювати з ним далі. Ім'я цієї змінної могло бути не тільки "Менеджер", а й будь-яке інше - хоч "Барабашка".

Що таке менеджер довідника? Менеджер – це ще не самі дані довідника. Менеджер - це деякий програмний об'єкт (можете уявляти його у вигляді чорної скриньки), через який ми можемо щось робити з довідником.

Менеджер довідника - це як би такий прошарок між нашим кодом та даними довідника. І виходить, що якщо нам потрібно прочитати всі елементи довідника, то ми не можемо цього зробити безпосередньо. Ми можемо тільки попросити про це наш прошарок між нами та довідником, тобто менеджер.

Щоб зробити це - необхідно викликати вбудований менеджер метод "Вибрати". Викликається через точку після імені змінної, в якій зберігається менеджер, і повертає колекцію елементів довідника:

Менеджер = Довідники. Співробітники; Вибірка = Менеджер. Вибрати() ;

Що являє собою вибірка? Вибірка (знову ж таки лише ім'я змінної, у якому ми зберігаємо результат роботи методу " Вибрати " і може бути будь-яким іншим) є колекцію, але з таку, як наприклад масив чи список значень.

Вибірка являє собою об'єкт - знову ж таки думайте про нього як про ящик, але ще не самі дані. Особливість цього об'єкта у цьому, що він вміє перебирати елементи потрібного нам довідника. Причому перебирає їх динамічно. Це означає, що використання вибірки не зчитує всі елементи довідника відразу, а вибирає їх порціями з даних.

Такий підхід дозволяє досить швидко обходити за допомогою вибірки великі списки довідників, не завантажуючи їх на згадку про комп'ютер все відразу.

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

Коли дані (елементи довідника) у вибірці закінчаться, метод "Наступний" поверне Брехня і цикл припиниться.

Після кожного виклику методу "Наступний" (за умови, що він повернув "Істина") вибірка міститиме в собі всі поля з даними лише ліченого елемента довідника, звертатися до яких можна за іменами через точку:

Виходить одночасно - ми працюємо з даними лише одного з елементів довідника. І тут ми можемо або одразу їх вивести користувачеві (методом "Повідомити") або, наприклад, ми можемо скласти їх в іншу колекцію (масив), щоб потім вже зараз із ними щось зробити. Все залежить від завдання, яке ми вирішуємо.



Сподобалася стаття? Поділіться їй