Основы 1С: типы значения и их проверка

Содержание

Типы 1С

Основы 1С: типы значения и их проверка

Проверено, работает!

Back to top –

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

Пример:

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

Функция ТИП() получает тип по его имени. Имена примитивных типов: Число, Строка, Булево, Дата. Имена ссылочных типов строятся по следующему принципу: Документ.РеализацияТоворовУслуг или Справочник.Номенклатура.

Пример:

ВЫБРАТЬ ХозрасчетныйОбороты.Субконто1, ХозрасчетныйОбороты.Субконто2, ХозрасчетныйОбороты.Субконто3, ХозрасчетныйОбороты.СуммаОборот, ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(ХозрасчетныйОбороты.Субконто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С».

Источник: http://e-1c.ru/node/165

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

Основы 1С: типы значения и их проверка

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

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

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

Простые типы

  • Строка  (задается значением в кавычках «»)
  • Число (Задается десятичным числом)
  • Дата (дата и время)
  • Булево (Истина,Ложь.

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

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

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

  • Константы
  • Справочники
  • Документы
  • Перечисления
  • Отчеты
  • Обработки
  • Планы счетов
  • Задачи
  • Регистры сведений
  • Регистры накоплений
  • Регистры бухгалтерского учета
  • и другие…

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

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

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

  • Значения, которые можно записать в реквизит объекта (в поле информационной базы) и те, которые нельзя
  • Объекты, которые можно визуально представить, и  те, которые имеют виртуальную сущность
  • Типы значений которые, связаны с конфигурацией и ее объектами или работающие обособленно
  • Которые могут быть разграничены по правам пользователей- не могут
  • Могут достаточно просто  преобразовываться  — либо требуется вспомогательная конвертация
  • Есть свойства и методы  — либо отсутствуют

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

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

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

Это_Переменная = “Это строковое значение”;

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

Это_Переменная = Новый Цвет;

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

Это_Переменная = Дата(2016,1,1);

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

Это_Переменная_Объект_Цвет = Новый Цвет; Это_Переменная = Это_Переменная_Объект_Цвет.Зеленый;

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

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

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

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

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

ОписаниеТипа = Новый ОписаниеТипов(“Число,Строка”);

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

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

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

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

Цвет = Новый Цвет(255,0,0); Цвет2 = Новый Цвет(“2″+59-Цвет.Красный,0,0); //В данном случае произойдет поэтапно //”2″+59 =”259” //259-255 = 4 //Цвет2 = Новый Цвет(4,0,0);

Такие «сложные» преобразования требуется проводить с осторожностью.

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

ЭтоБудетЧисло = Число(“15″); ЭтоБудетСтрока = Строка(ЭтоБудетЧисло); ЭтоБудетСтрока = Формат(ЭтоБудетЧисло,””);//возможно указание строки форматирования значения ЭтоБудетДата = Дата(“201601+ЭтоБудетЧисло);//время будет 00:00:00 //Приведение через объект МожетБытьТолькоЧислом = Новый ОписаниеТипов(“Число”); ЭтоБудетЧисло = МожетБытьТолькоЧислом.ПривестиЗначение(“12”);

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

ЭтоПрисвоениеНеПроизойет = Дата(“12:45:45”);

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

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

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

ЭтоЧисло = 15; //ответ на вопрос: тип значения переменной “ЭтоЧисло” является ли типом “Число” ЭтоБулево = ТипЗнч(ЭтоЧисло) = Тип(“Число”); //Первый знак “=” – присвоение //Второй “=” – сравнение на равенство

Сам объект «Тип» является вспомогательным и не может быть записан в реквизиты

Сравнение значений

Производится:

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

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

Клиент получает ту рекламу, которую он заслуживает!

— Дэвид Огилви

Источник: http://Capitally.ru/1c-development/izuchenie-1s/language-1c/tipy-znachenij-1s/

Программная работа со справочниками

Основы 1С: типы значения и их проверка

Справочники в 1С — это объекты конфигурации, предназначенные для хранения данных, имеющих одинаковую структуру и носящие списочный характер. Например, в справочниках может храниться: перечень номенклатуры, контрагентов, сотрудников, банковских счетов и т.д. В статье рассматриваются базовые принципы работы с этим объектом метаданных.

Создание элемента справочника

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

Удаление элементов справочника

Обход элементов справочника

Выбор элементов справочника запросом

Открытие форм справочника

Создание элемента справочника

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

  1. Создание элемента или группы;
  2. Заполнение владельца (если справочник подчиненный);
  3. Заполнение родителя (если справочник иерархический);
  4. Заполнение наименования и реквизитов (если не задана автоматическая нумерация, то и кода);
  5. Заполнение табличных частей;
  6. Запись элемента.

Создание новой группы:

НоваяГруппа = Справочники.Контрагенты.СоздатьГруппу(); // Создание группы НоваяГруппа.Наименование = “Покупатели”; // Заполнение наименования НоваяГруппа.Записать(); // Запись группы

Создание нового элемента:

НовыйЭлемент = Справочники.Контрагенты.СоздатьЭлемент(); // Создание элемента НовыйЭлемент.Родитель = Справочники.Контрагенты.НайтиПоНаименованию(“Покупатели”); // Заполнение родителя НовыйЭлемент.

Наименование = “Ромашка ООО”; // Заполнение наименования НовыйЭлемент.ИНН = “123456789”; // Заполнение реквизита // Добавление новой строки табличной части НоваяСтрока = НовыйЭлемент.КонтактнаяИнформация.Добавить(); НоваяСтрока.Тип = “Адрес”; НоваяСтрока.

Представление = “Москва”; НовыйЭлемент.Записать(); // Запись элемента

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

Для поиска элементов справочников в языке программирования 1С предусмотрено несколько методов:

  • НайтиПоКоду(, , , )
  • НайтиПоНаименованию(, , , )
  • НайтиПоРеквизиту(, , , )

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

НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду(“123”); // Поиск контрагента с кодом “123” НайденныйДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоКоду(“1”, , , НайденныйКонтрагент); // Поиск подчиненного найденному контрагенту договора с номером “1” НайденныйКонтрагент = Справочники.Контрагенты.

НайтиПоНаименованию(“Покупатели”); // Поиск элемента с наименованием “Покупатели” НайденныйКонтрагент1 = Справочники.Контрагенты.НайтиПоНаименованию(“Ромашка ООО”, , НайденныйКонтрагент); // Поиск элемента с наименованием “Ромашка ООО” в группе “Покупатели” НайденныйКонтрагент = Справочники.Контрагенты.

НайтиПоРеквизиту(“ИНН”, “123456789”); // Поиск контрагента с ИНН “123456789”

Удаление элементов справочника

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

Непосредственное удаление – операция необратимая, в то время как пометку на удаление можно отменить. Пометка на удаление хранится в предопределенном реквизите ПометкаУдаления. В пользовательском режиме помеченные на удаление элементы и группы справочника помечаются красным крестиком.

Пометку на удаление можно установить/снять двумя разными способами:

// Способ 1. Использование метода УстановитьПометкуУдаления() НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду(“123”); КонтрагентОбъект = НайденныйКонтрагент.ПолучитьОбъект(); КонтрагентОбъект.УстановитьПометкуУдаления(Истина); // Способ 2. Изменение свойства ПометкаУдаления НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду(“123”); КонтрагентОбъект = НайденныйКонтрагент.ПолучитьОбъект(); КонтрагентОбъект.ПометкаУдаления = Истина; КонтрагентОбъект.Записать();

Пример непосредственного удаления элемента справочника:

НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду(“123”); КонтрагентОбъект = НайденныйКонтрагент.ПолучитьОбъект(); КонтрагентОбъект.Удалить();

Обход элементов справочника

Для обхода элементов справочника в языке программирования 1С предусмотрено два метода:

  • Выбрать(, , , )
  • ВыбратьИерархически(, , , )

Методы отличаются порядком следования отобранных элементов: при иерархической выборке для каждого элемента сначала выбираются элементы, для которых он является родителем, а затем уже выбираются элементы следующего уровня.

Рассмотрим примеры обхода элементов справочника:

// Обход всех элементов справочника Контрагенты Выборка = Справочники.Контрагенты.Выбрать(); // Получение выборки всех элементов справочника Пока Выборка.Следующий() Цикл //действия с очередным элементом Сообщить(Выборка.Наименование); КонецЦикла; // Обход контрагентов из группы “Покупатели” ГруппаПокупатели = Справочники.Контрагенты.НайтиПоНаименованию(“Покупатели”); Выборка = Справочники.Контрагенты.Выбрать(ГруппаПокупатели); Пока Выборка.Следующий() Цикл Сообщить(Выборка.Наименование); КонецЦикла; // Обход договоров контрагента “Ромашка ООО” НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоНаименованию(“Ромашка ООО”); Выборка = Справочники.ДоговорыКонтрагентов.Выбрать(, НайденныйКонтрагент); Пока Выборка.Следующий() Цикл Сообщить(Выборка.Наименование); КонецЦикла; // Обход контрагентов с пустым ИНН // Реквизит ИНН должен быть проиндексирован! Отбор = Новый Структура(“ИНН”, “”); // Структура может содержать только один элемент Выборка = Справочники.Контрагенты.Выбрать(, , Отбор); Пока Выборка.Следующий() Цикл Сообщить(Выборка.Наименование); КонецЦикла;

Выбор элементов справочника запросом

Поиск данных в базе 1С предпочтительнее выполнять при помощи запросов. Запрос позволяет описать практически любые условия для отбора, в отличие от методов Выбрать() и ВыбратьИерархически(), на которые накладываются существенные ограничения. К тому же, в большинстве случаев работа с использованием запросов быстрее, чем работа с использованием программного кода.

Простой пример поиска и вывода товаров со стоимостью больше 1000:

Запрос = Новый Запрос; Запрос.Текст = “ВЫБРАТЬ | Товары.Наименование |ИЗ | Справочник.Товары КАК Товары |ГДЕ | Товары.Стоимость > 1000”; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Сообщить(Выборка.Наименование); КонецЦикла;

Открытие форм справочника

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

ОткрытьФорму(, , , , , , , )

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

ПоказатьЗначение(, )

Кроме методов ОткрытьФорму() и ПоказатьЗначение() есть и другие (ОткрытьФормуМодально, ОткрытьЗначение, ПолучитьФорму), но их использование не рекомендуется, т.к. часть этих методов использует режим модального открытия, часть противоречит свежим рекомендациям фирмы 1С.

Приведем примеры программного открытия форм справочника:

// Открыть форму списка ОткрытьФорму(“Справочник.Контрагенты.ФормаСписка”); // Открыть форму элемента // Контрагент – реквизит формы, заполняемый пользователем интерактивно ПоказатьЗначение(, Контрагент); // Еще один способ открытия формы элемента ПараметрыОткрытия = Новый Структура(“Ключ”, Контрагент); ОткрытьФорму(“Справочник.Контрагенты.Форма.ФормаЭлемента”, ПараметрыОткрытия); // Открыть форму группы // ГруппаКонтрагентов– реквизит формы, заполняемый пользователем интерактивно ПоказатьЗначение(, ГруппаКонтрагентов); // Еще один способ открытия формы группы ПараметрыОткрытия = Новый Структура(“Ключ”, ГруппаКонтрагентов); ОткрытьФорму(“Справочник.Контрагенты.Форма.ФормаГруппы”, ПараметрыОткрытия);

Внимание!

Следует понимать, что интерактивная работа (в том числе открытие форм) в 1С возможна только на стороне клиента. В то же время поиск и изменение данных возможны только на стороне сервера.

Смотри также:

Программная работа с массивом
Срез последних на каждую дату
Как получить список открытых окон 1С

Источник: https://pro1c8.ru/programmnaya-rabota-spravochniki/

Запросы 1С:Предприятие 8. Прочие функции

Основы 1С: типы значения и их проверка

В языке запросов 1С существует большое количество различных функций и операторов, облегчающих построение запроса. Часть из них мы рассмотрели в статьях Функции работы с датами, Группировки в запросах 1С, остальные рассмотрим сейчас.

Функции работы со строками в запросах 1С

Функций и операторов для работы со строковыми данными в запросах 1С немного.

Во-первых, строки в запросах можно складывать. Для этого используется оператор «+»:

Запрос.Текст=”ВЫБРАТЬ
“”Строка: “” + Источник.Наименование
Из Справочник.Источник КАК Источник”;

Во-вторых, можно выделить часть строки. Для этого используется функция ПОДСТРОКА. Функция аналогична функции СРЕД () встроенного языка 1С. У нее три параметра:

  1. Строка-источник.
  2. Номер символа, с которого должна начинаться выделяемая строка.
  3. Количество символов.

Запрос.Текст=”ВЫБРАТЬ
ПОДСТРОКА(“”Строка: “”, 4, 3) КАК Результат”; // Результат: ока

И, наконец, существует оператор, которые позволяет сравнить строку с неким шаблоном. Это оператор ПОДОБНО. О его использовании читайте в нашей статье о парамертах и операторах сравнения в запросах 1С.

Функция ЕСТЬNULL

NULL — особый тип данных на платформе 1С:Предприятие. Он же является единственным возможным значением этого типа.

NULL может возникать в запросах в нескольких случаях: при соединениях источников запроса, если не было найдено соответствующего значения в одной из таблиц; при обращении к реквизитам несуществующего объекта; если NULL был указан в списке полей запроса (например при объединении результатов выборки из нескольких таблиц) и т.д.

Поскольку NULL не является ни нулем, ни пустой строкой, ни даже значением Неопределено, его часто бывает полезно заменять на какой-то более полезный тип данных. Для этого и предназначена функция ЕСТЬNULL.

Она имеет два параметра:

  1. Проверяемое значение.
  2. Значение, на которое нужно заменить первый параметр, если он оказался равен NULL.

Запрос.Текст=”ВЫБРАТЬ
ЕСТЬNULL(Источник.Остаток, 0) КАК Остаток”; // Если в результате запроса поле остаток=NULL,
// то оно заменится на 0, и с ним можно будет выполнять математические действия

Функции ПРЕДСТАВЛЕНИЕ и ПРЕДСТАВЛЕНИЕССЫЛКИ

Эти функции предназначены для получения строковых представлений различных значений. То есть, они преобразуют ссылки, числа, булево и т.д. в обычный текст. Разница между ними в том, что функция ПРЕДСТАВЛЕНИЕ преобразует в текст (строку) любые типы данных, а функция ПРЕДСТАВЛЕНИЕССЫЛКИ — только ссылки, а остальные значения возвращает как есть, не преобразованными.

Запрос.Текст=”ВЫБРАТЬПРЕДСТАВЛЕНИЕ (ИСТИНА)  КАК Булево,ПРЕДСТАВЛЕНИЕ (4) КАК Число,ПРЕДСТАВЛЕНИЕ (Источник.Ссылка) КАК Ссылка,

ПРЕДСТАВЛЕНИЕ(ДАТАВРЕМЯ(2016,10,07)) КАК Дата”

;
// Булево = “Да”, Число = “4”, Ссылка = “Документ Расходный кассовый ордер №… от…”
// Дата=”07.10.2016 0:00:00″

Запрос.Текст=”ВЫБРАТЬПРЕДСТАВЛЕНИЕССЫЛКИ (ИСТИНА)  КАК Булево,ПРЕДСТАВЛЕНИЕССЫЛКИ (4) КАК Число,ПРЕДСТАВЛЕНИЕССЫЛКИ (Источник.Ссылка) КАК Ссылка,

ПРЕДСТАВЛЕНИЕССЫЛКИ (ДАТАВРЕМЯ(2016,10,07)) КАК Дата”

;
// Булево = ИСТИНА, Число = 4, Ссылка = “Документ Расходный кассовый ордер №… от…”
// Дата=07.10.2016 0:00:00

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

Функция ТИП возвращает тип данных платформы 1С:Предприятие.

Запрос.Текст=”ВЫБРАТЬТИП (Число) ,ТИП (Строка),

ТИП (Документ.РасходныйКассовыйОрдер)”

;

Функция ТИПЗНАЧЕНИЯ возвращает тип переданного в нее значения.

Запрос.Текст=”ВЫБРАТЬТИПЗНАЧЕНИЯ (5) КАК Число,

ТИП (“

“Строчка””) КАК Строка,ТИП (Источник.Ссылка) КАК Справочник

Из Справочник.Источник КАК Источник”

;
//Число=Число, Строка=Строка, Справочник = СправочникСсылка.Источник

Эти функции удобно применять, например, когда нужно выяснить является ли полученное в запросе поле значением какого-то типа. Например, получим контактную информацию контрагентов из регистра сведений КонтактнаяИнформация (там хранятся контакты не только контрагентов, но и организаций, физических лиц и т.д.):

Запрос.Текст=”ВЫБРАТЬКонтактнаяИнформация.ПредставлениеИЗРегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформацияГДЕ

ТИПЗНАЧЕНИЯ(КонтактнаяИнформация.Объект) = ТИП(Справочник.Контрагенты)”

;

Функция ЗНАЧЕНИЕ

Функция Значение позволяет использовать в запросе объекты конфигурации 1С напрямую, без применения параметров запроса.

Дополним предыдущий пример еще одним условием. Необходимо получить только телефоны контрагентов.

Запрос.Текст=”ВЫБРАТЬКонтактнаяИнформация.ПредставлениеИЗРегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформацияГДЕТИПЗНАЧЕНИЯ(КонтактнаяИнформация.Объект) = ТИП(Справочник.Контрагенты)

И КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)”

;

Следует отметить, что эту функцию можно использовать только с предопределенными значениями, т.е. со значениями, к которым можно обратиться напрямую из конфигуратора. То есть функция ЗНАЧЕНИЕ не можно использоваться с элементами справочников, созданными пользователями, но может работать с перечислениями, с предопределенными элементами справочников, со значениями ПустаяСсылка.

Оператор ССЫЛКА

Оператор ССЫЛКА предназначен для проверки значений, получаемых запросом, на принадлежность к определенному ссылочному типу. Эту же задачу можно выполнить с помощью функций ТИП и ТИПЗНАЧЕНИЯ (которые имеют более широкую область применения и были рассмотрены выше).

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

Запрос.Текст=”ВЫБРАТЬКонтактнаяИнформация.ПредставлениеИЗРегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформацияГДЕ

КонтактнаяИнформация.Объект ССЫЛКА Справочник.Контрагенты”

;

Оператор ВЫРАЗИТЬ

Оператор ВЫРАЗИТЬ используется в запросах 1С в двух случаях:

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

К примитивным типам данных относятся: число, строка, дата, булево. Некоторые из этих типов данных имеют дополнительные характеристики. Тип Число имеет длину и точность, тип Строка — длину или неограниченность.

Оператор ВЫРАЗИТЬ позволяет изменять не тип данных, а именно дополнительные характеристики. Например, он может из строки с неограниченной длиной сделать строку с длиной ограниченной. Это бывает полезно, если нужно сгруппировать результаты запроса по такому полю. Выполнять группировку по полям с неограниченной длиной нельзя, поэтому мы его преобразуем в строку с длиной 200 символов.

Источник: http://chel1C.ru/querry_functions/

Учимся работать с соответствием в 1С 8.3

Основы 1С: типы значения и их проверка

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

Структура: Структура1.Ключ1

Соответствие: Соответствие1[«Ключ1»]

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

Хоть и в ключ и значение соответствия можно записать переменные любого типа, использование типов в этом случае очень сильно зависит от контекста и от вида клиента: мы не можем в клиентском задать в ключ или значение, тип которого работает только в серверном контексте (например, ДокументОбъект.).

Новое соответствие создается при помощи конструктора Новый.

Соответствие1 = Новый Соответствие;

Для того, чтобы добавить новый элемент соответствия, необходимо использовать метод Вставить, который имеет следующий синтаксис:

Вставить(, )

Параметр «Ключ» может иметь любой тип! Это очень важное свойство, таким образом, с помощью коллекции Соответствие можно в процессе работы устанавливать соответствие любых объектов с любыми объектами.

Простой пример работы с соответствием:

Соответствие1 = Новый Соответствие;
Соответствие1.Вставить(«Ключ1»,«Ключ тип строка»);
Соответствие1.Вставить(1,«Ключ тип число»);
Соответствие1.

Вставить(Дата(2017,12,10),«Ключ тип дата»);
//Выведем значения ключей
Сообщить(Соответствие1[«Ключ1»]);
Сообщить(Соответствие1[1]);
Сообщить(Соответствие1[Дата(2017,12,10)]);

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

Соответствие1.Вставить(1,»Ключ тип «»число»»»);

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

Соответствие1[1] = «Ключ тип «»число»»»;

Обход соответствия 1С

Обходить соответствие можно с помощью цикла Для каждого…Цикл.

Соответствие1 = Новый Соответствие;
Соответствие1.Вставить(«Ключ1»,«Ключ тип строка»);
Соответствие1.Вставить(1,«Ключ тип число»);
Соответствие1.

Вставить(Дата(2017,12,10),«Ключ тип дата»);
Для Каждого ЭлементСоответствия из Соответствие1 цикл
    Сообщить(«Соответствие1 [» +
    Строка(ЭлементСоответствия.

Ключ) + «] = » +
    ЭлементСоответствия.Значение);
КонецЦикла;

Безошибочное получении значения соответствия 1С

Как Вы уже поняли, для того чтобы получить значение элемента соответствия, мы используем квадратные скобки. Но иногда возможны ситуации, когда применение квадратных скобок неосуществимо. В таких случаях мы можем использовать метод Получить, который возвращает любое значение, соответствующее ключу. Если такого ключа нет, то вернется значение Неопределено

Рассмотрим работу данного метода на соответствии с датами в качестве ключей.

Соответствие1 = Новый Соответствие;
Соответствие1.Вставить(Дата(2017,12,1), «Число 2»);
Соответствие1.Вставить(Дата(2017,12,2), «Число 3»);
Соответствие1.Вставить(Дата(2017,12,3), «Число 1»);
Соответствие1.

Вставить(Дата(2017,12,4), «Число 6»);
//Используем метод Получить
ЭлСоотвествия1 = Соответствие1.Получить(Дата(2017,12,4));
ЭлСоотвествия2 = Соответствие1.

Получить(Дата(2017,12,5));
//выведем в сообщения полученные значения
Сообщить(?(ЗначениеЗаполнено(ЭлСоотвествия1),ЭлСоотвествия1,«Неопределено»));
Сообщить(?(ЗначениеЗаполнено(ЭлСоотвествия2),ЭлСоотвествия2,«Неопределено»));

Статьи о других универсальных коллекциях значений в 1С

Структуры в 1С

Массив в 1С

Список значений в 1С

Таблица значений в 1С

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

Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

Книга «Основы разработки в 1С: Такси»

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

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы:

: https://.com/1c_prosto
Фейсбуке: https://www..com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://.com/signum2009

Источник: https://www.1s-up.ru/uchimsja-rabotat-s-sootvetstvem-v-1s-8-3/

Поделиться:
Нет комментариев

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.