Реалізовано в версії 8.3.6.1977.

Ми реалізували принципово новий механізм адаптації прикладних рішеньпід конкретного споживача - механізм розширень.

Чим хороші розширення?

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

Як виглядає цей процес зараз? Є типова конфігурація. Вона знаходиться на повній підтримці постачальника. Це означає, що змінювати її не можна. Періодично постачальник випускає нові (поліпшені) версії цієї конфігурації. У такій ситуації оновлення старої версіїконфігурації на нову версію виконується повністю автоматично. Це зручно і не вимагає від замовника якихось особливих навичок або знань.

Але часто замовник хоче щось додати чи щось змінити у типовій конфігурації «під себе». Для цього режим підтримки змінюється, конфігурація знімається з повної підтримки. Партнер, який виконує впровадження, або власні IT фахівці замовника, вносять в неї необхідні зміни. З цього моменту повністю автоматичне оновлення типової конфігурації на нову версію, випущену поставки товару, стане неможливим.

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

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

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

Коли постачальник випускає нову версію типової конфігурації, автоматично оновлюється, оскільки режим підтримки типової конфігурації не змінювався. Вона залишилася на повній підтримці постачальника. А при запуску оновленого прикладного рішення платформа знову автоматично об'єднає змінену типову конфігурацію з вашим розширенням. І замовник продовжить працювати зі зміненим, за його бажанням, типовим рішенням.

Коли потрібно використовувати розширення?

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

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

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

Інша ситуація - це доопрацювання типової конфігурації під конкретного замовника у нього на впровадженні. Або ж доопрацювання типової конфігурації, які виконують для себе IT фахівці замовника власними силами. Якщо всі ці доробки виконати в розширенні, то типова конфігурація залишиться на повну підтримку, що значно спростить її подальший супровід.

Є спокуса використовувати розширення для створення тиражних прикладних рішень, однак робити цього не варто. По-перше, тому, що розширення не проектувалися під такі завдання. А по-друге, тому, що інші механізми платформи, наприклад механізми поставки і підтримки, нічого не знають про розширення.

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

Саме для цього завдання ми і створили механізм розширень. Звичайно, в ньому можна помітити різні риси і інших перерахованих напрямків розробки. Але вони не є його основним призначенням і не повинні збивати вас з пантелику.

Що можна змінювати вже зараз за допомогою розширень?

Поки зроблено не дуже багато з того, що планується зробити. Механізм, звичайно, буде розвиватися. Але те, що вже зроблено, може бути корисно в багатьох випадках на впроваджень. зараз:

  • можна змінювати керовані форми, Існуючі в типовій конфігурації;
  • Можна додавати нові підсистеми. Можна змінювати склад підсистем, наявних у типовій конфігурації;
  • можна змінювати ролітипової конфігурації, додаючи в них об'єкти, створені в розширенні;
  • можна змінювати командний інтерфейстипової конфігурації (основного розділу, підсистем);
  • Можна додавати нові звітиі обробки.

Надалі ми плануємо поступово нарощувати функціональність розширень і будемо раді отримати вашу думку про те, яка функціональність найбільш затребувана на впроваджень з невеликими доробками.

Як влаштовано розширення?

Розширення дуже схоже на звичайну конфігурацію. Воно також представляється у вигляді дерева об'єктів. Для роботи з розширенням використовуються ті ж прийоми роботи, що і зі звичайною конфігурацією.

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

Запозичені об'єкти потрібні не завжди. Найкраще це пояснити на «побутовому» прикладі, якщо провести аналогію з обідом в ресторані.

Ситуація перша, коли запозичені об'єкти потрібні.

Ви звикли обідати в одному і тому ж ресторані. Ви завжди замовляєте біфштекс і чай. Наприклад, тому що вони дуже гарні в цьому ресторані. Або з іншої причини. Це не важливо. Важливо лише те, що їсти ви збираєтеся саме їх, і ніщо інше.

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

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

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

Ще через тиждень ви приходите в ресторан, і бачите, що біфштекс і чай зникли з меню. Ви встаєте і йдете (повідомлення про помилку підключення розширення). Тому що ви хотіли саме їх. А про інших стравах (об'єктах) ви поняття не маєте. Розробник не навчив вас, як правильно їсти равликів чи омарів.

Інша ситуація, коли можна обійтися без запозичених об'єктів.

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

Якщо описати це сухою мовою розробників то вийде, що запозичувати об'єкти потрібно:

  • Коли вони необхідні для візуального конструювання. Наприклад, ви розширюєте форму і додаєте реквізит форми типу СправочнікВалюти.Ссилка. Тоді звичайно ви повинні запозичувати довідник валюти, Щоб при підключенні до типової конфігурації бути впевненими в тому, що в ній такий довідник все ще є.
  • Коли вони необхідні для роботи коду. Наприклад, в коді розширення ви звертаєтеся до реквізиту довідника номенклатура - Імпортер. Тоді цей реквізит також треба запозичувати, щоб при підключенні бути впевненим, що у типовій конфігурації все ще існує такий реквізит у довідника номенклатура.

підключення розширення

Ви створюєте розширення в конфігураторі. Після того, як воно налагоджено і перевірено, ви можете його відкинути, зберігши розширення в файл * .cfe.

Цей файл ви можете передати замовнику. Замовник самостійно завантажить його в свою інформаційну базу в режимі 1С: Підприємство за допомогою стандартної функції Керувати розширеннями конфігурації.

Робота з розширеннями доступна з вбудованої мови, тому в прикладному рішенні ви можете створити власну обробку, яка буде завантажувати розширення. Щоб розширеннями «не балуватися» все підряд, ми додали нове право - Адміністрування розширень конфігурації.

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

Щоб розширення «заробило», сеанс потрібно перезапустити. При старті сеансу, безпосередньо перед викликом події УстановкаПараметровСеанса, Будуть підключені всі розширення, що зберігаються в інформаційній базі і відповідні поточним значенням роздільників даного сеансу.

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

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

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

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

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

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

Тепер для вас така ситуація не є проблемою. І вам не потрібно «перелопачувати» весь код розширення, щоб замість номенклатуранаписати Товари. Працює і. Тому вам достатньо всього лише змінити ім'я запозиченого об'єкта на Товари, А решта зміни в розширенні платформа зробить сама. Або з вашої мінімальною допомогою.

Робота розширення

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

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

Основну концепцію, яка використовується під час спільної роботи конфігурації і розширення, можна описати наступним чином. У тих місцях, де вони «не перетинаються», розширення доповнює конфігурацію. У тих місцях, де вони «перетинаються» - буде застосований ефект розширення.

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

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

Якщо змін не було, або вони були тільки в типовій конфігурації - застосовується значення з типової конфігурації. В інших випадках застосовується значення з розширення.

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

Для модулів форм використовується інший підхід. Для запозиченої форми в розширенні створюється власний модуль з власними обработчиками всіх подій. У режимі 1С: Підприємство обидва модуля форми (з типової конфігурації і з розширення) об'єднуються в одному контексті. З цієї причини кожне розширення має свій префікс, який додається до обробникам всіх подій в модулі форми. Щоб не було збігів з обработчиками з типової конфігурації. Після цього обробники подій і команд викликаються послідовно і синхронно. Спочатку обробник з розширення. Потім з типової конфігурації. Цю послідовність ви можете поміняти, або зовсім заборонити виконання обробника з типової конфігурації.

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

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

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

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

Розширення - це майже конфігурація

Ми говорили на початку, що розширення схоже на звичайну конфігурацію. Тому в ув'язненні кілька слів хочеться сказати про те, наскільки розширення інтегровані з іншими механізмами платформи.

У розширення (як і у звичайній конфігурації) є основна конфігурація і конфігурація бази даних. Механізм порівняння і об'єднання конфігурацій працює з розширеннями так само, як і зі звичайними конфігураціями.

Ви можете вивантажити розширення в файл (правда, з іншим розширенням * .cfe), і завантажити з файлу. Розширення можна вивантажувати / завантажувати в XML.

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

З'явилися нові параметри командного рядка для роботи з розширеннями, а також нові події в журналі реєстрації.

У вбудованій мові основний об'єкт для роботи з розширеннями це МенеджерРасшіренійКонфігураціі.

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

При розгляді механізму розширення конфігурації будуть використовуватися такі терміни:

  • розширювана конфігурація- основна конфігурація інформаційної бази, для якої буде застосований ефект розширення або для якої розширення розробляється.
  • розширення конфігурації- набір об'єктів конфігурації, що підключаються до розширюваної конфігурації і містить набір об'єктів, що додаються до розширюваної конфігурації. Розширення може включати в себе як об'єкти розширюється конфігурації, так і об'єкти, які відсутні в розширюваної конфігурації.
  • власний об'єкт- самодостатній об'єкт конфігурації, який може знаходитися як в розширюваної конфігурації, так і в розширенні (звіт, обробка або підсистема).
  • запозичений об'єкт- власний об'єкт, для якого створено розширення конфігурації.
  • розширюваний об'єкт- власний об'єкт, для якого в запозиченому об'єкті змінені будь-які параметри (властивості, форми і т. Д.).
  • розширює об'єкт- це запозичений об'єкт, до якого внесено зміни щодо расширяемого об'єкта. Наявність в запозиченому об'єкті тільки контрольованих властивостей робить запозичений об'єкт розширюють.
  • результуючий об'єкт- це власний об'єкт плюс об'єднання всіх розширюють об'єктів (якщо розширень кілька). Якщо для власного об'єкта немає розширюють об'єктів - він стає результуючим «без змін». Тобто в конфігурації, з якою працює користувач - всі об'єкти є результуючими, незалежно від наявності та кількості встановлених розширень.
  • розширює властивість- властивість запозиченого об'єкта, яке змінює однойменну властивість расширяемого об'єкта.
  • контрольоване властивість- властивість запозиченого об'єкта, значення якого перевіряється при підключенні розширення до розширюваної конфігурації. Якщо при підключенні розширення (в режимі 1С: Підприємство) значення контрольованого властивості в розширенні не збіжиться із значенням цього ж властивості в розширюваної конфігурації, розширення НЕ буде підключено.
  • модифікуються властивість- властивість запозиченого об'єкта, значення якого в результуючому об'єкті буде виходити з розширення.

Властивість запозиченого об'єкта не може бути одночасно контрольованим і модифікується.

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

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

Як розширюваних об'єктів можуть виступати:

  • Керовані форми;
  • ролі;
  • підсистеми;
  • Налаштування початкової сторінки (робочого столу) прикладного рішення;
  • Загальні модулі;
  • Модулі об'єктів для всіх типів об'єктів;
  • Модулі менеджерів для всіх типів об'єктів;
  • Модуль сеансу;
  • Модуль керованого застосування;
  • Модуль зовнішнього з'єднання;
  • Модулі команд.

Як власних об'єктів розширення можуть виступати:

  • підсистеми;
  • обробки;
  • Звіти;
  • Реквізити, табличні частини і реквізити табличних частин в запозичених обробках і звітах;
  • ролі;
  • XDTO-пакети;
  • Web-сервіси;
  • HTTP-сервіси;
  • WS-посилання;
  • Загальні макети;
  • Загальні команди;
  • Загальні модулі (крім глобальних серверних і привілейованих загальних модулів);
  • Групи команд;
  • Загальні картинки;
  • Форми, макети і команди запозичених об'єктів:
  • Планів обміну;
  • Критерії відбору;
  • Сховищ налаштувань;
  • довідників;
  • документів;
  • Журналів документів;
  • перерахувань;
  • звітів;
  • обробок;
  • Регістрів відомостей;
  • Регістрів накопичення;
  • Регістрів бухгалтерії;
  • Регістрів розрахунку;
  • Планів видів характеристик;
  • Планів рахунків;
  • Планів видів розрахунку;
  • Бізнес-процесів;
  • завдань;
  • таблиць зовнішніх джерелданих;
  • Кубів зовнішніх джерел даних;
  • Таблиць вимірів зовнішніх джерел даних.

Серед контрольованих властивостей слід особливо виділити:

  • Склад плану обміну;
  • Зумовлені елементи для довідників, планів видів характеристик, планів рахунків і планів видів розрахунків.

У базових версіях прикладних рішень робота з розширеннями не підтримується.

Починаючи з редакції 8.3.6 платформи 1С: Підприємства в ній з'явився механізм розширення конфігурацій.

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

Нові можливості

обмеження

Звичайно є і обмеження:

  • У розширення можна додавати тільки обмежений набір нових метаданих. Це підсистеми, ролі, звіти, обробки і деякі інші.
  • У деяких ситуаціях можливі проблеми з налагодженням.

приклад використання

Давайте розглянемо на прикладі як можна перевизначити процедуру загального модуля з використанням розширення конфігурації. Тобто це той випадок, коли нам треба оперативно виправити якусь помилку без випуску релізу і поновлення основний конфігурації. А тепер нехай же у нас є спільний модуль professia1c_ry_Расшіренія.

І в ньому найпростіша процедура, яка виводить повідомлення:

Процедура ВивестіСообщеніе () Експорт Повідомлення = Новий СообщеніеПользователю; Повідомлення. текст = "Це основна конфігурація"; Повідомлення. Повідомити (); КонецПроцедури

А тепер давайте виведемо ще одне повідомлення за допомогою розширення. В першу чергу нам звичайно ж треба створити саме розширення. В меню конфігуратора вибираємо Конфігурація - Розширення конфігурації


У вікні тиснемо кнопку Додатиі заповнюємо поля з властивостями розширення. поля ім'яі синонімкоментарів не потребують. Префікс буде використовуватися імені розширює процедури, яка буде заміщати вихідну. А в списку призначенняз трьох можливих варіантів(Виправлення, Адаптація, Доповнення) виберемо виправлення:

Далі в списку розширень прибираємо прапорці «Безпечний режим, ім'я профілю безпеки»і «Захист від небезпечних дій»:


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

Для цього в дереві метаданих основний конфігурації клацаємо правою кнопкою по потрібному загальному модулю і вибираємо пункт «Додати в розширення»:


Та тепер наше розширення буде виглядати наступним чином:

Але якщо ми подивимося на код загального модуля розширення, то побачимо, що він порожній. І наступним кроком треба додати в нього процедуру. Знову йдемо в основну конфігурацію, відкриваємо код загального модуля, клацаємо правою кнопкою по процедурі, знову вибираємо пункт «Додати в розширення»і у вікні, вибираємо тип виклику викликати замість:

У підсумку в загальний модуль розширення буде додана процедура з наступним кодом:

& Замість ( "ВивестіСообщеніе")Процедура Сообщенія_ВивестіСообщеніе () // Вставити вміст методу.ПродолжітьВизов (); КонецПроцедури

Як бачимо в імені процедури присутній префікс, який був зазначений при створенні розширення. Тепер залишається тільки допрацювати код процедури так як нам потрібно:

& Замість ( "ВивестіСообщеніе")Процедура Сообщенія_ВивестіСообщеніе_ () Повідомлення = Новий СообщеніеПользователю; Повідомлення. Текст = "Це розширення"; Повідомлення. Повідомити (); КонецПроцедури

І тепер можна легко переконатися, що у нас буде виконуватися код розширення замість коду основний конфігурації, якщо виконати наступний код:

Professia1c_ry_Расшіренія. ВивестіСообщеніе ();

Вивчивши досвід використання попередніх версій програми, і врахувавши той факт, що яким би універсальним і всеосяжним не було конкретне рішення, в кінцевому підсумку в 90% випадків потрібно його доопрацювання під кінцевого користувача. Розробники 8 версії програми 1С реалізували кілька принципово нових рішень для мінімізації необхідності зміни стандартних механізмів конфігурацій:

  • Буквально з перших версій програми у елементів багатьох довідників з'явилася можливість створення додаткових властивостей і категорій з використанням відповідного плану видів характеристики і регістра відомостей;
  • додаткові друковані формиі форми заповнення табличних частин, так само як і додаткові звіти і обробки тепер можуть викликатися з відповідного довідника;
  • Обробка стандартних процедур об'єктів здійснюється не внесенням змін до модуль, а шляхом підписок на події;
  • І, нарешті, з версії платформи 8.3.6 з'явилися в 1С розширення конфігурації.

Що таке розширення конфігурації 1С, як з ними працювати, обмеження у використанні - ось той спектр питань, які ми спробуємо розкрити в нашій статті.

трохи теорії

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

  1. Порівнювати типову і наявну структуру метаданих;
  2. У разі суттєвої відмінності типових елементів стежити за коректним оновленням;
  3. Вносити відповідні зміни після оновлення.

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

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

Ситуації, в яких можна використовувати розширення

Як і у будь-якого іншого інструменту, у механізму розширень існує ряд характеристик, і обмежень які визначають область їх використання:

  • Розширення можуть працювати з керованими формами;
  • Механізм підтримує зміну і додавання існуючих підсистем;
  • До виходу платформи 8.3.8 в розширенні можна було тільки змінювати існуючі ролі, після поновлення вони дозволили додавати нові, обмежуючи доступ навіть до об'єктів основної бази;
  • Існуючий механізм дозволяє за власним бажаннямзмінювати командний інтерфейс підсистем і основного розділу конфігурації;
  • Також цей інструментарій дозволяє додавати обробки і звіти без внесення змін до структури бази;
  • У версії платформи 8.3.9.718 значно перероблений механізм діагностування сумісності розширення і основний конфігурації.

З вищесказаного стає зрозуміло, що:

  1. При роботі зі звичайними формами функціонал розширень значно обмежений;
  2. Хоча і полегшився процес оновлення основного конфігурації, проте можливість використання конкретного розширення (в тому числі і в якості тиражних рішень) може бути серйозно обмежена як змінами вихідної структури, так і декількома паралельно використовуваними розширеннями;
  3. Використовувати цей механізм доцільно в тих випадках, коли є необхідність диференціації зовнішнього виглядуі функціоналу, використовуваними різними користувачами, або коли власними силами проводиться доробка типової конфігурації, що знаходиться на підтримці.

Перейдемо до практики. В якості вихідної бази ми будемо використовувати конфігурацію «Зарплата і управління персоналом» версії 3.1.3.223, роботи будуть здійснюватися на платформі 8.3.10.2561, режим роботи - файловий.

створення розширення

У конфігураторі увійдемо в меню Конфігурація-> Розширення конфігурації, відкриється форма (Рис.1).

Саме тут і можна створити нове розширення. Натиснемо кнопку «Додати». Ось і вікно нового розширення (Рис.2)

рис.2

Розглянемо його елементи:

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

Список поля «Призначення» складається з трьох значень, опишемо їх в порядку виконання:

  1. Виправлення - розширення цього призначення створюються для коригування незначних неточностей і помилок в запозичених об'єктах;
  2. Адаптація - значення за замовчуванням, розширення цього типу призначені для підстроювання типових об'єктів під вимоги конкретного користувача, (якщо розширення створювалося в версії програми нижче 8.3.9, після поновлення платформи воно матиме саме це призначення);
  3. Доповнення - вносять абсолютно новий функціонал в типове рішення.

запуск розширення

Подвійне клацання на імені розширення у вікні з Рис.1, відкриває вікно розширення (Рис.3)


Як бачимо, воно являє собою дерево, подібне дереву основний конфігурації. І тут виникає одне питання, в яких випадках варто запозичити об'єкт?

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

Тобто, якщо для нашої розробки потрібно реквізит «ІПН» довідника « Фізичні особи», Якщо він буде використаний в модулі форми, ми повинні його запозичувати з основної бази. У цьому випадку кожен раз при запуску розширення буде проводитися перевірка на наявність цього реквізиту в довіднику основний конфігурації і на відповідність типу даних у вихідній базі і в розширенні.

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

Вікно в правому нижньому кутку вказує на нестандартну ситуаціюпри підключенні розширення, подвійний клік на ньому відкриває детальну інформацію. В даному випадку ми просто поміняли тип значення у реквізиту ІПН зі значення «Рядок» на значення «Булево» у запозиченого об'єкта, однак набагато частіше буває зворотна ситуація - коли оновлення типового продукту призводить до зміни або ліквідації реквізиту основної бази.

Відпрацювавши і протестувавши розширення на копії бази, його можна вивантажити в окремий файл, для цього в вікні (Рис.5) необхідно натиснути кнопку «Конфігурація», вибрати пункт «Зберегти в файл». На відміну від звичайних файлів конфігурації, що мають розширення cf, файл доповнення до конфігурації буде мати маску * .cfe.

Як видно з вищенаведеного малюнка завантажити новий функціонал можна з того ж вікна, а можна з основного вікна програми.

Для підключення розширення в режимі 1С.Підприємство у користувача повинен бути включений режим «Всі функції» і вхід в програму повинен бути здійснений з правами Адміністратора.

Шлях для підключення доопрацювання виглядає наступним чином: Всі функції-> Стандартні-> Керувати розширеннями конфігурації. Відкривається вікно представлено на Рис.6

рис.6

Натискання на кнопку «Додати», відкриває діалогове вікно вибору файлу, в якому необхідно вибрати нашу вивантаження. Якщо у обробки встановлена ​​галочка (Рис.7) і розширення містить помилку, підключення функціоналу буде скасовано, і програма повідомить про виникнення виняткової ситуації.

рис.7

Щоб після успішного додавання наш функціонал заробив, програму треба перезапустити.

Запозичення об'єктів і порядок спрацьовування модулів

Для того, щоб простежити послідовність виконання обробників, ми включимо можливість зміни нашої конфігурації і додамо в неї нову обробку, Функціонал якої полягатиме тільки в одному - вона буде повідомляти, що її запустили з основної конфігурації, код на Рис.8.

рис.8

Додамо цю обробку в розширення.

Для цього:

  • Правою кнопкою мишки активізуємо контекстне меню форми обробки (Рис.9);

рис.9

  • Виберемо пункт «Додати в розширення»;
  • У дереві додаткової конфігурації з'явиться і сама обробка і дублікат її форми;
  • Відкривши форму, ми виявляємо, що команда, що викликає повідомлення теж є, тільки їй не присвоєно обробник;
  • Додавання дії команди викликає діалогове вікно (Рис.10) в якому крім основних директив місця виконання команди, присутні ще група «Тип виклику».

рис.10

Ми маємо три типи виклику для наявної процедури;

  • Викликати перед - виконання коду розширення буде запущено раніше, ніж відпрацює основна конфігурація;
  • Викликати після - допрацьована процедура піде другим номером;
  • Викликати замість - процедура з основної конфігурації взагалі не буде виконана.

Залишимо тип виклику в положенні «Викликати після» і додамо процедуру «Расш1_СообщітьПосле (Команда)» (Рис.11).

рис.11

Результатом запуску нашої обробки буде послідовно повідомлені дві фрази (Рис.12), тобто повідомлення додаткової конфігурації відобразитися після повідомлення основною. У випадку, якби ми вибрали «Замість», першого рядка ми б взагалі не побачили.

рис.12

Починаючи з версії 8.3.9.1818, в функціонал програми було включено механізм зміни типових модулів, а так само додавання власних модулів. І тут перед розробниками стояло цілком конкретне завдання: як визначити, в якому порядку повинні виконуватися запозичені процедури і функції не тільки по відношенню до основної конфігурації, але і по відношенню до вже підключеним в конфігурації розширень.

механізм анотацій

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

рис.13

При додаванні кожного нового розширення система самостійно вибудовує порядок їх виконання.

Налаштування порядку виконання додаткових модулів відбувається виходячи не тільки з часом завантаження модуля (пізніше додано, пізніше виповнюється), але і виходячи з призначення доопрацювання ( «Виконання» завжди буде йти перш «Адаптації»).

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

  • & Перед ( «ІмяПроцедури»);
  • & Після ( «ІмяПроцедури»);
  • & Замість ( «ІмяПроцедури»).

Як видно, їх набір схожий з тим, що було продемонстровано в попередньому розділі, схожий і функціонал.

Так як запозичений модуль і модуль-донор перебувають у одному просторі імен, ніяких додаткових визначень для типових змінних і методів в цьому випадку не потрібно.

Дещо по-іншому, ніж з процедурами йде справа з функціями. Справа в тому що, виконання типової процедури може бути як би окантовані кодом розширення, тобто можна вставити якісь дії до коду процедури, деякі алгоритми після, а ось для функцій це не прокотить. Якщо основна функція буде виконуватися після коду розширення, ще одне значення замісної функції не буде отримано, якщо ж перед зміненим алгоритмом, то не буде отримано значення основної функції і анотація & Після відпрацює як & Замість.

Для ліквідації такої «несправедливості» був створений метод ПродолжітьВизов ().

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

Внесення змін до модуль об'єкта

Механізм підписок на події дуже сильно полегшив роботу розробникам, але було одне серйозне АЛЕ.

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

Припустимо, нам в процесі роботи знадобилося додати будь-яку обробку для типового документа «Прийом на роботу» при його записи. Раніше ми б зайшли в передплати і діяли звідти, зараз ми можемо додати цей документ до розширення:

  • Виберемо в конфігураторі «ПріемНаРаботу» і з його контекстного меню додамо його в наше розширення (до речі цей механізм має комбінацію гарячих клавіш Альт + шифт + Ф2);
  • Після вибору відповідного доповнення ми отримаємо картинку, як на Рис.14;

рис.14

  • Нас буде цікавити виділений жовтим кольором елемент «Модуль об'єкта», відкриємо його, активувавши попередньо відповідної галочкою (Рис.15);

рис.15

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

рис.16

  • Спробуємо в повідомленні вивести номер документа при його записи, вибравши відповідну подію;
  • Ми отримаємо форму вибору типу виклику (Рис.17), визначимо, коли буде виводитися номер;

рис.17

  • Код процедури показаний на Рис.18;

рис.18

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

невеликий анонс

Найближчим часом фірма 1С планує випуск платформи 8.3.11, в якій вони анонсували можливість додавання власних:

  • документів;
  • довідників;
  • Планів обміну;
  • Регістрів відомостей.

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

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