1с призначити тип елемента форми. Типи бази даних

25.10.2019 Поради

Оскільки в програмному коді ми працюємо зі значеннями, періодично потрібно знати їх тип. Тип 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С 8.3 можна скористатися функцією мови запитів ТИПЗНАЧЕННЯ(<Поле>).

ДЕ ТИПЗНАЧЕННЯ(Таблиця.Сума) = ТИП(ЧИСЛО)

Функція ТИП(<Имя типа>) отримує тип на його ім'я. Імена примітивних типів: Число, Рядок, Бульово, Дата. Імена типів посилань будуються за наступним принципом: Документ.РеалізаціяТоворовПослуг або Довідник.Номенклатура.

ОБРАТИ ГоспрозрахунковийОбороти. Субконто1 , ГоспрозрахунковийОбороти. Субконто2 , ГоспрозрахунковийОбороти. Субконто3 , ГоспрозрахунковийОбороти. СумаОберот, ВИБІР КОЛИ ТИПЗНАЧЕННЯ(ГоспрозрахунковийОбороти. Субконто3 ) = ТИП(Документ. РеалізаціяТоварівПослуг) ТОДИ "Реалізація" КОЛИ ТИПЗНАЧЕННЯ(ГоспрозрахунковийОберти. ПІЗНАЧЕННЯ(ГоспрозрахунковийОбороти. Субконто3) = ТИП(Документ . Витратний Касовий Ордер) ТОДІ "РКО" Інакше "Інший документ"КІНЕЦЬ ЯК ТипДокументаРозрахунків З РеєстрБухгалтерії. Госпрозрахунковий. Обороти(& ПочатокПеріоду, & КінецьПеріоду, Реєстратор, Рахунок = & Рахунок6201 , , , , ) ЯК ГоспрозрахунковийОбороти Для полів посилання типу існує ще один спосіб перевірки, використовуючи оператор ПОСИЛАННЯ.

ВИБІР КОЛИ ГоспрозрахунковийОбороти. Субконто3 ПОСИЛАННЯ Документ. РеалізаціяТоварівПослуг ТОДИ "Реалізація" КОЛИ ГоспрозрахунковийОбороти. Субконто3 ПОСИЛАННЯ Документ. ПрибутковийКасовийОрдер ТОДИ "ПКО" КОЛИ ГоспрозрахунковийОбороти. Субконто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С можна "обнулювати" змінні, у тому числі для неявного виклику деструктора, наприклад об'єктів COM.
Змінна1 = Новий COMОб'єкт("Excel.Application");
Змінна1 = Невизначено;

Аналогічне значення 1С NULL, яке може повернути запит, при спробі отримати дані з бази даних, якщо такі отримати не вдалося (точніше, значення в полі NULL означає, що поле в базі даних «не заповнене»).
Вибірка = Запит.Виконати().Вибрати();
Поки Вибірка.Наступний() Цикл
Якщо вибірка.Поле1 = NULL Тоді
Продовжити;
КінецьЯкщо;
КінецьЦикл;

Типи значень 1С

Як «змінні» можна використовувати:

  • Змінні, створені тексті програми (описаними вище способами)
  • Реквізити об'єкта метаданих або форми (створені в конфігураторі, із зазначенням точного типу 1С).

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

  • Вибір типу значення 1С із доступних
  • Вибір значення 1С.

За промовчанням такий реквізит має значення 1С Невизначено. Коли вибрано тип 1С, але ще не вибрано значення 1С – порожнє значення цього типу 1С (0 для числа, порожнє посилання для типів 1С, див. нижче). І нарешті потім – значення 1С. З програми призначення значення проводиться безпосередньо без проміжного вибору типу 1С.

Визначити тип значення 1С можливо кількома способами:
//Спосіб 1 – порівняння з відомими типами 1С
Змінна1 = 12;
Якщо ТипЗнч(Змінна1) = Тип("Число") Тоді
//…
ІнакшеЯкщо ТипЗнч(Змінна1) = Тип("ДовідникПосилання.Ім'яДовідника") Тоді
//…
КінецьЯкщо;

Перетворення типів 1С

Значення 1С простих типів 1С можна перетворювати за допомогою оператора - найменування типу 1С:
//у число
Число = Число ("22"); //При неможливості перетворити типи 1С буде викликана помилка, тому краще використовувати обробник помилок (див. далі)

//У рядок
ЗнчРядок = Рядок(22);
ЗнчРядок = СокрЛП(22);
ЗнчРядок = Формат(22, "ЧГ=0");

//в дату
ЗнчДата = Дата ("20120101120000"); //01.01.2012 12:00:00
ЗнчДата = Дата (2012, 01, 01, 12, 0, 0);
ЗнчДата = Дата (2012, 01, 01);

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

Форматування значень 1С

Для точної вказівки формату використовується функція Формат(), за допомогою якої можна вказати потрібне уявлення.
ЧислоРядок = Формат(2400, "Налаштування")

Як рядок "Налаштування" потрібно вказати необхідний формат 1С. Такі параметри вказуються у спеціальному закодованому вигляді. Розглянемо найчастіше використовувані настройки:

Формат 1С дати та числа за правилами різних країн
Якщо Вам потрібно вивести дату чи число і не хочеться морочитися зі знанням, як вони повинні бути представлені за правилами потрібної країни, є найпростіше налаштування, яка дозволить Вам це зробити:
L = КороткеНайменуванняПотрібноїКраїни

Приклад виведення дати за правилами деяких країн:
Формат(ПоточнаДата(), «L=ru»)
> 28.03.2012 14:21:32
Формат(ПоточнаДата(), «L=en»)
> 3/28/2012 2:21:24 PM
Формат(ПоточнаДата(), «L=fr»)
> 28/03/2012 14:22:08

Формат дати у мові 1С
Якщо налаштування за замовчуванням Вам недостатньо і хотілося б самостійно вказати порядок частин дати та символи їхнього поділу, необхідно використовувати налаштування:
ДФ = "дмг чмс"

Відповідно "дмг" - це день, місяць і рік, а "чмс" - це години, хвилини та секунди. Будь-яку з цих елементів можна пропустити. Порядок прямування – будь-який. Символи, зазначені між частинами, будуть використані як символи поділу.

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

Розшифрування частин дати:

  • д – день
    o маленька «д»
    o від 1 до 4 разів
  • М – місяць
    o велика «М»
    o від 1 до 4 разів
  • г – рік
    o маленька «г»
    o 1 або 2 або 4 рази
  • год – годинник
    o маленька «ч» - 12-ти годинний формат
    o велика «Ч» - 24х годинний формат
    o 1 або 2 рази
  • м – хвилини
    o маленька «м»
    o 1 або 2 рази
  • с – секунди
    o маленька «с»
    o 1 або 2 рази
  • вв – відображення AM/PM для 12-ти годинного формату
  • до – квартал.

Приклад виведення дати із зазначенням правил:

Формат числа у мові 1С
На відміну від форматування дати, де все досить просто, для форматування числа є безліч варіантів параметрів. Тут розглянуті ті, що найчастіше застосовуються.

Перша «проблема» пов'язана з групуванням за промовчанням цифр у числах по 3 і розділенням груп пропуском, наприклад:
СтрЧисло = Рядок(22300500)
> 22 300 500

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

Параметр, який дозволяє округлити число під час виведення до потрібної кількості цифр після коми «ЧДЦ»:
Формат (3.535353, ЧДЦ = "2""))
> 3,54

Параметр, який дозволяє вказати символ-розділювач цілої та дробової частини «ЧРД»:
Формат(3.535353, "ЧРД="".""")
> 3.535353

Для деяких випадків корисно мати можливість замість числа «0» відображати щось інше: порожній рядок або «не заповнено». Це дозволяє робити параметр «ЧН»:
Формат(0, "ЧН=""""")

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

Увійдіть на сайт як учень

Увійдіть як учень, щоб отримати доступ до матеріалів школи

Мова запитів 1С 8.3 для програмістів-початківців: функції та оператори для роботи з типами (ТИПЗНАЧЕННЯ, ТИП, ПОСИЛАННЯ, Є NULL, ВИРАЗИТИ)

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

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

Функція ТИПЗНАЧЕННЯ

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

А тепер давайте розглянемо реквізит Відмінна ознакау довідника Міста:

Ви бачите, що цей реквізит може мати один із кількох типів: Рядок, Довідник.Смаки, Довідник.. Такий тип реквізитів називається СКЛАДНИМ.

Якщо ми спробуємо заповнити значення такого реквізиту в режимі 1С:Підприємство, то система запитає нас, якого типу буде значення, що вводиться:

І лише після нашого вибору дозволить ввести значення вибраного типу.

Таким чином, елементи довідника одного виду ( Довідник.) зможуть зберігати в тому самому реквізиті ( Відмінна ознака) значення різних типів(Рядок, Кольори або Смаки).

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

Тут значення відмітної ознаки є елементом довідника Смаки:

Тут рядком:

А тут взагалі є елементом довідника кольори:

Ось які можливості відкриває перед нами складовий тип даних!

Цікаво, як поведеться функція ТИЗНАЧЕННЯна реквізиті ВідмітнийЕлемент, що має складовий тип даних:

Це дуже цікаво. Давайте розбиратися з кожним рядком окремо.

Тип значення відмітної ознаки для елемента Росія дорівнює NULL. Ми вперше стикаємося із цим типом. Значення даного типувикористовуються виключно для визначення відсутнього значення під час роботи з базою даних.

Так і є, адже елемент Росія є групою, а не звичайним елементом довідника Містатому у нього немає поля Відмінна ознака. А тип у відсутнього значення, як ми прочитали вище, завжди дорівнює NULL.

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

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

Для Воронежа тип ознаки дорівнює Рядок, тому що значення введене в базі є звичайним рядком.

Індія знову група, тому значення немає. А тип у відсутнього значення, як ми пам'ятаємо, дорівнює NULL.

А справа ось у чому. Якщо ви зайдете до елемента довідника Містаз найменуванням Сан-Паулу, то побачите, що поле Відмінна ознаказовсім не заповнено. Воно порожнє. А усі незаповнені поля складового типу мають спеціальне значенняНЕ ВИЗНАЧЕНЕ .

З НЕ ВИЗНАЧЕНЕми також стикаємося вперше. Значення НЕ ВИЗНАЧЕНЕзастосовується, коли необхідно використовувати порожнє значення, що не належить до жодного іншого типу. Це якраз наша ситуація. А тип значення НЕ ВИЗНАЧЕНЕЯк ви вже напевно здогадалися дорівнює NULL.

Функція ТИП

Вона приймає лише один параметр - ім'я примітивного типу ( РЯДОК, ЧИСЛО, ДАТА, Бульова), або ім'я таблиці, тип посилання якої необхідно одержати.

Результатом даної конструкції буде значення типу для зазначеного типу.

Звучить туманно, чи не так?

Давайте розглянемо застосування цієї конструкції і все відразу стане на свої місця.

Нехай нам потрібно відібрати всі записи довідника Міста, у яких складовий реквізит Відмінна ознакамає значення типу РЯДОК:

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

Відступ

Як ви пам'ятаєте, деякі елементи довідника Містане мають реквізиту Відмінна ознака. Функція ТИЗНАЧЕННЯдля таких елементів видає NULL.

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

Ось приклад його використання:

Чудово. Але ви помітили, що тут немає елемента Сан-Паулу, тип значення реквізиту Відмінна ознакаякого також видавав NULL. Чому так сталося?

А справа в тому, що ситуація для груп (Росія, Індія, Бразилія), для яких заповнення реквізиту Відмінна ознаканеможливо в принципі, оскільки його у них немає зовсім, відрізняється від ситуації для елемента Сан-Паулу, для якого заповнення реквізиту можливе, але воно просто не заповнене і одно, як ми пам'ятаємо, спеціального значення НЕ ВИЗНАЧЕНЕ.

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

Але порівняння з невизначеним для визначення порожніх (не заповнених) реквізитів буде працювати тільки для складових типів.

До речі, у логічного оператора Є NULL форма заперечення виглядає так:

Логічний оператор ПОСИЛАННЯ

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

Як ви пам'ятаєте, це завдання ми могли б вирішити використовуючи ТИЗНАЧЕННЯі ТИП:

Функція ЄNULL

Функція призначена для заміни значення NULLінше значення.

Ми пам'ятаємо, що значення NULLповертається у тому випадку, якщо запитуваний реквізит (поле, властивість) немає.

Як, наприклад, реквізит Відмінна ознакадля груп довідника Міста:

Функція Є NULLдопоможе нам вивести інше значення у тому випадку, якщо це значення дорівнює NULL. Ви читаєте ознайомлювальну версію уроку, повноцінні уроки . Нехай у цьому випадку це буде рядок "Такого реквізиту немає!":

Виходить, що якщо перший параметр функції Є NULLне дорівнює NULL, то він повертається. Якщо він дорівнює NULL, то повертається другий параметр.

Функція ВИРАЗИТИ

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

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

Для поля Відмінна ознакатакими допустимими типами є РЯДОК, Довідник.і Довідник.Смаки.

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

Давайте наведемо всі значення поля Відмінна ознакадо типу Довідник.

У результаті всі значення елементів, які мали тип Довідник.залишилися заповненими та виявилися наведеними до зазначеного типу. Усі значення інших типів ( РЯДОК, Довідник.Смаки) тепер стали рівні NULL. У цьому полягає особливість наведення типу за допомогою функції ВИРАЗИТИ.

Наводити тип можна або до примітивного типу ( Бульова, ЧИСЛО, РЯДОК, ДАТА) або до посилального типу. Ви читаєте ознайомлювальну версію уроку, повноцінні уроки . Але тип, якого робиться приведення, обов'язково має входити до списку типів для даного складового поля, інакше система видасть помилку.

Пройдіть тест

Розпочати тест

1. Виберіть правильне твердження

2. Реквізити, здатні приймати значення одного з кількох типів, називаються

3. Для визначення типу значення реквізиту підійде функція

4. Незаповнені реквізити складеного типу мають значення