Меню
безкоштовно
Головна  /  Освіта/ Зумовлений елемент відсутній в даних 1с 8.3. Установка визначених елементів

Зумовлений елемент відсутній в даних 1с 8.3. Установка визначених елементів

Доброго вам дня.

Сьогодні поговоримо про нововведення в платформі 8.3 стосується визначених елементів.

вступ

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

Коли все налагодили і відпрацювали, з'ясувалося, що задача була поставлена ​​навпаки і логіка для ІП потрібна для ТОВ, а логіка ТОВ для ВП. "Немає проблем", говоримо ми і в режимі підприємства перейменовуємо елементи. Адже лізти в код набагато складніше. Минає рік і Вам поставлено нове завдання: для ІП Сидорова налаштувати ще якусь логіку. Ви лізете в конфігуратор, пишіть логіку, починаєте перевіряти і нічого не працює, тому що в конфігураторі ІПСідоров, а в підприємстві - ОООМетеор. Мозок зламаний і ці граблі хочеться знищити. Найпростіше і наочне - це вивести ім'я визначеного елемента в форму списку. Ось тут засідка, отримати ім'я визначеного в 8.2 можна тільки методом. А метод це свої незручності, його не можна отримати в запиті. Тобто перша незручність - отримати ім'я визначеного за посиланням на довідник.

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

Тепер у справі

Перше, це те, що у довідника з'явилася властивість "Оновлення зумовлених даних".

Що нам дає це поле? Якщо воно встановлено в "Не оновлювати автоматично", то додавши зумовлений елемент, ми його не побачимо в довіднику відразу. Тобто метадані ніяк не пов'язані з даними. І якщо його не створити в довіднику, то і звернення до нього по його імені через менеджер довідника викличе синтаксичну помилку.

Дуже цікаво, а навіщо? Як же нам створити елемент в довіднику? А як хочете, можете створити, а можете і зв'язати його з вже існуючим. Тепер у довідника є реквізит "ІмяПредопределеннихДанних". Ми створюємо елемент довідника програмно як зазвичай через "Справочнікі.Контрагенти.СоздатьЕлемент ()" і заповнюємо його реквізит "ІмяПредопределеннихДанних" рівним імені визначеного елемента. Або ж якщо елемент вже є, отримуємо його об'єкт і в ньому знову таки заповнюємо "ІмяПредопределеннихДанних". Всі.

І на останок трохи сиропу

Цей новий реквізит, мало того, що він доступний для читання і запису, так він ще і доступний в запитах. Таким чином Ви можете накладати на нього умови в запитах, визначати зумовлений він чи ні.

Спасибі за увагу.

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

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

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

Умовно можна виділити три типи помилок:
1. "Зумовлений елемент відсутній в даних";

3. Невірне значеннязумовленого елемента;

1. "Зумовлений елемент відсутній в даних" - протсутствіе описаного в конфігурації зумовленого елемента в даних ІБ.

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

При зверненні до відсутнього елемента в коді "Справочнікі.ВідиКонтактнойІнформаціі.EmailКонтактногоЛіца" видається повідомлення

При зверненні до елементу в запиті "ЗНАЧЕННЯ (Справочнік.ВідиКонтактнойІнформаціі.EmailКонтактногоЛіца)" видається повідомлення:

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

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

Також не використовується автоматичне створеннявизначених елементів при роботі в режимі РИБ. Так як нові елементи повинні передаватися з центральної бази, а не створюватися в вузлах з відмінними УІДамі.

Тобто іноді помилкою є звернення до несопоставленние елементу, а не сама наявність такого елемента.

Необхідно проаналізувати, чому елемент не створений. Можливо, він повинен створитися при виконанні будь-якого режиму програми. Наприклад, після виконання обміну в РИБ. А можливо, його просто випадково видалили.

Якщо логікою передбачено заповнення визначених елементів не автоматично, а окремим режимом, то перед використання звернення на ім'я " Справочнікі.ВідиКонтактнойІнформаціі.EmailКонтактногоЛіца"Для запобігання виняткової ситуації бажано перевірити, що елемент вже є в базі. Якщо елемент відсутній, то повідомити користувачеві про це і пояснити, який режим йому потрібно виконати для заповнення елемента. Для такої перевірки маєте змогу надсилати запити до даних.

Запит = Новий запит; Запрос.Текст = "ВИБРАТИ | ВідиКонтактнойІнформаціі.Ссилка | З | Справочнік.ВідиКонтактнойІнформаціі ЯК ВідиКонтактнойІнформаціі | ДЕ | ВідиКонтактнойІнформаціі.ІмяПредопределеннихДанних =" " EmailКонтактногоЛіца"" "; ЕлементОтсутсвуетВДанних = Запрос.Виполніть (). Порожній ();

Якщо це все-таки помилка в даних бази, то необхідно виконати прив'язку до визначених елементу елемента ІБ. Тобто необхідно пояснити системі, до якого елементу ІБ повинен звернутися програмний кодпо даному імені. Технічно прив'язка це просто вказівка ​​імені визначеного елемента в властивості "ІмяПредопределеннихДанних"Елемента ІБ. Для її установки досить виконати код:

2. "Зумовлений елемент не унікальний" - задвоенние зумовлені елементи:

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

Платформа повідомить про помилку "Зумовлений елемент не унікальний" лише при спробі редагування задублірованного елемента.

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

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

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

Такі помилки в базі даних можна виявити запитом виду:

ВИБРАТИ ВідиКонтактнойІнформаціі.ІмяПредопределеннихДанних, КІЛЬКІСТЬ (РІЗНІ ВідиКонтактнойІнформаціі.Ссилка) ЯК КолічествоПредопределенних З Справочнік.ВідиКонтактнойІнформаціі ЯК ВідиКонтактнойІнформаціі згруповані за ВідиКонтактнойІнформаціі.ІмяПредопределеннихДанних МАЮТЬ КІЛЬКІСТЬ (РІЗНІ ВідиКонтактнойІнформаціі.Ссилка)> 1

Цей запит поверне перелік визначених елементів, з яким пов'язано більше одного елемента ІБ.

При наявності таких елементів необхідно прибрати для одного з них зв'язок з визначеним. Тобто необхідно однозначно визначити для системи, до якого елементу ІБ повинен звернутися програмний код при використанні даного імені.Для цього досить виконати код.

3. Невірне значення визначеного елемента.

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

Для цього досить виконати одну з команд.

// Визначення елемента ІБ, який прив'язаний до потрібного зумовленої Повідомити (Справочнікі.ВідиКонтактнойІнформаціі.EmailКонтактногоЛіца) // Визначаємо зумовлений елемент, до якого прив'язаний обраний Повідомити (СсилкаНаЕлемент.ІмяПредопределеннихДанних)

При виявленні таких помилок необхідно прибрати некоректну зв'язок зі старим елементом і додати зв'язок з новим елементом. Код операцій аналогічний коду виправлення перших двох типів помилок.

Ну і коротко про помилки при програмній роботіабо в режимі конфігуратора:

"Зумовлений елемент не належить<Имя справочника>" - помилка виникає при спробі записати зумовлений елемент з ім'ям, що не збігається з ім'ям в коонфігураторе.

"Чи не зумовлені об'єкти не можуть мати зумовлені записи видів субконто" - помилка виникає при спробі зробити елемент зумовлений плану рахунків непредопределенним. Для усунення помилок необхідно у кожного рядка субконто елемента зняти ознака "приречення".

"Чи не зумовлені об'єкти не можуть мати зумовлені записи провідних видів розрахунків"- помилка виникає при спробі зробити зумовлений елемент плану видів розрахунку непредопределенним. Для усунення помилок необхідно у кожного рядка провідного виду розрахунку елемента зняти ознака "приречення".

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

"Ім'я зумовленого елемента не унікально" - помилка виникає при наявності в конфігурації декількох однойменних визначених елементів при оновленні на платформу8.3.6.2332 і вище. Необхідно усунути дублі в конфігурації.

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

Проста обробка для роботи з зумовленими значеннями.

Дозволяє зіставити елементи ІБ з зумовленими в конфігурації елементами.

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

Можна просто переглянути поточні значення, можна зробити будь-які необхідні зміни.

Порядок роботи:

1. Запускаємо обробку.

2. Вибираємо тип (довідник, план рахунків, ПВХ, ПВР).

3. Вибираємо сам довідник обраного типу.

4. У табличній частині обробки з'являються все зумовлені елементи, наявні в ІБ, і описані в конфігурації.

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

5. Встановлюємо нові значення для потрібних визначених елементів.

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

6. Виконуємо перепризначення натисканням кнопочки "Виконати перепризначення елементів".

Перевірка дублів(помилка "Зумовлений елемент не унікальний"):

При натисканні Конопки "Перевірити дублі" обробка перевірить всі довідники, плани рахунків, ПВХ і ПВР і виведе список таблиць з задвоєння елементами із зазначенням кількості задвоєння елементів.

Після цього необхідно перевірити окремо об'єкти, для яких знайдені помилки.

Перевірка пропущених(помилка "Зумовлений елемент відсутній в даних"):

При натисканні кнопки "Перевірити припущення" обробка перевірить всі довідники, плани рахунків, ПВХ і ПВР і виведе перелік зумовлених елементів, яким не зіставлені дані ІБ.

Для використання потрібно платформа 8.3.3 або вище.

Універсальна, може використовуватися з будь-якими конфігураціями.

Detect language Afrikaans Albanian Arabic Armenian Azerbaijani Basque Bengali Belarusian Bulgarian Catalan Chinese (Simp) Chinese (Trad) Croatian Czech Danish Dutch English Esperanto Estonian Filipino Finnish French Galician Georgian German Greek Gujarati Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Kannada Korean Lao Latin Latvian Lithuanian Macedonian Malay Maltese Norwegian Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Tamil Telugu Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Afrikaans Albanian Arabic Armenian Azerbaijani Basque Bengali Belarusian Bulgarian Catalan Chinese (Simp) Chinese (Trad) Croatian Czech Danish Dutch English Esperanto Estonian Filipino Finnish French Galician Georgian German Greek Gujarati Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Kannada Korean Lao Latin Latvian Lithuanian Macedonian Malay Maltese Norwegian Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Tamil Telugu Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish