Типи даних 1С 8.3. Використання визначених типів. Типи даних, що утворюються у прикладному рішенні

25.10.2019 Цікаве

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

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

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

Налаштування

Налаштувань у даного об'єкта не так вже й багато:

Тобто. крім імені та синоніма в 1С обумовлені типи мають лише набір типів об'єктів.

Приклад застосування визначених типів 1С 8.3

Застосувань даного об'єкта можна знайти безліч.

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

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

і багато іншого.

Якщо Ви починаєте вивчати програмування 1С, рекомендуємо наш безкоштовний курс(не забудьте

— ми почали обговорювати типи значень 1С і перетворення типів 1С.

Сьогодні ми поговоримо докладніше про типи об'єктів конфігурації 1С (тип документа 1С, тип довідника 1С та ін.)

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

Робота з типами 1С часто використовується:

  • Умови у програмі
    Різні дії в залежності від типу значення 1С у конструкції «Якщо… Тоді…»
  • Обмеження під час роботи в інтерфейсі
    Заборона чи дозвіл користувачеві вводити у полі на формі значення певних типів 1С.
  • Визначення фактичного параметра функції/процедури
    Якщо параметр функції/процедури може бути будь-якого типу 1С, потрібно його визначити, щоб правильно отримати значення.

Тип 1С можна отримати:

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

Типи 1С можна розділити на три види:

  • Базові типи 1С
  • Типи 1С бази даних (посилальні, об'єкти)
  • Типи 1С.

Визначення типу 1С та порівняння типів 1С

Дізнатися тип значення 1С можна за допомогою функції ТипЗнч (Змінна)

Щоб зрозуміти який тип 1С ця функція повернула – потрібно вказати потрібний нам Тип («Ім'яТипу»)

Наприклад, визначення (порівняння) типу 1С змінної:
Якщо ТипЗнч(Змінна) = Тип("Ім'яТипу") Тоді

Які типи писати як Ім'яТипу?

Базові типи

Базові типи 1С - число, рядок, дата, бульова.

Наприклад:
Знч = 12;
Якщо ТипЗнч(Знч) = Тип("Число") Тоді
ІнакшеЯкщо Знч = Тип("Рядок") Тоді
ІнакшеЯкщо Знч = Тип("Дата") Тоді
ІнакшеЯкщо Знч = Тип("Булеве") Тоді
КінецьЯкщо;

Типи бази даних

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

Більшість об'єктів, що зберігаються (у тому числі: довідники, документи, перерахування, бізнес-процеси, завдання) доступні у вигляді Об'єкта (для зміни та запису) та у вигляді Посилання (для читання). Докладніше див. «Посилання та об'єкти».

Наприклад:
Знч = Довідники.Організації.ПустаПосилання();
Якщо ТипЗнч(Знч) = Тип("ДовідникПосилання.Організації") Тоді
ІнакшеЯкщо Знч = Тип("ДовідникОб'єкт.Організації") Тоді
ІнакшеЯкщо ТипЗнч(Знч) = Тип("ДокументПосилання.НадходженняТоварів") Тоді
ІнакшеЯкщо Знч = Тип("ДокументОбъект.Надходження Товарів") Тоді
КінецьЯкщо;

Реєстри можуть бути представлені різними типами. Ім'я типу регістру складене:
РеєстрТипреєструТипдоступу.Ім'яРегістра

Типи 1С регістрів:

  • Відомостей
  • Накопичення
  • Бухгалтерії
  • Розрахунки.

Типів доступів до регістру кілька. Найчастіше використовуються:

  • НабірЗаписів
  • перелік
  • Вибірка
  • Запис
  • КлючЗаписи.

Отже, приклад:
Якщо ТипЗнч(Знч) = Тип("РегістрВідомостейСписок.Ім'яРегістра") Тоді
ІнакшеЯкщо Знч = Тип("РегістрНакопиченняНабірЗаписів.Ім'яРегістра") Тоді
КінецьЯкщо;

Мова 1С дозволяє працювати з безліччю об'єктів, створюваних динамічно у програмі, наприклад – масив, список значень, таблиця значень, структура…

Такі типи 1С вказуються за їхньою назвою (одним словом, без прогалин). Наприклад:
Якщо ТипЗнч(Знч) = Тип("Масив") Тоді
ІнакшеЯкщо Знч = Тип("СписокЗначень") Тоді
КінецьЯкщо;

Визначення значення типу посилань 1С

Робота з усіма об'єктами бази даних (довідники, документи…) ведеться через посилання. Наприклад, якщо ми хочемо в документі зробити реквізит – довідник, його тип 1С буде «Довідник Посилання. Ім'я Довідника».

Наприклад:
Значення = Довідники.Організації.ПустаПосилання();
Якщо Довідники.ТипВсіПосилання().Містить(ТипЗнч(Значення))
// це довідник
ІнакшеЯкщо Документи.ТипВсіПосилання().Утримує(ТипЗнч(Значення)) Тоді
//це документ
КінецьЯкщо;

У запиті тип 1С можна перевірити двома способами.

Перший - аналогічно описаному, але в імені типу 1С не вказується "Посилання" або "Об'єкт", тобто замість "Довідник Посилання. Організації" пишемо "Довідник. Організації"

Наприклад:

Отримання доступних типів 1С

У багатьох об'єктів є властивість. ТипЗначення, яке містить список типів 1С:

  • Поле на формі товстого клієнта
    ЕлементиФорми.Ім'яПоля.ТипЗначення
  • Поле на формі тонкого клієнта(Виняток: називається ДоступніТипи)
    Елементи.Ім'яПоля.ДоступніТипи
  • Колонка таблиці значень дерева значень
  • Реквізит форми
  • Елемент відбору

Як працювати з цим списком типів 1С у полі. ТипЗначення – див. «Опис Типів» у розділі «Мова 1С».

Робота з типами 1С реквізитів у метаданих конфігураціях

При додаванні та редагуванні реквізитів у конфігураторі програміст вказує тип(и) 1С реквізиту. У програмному коді мовою 1С можна отримати (дізнатися) тип(и) 1С реквізиту.

Основні методи:

  • У об'єкта 1С викликати метод Метадані(), який повертає метадані конкретного об'єкта і далі працюватиме зі списком реквізитів (та реквізитів табличної частини)
    Документи.НадходженняТоваров.ПустаПосилання().Метадані().Реквізити
  • Використовувати глобальну змінну "Метадані", яка повертає всі метадані конфігурації, і далі вийти на реквізити конкретного об'єкта
    Метадані.Документи.Надходження Товарів.Реквізити

Реквізит має властивість. Тип, який містить список типів 1С, встановлений у конфігураторі цього реквізиту.

Як працювати з цим списком типів 1С – див. «ОписТипів» у розділі «Мова 1С».

Вказати фільтр типів 1С

У багатьох об'єктів можна вказати фільтр типів значень 1С, можливих до використання, наприклад:

  • Список значень (.ДоступніЗначення)
  • Поле форми керованого клієнта (.ДоступніТипи)

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

Щоб вказати список типів 1С для фільтра – використовується список типів 1С, як з ним працювати – див. «Опис типів» у розділі «Мова 1С».

Система типів- це особлива система, якою організуються дані, використовувані прикладними рішеннями. Система типів дозволяє представити інформацію реального світу у термінах, "зрозумілих" для 1С:Підприємства 8.

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

Опис системи типів міститься в синтакс-помічнику, у вбудованій довідці та документації.

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

Типи даних, визначені лише на рівні платформи

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

Примітивні типи

Примітивні типи даних – це такі типи як Рядок, Число, Дата, Бульовота інші. Ці типи не є чимось особливим для 1С:Підприємства 8. Як правило, такі типи даних існують і в інших програмних системах.

p align="justify"> Значення примітивних типів є простими неподільними значеннями, в яких не можна виділити окремі складові. Наприклад, значеннями типу Числоможуть бути 1, 8, 15 та ін. Щоб створити значення примітивного типу, у тексті програми потрібно вказати його літерал- Символовий ідентифікатор значення.

Універсальні колекції значень

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

Загальні типи

Крім цього, у платформі реалізовані специфічні типи даних, що реалізують ту чи іншу функціональність прикладних рішень: Текстовий документ, ТабличнийДокумент, СховищеЗначення, Будівник Запитута інші.

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

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

Інтерфейсні типи

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

Типи даних, що утворюються у прикладному рішенні

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

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

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

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

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

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

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

Наприклад, після створення нового довідника Номенклатура, стають доступні такі типи даних:

  • Довідник Менеджер.Номенклатура,
  • ДовідникПосилання.Номенклатура,
  • Довідник Об'єкт. Номенклатура,
  • Довідник Вибірка.Номенклатура,
  • Довідник Список.Номенклатура.

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

У той же час, після створення нового регістру накопичення ПродажКомпаніїсклад нових типів даних буде вже іншим:

  • РеєстрНакопиченняМенеджер.ПродажіКомпанії,
  • РеєстрНакопиченняВибірка.ПродажіКомпанії,
  • РеєстрНакопиченняСписок.ПродажіКомпанії,
  • РеєстрНакопиченняНабірЗаписів.ПродажіКомпанії,
  • РеєстрНакопиченняЗапис.ПродажіКомпанії,
  • РеєстрНакопиченняКлючЗаписи.ПродажіКомпанії.

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

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

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

/
Створення та зміна об'єктів метаданих

Використання визначених типів

Область застосування: керований додаток, звичайний додаток.

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

також статтю на ІТС: «Об'єкти конфігурації – Визначаються типи»

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

  • НомерРахункиФактури- Рядок, довжина 30. Регламентує формат номера рахунку-фактури у різних документах: НадходженняТоварівІПослуг, ЗаписКнигиПокупок, Повернення ТоварівВідКлієнтата ін.
  • Адреса доставки- Рядок, 500. Текстове подання адреси доставки в документах Замовлення Постачальнику, АдресаДоставкиПеревізника, в обробці Помічник Продаж, у реквізиті АдресаДоставкиПеревізникадокумента ЗаявкаНа ПоверненняТоварівВідКлієнтата ін.

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

Наприклад, у конфігурацію впроваджено підсистему Взаємодія, яка призначена для ведення листування по електронній пошті, реєстрації дзвінків та зустрічей. При впровадженні цієї підсистеми розробник ухвалив рішення про склад об'єктів метаданих, які можуть виступати як «контакти взаємодій» - це елементи довідників Фізичні особи, Партнери, КонтактніОбличчяПартнерів, і поставив цей склад типів у визначеному типі КонтактВзаємодії, передбаченому у підсистемі. У свою чергу, тип масово використовується в реквізитах об'єктів і формах підсистеми (у документах Зустріч, Запланована Взаємодія- Таблична частина Учасники, у документі ПовідомленняSMS- Таблична частина Адресати, у документі Телефонний дзвінок- Реквізит АбонентКонтакт, у загальних формах Адресна книга, ВибірКонтакту- Реквізити КонтактиПредметуу параметрі макета ІєрархіяВзаємодійКонтактжурналу документів Взаємодіяі т.д.) В іншому випадку, без використання визначеного типу КонтактВзаємодіїдовелося б знімати об'єкти підсистеми з підтримки та задавати необхідний склад типів у всіх перерахованих місцях.

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

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

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

  • Які типи даних є примітивними?
  • Як можна працювати з рядками та які особливості слід врахувати?
  • Які тонкощі роботи є з числовими виразами?
  • Як описати дату конкретного значення? Як встановити порожню дату?
  • Як перетворює типи?
  • Null і Невизначено – що це й у чому відмінності?
  • Як визначити, який тип об'єкта/змінної?

Застосовність

Стаття написана для платформи 1С версії 8.3.4.496, тому інформація є актуальною і для поточної версіїплатформи. Однак слід зауважити, що у версії 8.3.6.1977 було додано нові функції роботи з рядками. Тому, коли повторюватимете дії зі статті, не дивуйтеся, якщо у відповідному розділі Синтакс-помічника ви побачите якісь функції, які не показані у нас на скріншоті. Також рекомендуємо ознайомитися з новим методом СтрокаСЧислом(), доданим у платформі 8.3.10.

Примітивні типи даних та деякі їх функції

Виділяють наступні примітивні типи даних:

Строкові константи

Примітивний тип даних Рядок(рядкова константа) складається з різних символів. Рядокзавжди обрамляється лапками. Приклад рядкової константи:

Повідомлення.Текст = "Присутні незаповнені дані";

Тобто. рядок “Присутні незаповнені дані” надається реквізиту Текстоб'єкта Повідомлення. Все, що обрамлено в лапки, вважається рядком.

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

Текст = "Невірно заповнений реквізит"
"Проведення документа неможливе";

Крапка з комою ставиться лише наприкінці останнього рядка.

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

Такий синтаксис найчастіше використовується у типових конфігураціях. Зокрема у мові запитів. Наприклад:

Запит.Текст =
“ВИБРАТИ
| Співробітники.Найменування ЯК Співробітник,
| Співробітники.ДатаНародження ЯК ДатаНародження

| Довідник. Співробітники ЯК Співробітники
|ДЕ
| НЕ Співробітники. Це Група”;

Слід зазначити, що для рядків визначено операцію додавання. Не арифметична операція, її називають операцією конкатенації.

Тобто. потрібно об'єднати, наприклад, два рядки, причому між рядками ставиться знак додавання «+»:

Текст = "Невірно заповнений реквізит" + "Проведення документа неможливе";

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

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

Текст = "Помилка в модулі "Загальний модуль1"";

У даному прикладіперша лапка відкриває рядок. Поруч друге і третє лапки позначають знак лапки.

А в кінці виходить три лапки: остання лапка закриває рядок, дві попередні позначають знак лапки.

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

Всі ці функції доступні будь-де конфігурації.

У синтакс-помічнику вони знаходяться у розділі Загальний описвбудованої мовиВбудовані функціїФункції роботи зі значеннями типу Рядок.

Функцій досить багато і їх зазвичай достатньо роботи з рядковими константами.

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

Умова задачі:

Потрібно створити функцію. Як параметр у функцію передається довільний рядок. Символами у рядку можуть бути навіть цифри.

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

Наприклад, рядок “72 АВС 6АП 31 54ф -22” містить два цілих позитивних числа: 72 і 31. Крім прогалин, інші незначні символи (табуляція, повернення каретки) не використовуються. Функція має повертати кількість цілих позитивних чисел.

Вона повинна розміщуватись у модулі керованого додатка. Необхідно забезпечити її виклик під час запуску системи. Рядок визначити за допомогою змінної.

Отже, відриємо модуль керованої програми та виберемо в полі вибору зі списку на панелі конфігуратора Модульстандартний оброблювач ПриПочаткуРоботиСистеми().

Усередині оброблювача визначимо змінну Рядок, наприклад:

Рядок = "72 АВС 6АП 31 54ф -22";

Кількість = КількістьЦілих Чисел (Рядок);

Оформимо передачу повідомлення про кількість цілих чисел:

Повідомити (“Рядок містить ” + Кількість + ” цілих числа”);

При цьому змінна Кількістьбуде неявно перетворена до типу Рядкова константа. Потім буде здійснено операцію конкатенації для трьох рядків та надіслано повідомлення.

Визначимо початок та кінець (тобто шаблон) функції КількістьЦілихЧисел(Рядок).

Тепер розглянемо один із можливих варіантів розробки функції КількістьЦілихЧисел(Рядок). При цьому ознайомимося з деякими вбудованими функціями, призначеними для роботи з рядками.

Насамперед слід познайомитися з функцією КодСимволу. Ця функція отримує код символу, розташованого в переданому рядку в позиції із зазначеним номером.

Синтаксис:

КодСимволу(,)

Параметри:

(обов'язковий)

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

Значення, що повертається:
Код переданого символу. Код повертається відповідно до кодування Unicode.

Зверніть увагу, що параметр є значення за промовчанням 1.

Рядок також може складатися з одного символу. Таким чином, є можливість визначити код 0 і код 9, а коди решти всіх цифр знаходяться, як відомо, в інтервалі між ними.

Визначимо відповідні змінні та їх значення:

Код0 = КодСимволу ("0");
Код9 = КодСимволу(“9”);

Для розв'язання задачі оберемо таку схему:

  1. Якщо в рядку є початкові або кінцеві прогалини в будь-якій кількості, то позбудемося їх спеціальною функцією. Далі нас цікавитимуть групи символів між внутрішніми пробілами. Якщо група складається з одних цифр, це ціле число. Є спеціальна функція, за допомогою якої можна визначити позицію першого пропуску.
  2. Отримавши позицію першого пробілу, за допомогою іншої функції можна отримати групу символів (підрядок) зліва від пробілу.
  3. Проаналізуємо символи, що становлять групу та визначимо: чи є вона цілим числом. Виявлені цілі числа сумуватимемо у спеціальній змінній.
  4. Укоротимо початковий рядок, вибравши за допомогою ще однієї функції всі символи тепер праворуч від пробілу. Даний пробіл міг бути не один, а ціла серія прогалин, що йдуть поспіль, тому в рядку, що залишився, спеціальною функцією позбудемося всіх крайніх лівих прогалин (що йдуть поспіль) і повернемося до пункту 2. Будемо повторювати дії від пункту 2 до пункту 4, поки не досягнемо стану, що в рядку не залишиться пробілів. У цьому випадку укорочений рядок складатиме останню групу символів, що аналізуються.

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

СокрЛП
Синтаксис: СокрЛП()
Параметри: (Обов'язковий).
Відсікає пробіли (незначні символи), що стоять ліворуч від першого символу в рядку, і стоять праворуч від останнього символу в рядку.

Знайти
Синтаксис: Знайти(,)
Параметри: (обов'язковий), (Обов'язковий).
Повертає позицію першого знака знайденого підрядка.
Нумерація символів у рядку починається з 1. Якщо рядок не містить зазначеного підрядка, то повертається 0. У нашому випадку як підрядок будемо використовувати пробіл (« »).

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

СтрДліна
Синтаксис: СтрДліна()
Параметри: (Обов'язковий).
Отримує кількість символів у рядку. Будемо використовуватиме визначення довжини рядка.
Функція КодСимволу, яку будемо використовувати для виявлення груп символів, що є цілими числами, описано раніше.

Має рацію
Синтаксис: Прав(,)
Параметри: (обов'язковий), (Обов'язковий).
Вибирає крайні праворуч символи рядка. За допомогою цієї функції виділятимемо ще необроблену частину рядка.

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

Нижче наведено можливий алгоритм функції з коментарями.

Числові вирази

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

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

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

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

Операції, які застосовуються для чисел:

  • Звичайні арифметичні операції (-, +, *, /). У множення та поділу пріоритет більший, ніж у додавання та віднімання. Дужки мають найвищий пріоритет. Є ще унарні операції + і -, які мають пріоритет іде відразу за дужками;
  • операція "залишок від розподілу" (%). Наприклад, 12%5=2;
  • математичні функції, які можна застосовувати для чисел (тригонометричні функції, зведення в ступінь, витяг квадратного кореня, округлення до вказаної розрядності, вибір цілої частини числа)

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

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

Булівські значення

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

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

Літерали типу Дата

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

Спочатку пишеться рік, потім місяць і потім день.

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

ДатаДокументу = '20140315121020';

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

ДатаДокументу = '2014.03.15';

Другий спосіб визначення дати – це використання функції глобального контексту Дата(). У цьому випадку ми передаємо як параметри цієї функції теж саме: рік, місяць, день через кому.

Також можна вказати час. Якщо його не вказувати, тоді воно буде рівним за замовчуванням початку дня.

У системі 1С:Підприємство 8 порожня дата – це початок календаря. Варіанти запису:

ПорожняДата = '00010101';
ПорожняДата = Дата(1,1,1);

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

Зручність функції Дата()у тому, що ми можемо передавати до неї не конкретні значення, а якісь змінні. Тобто іноді ми дату конструюємо, збираючи різні змінні.

Для дати застосовна операція додавання. Операція додавання додає до дати вказану кількість секунд.

Перетворення примітивних типів даних

В операторі присвоєння, де підсумовується кілька змінних (наприклад, Змінна = А + В + С), можливе перетворення примітивних типів даних. Перетворення типу даних здійснюється за значенням першого типу даних.

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

Отже, рядок + число = рядок. Іноді число можна скласти з рядком, якщо з рядка можна виділити якесь числове значення (наприклад, 123 + “456”).

Для логічного типу даних застосовні вирази:

Істина І 1 = Істина;
Істина І 0 = Брехня.

Будь-яке число більше нуля перетворюється на Істина, 0 перетворюється на Брехню.

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

І тут Істина перетворюється на 1, а Брехня на 0.

Крім перетворення типів в операторах, можливе явне перетворення типів з використанням відповідних функцій: Рядок(), Число(), Дата(), Бульово().

До Рядкуконвертується будь-який тип даних.

Число може бути отримано з Рядка або Булево. Булева конвертується: Істина в 1, Брехня в 0.

До Дати можна навести рядок, якщо там буде містити значення дати. Наприклад, Дата(“20140315”). Як зазначалося раніше, можливе перетворення за позиціями:

Дата(,).

У Булеве можна перетворити Число і саме значення Бульова.

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

Примітивні типи даних Число, Рядок, Дата та Бульово можуть виступати як поля бази даних.

Значення типу NULL та Невизначено

NULL – це літерал. Застосовується він, як правило, у запитах до бази даних, коли з'єднуються дві та більше таблиць.

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

В подальшому, при обробці результату це потрібно враховувати, так як NULL - це не нуль, а відповідний тип даних.

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

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

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

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

Тип даних Невизначено – це пусте значення будь-якого реквізиту.

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

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

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

Наприклад, пошук елемента довідника за найменуванням у тому випадку, якщо у будь-якого довідника немає такого найменування елемента. Метод ЗнайтиПо Найменуваннюповертатиме значення Не визначене.

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

Якщо є список документів, і цей список порожній (у ньому, відповідно, немає жодного рядка), то поточний рядокбуде приймати значення Не визначене.

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

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

NULL і Невизначено – це типи даних і значення цих типах, причому одне єдине. Для NULL це значення NULL, для Невизначено – Невизначено.

Тип даних Тип

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

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

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

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

У цю функцію передається той об'єкт, котрому потрібно отримати тип даних.

Як значення, що повертається ця функція повертає саме тип типу тип.

Надалі слід його порівняти з будь-яким типом, що цікавить. Наприклад:

Якщо ТипЗнч(Елемент) = Тип (“ДовідникПосилання.Номенклатура”) Тоді
Повідомити (“Це товар”);
КінецьЯкщо;

На закінчення давайте підіб'ємо підсумок по всьому пройденому матеріалу.

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

У наступній статті ми вивчимо ці об'єкти детальніше, тому не перемикайтеся! ;)