Задать тип переменной 1с

Обновлено: 04.07.2024

В 1С очень много предопределенных типов значений, их можно подразделить на несколько групп.

Группы типов данных

  • простые (примитивные) типы
  • типы-объекты и их подчиненные
  • типы-объекты из метаданных (прикладные типы)
  • интерфейсные типы
  • прочие типы общего назначения

Простые типы

Типы-объекты

  • Коллекции значений (Массивы, Структуры, ТаблицыЗначений и другие)
  • Интеграционные (Com, файлы, внешние объекты, zip, WS)
  • Общего назначения

Объекты из метаданных (прикладные)

Интерфейсные

Связанные с окнами, формами и элементами форм (полей, надписей, табличных данных и других)

Другие варианты подразделения значений

Задание типов значений

Значение может быть установлено:

Непосредственно

Через создание объекта

Через результат вызова системной функции

Через обращение к свойству объекта

Составные и простые типы

Если не указано специально, то тип значений не ограничивается.

Например, для простого случая

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

Приведение значений

Производится автоматически при присвоении к реквизиту (свойству) объекта, если данный реквизит не может хранить данное значение

Также при операциях конкатенации, производится к сначала первому слагаемому, при вычитании, если допустимо, ко втором, а затем уже к результату.

Приведение значений через встроенные функции преобразования

Следует обратить внимание, что некоторые преобразования система не сможет сделать, и это вызовет ошибку исполнения, поэтому проверка должна производится разработчиком

Проверка типов

Сравнение производится через специальные функции ТипЗнч() и Тип().

Первая возвращает значение передаваемого типа, вторая задает тип для проверки

ЭтоЧисло = 15; //ответ на вопрос: тип значения переменной "ЭтоЧисло" является ли типом "Число" ЭтоБулево = ТипЗнч(ЭтоЧисло) = Тип("Число"); //Первый знак "=" - присвоение //Второй " i-11">Сравнение значений

  • при сравнении на равенство по четкому совпадению типа и значения, приведение не производится
  • сравнение на > или < (на больше-меньше) допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)

Более подробно на типах останавливаться не буду, лучше их прочувствовать в реальных задачах или узких примерах

Как в языке 1С работать с типами данных и как производить преобразование типов 1С?

Значение 1С Неопределено

Неопределено – это значение 1С, которое обозначает, что значения нет. С помощью этого значения 1С можно «обнулять» переменные, в том числе для неявного вызова деструктора, например COM объектов.
Переменная1 = Новый COMОбъект("Excel.Application");
Переменная1 = Неопределено;

Типы значений 1С

В качестве «переменных» возможно использовать:

  • Переменные, созданные в тексте программы (описанными выше способами)
  • Реквизиты объекта метаданных или формы (созданными в конфигураторе, с указанием точного типа 1С).

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

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

По умолчанию такой реквизит имеет значение 1С Неопределено. Когда выбран тип 1С, но еще не выбрано значение 1С – пустое значение этого типа 1С (0 для числа, пустая ссылка для ссылочных типов 1С, см. ниже). И наконец потом – значение 1С. Из программы назначения значения производится напрямую, без промежуточного выбора типа 1С.

Определить тип значения 1С возможно несколькими способами:
//способ 1 – сравнение с известными типами 1С
Переменная1 = 12;
Если ТипЗнч(Переменная1) = Тип("Число") Тогда
//…
ИначеЕсли ТипЗнч(Переменная1) = Тип("СправочникСсылка.ИмяСправочника") Тогда
//…
КонецЕсли;

Преобразование типов 1С

//в строку
ЗнчСтрока = Строка(22);
ЗнчСтрока = СокрЛП(22);
ЗнчСтрока = Формат(22, "ЧГ=0");

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

Форматирование значений 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, "ЧН="" """)
>

Когда требуется работать со списком типов – используется объект ОписаниеТипов (см. «Получение доступных типов», «Работа с типами реквизитов в метаданных конфигурации», «Указать фильтр типов в фильтре»).

Получить список типов

Предположим, что Вы получили готовый объект ОписаниеТипов:

  • ЭлементыФормы.ИмяПоля.ТипЗначения
  • ДокументСсылка.Метаданные().Реквизиты.ИмяРеквизита.Тип
  • СписокЗначений.ДоступныеЗначения

Получить список типов из объекта ОписаниеТипов можно с помощью метода .Типы(), например:
Для каждого ДоступныйТип из ЭлементыФормы.ИмяПоля.ТипЗначения Цикл
Если ДоступныйТип = Тип("Строка") Тогда
//…
КонецЕсли;
КонецЦикла;

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

Если требуется просто проверить – есть ли в списке типов требуемый, можно использовать метод .СодержитТип(), например:
Если ЭлементыФормы.ИмяПоля.ТипЗначения.СодержитТип( Тип("Строка") ) Тогда
//…
КонецЕсли;

Приведение значения к разрешенному типу

Если у Вас имеется значение (например, переменная со значением) и имеется фильтр типов значений в объекте ОписаниеТипов, то возможно привести значение к тем ограничениям типов, которые указаны в объекте ОписаниеТипов.

Например:
ЗначениеРазрешенногоТипа = ОписаниеТиповФильтр.ПривестиЗначение( НекотороеЗначение );

Создание описания типов

Создать объект ОписаниеТипов требуется в тех случаях, когда требуется указать какой фильтр типов будет установлен, например, при добавлении колонки таблицы значений методом .Добавить (фильтр типов указывается вторым параметром), или для установки фильтра разрешенных типов в список значений в свойстве .ДоступныеЗначения

Если в списке разрешенных типов присутствует только один тип, то в качестве параметра при создании объекта ОписаниеТипов указывается просто название типа (см. выше «Работа с типами»).

Например:
ФильтрТипов = Новый ОписаниеТипов("Строка");

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

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

При создании объекта ОписаниеТипов возможно указать дополнительными параметрами настройки базовых типов (любой из указанных параметров настроек – необязательный и можно пропустить).
Новый ОписаниеТипов(ИмяТипа, НастройкиТипаЧисло, НастройкиТипаСтрока, НастройкиТипаДата);

Создадим настройку для целого числа с 5 цифрами: 99 999
НастройкаТипаЧисла = Новый КвалификаторыЧисла(5,0);

Создадим настройку для дробного числа с 5 цифрами до запятой и 2 цифрами после запятой: 99 999,99
НастройкаТипаЧисла = Новый КвалификаторыЧисла(5,2);

Настройка для того же числа, что и выше, и дополнительно – неотрицательного:

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

Настройка для строки длиной 100 символов:
НастройкаТипаСтроки = Новый КвалификаторыСтроки(100);

Настройка для строки длиной 100 символов, значения которой дополняются до 100 символов пробелами:

Если необходимо использовать дату и время – настройку указывать не надо.

Настройка для только даты, без времени (значение будет содержать время 00:00:00):
НастройкаТипаДаты = Новый КвалификаторыДаты(ЧастиДаты.Дата);

Настройка для только времени, без даты (значение будет содержать дату 01.01.0001):
НастройкаТипаДаты = Новый КвалификаторыДаты(ЧастиДаты.Время);


Итак, что же такое параметр?

Параметр – это значение, передаваемое в форму при открытии. Параметр может иметь любой тип и принимать любое значение.

Зачем нужен параметр?

Параметр нужен для передачи в форму дополнительных значений. Например: откуда открыта форма.

Как передать параметр?

Параметр передается в форму при открытии. Например:

Как получить параметр в открывшейся форме?

Получить параметр, переданный в форму, мы можем таким образом:

Как передать несколько значений?

Поскольку параметр может принимать любое значение, он может принимать значение типа Список. Пример

Пример обработки его в открывшейся форме:


Что такое контекст формы?

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

Как работать с контекстом?

Все довольно просто. Для того, чтобы с контекстом работать, его надо сначала передать.
Передается он с помощью параметра. Например:

Но правильнее будет воспользоваться такой процедурой в глобально модуле:

использовать ее нужно так:

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

Создадим тестовую обработку, и назовем ее Пример. Добави на нее кнопку Закрыть для закрытия формы. Теперь добавим на нее Текстовый реквизит и пропишем ему в поле Формула ТР. Также в модуле формы пропишем:

Теперь откроем форму списка справочника Номенклатура и добавим туда кнопку. В формуле кнопки напишем

Запустите 1С, откройте справочник номенклатуры, нажмите кнопку. Откроется форма и там будет наименование выбранной номенклатуры. Мы передали параметр.
Теперь передадим несколько значений. У кнопки поменяем формулу на ОткрытьПример(). Опишем процедуру:

В обработке перепишем:

Пробуем. В зависимости от того, группа или нет, текущий элемент, в обработке пишется полное наименование или обычное.

Теперь поработаем с контекстом. Перепишем процедуру ОткрытьПример:

Изменим и обработку:

В текстовом реквизите на обработке в формулу пропишем Надпись() и приделаем туда еще одну кнопку Обновить у которой в формулу пропишем Форма.Обновить()

Запускаем. При открытии в текстовом реквизите высвечивается текущий элемент справочника, но при его смене надпись не меняется, а меняется она только после нажатия кнопки Обновить. То есть текстовый реквизит на форме не обновляется. Незадача? Давайте решим и ее. Оказывается, при открытии формы можно получить и ее контекст из места открытия. В форме списка справочника объявим переменную ПримерКонт. Перепишем процедуру ОткрытьПример:

Теперь в функции какого-нить текстового реквизита (например ИнформационнаяНадпись()), пропишем такие строки:

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