Как приравнять значение 1с

Обновлено: 07.07.2024

Войдите как ученик, чтобы получить доступ к материалам школы

Язык запросов 1С 8.3 для начинающих программистов: функция ЗНАЧЕНИЕ

Автор уроков и преподаватель школы: Владимир Милькин

Функция ЗНАЧЕНИЕ предназначена для обращения в тексте запроса к значениям системных перечислений и предопределенным данным .

Что ещё за перечисления и предопределенные данные, спросите вы. Давайте обо всём по порядку.

Перечисления

Перечисления - это прикладной объект (вы помните, что ещё существуют Справочники и Документы). Зачем он понадобился?

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

Неизменность - это их главный козырь. Это своеобразные константы базы данных.

И если программист в режиме конфигурирования создал перечисление с именем Пол и значениями Мужской и Женский, то при написании программы он может быть уверен, что в дальнейшем значения этого перечисления не изменятся. Поэтому он может смело обращаться к этим значениям из кода.

Представьте, что будет, если он попытается для этих целей использовать справочник?

Во-первых, какой-нибудь пользователь возьмёт да и добавит какой-нибудь "Марсианский пол".

Во-вторых, другой пользователь возьмёт да и удалит один из уже имеющихся полов или имя ему поменяет.

А программа от этого сломается, потому что для её работы необходимо, чтобы было ровно два пола и именно с именами "Мужской" и "Женский".

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

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

01

Вот оно наше перечисление с именем Пол. Какие значения оно может принимать?

02

Всего два значения. С именами "Мужской" и "Женский". То что нам надо.

Где мы в дальнейшем можем использовать это перечисление? Ну, конечно, в справочнике Клиенты. Обратите внимание, что в его списке появился новый реквизит с именем Пол и типом Перечисление.Пол:

03

Таким образом, при заполнении карточки клиента уже в режиме пользователя мы сможем в качестве пола клиента выбирать всего из двух значений Мужской и Женский:

04

05

Теперь давайте составим запрос, выбирающий клиентов и их пол из базы:

А теперь давайте изменим запрос, чтобы остались только мужчины. Если мы попробуем написать что-то типа:

то ничего не получим:

Потому что к значениям перечисления так обращаться нельзя. К ним нужно обращаться используя функцию ЗНАЧЕНИЕ:

08

Итак, одна из задач функции ЗНАЧЕНИЕ - использование в запросах значений перечислений.

Предопределенные данные

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

В нашей базе "Гастроном" (в режиме пользователя) откройте справочник "Единицы измерения":

01

Присмотритесь к его элементам. Видите жёлтые кружочки рядом с некоторыми из элементов? Вот эти элементы (у которых кружочки) и есть предопределенные данные .

Вообще же, если какой-либо элемент справочника является предопределенным (то есть на нём стоит жёлтый кружочек), то это особенный элемент.

Во-первых, это означает, что элемент был создан ещё на этапе конфигурирования программистом (в нашем случае это элементы с кодами 1, 2 и 3).

А, во-вторых, это значит, что этот элемент очень важен для функционирования программы. Что на него (вернее на его предопределенное имя) завязан какой-то код в базе данных.

Именно поэтому просто удалить такой элемент не получится. Попробуйте пометить его на удаление:

02

Давайте теперь перейдём в режим конфигурирования и посмотрим где же эти самые предопределенные элементы (в данном случае для справочника Единицы измерения) создаются:

03

04

Вот они все наши предопределенные элементы для справочника Единица измерения. Обратите внимание, что все предопределенные элементы имеют специальное имя, которое не отображается в режиме пользователя.

Для элемента с кодом 1 это имя Тонна, с кодом 2 - Грамм и так далее. Это имя называется предопределенным именем элемента и именно по этому имени можно обращаться к нему из кода (или из запроса в нашем случае).

Вы спросите почему же было не сделать единицы измерения просто перечислением с элементами Тонна, Грамм и Пачка? А всё потому, что в данном случае нам важно, чтобы справочник единицы измерения всегда содержал какие-то определенные элементы (тонна, грамм и пачка), но в то же время мы не хотим запрещать пользователю добавлять какие-то свои элементы (килограмм, штука и так далее). Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Поэтому здесь безусловно больше подходят предопределенные элементы, чем перечисления.

А обращаться к нашим предопределенным элементам из запроса мы сможем используя уже знакомую нам функцию ЗНАЧЕНИЕ:

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

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

Выразить(<Число> как Число(<ДлинаЧисла>,<Точность>))

Параметры и длинна и точность должны быть целыми положительными числами.
Посмотрите, как работает эта функция на рисунке ниже.


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



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

Выразить(<Строка> как Строка(<ДлинаСтроки>)

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


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



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

Выразить(<Документ> как Документ.<ИмяТаблицы>)
Выразить(<Справочник> как Справочник.< ИмяТаблицы > ).

Всегда используйте функцию выразить, когда работаете с составными типами, это существенно оптимизирует запрос.

Если Вы всё еще «плаваете» в конструкциях языка запросов, и у Вас вызывают трудности даже самые простые запросы, то рекомендую вам мой курс «Запросы в 1С от новичка до профи». Где эти и многие другие вопросы рассматриваются более подробно.


В чем особенность этого курса:
• Курс рассчитан на тех, кто не знаком с языком запросов в 1С;
• Учебный материал грамотно скомпонован и прост в освоении;
• Несколько десятков уроков;
• Полезные практические примеры;
• Все уроки изложены понятным и простым языком

Для моих читателей, купон на скидку 25%: hrW0rl9Nnx

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

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

One thought on “ Приведение типов в языке запросов 1С. ”

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

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

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

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

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

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

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

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

Вставить(<Ключ>, <Значение>)

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

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

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

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

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

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

Результат обхода соответствия 1С

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

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

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

Результат использования метода Получить

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


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

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


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

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

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

One thought on “ Учимся работать с соответствием в 1С 8.3 ”

Объект Структура создается с помощью конструктора Новый.

Структура1 = Новый Структура;

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

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

Вот его синтаксис:

Вставить(<Ключ>,<Значение>);

Параметр Ключ имеет тип значения Строка. Он может иметь любое название, какое захочет разработчик (но помним про ограничения в названиях переменных). Параметр Значение может иметь любой тип.

Обращаю Ваше внимание, что связка «Ключ и значение» уникальна, поэтому если Вы напишете для одной структуры два метода Вставить с одинаковыми ключами и разными значениями, то все равно в структуре будет одна связка «Ключ и значение», причем значение возьмется с последнего метода.

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

Структура1 = Новый Структура(Ключ, Значение);

Переделаем предыдущий пример:

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

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

Структура 1С в отладке

Если мы посмотрим в отладке конфигуратора на нашу структуру, то увидим, что она представляет собой некоторый список, где напротив каждого ключа есть то значение, которое мы привязали к данному ключу с помощью метода Вставить. Этот ключ является свойством структуры как объекта, и мы можем обращаться к нему.

Изменить значение ключа структуры 1С

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

Или напрямую обращаемся к ключу

Обход коллекции структуры 1С

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

Обойдем уже созданную структуру.

Обход коллекции структуры

Безошибочное получение значения элемента

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

Этот метод – Свойство.

Данный метод является функцией и возвращает Истину, если указанный ключ есть, и Ложь, если указанного ключа нет.

Рассмотрим синтаксис метода:

Свойство(<ИмяКлюча>,<ЗаписываемоеЗначение>);

В параметр «ЗаписываемоеЗначение» будет возвращено найденное значение. В том случае, если ключа нет в структуре, то данному параметру присвоится значение Неопределено. Обращаю Ваше внимание, что параметр «ЗаписываемоеЗначение» где-то должен быть определен.

В переменную А запишется значение, которое связанно с Ключ1.

Но если мы напишем так.

То ни какой ошибки не возникнет, и в переменной А присвоится значение Неопределено.

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


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

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


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

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

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