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

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

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

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

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

функціонал обробки

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

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

Відмінності від існуючих реалізацій

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

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

UPD-2018-01-06 (v1.3). Виправлена \u200b\u200bпомилка, що виникає в режимі сумісності 8.3.7 і вище (змінилася поведінка платформи).

UPD-2012-08-17 (v1.2). Зроблено патч для коректної обробки регламентних завдань, виправлений пункт відображення планів видів розрахунку, виправлено поведінку при перемиканні типу структури в корені конфігурації.

P.S. Деякі роботодавці при прийомі на роботу задають питання про кількість фізичних і віртуальних таблиць для регістрів. Непогано б знати відповіді на ці питання, тим більше, що це рівень 1С: Професіонал. Якщо ви хочете не тільки вивчити цю відповідь, але і "помацати" ці таблиці, тоді ця обробка для вас!

Дані, які визначають логіку функціонування системи на базі 1С: Підприємства, відносяться до інформаційної бази. Зберігання інформаційної бази здійснюється в базі даних з вигляді набору таблиць, для чого 1С: Підприємство 8.1 може використовувати одну з чотирьох систем управління базами даних (СКБД):
* Вбудованів 1С: Підприємство 8.1 (файловий варіант інформаційної бази). В цьому випадку всі дані інформаційної бази зберігаються в файлі з ім'ям 1Cv8.1CD. Цей файл має двійковий формат і по суті є базою даних для вбудованої в 1С: Підприємство 8.1 СУБД.
* Microsoft SQL Server (Клієнт-серверний варіант інформаційної бази). Всі дані інформаційної бази зберігаються в базі даних Microsoft SQL Server.
* PostgreSQL (Клієнт-серверний варіант інформаційної бази). Всі дані інформаційної бази зберігаються в базі даних PostgreSQL.
* IBM DB2 (Клієнт-серверний варіант інформаційної бази). Всі дані інформаційної бази зберігаються в базі даних IBM DB2.

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

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

* Config - основна конфігурація інформаційної бази. Ця конфігурація відповідає реальній структурі даних і використовується 1С: Підприємством 8.0 в режимі Підприємства.
* ConfigSave - конфігурація, редагована Конфігуратором. Конфігурація з ConfigSave переписується в Config при виконанні "Оновлення конфігурації бази даних" в Конфігураторі, а навпаки - при виконанні в Конфігураторі операції "Конфігурація - Конфігурація бази даних - Повернутися до конфігурації БД".
* Files містить службову інформацію, наприклад, про роботу зі сховищем конфігурації.
* Params містить параметри інформаційної бази. Серед них:
=> Список користувачів інформаційної бази.
=> Національні настройки інформаційної бази.
=> Таблиця відповідності об'єктів метаданих та об'єктів бази даних (таблиць, полів, індексів).
=> Деяка інша інформація.
* _YearOffset - зміщення дат в базі даних. Ця таблиця створюється тільки при використанні Microsoft SQL Server.
* DBSchema містить інформацію про структуру бази даних 1С: Підприємства і визначає інші об'єкти бази даних, що використовуються даної інформаційною базою.

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

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

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

* _ConfigChangeRec - таблиця реєстрації змін об'єктів конфігурації.
* _ConfigChangeRec_ExtProps - таблиця імен файлів змінених зовнішніх властивостей об'єктів конфігурації.

Далі перелічені об'єкти метаданих, яким можуть відповідати ті чи інші таблиці.

* Константи
=> _Consts містить поточні значення всіх констант, визначених у конфігурації.
=> _ConstsChangeRec - таблиця реєстрації змін констант. Створюється, якщо хоча б одна константа бере участь хоча б в одному плані обміну.
* Плани обміну
=> _Node - таблиця плану обміну.
=> _Node _VT - таблична частина плану обміну, створюється для кожної табличній частині.
* Довідники
=> _Reference - таблиця довідника.
=> _Reference _VT - таблична частина довідника - для кожної табличній частині.
=> _ReferenceChangeRec - таблиця реєстрації змін довідника. Створюється, якщо довідник бере участь хоча б в одному плані обміну.
* Документи
=> _Document - таблиця документів для кожного об'єкта метаданих "документ".
=> _Document _VT - таблична частина документа - для кожної табличній частині кожного документа.
=> _DocumentChangeRec - таблиця реєстрації змін об'єкта метаданих типу "документ". Створюється для кожного об'єкта метаданих типу "документ", якщо він бере участь хоча б в одному плані обміну.
* Послідовності документів
=> _Sequence - таблиця реєстрації документів - для кожної послідовності.
=> _SequenceBoundary - таблиця кордонів послідовності - для кожної послідовності.
=> _SequenceChangeRec - таблиця реєстрації змін послідовності. Створюється для кожної послідовності, яка бере участь хоча б в одному плані обміну.
* Журнали документів.
=> _DocumentJournal - таблиця журналу документів, створюється для кожного журналу документів.
* Перерахування
=> _Enum - таблиця перерахування - по одній для кожного перерахування.
* Плани видів характеристик
=> _Chrc - основна таблиця плану видів характеристик.
=> _Chrc _VT - таблична частина плану видів характеристик - для кожної табличній частині.
=> _ChrcChangeRec - таблиця реєстрації змін плану видів характеристик. Створюється, якщо план видів характеристик бере участь хоча б в одному плані обміну.
* Плани рахунків
=> _Acc - основна таблиця плану рахунків.
=> _Acc _ExtDim - таблиця видів субконто плану рахунків, створюється для плану рахунків в тому випадку, якщо максимальна кількість субконто більше нуля.
=> _Acc _VT - таблична частина плану рахунків, створюється для кожної табличній частині плану рахунків.
=> _AccChangeRec - таблиця реєстрації змін плану рахунків. Створюється, якщо план рахунків бере участь хоча б в одному плані обміну.
* Плани видів розрахунку
=> _CalcKind - основна таблиця плану видів розрахунку.
=> _CalcKind _BaseCK - таблиця базових видів розрахунку, створюється для плану видів розрахунку в разі, якщо його властивість "Залежність від бази" має значення, відмінне від "Чи не залежить".
=> _CalcKind _DisplacedCK - таблиця усували видів розрахунку, створюється для плану видів розрахунку в разі, якщо у нього встановлений прапор "Використовує період дії".
=> _CalcKind _LeadingCK - таблиця провідних видів розрахунку - для кожного плану видів розрахунку.
=> _CalcKindDN - допоміжна таблиця для порядку витіснення, створюється, якщо у плану видів розрахунку встановлений прапор "Використовує період дії".
=> _CalcKind _VT - таблична частина плану видів розрахунку, створюється для кожної табличній частині.
=> _CalcKindChangeRec - таблиця реєстрації змін плану видів розрахунку. Створюється, якщо план видів розрахунку бере участь хоча б в одному плані обміну.
* Регістри відомостей
=> _InfoReg - таблиця рухів регістра відомостей.
=> _InfoRegChangeRec - таблиця реєстрації змін регістра відомостей. Створюється, якщо регістр відомостей бере участь хоча б в одному плані обміну.
* Регістри накопичення
=> _AccumReg - таблиця рухів регістра накопичення.
=> _AccumRegTotals - таблиця підсумків регістра накопичення, якщо регістр підтримує залишки.
=> _AccumRegTurnovers - таблиця оборотів регістра накопичення, якщо регістр підтримує обороти.
=> _AccumRegChangeRec - таблиця реєстрації змін регістра накопичення. Створюється, якщо регістр накопичення бере участь хоча б в одному плані обміну.
=> _AccumRegOptions - таблиця налаштувань зберігання підсумків регістрів накопичення одна на все регістри накопичення.
* Регістри бухгалтерії
=> _AccntReg - таблиця рухів регістра бухгалтерії.
=> _AccntRegED - таблиця значень субконто регістра бухгалтерії, створюється в тому випадку, якщо він посилається на план рахунків, у якого максимальна кількість субконто більше нуля.
=> _AccTtl0 - таблиця підсумків по рахунку.
=> _AccTtl - де i від 1 до максимальної кількості субконто. Таблиця підсумків по рахунку з кількістю видів субконто рівним i.
=> _AccTtlC - таблиця підсумків оборотів між рахунками, тільки для регістра бухгалтерії підтримує кореспонденцію.
=> _AccntRegChangeRec - таблиця реєстрації змін регістра бухгалтерії. Створюється, якщо регістр бухгалтерії бере участь хоча б в одному плані обміну.
=> _AccntRegOptions - таблиця налаштувань зберігання підсумків одна на все регістри бухгалтерії.
* Регістри розрахунку
=> _CalcReg - таблиця рухів регістра розрахунку.
=> _CalcRegActPer - таблиця фактичних періодів дії для регістра розрахунку, створюється, якщо у регістра розрахунку встановлений прапор "Період дії".
=> _CalcRegChangeRec - таблиця реєстрації змін регістра розрахунку. Створюється для кожного регістра розрахунку, який бере участь хоча б в одному плані обміну.
=> _CalcRegRecalc - таблиця перерахунку регістра розрахунку, створюється для кожного перерахунку.
=> _CalcRegRecalcChangeRec - таблиця реєстрації змін перерахунку. Створюється, якщо перерахунок бере участь хоча б в одному плані обміну.
* Бізнес процеси
=> _BPRoutePoint - таблиця точок маршруту бізнес-процесу для кожного бізнес-процесу.
=> _BusinessProcess - основна таблиця бізнес-процесу.
=> _BusinessProcess _VT - таблична частина бізнес-процесу для кожної табличній частині.
=> _BusinessProcessChangeRec - таблиця реєстрації змін бізнес-процесу. Створюється для кожного бізнес-процесу, що бере участь хоча б в одному плані обміну.
* Завдання
=> _Task - основна таблиця завдання.
=> _Task _VT - таблична частина завдання для кожної табличній частині.
=> _TaskChangeRec - таблиця реєстрації змін в задачах. Створюється для кожного об'єкта метаданих типу "завдання", який бере участь хоча б в одному плані обміну.

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

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

Важливо також, щоб резервне копіювання і відновлення бази даних, що зберігає інформаційну базу, виконувалося тільки цілком. З цією метою рекомендується використання коштів резервного копіювання баз даних, вбудованих в в використовувану СУБД. Резервне збереження файлового варіанту інформаційної бази може бути виконано копіюванням файлу 1Cv8.1CD.

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

Структура в мові програмування 1С 8.3 і 8.2 - набір пар «Ключ» та «Значення». Поле «Ключ» має строковий тип, «Значення» ж може приймати будь-який тип даних. Зазвичай використовується для зберігання і передачі між процедурами набору будь-яких параметрів.

Структуру в мові програмування 1С можна створити двома способами за допомогою конструкції «Новий».

Перший спосіб:

Структура \u003d Новий Структура;
Структура.Вставіть ( «КлючПараметра1», «Значення параметра №1»);
Структура.Вставіть ( «КлючПараметра2», «Значення параметра №2»);

Другий спосіб:

Структура \u003d Новий Структура ( «КлючПараметра1, КлючПараметра2», «Значення параметра №1», «Значення параметра №2»);

Обидва способи створять структуру, яку видно на скріншоті з налагодження:

Отримайте 267 відеоуроків по 1С безкоштовно:

зміна

Додати або змінити структуру можна, використовуючи метод «Вставити ()».

Структура.Вставіть ( «ІмяКлюча», ЗначеніеКлюча);

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

Щоб видалити елемент колекції, потрібно скористатися методом «Видалити», куди передати ім'я ключа:

Структура.Удаліть ( «ІмяКлюча»);

Можлива також очищення всіх об'єктів колекції:

Структура.Очістіть ();

обхід структури

Щоб перебрати колекцію структури, потрібно використовувати конструкцію «Для Кожного КлючІЗначеніе З Структура Цикл».

наприклад:

Для Кожного КлючІЗначеніе З Структура Цикл
...... // обробляємо, наприклад, змінюємо значення
КонецЦікла;

У кожному циклі буде видно, що нам доступні наступні поля: