Неопределенный тип данных 1с
Понятие "тип реквизита" отличается от понятия "тип значения"
Конкретное значение не может быть составного типа. Одно конкретное значение может быть только одного типа данных.
Реквизит может быть как одного типа, так и составного типа. В последнем случае его тип описывается объектом "ОписаниеТипов", т.е. список возможных типов, значения которых могут храниться в этой колонке. Например, СправочникСсылка.М1, СправочникСсылка.М2, Строка, Число, ДокументСсылка.Д1.
В каждой строке (элементе, записи) содержится какое-то свое значение, но каждое из них - одного типа. Например, "СправочникСсылка.М1". Если же в ячейке колонки, имеющей составной тип, даже не выбран (не назначен) тип значения, то оно содержит значение "Неопределено" (это значение и одновременно тип). Если же тип выбран (кнопкой Т или установлен программно), то ячейка содержит пустое значение этого типа, например, пустую ссылку на элемент справочника (см. v8: Пустые ссылки), пустую строку "" или 0.
Чтобы реквизиту составного типа установить конкретный тип, достаточно присвоить ему пустое значение этого типа.
Вопрос:
Какие существуют особенности работы с составными типами данных.
Ответ
Этот вопрос имеет два стороны:
1) Сторона элемента формы.
Для элемента формы мы можем установить только ограничение на типы которые можно выбрать.
Т.е. с помощью кода:
Мы ограничиваем возможный типы только одним "СправочникСсылка.Контрагенты".
НО это не действует на значение которое хранится в источнике данных.
Поэтому если реквизит который связан с "ПолеВвода1" имеет "составной" тип, например Любая ссылка,
он будет неопределенного типа даже после "ЭлементыФормы.ПолеВвода1.ОграничениеТипа=Новый ОписаниеТипов(МассивТипов);"
2) Сторона источника данных.
Здесь ограничение на тип накладывается либо в конфигураторе, либо в момент создания этого элемента из языка.
Но если у реквизита установлен "составной" тип значение реквизита будет неопределенно до тех пор, пока ему не будет присвоено значение конкретного типа.
Присвоить конкретное значение можно либо из языка, либо выбрав это значение в форме.
Из выше описанного можно сделать вывод:
Если у реквизита установлен "Составной" тип данных, то даже при ограничении возможных типов у элемента формы до одного возможного, у пользователя будет запрошен тип который нужно будет присвоить реквизиту.
Если мы хотим оградить пользователя от лишних движений, т.е. выбора единственно возможного типа, нам нужно предварительно установить тип реквизита.
Сделать это можно следующим образом:
Добавление от ezh (особенности при работе с элементами в табличном поле):
1.
Вместо этого:
На прошлых занятиях мы изучили примитивные типы данных Число, Строка, Дата и Булево, ознакомьтесь с этими материалами, прежде чем приступить к изучению этого.
Неопределено – значение данного типа применяются, когда необходимо использовать значение, не принадлежащее ни к одному конкретному типу. Означает, что у объявленной переменной может быть любой тип, но пока тип не определен.
Тип – представляет собой объект для управления допустимыми типами значений данных.
Присвоение значения объекту «Тип данных» посредством чтения реквизита
Для того, чтобы понять этот тип данных, создадим обработку, которая позволит менять значение некоторой переменной. Мы создадим переменную А, которая может принимать следующие значения:
Для демонстрации принципов работы с этим типом данных создадим новую форму обработки.
Сразу добавим в нее следующие реквизиты:
- НашаПеременная, укажем для нее Составной тип данных: Строка, Число, Дата и Булево
- ПрисвоеныйТип – Строка длинной 15 символов
- Комментарий - Строка неограниченной длины
Затем поместим реквизиты на созданную конструктором форму.
Создадим процедуру-обработчик события при изменении значения реквизита НашаПеременная. Цель обработчика – определять тип данных реквизита, для этого используется функция ТипЗначения или ТипЗнч
На первом этапе объявим переменную А и создадим предопределенную процедуру-обработчик ПриОткрытии. Обработчик будет подтягивать в поле Комментарий примитивный тип данных реквизита НашаПеременная.
Обратите внимание, что программа не выполнит процедуру-обработчик, если мы не привяжем его к событию. В данном случае мы вызвали выполнение процедуры ТипЗначения (А), объявив ее в другой процедуре.
Теперь при открытии формы обработки можно увидеть, что созданная переменная А имеет тип Неопределено.
На втором этапе дополним код предопределенным обработчиком ПриИзменении для реквизита НашаПеременная. Задача обработчика – обновлять реквизит Комментарий каждый раз при изменении реквизита НашаПеременная.
В результате мы создали обработку, которая задает переменную А через взаимодействие с реквизитом НашаПеременная. Также мы создали процедуру ТипЗначения (А), которая выводит Тип выбранного значения примитивных данных в реквизите Комментарий.
Однако, такой способ управления переменной нельзя назвать практичным – необходимо создавать реквизит, цель которого не хранить и записывать данные, а быть переключателем типа данных.
Полный курс программиста 1С – с нуля до разработчика, способного решать практические учетные задачи в любой области.
Присвоение значения объекту «Тип данных» посредством команды
Далее мы рассмотрим более лаконичный механизм, который позволит присвоить переменной А необходимое значение при помощи соответствующих команд.
Так, чтобы присвоить переменной А тип Строка, создадим команду ТипСтрока и выведем ее на форму.
Теперь создадим процедуру-обработчик команды, которая назначит переменной А новое значение.
Для присвоения нового значения используется процедура ОписаниеТипов. При этом помимо непосредственно значения переменной А, обработчик выведет использованный код в строку Комментарий.
Для заполнения реквизита формы ПрисвоенныйТип создадим процедуру заполнения этого реквизита полученным значением.
После выполнения команды получаем результат:
Теперь создадим на управляемой форме аналогичные команды и процедуры-обработчики для присвоения переменной переменной А примитивных типов:
Вы можете попробовать сделать это самостоятельно.
Теперь при выполнении каждой команды реквизит формы ПрисвоенныйТип будет показывать какой тип данных присвоен переменной А, а реквизит Комментарий покажет строку программного кода, которая присваивает переменной А нужный тип примитивных данных.
Освойте навыки разработчика 1С на очных специализированных курсах от крупнейшей компании-франчайзи 1С.
Хотите получать подобные статьи по четвергам?
Быть в курсе изменений в законодательстве?
Подпишитесь на рассылку
Основа любой учетной системы – это данные: наименование контрагента, сумма счета, дата проведения реализации. Базовые типы данных в программировании называются примитивными, и в среде разработки «1С:Предприятие 8» таких типов 7:
- null – задает отсутствие значения;
- число – задает любое десятичное число;
- строка – задает символьную строку, в том числе текст;
- дата – задает дату и время;
- буллево – задает логический результат «правда» или «ложь»;
- тип – идентифицирует тип данных у значения»;
- неопределенно – используется, когда необходимо задать значение, не принадлежащее ни к одному другому типу.
Вы можете подробно ознакомиться с этим и другими понятиями внутреннего языка, открыв в режиме конфигуратора справочник «Синаксис-помощник», который находится в разделе «Справка».
Полный курс программиста «1С» – с нуля до разработчика, способного решать практические учетные задачи в любой области.
Взаимодействие данных. Создание обработки «Калькулятор»
Функционирование учетной системы на платформе «1С:Предприятие 8» осуществляется благодаря взаимодействию данных между собой. Чтобы научиться работать с данными и осуществлять их базовое взаимодействие, разработайте несложную обработку «Калькулятор» – простейший манипулятор данными типа число.
Откройте конфигурацию («Конфигурация» – «Открыть конфигурацию»). Затем создайте новый документ для разработки («Файл» – «Новый»). В открывшемся окне выберите тип документа «Внешняя обработка».
Задайте разработке имя. В данном случае «Калькулятор». Создайте новую форму через «Конструктор форм». Для этого разработайте главное окно обработки. Чтобы это сделать, нажмите правой кнопкой на «Формы», далее – «Добавить».
Тип формы – «Форма обработки». Имя формы можно изменить, но в данном случае делать этого необязательно. Нажмите «Готово».
Вы увидите окно настройки формы. В правой части располагаются элементы формы, в левой – реквизиты. Внизу наглядное представление формы. В первую очередь создаете реквизит «Число1» (тип – число, длина – 10, точность – 2).
Далее необходимо добавить в форму элемент «Поле», через который будет задаваться реквизит «Число1». Для этого в свойствах поля необходимо указать в строке «ПутьКДанным» реквизит «Число1». Чтобы облегчить задачу, перетяните мышкой реквизит из правой части окна в левую. Соответствующее поле будет создано автоматически.
Далее повторите действие еще 3 раза. В результате у вас должно получиться 3 реквизита и соответствующие им 3 поля:
- «Число1» (Тип – Число);
- «Число2» (Тип – Число);
- «Результат» (Тип – Число).
Поля можно для удобства объединить в группу. Для этого создайте элемент («Группа» – «Обычная группа») и перетяните его мышью в новую группу.
Далее нажмите на «Команды» (вкладка расположена в правой части окна) и создайте их для осуществления основных алгебраических операций:
- сложить;
- вычесть;
- умножить;
- разделить;
- получить остаток от деления.
Затем перетяните команды в левую часть, чтобы создать советующие им элементы-кнопки. Кнопки, как и поля, можно объединить в группу для удобства.
Итак, вы создали форму калькулятора. Теперь необходимо прописать алгоритмы вычисления, которые называются процедурами. Процедуры задаются кодом, который прописывается во вкладке «Модуль» внизу конструктора формы.
Создание процедуры начинается с написания директивы «&НаКлиенте», которая означает, что процедура выполняется у вас на компьютере, а не на сервере.
Правила вычислений открываются словом «Процедура». Затем назначается объект выполнения процедуры следующим образом: «Название объекта (Тип объекта)». В данном случае строка будет иметь вид:
Процедура Сложить (Команда),
«Сложить» – название объекта, «Команда» – тип объекта.
Следующая строка задает алгоритм процедуры. Для процедуры арифметического вычисления используются реквизиты, участвующие в вычислении, и арифметические символы «+», «-», «*», «/» и другие. Таким образом, следующая строка будет иметь вид:
Результат=Число1+Число2;
Следующая строка заканчивает процедуру словом «КонецПроцедуры». Для процедуры сложения код будет выглядеть так:
Процедура Сложить (Команда),
Результат=Число1+Число2;
КонецПроцедуры
Далее аналогично напишите код для остальных операций (остаток от деления «Числа1» от «Числа2» задается символом «%»). Вы должны получить следующий результат:
Вы закончили создание обработки! Теперь ее можно будет сохранить на компьютере и загрузить в конфигурацию «1С» в режиме пользователя. После этого доступ к ней будет осуществляться через список «Внешние отчеты и обработки».
Освойте навыки разработчика «1С» на очных специализированных курсах от международного ИТ-интегратора «Первый Бит».
Хотите получать подобные статьи по четвергам?
Быть в курсе изменений в законодательстве?
Подпишитесь на рассылку
Основа любой учетной системы – это данные: наименование контрагента, сумма счета, дата проведения реализации. Базовые типы данных в программировании называются примитивными, и в среде разработки «1С:Предприятие 8» таких типов 7:
- null – задает отсутствие значения;
- число – задает любое десятичное число;
- строка – задает символьную строку, в том числе текст;
- дата – задает дату и время;
- буллево – задает логический результат «правда» или «ложь»;
- тип – идентифицирует тип данных у значения»;
- неопределенно – используется, когда необходимо задать значение, не принадлежащее ни к одному другому типу.
Вы можете подробно ознакомиться с этим и другими понятиями внутреннего языка, открыв в режиме конфигуратора справочник «Синаксис-помощник», который находится в разделе «Справка».
Полный курс программиста «1С» – с нуля до разработчика, способного решать практические учетные задачи в любой области.
Взаимодействие данных. Создание обработки «Калькулятор»
Функционирование учетной системы на платформе «1С:Предприятие 8» осуществляется благодаря взаимодействию данных между собой. Чтобы научиться работать с данными и осуществлять их базовое взаимодействие, разработайте несложную обработку «Калькулятор» – простейший манипулятор данными типа число.
Откройте конфигурацию («Конфигурация» – «Открыть конфигурацию»). Затем создайте новый документ для разработки («Файл» – «Новый»). В открывшемся окне выберите тип документа «Внешняя обработка».
Задайте разработке имя. В данном случае «Калькулятор». Создайте новую форму через «Конструктор форм». Для этого разработайте главное окно обработки. Чтобы это сделать, нажмите правой кнопкой на «Формы», далее – «Добавить».
Тип формы – «Форма обработки». Имя формы можно изменить, но в данном случае делать этого необязательно. Нажмите «Готово».
Вы увидите окно настройки формы. В правой части располагаются элементы формы, в левой – реквизиты. Внизу наглядное представление формы. В первую очередь создаете реквизит «Число1» (тип – число, длина – 10, точность – 2).
Далее необходимо добавить в форму элемент «Поле», через который будет задаваться реквизит «Число1». Для этого в свойствах поля необходимо указать в строке «ПутьКДанным» реквизит «Число1». Чтобы облегчить задачу, перетяните мышкой реквизит из правой части окна в левую. Соответствующее поле будет создано автоматически.
Далее повторите действие еще 3 раза. В результате у вас должно получиться 3 реквизита и соответствующие им 3 поля:
- «Число1» (Тип – Число);
- «Число2» (Тип – Число);
- «Результат» (Тип – Число).
Поля можно для удобства объединить в группу. Для этого создайте элемент («Группа» – «Обычная группа») и перетяните его мышью в новую группу.
Далее нажмите на «Команды» (вкладка расположена в правой части окна) и создайте их для осуществления основных алгебраических операций:
- сложить;
- вычесть;
- умножить;
- разделить;
- получить остаток от деления.
Затем перетяните команды в левую часть, чтобы создать советующие им элементы-кнопки. Кнопки, как и поля, можно объединить в группу для удобства.
Итак, вы создали форму калькулятора. Теперь необходимо прописать алгоритмы вычисления, которые называются процедурами. Процедуры задаются кодом, который прописывается во вкладке «Модуль» внизу конструктора формы.
Создание процедуры начинается с написания директивы «&НаКлиенте», которая означает, что процедура выполняется у вас на компьютере, а не на сервере.
Правила вычислений открываются словом «Процедура». Затем назначается объект выполнения процедуры следующим образом: «Название объекта (Тип объекта)». В данном случае строка будет иметь вид:
Процедура Сложить (Команда),
«Сложить» – название объекта, «Команда» – тип объекта.
Следующая строка задает алгоритм процедуры. Для процедуры арифметического вычисления используются реквизиты, участвующие в вычислении, и арифметические символы «+», «-», «*», «/» и другие. Таким образом, следующая строка будет иметь вид:
Результат=Число1+Число2;
Следующая строка заканчивает процедуру словом «КонецПроцедуры». Для процедуры сложения код будет выглядеть так:
Процедура Сложить (Команда),
Результат=Число1+Число2;
КонецПроцедуры
Далее аналогично напишите код для остальных операций (остаток от деления «Числа1» от «Числа2» задается символом «%»). Вы должны получить следующий результат:
Вы закончили создание обработки! Теперь ее можно будет сохранить на компьютере и загрузить в конфигурацию «1С» в режиме пользователя. После этого доступ к ней будет осуществляться через список «Внешние отчеты и обработки».
Освойте навыки разработчика «1С» на очных специализированных курсах от международного ИТ-интегратора «Первый Бит».
Хотите получать подобные статьи по четвергам?
Быть в курсе изменений в законодательстве?
Подпишитесь на рассылку
(0)
У меня есть российский паспорт, но его номер никто не знает, поэтому его номер NULL, а вот те кто родился в 2010 году, еще паспорта не имеют поэтому их номер - пустое значение.
А вот маньяк, гражданин Украины, непонятно есть ли у него гражданство и Российски паспорт, поэтому его номер - неопределенно
те кто родился в 2010 году, еще паспорта не имеют поэтому их номер - NULL
(12) ты всё напутал твой паспорт - Неопределено, у тех, кто родился в 2010 - NULL, у Маньяка - тоже Неопределено
(16) Это не пустое значение, а значение по умолчанию. Хотя обычно, если не ясно, есть что-то или нет, то считается, что нет, а тут наоборот, считается что есть
+ так же нет пустой даты, есть Дата("00010101"), что и является пустой датой.
И т.д. другие грабли.
NULL в Системах управления базами данных (СУБД) — специальное значение (псевдозначение), которое может быть записано в поле таблицы базы данных (БД). NULL соответствует понятию «пустое поле», то есть «поле, не содержащее никакого значения». Введено для того, чтобы различать в полях БД пустые (визуально не отображаемые) значения (например, строку нулевой длины) и отсутствующие значения (когда в поле не записано вообще никакого значения, даже пустого).
Мнение 1: NULL является необходимым и обязательным для любой БД, претендующей на реляционность. В частности без него невозможно корректно построить внешнее соединение (OUTER JOIN) строк из двух таблиц. Именно этой точки зрения придерживался Э. Кодд, явно включив его в качестве третьего из 12 правил для реляционных СУБД. Именно этот принцип закреплен в последних стандартах на язык SQL .
Мнение 2: Значение NULL не требуется, а его использование — следствие ошибки проектирования БД. В базе данных, разработанной в полном соответствии с критериями нормализации, не может быть полей без значений, а значит, не нужно и специальное псевдозначение для таких полей. На практике, однако, из соображений эффективности, нередко оказывается удобным пренебречь некоторыми из правил нормализации, но одним из видов платы за такое пренебрежение является появление пустых полей, для которых и предназначен NULL.
Замечание: нет такого типа - "пустое значение", но есть функция ПустоеЗначение(), которая определяет заполненоность и возвращаеть Истина/Ложь
(0) Пустое значение: "В этот гараж можно поставить что угодно, но ожидается, что в нем должна стоять машина марки Тойота, хотя ее там сейчас нет"
Читайте также: