Новости

[Наочно про незрозуміле] - Про «догми» в 1С

  1. постулат перший «До реальних таблиць регістрів писати запити можна! Треба використовувати віртуальні...
  2. постулат другий «Використовуй індексування!»
  3. постулат третій «Не отримуй зайві поля!»
  4. замість висновку
  5. про автора
  6. PDF-версія статті для учасників групи ВКонтакте

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

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

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

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

постулат перший
«До реальних таблиць регістрів писати запити можна! Треба використовувати віртуальні таблиці! »

Давайте уявимо, що в нашу базу даних приходить запит - знайти в таблиці всі необхідні символи для складання фрази «КУРСИ-ПО-1С».

«Ха!» - подумаєте ви, - «Простіше простого!».

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

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

Малюнок 2. Приклад даних

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

Малюнок 3. Приклад результату послідовного читання

Воно і зрозуміло - таблиця містить в 9 разів більше символів, ніж нам необхідно. І все їх доводиться аналізувати на відповідність запиту. Але що, якщо б хтось дав нам якийсь «шаблон»:

Малюнок 4. Приклад шаблону обмеження вибірки даних

Який ми б могли поєднати з нашою таблицею і отримати наступний обсяг даних:

Малюнок 5. Приклад використання шаблону на конкретних даних

Нічого зайвого - тільки те, що необхідно!

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

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

Малюнок 6. Приклад використання шаблону з недостатніми обмеженнями

І знову доведеться обробляти зайву інформацію.

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

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

постулат другий
«Використовуй індексування!»

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

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

Малюнок 7. Приклад сегментації даних

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

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

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

Зверніть увагу!В реальності сегментація даних відбувається інакше - один елемент може потрапляти в кілька сегментів.

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

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

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

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

постулат третій
«Не отримуй зайві поля!»

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

Упевнений, що зараз багато хто готовий крикнути в один голос - «Автор, ти пишеш прописну істину! Навіщо ?! ». Але стривайте! Напевно у вашому досвіді є випадки проведення рефакторинга коду запиту? А тепер зізнайтеся - хоч раз ви говорили собі щось на зразок «Не буду-ка я чіпати це поле, раптом воно десь використовується ...»?

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

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

замість висновку

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

Сподіваюся, даний матеріал допоможе комусь піднятися на чергову сходинку, а кому-то поміняти свій погляд на «вхідні догми».

PS А з якими «постулатами» стикалися Ви? Пишіть в коментарях - обговоримо! :)

про автора

Автор статті - Павло Ванін

м Володимир

E-mail: [email protected]

PDF-версія статті для учасників групи ВКонтакте

Ми ведемо групу ВКонтакте - http://vk.com/kursypo1c .

Якщо Ви ще не вступили в неї - зробіть це зараз, і в блоці нижче (на цій сторінці) з'являться посилання на скачування матеріалів.


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

А що, якщо провести певну сегментацію нашої таблиці?
Чи поліпшить це пошук результату?
Навіщо ?
Напевно у вашому досвіді є випадки проведення рефакторинга коду запиту?
»?
PS А з якими «постулатами» стикалися Ви?

Уважаемые партнеры, если Вас заинтересовала наша продукция, мы готовы с Вами сотрудничать. Вам необходимо заполнить эту форму и отправить нам. Наши менеджеры в оперативном режиме обработают Вашу заявку, свяжутся с Вами и ответят на все интересующее Вас вопросы.

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: