Типы данных 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. Как правило, такие типы данных существуют и в других программных системах.

Значения примитивных типов являются простыми неделимыми значениями, в которых нельзя выделить отдельные составляющие. Например, значениями типа Число могут быть 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С, научились использовать переменные и операторы, разобрались, для чего и как использовать процедуры и функции. Заметим, что в основном весь наш программный код до этого момента был самодостаточным – мы всё писали сами с нуля и по минимуму использовали какие-то объекты конфигурации или встроенного языка.

В следующей статье мы изучим эти объекты более детально, поэтому не переключайтесь! ;)