Неопределенный тип данных 1с

Обновлено: 06.07.2024

+ так же нет пустой даты, есть Дата("00010101"), что и является пустой датой.

И т.д. другие грабли.

NULL в Системах управления базами данных (СУБД) — специальное значение (псевдозначение), которое может быть записано в поле таблицы базы данных (БД). NULL соответствует понятию «пустое поле», то есть «поле, не содержащее никакого значения». Введено для того, чтобы различать в полях БД пустые (визуально не отображаемые) значения (например, строку нулевой длины) и отсутствующие значения (когда в поле не записано вообще никакого значения, даже пустого).
Мнение 1: NULL является необходимым и обязательным для любой БД, претендующей на реляционность. В частности без него невозможно корректно построить внешнее соединение (OUTER JOIN) строк из двух таблиц. Именно этой точки зрения придерживался Э. Кодд, явно включив его в качестве третьего из 12 правил для реляционных СУБД. Именно этот принцип закреплен в последних стандартах на язык SQL .
Мнение 2: Значение NULL не требуется, а его использование — следствие ошибки проектирования БД. В базе данных, разработанной в полном соответствии с критериями нормализации, не может быть полей без значений, а значит, не нужно и специальное псевдозначение для таких полей. На практике, однако, из соображений эффективности, нередко оказывается удобным пренебречь некоторыми из правил нормализации, но одним из видов платы за такое пренебрежение является появление пустых полей, для которых и предназначен NULL.
(0) на самом деле это придумали в злобной корпорации 1С, а реальные люди используют только NULL
Замечание: нет такого типа - "пустое значение", но есть функция ПустоеЗначение(), которая определяет заполненоность и возвращаеть Истина/Ложь
(0) Пустое значение: "В этот гараж можно поставить что угодно, но ожидается, что в нем должна стоять машина марки Тойота, хотя ее там сейчас нет"
(25) Пустое значение - это пустое значение. При чем тут тип ?
а вот "коза", которую подсунуло 1С в типовой УТ 10.3
как известно, практически всюду для составного типа в запросе проверка на незаполненность это сравнение с Неопределено, однако в РС СкидкиНаценкиНоменклатуры для ПолучательСкидки это ДоговорыКонтрагентов.ПустаяСсылка

(0) неопределено юзай если ты явно хочешь грохнуть объект

Пустое значение - В этом месте может лежать точно знаю что, но его нет.
(Есть пустой горшок для хранения меда)

Неопределено - В этом месте чего-то нет, но чего именно неизвестно.
(Есть пустой горшок, в него можно положить что угодно. Если это что-то в него влезет конечно.)

Null - Совсем ничего нет
(Нет ни меда, ни шарика. Даже горшка нет, куда можно что-нибудь положить положить)

На прошлых уроках программирования 1С мы изучили примитивные типы данных Число, Строка и Дата ознакомьтесь с этими материалами, прежде чем приступить к изучению этого.

Программирование 1С: примитивный тип данных Булево

Булево – один из базовых типов данных логических выражений.

Значения типа Булево имеют два значения Истина и Ложь, задаваемых соответствующими литералами. Часто применяется в различных логических вычислениях.

Для демонстрации работы с типом данных мы разработаем простой логический вычислитель Светофор.

Программирование 1С: логический вычислитель Светофор

Идея проста – мы имеем 3 реквизита типа «Булево»:

Соответственно каждый этот реквизит может быть либо «активен» (то есть иметь значение Истина), либо «отключен» (то есть иметь значение Ложь).

Перенесем реквизиты на форму обработки.


Далее создадим реквизит типа Строка, который назовем Реакция пешехода и также перенесем его на форму. Задача нашей обработки – при вводе определенной комбинации «цветов светофора», выводить в стоке результат – ожидаемое действие пешехода.

Для чистоты процедуры мы создадим обработчик события, который будет обнулять булевы реквизиты при открытии обработки. Создаем обработчик &НаКлиенте, который запускается ПриОткрытии через контекстное меню по щелчку на форме.


Конфигуратор автоматически подставил часть кода, которая задает условие запуска обработчика..


Задаем содержимое обработчика:

Красный=Ложь;Желтый=Ложь;Зеленый=Ложь;

Обратите внимание, что значение булева реквизита «Ложь» нельзя брать в кавычки, иначе программа прочитает его как Строку.

Полный курс программиста 1С – с нуля до разработчика, способного решать практические учетные задачи в любой области.

Программирование 1С: составление кода

Далее определимся с логической частью нашей обработки, которую мы позднее преобразуем в код.

  1. Если горит Красный, а Зеленый и Желтый не горят - пешеход должен стоять.
  2. Если Вместе с Красным загорелся Желтый , а Зеленый не горит-пешеход должен приготовиться к движению.
  3. Если горит Зеленый, а Красный и Желтый не горят – пешеход должен переходить проезжую часть.
  4. Если горит Зеленый и Желтый, а Красный не горит - Пешеход должен поторопиться закончить движение.

Мы ранее ознакомились с универсальным хранилищем данных Массив, которая хранит данные и позволяет их вызвать по порядковому номеру. Попробуем реализовать хранение ситуаций через эту функцию. Создаем новую процедуру Ситуации (НомерСитуации), задача которой – возвращать порядковый номер ситуации из массива.


Другой вариант – использовать универсальное хранилище значений Соответствие, которое устанавливает связь между двумя данными – в данном случае Числом и Строкой. В данном примере мы используем синтаксис Вставить (записывает данные в хранилище) и Получить (получает из хранилища значение). Этот синтаксис также можно использовать с хранилищем Массив.


Далее мы приступаем к созданию логических выражений. Сначала смоделируем их обычным языком.

  • Если включился Красный, то Желтый и Зеленый должны быть выключены, команда «Стой».
  • Если включился Желтый, то возможно 2 варианта:
  • Если включился Зеленый, то Желтый и Красный должны быть выключены, команда «Иди».

Теперь необходимо перевести логические выражения в код. Задача упрощается понятным синтаксисом: Команда Если открывает логическое выражение, КонецЕсли – закрывает. Команды И, Тогда и Иначе используются внутри обработчика Если.

Пишем первый обработчик «Если включился Красный, то Желтый и Зеленый должны быть выключены, команда «Стой»:

  1. «Если включился Красный» – создаем обработчик события ПриИзменении реквизита Красный. Внутри открываем логическое выражение Если, и задаем условие Красный=Истина
  2. «То Желтый и Зеленый должны быть выключены» – используем выражение Тогда и задаем условия Желтый=Ложь;Зеленый=Ложь;
  3. «Команда «Стой» – мы задаем номер ситуации и запускаем процедуру получения данных из массива НомерСитуации=0;Ситуации(НомерСитуации);
  4. Логическое выражение не может закончился без команды Иначе, поскольку процедура должна выполнить какое-либо действие и в том случае, когда условия не выполнены. Иначе РеакцияПешехода=Неопределено; КонецЕсли; КонецПроцедуры.

В итоге у нас получился вот такой код:


Следующий обработчик будет состоять из 2-х частей: когда с желтым работает красный, и когда с желтым работает зеленый. Создаем обработчик ПриИзменении реквизита Желтый. Код будем писать аналогично, за тем исключением, что внутри обработчика мы опишем процедуру Если 2 раза.


Последний обработчик для Зеленого сигнала светофора будет выглядеть аналогично.


Проверим работу Светофора в режиме 1С:Предприятие, включая последовательно флажки реквизитов Красный, Желтый, Зеленый, Желтый, Красный и получая в соответствии с ситуацией строковые значения реквизита РеакцияПешехода.

Освойте навыки разработчика 1С на очных специализированных курсах от крупнейшей компании-франчайзи 1С.

Основа любой учетной системы – это данные: наименование контрагента, сумма счета, дата проведения реализации. Базовые типы данных в программировании называются примитивными, и в среде разработки «1С:Предприятие 8» таких типов 7:

  • null – задает отсутствие значения;
  • число – задает любое десятичное число;
  • строка – задает символьную строку, в том числе текст;
  • дата – задает дату и время;
  • буллево – задает логический результат «правда» или «ложь»;
  • тип – идентифицирует тип данных у значения»;
  • неопределенно – используется, когда необходимо задать значение, не принадлежащее ни к одному другому типу.

Вы можете подробно ознакомиться с этим и другими понятиями внутреннего языка, открыв в режиме конфигуратора справочник «Синаксис-помощник», который находится в разделе «Справка».

1.jpg

Полный курс программиста «1С» – с нуля до разработчика, способного решать практические учетные задачи в любой области.

Взаимодействие данных. Создание обработки «Калькулятор»

Функционирование учетной системы на платформе «1С:Предприятие 8» осуществляется благодаря взаимодействию данных между собой. Чтобы научиться работать с данными и осуществлять их базовое взаимодействие, разработайте несложную обработку «Калькулятор» – простейший манипулятор данными типа число.

Откройте конфигурацию («Конфигурация» – «Открыть конфигурацию»). Затем создайте новый документ для разработки («Файл» – «Новый»). В открывшемся окне выберите тип документа «Внешняя обработка».

2.jpg

Задайте разработке имя. В данном случае «Калькулятор». Создайте новую форму через «Конструктор форм». Для этого разработайте главное окно обработки. Чтобы это сделать, нажмите правой кнопкой на «Формы», далее – «Добавить».


Тип формы – «Форма обработки». Имя формы можно изменить, но в данном случае делать этого необязательно. Нажмите «Готово».


Вы увидите окно настройки формы. В правой части располагаются элементы формы, в левой – реквизиты. Внизу наглядное представление формы. В первую очередь создаете реквизит «Число1» (тип – число, длина – 10, точность – 2).


Далее необходимо добавить в форму элемент «Поле», через который будет задаваться реквизит «Число1». Для этого в свойствах поля необходимо указать в строке «ПутьКДанным» реквизит «Число1». Чтобы облегчить задачу, перетяните мышкой реквизит из правой части окна в левую. Соответствующее поле будет создано автоматически.


Далее повторите действие еще 3 раза. В результате у вас должно получиться 3 реквизита и соответствующие им 3 поля:

  • «Число1» (Тип – Число);
  • «Число2» (Тип – Число);
  • «Результат» (Тип – Число).

Поля можно для удобства объединить в группу. Для этого создайте элемент («Группа» – «Обычная группа») и перетяните его мышью в новую группу.


Далее нажмите на «Команды» (вкладка расположена в правой части окна) и создайте их для осуществления основных алгебраических операций:

  • сложить;
  • вычесть;
  • умножить;
  • разделить;
  • получить остаток от деления.

Затем перетяните команды в левую часть, чтобы создать советующие им элементы-кнопки. Кнопки, как и поля, можно объединить в группу для удобства.


Итак, вы создали форму калькулятора. Теперь необходимо прописать алгоритмы вычисления, которые называются процедурами. Процедуры задаются кодом, который прописывается во вкладке «Модуль» внизу конструктора формы.

Создание процедуры начинается с написания директивы «&НаКлиенте», которая означает, что процедура выполняется у вас на компьютере, а не на сервере.

Правила вычислений открываются словом «Процедура». Затем назначается объект выполнения процедуры следующим образом: «Название объекта (Тип объекта)». В данном случае строка будет иметь вид:

Процедура Сложить (Команда),

«Сложить» – название объекта, «Команда» – тип объекта.

Следующая строка задает алгоритм процедуры. Для процедуры арифметического вычисления используются реквизиты, участвующие в вычислении, и арифметические символы «+», «-», «*», «/» и другие. Таким образом, следующая строка будет иметь вид:

Результат=Число1+Число2;

Следующая строка заканчивает процедуру словом «КонецПроцедуры». Для процедуры сложения код будет выглядеть так:

Процедура Сложить (Команда),

Результат=Число1+Число2;

КонецПроцедуры

Далее аналогично напишите код для остальных операций (остаток от деления «Числа1» от «Числа2» задается символом «%»). Вы должны получить следующий результат:


Вы закончили создание обработки! Теперь ее можно будет сохранить на компьютере и загрузить в конфигурацию «1С» в режиме пользователя. После этого доступ к ней будет осуществляться через список «Внешние отчеты и обработки».

Освойте навыки разработчика «1С» на очных специализированных курсах от международного ИТ-интегратора «Первый Бит».

Понятие "тип реквизита" отличается от понятия "тип значения"

Конкретное значение не может быть составного типа. Одно конкретное значение может быть только одного типа данных.

Реквизит может быть как одного типа, так и составного типа. В последнем случае его тип описывается объектом "ОписаниеТипов", т.е. список возможных типов, значения которых могут храниться в этой колонке. Например, СправочникСсылка.М1, СправочникСсылка.М2, Строка, Число, ДокументСсылка.Д1.

В каждой строке (элементе, записи) содержится какое-то свое значение, но каждое из них - одного типа. Например, "СправочникСсылка.М1". Если же в ячейке колонки, имеющей составной тип, даже не выбран (не назначен) тип значения, то оно содержит значение "Неопределено" (это значение и одновременно тип). Если же тип выбран (кнопкой Т или установлен программно), то ячейка содержит пустое значение этого типа, например, пустую ссылку на элемент справочника (см. v8: Пустые ссылки), пустую строку "" или 0.

Чтобы реквизиту составного типа установить конкретный тип, достаточно присвоить ему пустое значение этого типа.

Вопрос:
Какие существуют особенности работы с составными типами данных.

Ответ
Этот вопрос имеет два стороны:
1) Сторона элемента формы.
Для элемента формы мы можем установить только ограничение на типы которые можно выбрать.
Т.е. с помощью кода:

Мы ограничиваем возможный типы только одним "СправочникСсылка.Контрагенты".
НО это не действует на значение которое хранится в источнике данных.
Поэтому если реквизит который связан с "ПолеВвода1" имеет "составной" тип, например Любая ссылка,
он будет неопределенного типа даже после "ЭлементыФормы.ПолеВвода1.ОграничениеТипа=Новый ОписаниеТипов(МассивТипов);"

2) Сторона источника данных.
Здесь ограничение на тип накладывается либо в конфигураторе, либо в момент создания этого элемента из языка.
Но если у реквизита установлен "составной" тип значение реквизита будет неопределенно до тех пор, пока ему не будет присвоено значение конкретного типа.
Присвоить конкретное значение можно либо из языка, либо выбрав это значение в форме.

Из выше описанного можно сделать вывод:
Если у реквизита установлен "Составной" тип данных, то даже при ограничении возможных типов у элемента формы до одного возможного, у пользователя будет запрошен тип который нужно будет присвоить реквизиту.
Если мы хотим оградить пользователя от лишних движений, т.е. выбора единственно возможного типа, нам нужно предварительно установить тип реквизита.
Сделать это можно следующим образом:

Добавление от ezh (особенности при работе с элементами в табличном поле):
1.
Вместо этого:

Читайте также: