Получить документ в запросе 1с
В этой статье мы хотим обсудить с Вами все функции языка запросов 1с, а также конструкции языка запросов. Чем же отличается функция от конструкции? Функция вызывается со скобками и возможными параметрами в них, а конструкция пишется без скобок. Безусловно все конструкции и функции языка запросов 1с делают процесс получения данных гибким и многофункциональным. Данные функции и конструкции применимы к полям запроса, а некоторые также применимы в условиях.
Функции языка запросов 1с
Поскольку понятное описание функций языка запросов 1с встречается намного реже, чем описание конструкций, мы решили начать рассматривать именно функции. Теперь давайте разберем каждую по отдельности, описав ее назначение, синтаксис и пример использования, итак:
1. Функция ДАТАВРЕМЯ - данная функция создает константное поле с типом "Дата".
2. Функция РАЗНОСТЬДАТ - возвращает разность двух дат в одном из измерений (год, месяц, день, час, минута, секунда). Измерение передается в параметре.
3. Функция ЗНАЧЕНИЕ - задает константное поле с предопределенной записью из базы данных, также можно получить пустую ссылку любого типа.
4. Функция ВЫБОР - перед нами аналог конструкции ЕСЛИ который используется в коде, только эта используется в запросах 1С.
Синтаксис: ВЫБОР КОГДА ТОГДА ИНАЧЕ КОНЕЦ
5. Функция ВЫРАЗИТЬ - позволяет выразить константное поле определенным типом.
Синтаксис: ВЫРАЗИТЬ(НазваниеПоля КАК НазваниеТипа)
Еще есть вариант использования функции ВЫРАЗИТЬ в полях смешанных типах, где такие встречаются? Самый простой пример это "Регистратор" у любого регистра. Так зачем нам может понадобиться уточнять тип в регистраторе? Давайте рассмотрим ситуацию когда мы из регистратора выбираем поле "Номер", из какой таблицы будет выбран номер? Правильный ответ из всех! Поэтому чтобы наш запрос работал быстро следует указывать явный тип с помощью функции ВЫРАЗИТЬ
6. Функция ISNULL (альтернативное написание ЕСТЬNULL) - если поле имеет тип NULL, то оно заменяется на второй параметр функции.
Также отметим что тип NULL желательно ВСЕГДА заменять на какое-то значение, т.к. сравнение с типом NULL всегда дает ЛОЖЬ даже если вы сравниваете NULL с NULL. Чаще всего значения NULL образуются в результате соединения таблиц (все виды соединений кроме внутреннего).
7. Функция ПРЕДСТАВЛЕНИЕ - позволяет получить представление поля запроса.
Конструкции в языке запросов 1с
Выше мы рассмотрели с Вами функции языка запросов 1с, теперь пришло время рассмотреть конструкции в языке запросов 1с, они не менее важны и полезны, приступаем.
1. Конструкция ССЫЛКА - представляет из себя логический оператор проверки ссылочного типа. Наиболее часто встречается при проверки поля составного типа на конкретный тип. Синтаксис: ССЫЛКА
2. Конструкция МЕЖДУ - данный оператор проверяет входит ли значение в указанный диапазон.
Синтаксис: МЕЖДУ И
3. Конструкция В и В ИЕРАРХИИ - проверяют находится ли значение в передаваемом списке (в качестве списка могут передаваться массивы, таблицы значений и т.д.). Оператор В ИЕРАРХИИ позволяет просматривать иерархию (пример использования ПланСчетов).
4. Конструкция ПОДОБНО - эта функция позволяет нам сравнивать строку с шаблоном строки.
Варианты шаблона строки:
% - последовательность, содержащая любое количество произвольных символов.
_ - один произвольный символ.
[. ] - любой одиночный символ, либо последовательность символов из перечисленных внутри квадратных скобок. В перечислении могут задаваться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона.
[^. ] - любой одиночный символ, либо последовательность символов из перечисленных внутри квадратных скобок кроме тех, которые перечислены следом за значком отрицания.
5. Конструкция РАЗРЕШЕННЫЕ - этот оператор позволяет выбрать только те записи из БД, на которые вызывающий имеет право чтения. Данные права настраиваются на уровне записей (RLS).
Синтаксис: РАЗРЕШЕННЫЕ пишется после ключевого слова ВЫБРАТЬ
6. Конструкция РАЗЛИЧНЫЕ - позволяет выбрать записи в которых отсутствуют повторные записи.
Синтаксис: РАЗЛИЧНЫЕ пишется после ключевого слова ВЫБРАТЬ
Также Конструкция РАЗЛИЧНЫЕ может использоваться с оператором РАЗРЕШЕННЫЕ и другими операторами.
7. Конструкция ПЕРВЫЕ - выбирает указанное в параметре число записей из результата запроса.
8. Конструкция ДЛЯ ИЗМЕНЕНИЯ - позволяет заблокировать таблицу, работает только в транзакциях (актуально только для автоматических блокировок).
Синтаксис: ДЛЯ ИЗМЕНЕНИЯ
9. Конструкция УПОРЯДОЧИТЬ ПО - упорядочивает данные по определенному полю. Если полем является ссылка то при установке флага АВТОУПОРЯДОЧИВАНИЕ будет происходить сортировка по представлению ссылки, если флаг выключен то ссылки сортируются по старшинству адреса ссылки в памяти.
Синтаксис: УПОРЯДОЧИТЬ ПО АВТОУПОРЯДОЧИВАНИЕ
10. Конструкция СГРУППИРОВАТЬ ПО - используется для группировки строк запроса по определенным полям. Числовые поля должны использоваться с любой агрегатной функцией.
11. Конструкция ИМЕЮЩИЕ - позволяет применить агрегатную функцию к условию выборки данных, похожа на конструкцию ГДЕ.
12. Конструкция ИНДЕКСИРОВАТЬ ПО - используется для индексации поле запроса. Запрос с индексацией дольше выполняется, но ускоряет поиск по индексированным полям. Можно использовать только в виртуальных таблицах.
Синтаксис: ИНДЕКСИРОВАТЬ ПО
13. Конструкция ГДЕ - позволяет наложить условие на любые поля выборки. В результат попадут записи только удовлетворяющие условию.
14. Конструкция ИТОГИ . ПО ОБЩИЕ - применяется для подсчета итогов, в конструкции указываются поля по которым будут считаться итоги и агрегатные функции применяемые к итоговым полям. При использовании итогов на каждое поле следующее после конструкции ИТОГИ производится группировка данных. Есть необязательная конструкция ОБЩИЕ, ее использование также обеспечивает дополнительную группировку. Пример результата запроса вы увидите ниже.
На рисунке обведены группировки которые образовались в ходе выполнения запроса, самая верхняя относится к секции ОБЩИЕ, а вторая к полю ДоговорКонтрагентаВидДоговора.
Столкнулся с задачей, нужно было выбрать все документы по выплате и сгруппировать их по типу документа!
Перелистав все ЖКК и интернет, понял что простого способа получить Вид документа в запросе нет
Пришлось сделать так:
Код 1C v 8.х
В 8.2.какой-то версии добавили определение ТИПА
Код 1C v 8.х
Похожие FAQ
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш 1C: Enterprise Development Tools 50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем 1С 8.x : Как убрать лидирующие нули в номере Документа (вариант2) 0
Скопировать строку с номером, с лидирующими нулями, в числовом поле (с форматом без групп, без группировки), и вернуть(скопировать) обратно в строковом поле с номером. Возвращает без нулей. Посмотреть все результаты поиска похожих
Еще в этой же категории
Значения NULL ( ЕСТЬ NULL и ЕСТЬNULL()) 48
NULL – отсутствующие значения. Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено. NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа. NULL значения появляются в 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 23
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 19
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Посмотреть все в категории Запросы
Сортируем документы по убыванию даты и используем конструкцию «ВЫБРАТЬ ПЕРВЫЕ 1»:
Код 1C v 8.х
В результате запрос вернёт одну строку, с данными последнего документа по одному контрагенту.
А как сделать запрос, который вернёт последние документы по всем контрагентам, а не по одному конкретному?
Используем функцию МАКСИМУМ в запросе для решения данной задачи.
Код 1C v 8.х
Этот запрос выбирает последние документы по всем контрагентам.
Похожие FAQ
Еще в этой же категории
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 23
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 19
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Оператор ВЫРАЗИТЬ, аналог методов Лев, Прав, СокрЛП в Запросе? 11
Использовать конструкцию « ВЫРАЗИТЬ »: Запрос.Текст = " … |ГДЕ | (ВЫРАЗИТЬ(ЕдиницыХранения.Владелец.Наименование КАК СТРОКА(4))) Груз" ; Запрос.УстановитьПараметр(" Груз" ," Тонн" ); С целью приведения строк неограниченной длины к строкам Посмотреть все в категории Запросы
Войдите как ученик, чтобы получить доступ к материалам школы
Язык запросов 1С 8.3 для начинающих программистов: функции и операторы для работы с типами (ТИПЗНАЧЕНИЯ, ТИП, ССЫЛКА, ЕСТЬNULL, ВЫРАЗИТЬ)
Автор уроков и преподаватель школы: Владимир Милькин
Давайте вспомним, что каждый реквизит (свойство, поле) справочника, документа или любого другого прикладного объекта имеет свой тип . И этот тип мы можем посмотреть в конфигураторе:
В языке запросов существует целый класс функций и операторов для работы с типами реквизитов. Давайте рассмотрим их.
Функция ТИПЗНАЧЕНИЯ
Эта функция принимает один параметр (значение) и возвращает его тип. Для описанного на картинке (выше) реквизита Вкус справочника Еда вернётся следующее:
Если мы запросим тип поля Наименование, то, как и ожидается, получим Строка:
А теперь давайте рассмотрим реквизит ОтличительныйПризнак у справочника Города:
Вы видите, что этот реквизит может иметь один из нескольких типов: Строка, Справочник.Вкусы, Справочник.Цвета. Такой тип реквизитов называется СОСТАВНЫМ .
Если мы попытаемся заполнить значение такого реквизита в режиме 1С:Предприятие, то система спросит нас, какого типа будет вводимое значение:
И только после нашего выбора позволит ввести значение выбранного типа.
Таким образом, элементы справочника одного вида (Справочник.Города) смогут хранить в одном и том же реквизите (ОтличительныйПризнак) значения разных типов (Строка, Цвета или Вкусы).
Вы можете убедиться в этом сами пощёлкав по элементам справочника Города в режиме 1С:Предприятие. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Здесь значение отличительного признака является элементом справочника Вкусы:
А здесь вообще элементом справочника Цвета:
Вот какие возможности открывает перед нами составной тип данных!
Интересно, как поведёт себя функция ТИПЗНАЧЕНИЯ на реквизите ОтличительныйПризнак, имеющий составной тип данных:
Это уже очень интересно. Давайте разбираться с каждой строкой в отдельности.
Тип значения отличительного признака для элемента Россия равен NULL. Мы впервые сталкиваемся с этим типом. Значения данного типа используются исключительно для определения отсутствующего значения при работе с базой данных.
Так и есть, ведь элемент Россия является группой, а не обычным элементом справочника Города, поэтому у него отсутствует поле ОтличительныйПризнак. А тип у отсутствующего значения, как мы прочитали выше, всегда равен NULL.
Тип значения отличительного признака для Перми равен Вкусы. Так и есть, ведь значение отличительного признака забитое в базе для города Пермь является ссылкой на элемент справочника Вкусы.
Для Красноярска тип признака равен Цвета, потому что значение выбранное в базе является ссылкой на элемент справочника Цвета.
Для Воронежа тип признака равен Строка, потому что значение введенное в базе является обычной строкой.
Индия снова группа, поэтому значение отсутствует. А тип у отсутствующего значения, как мы помним, равен NULL.
Далее всё аналогично, кроме Сан-Паулу. Это не группа, а обычный элемент справочника (город), но тип его значения пустой. Как так?
А дело вот в чём. Если вы зайдёте в элемент справочника Города с наименованием Сан-Паулу, то увидите, что поле ОтличительныйПризнак совершенно никак не заполнено. Оно пустое. А все незаполненные поля составного типа имеют специальное значение НЕОПРЕДЕЛЕНО .
С НЕОПРЕДЕЛЕНО мы также сталкиваемся впервые.
Значение НЕОПРЕДЕЛЕНО применяется, когда необходимо использовать пустое значение, не принадлежащее ни к одному другому типу. Это как раз наша ситуация.
А тип для значения, которое не принадлежит ни к одному из типов, как вы уже наверное догадались отсутствует.
Функция ТИП
Она принимает всего один параметр - имя примитивного типа (СТРОКА, ЧИСЛО, ДАТА, БУЛЕВО), либо имя таблицы, тип ссылки которой нужно получить.
Результатом данной конструкции будет значение типа Тип для указанного типа.
Звучит туманно, не правда ли?
Давайте рассмотрим применение данной конструкции и всё сразу станет на свои места.
Пусть нам требуется отобрать все записи справочника Города, у которых составной реквизит ОтличительныйПризнак имеет значение типа СТРОКА:
Теперь давайте отберём все записи, у которых значения реквизита ОтличительныйПризнак являются ссылками на элементы справочника Цвета (таблица Справочник.Цвета):
Отступление
Как вы помните, некоторые элементы справочника Города не имеют реквизита ОтличительныйПризнак. Функция ТИПЗНАЧЕНИЯ для таких элементов выдаёт NULL.
Как можно сделать отбор таких элементов в запросе? Для этого предусмотрен специальный логический оператор ЕСТЬ NULL (не путать с функцией ЕСТЬNULL, которую мы рассмотрим ниже). Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Вот пример его использования:
Но есть и такие элементы (Сан-Паулу), у которых реквизит ОтличительныйПризнак (составного типа) просто не заполнен и равен специальному значению НЕОПРЕДЕЛЕНО.
Чтобы отобрать такие записи следует использовать другую конструкцию:
Но сравнение с НЕОПРЕДЕЛЕНО для определения пустых (не заполненных) реквизитов будет работать только для составных типов.
Кстати, у логического оператора ЕСТЬ NULL форма отрицания выглядит следующим образом:
Логический оператор ССЫЛКА
Оператор ССЫЛКА позволяет проверить, является ли значение выражения, указанного слева от него, ссылкой на таблицу , указанную справа.
К примеру, давайте выберем из справочника Города только те записи, у которых значение составного реквизита ОтличительныйПризнак являются ссылкой на элемент справочника Вкусы:
Как вы помните, эту же задачу мы могли бы решить используя ТИПЗНАЧЕНИЯ и ТИП:
Функция ЕСТЬNULL
Функция предназначена для замены значения NULL на другое значение.
Мы помним, что значение NULL возвращается в том случае, если запрашиваемый реквизит (поле, свойство) не существует.
Как например, реквизит ОтличительныйПризнак для групп справочника Города:
Функция ЕСТЬNULL поможет нам вывести другое значение в том случае, если это значение равно NULL. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Пусть в данном случае это будет строка "Такого реквизита нет!":
Получается, что если первый параметр функции ЕСТЬNULL не равен NULL, то возвращается он. Если же он равен NULL, то возвращается второй параметр.
Функция ВЫРАЗИТЬ
Эта функция предназначена только для полей , имеющих составной тип . Отличным примером такого поля является свойство ОтличительныйПризнак у элементов справочника Города.
Как мы помним, составные поля могут быть одного из нескольких типов, указанных в конфигураторе.
Для поля ОтличительныйПризнак такими допустимыми типами являются СТРОКА, Справочник.Цвета и Справочник.Вкусы.
Иногда возникает необходимость привести значения составного поля к какому-либо определенному типу.
Давайте приведём все значения поля ОтличительныйПризнак к типу Справочник.Цвета:
В результате, все значения элементов, которые имели тип Справочник.Цвета, остались заполненными и оказались приведенными к указанному типу. Все значения других типов (СТРОКА, Справочник.Вкусы) теперь стали равны NULL. В этом состоит особенность приведения типа при помощи функции ВЫРАЗИТЬ.
Приводить тип можно или к примитивному типу (БУЛЕВО, ЧИСЛО, СТРОКА, ДАТА) или к ссылочному типу. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Но тип, к которому делается приведение, обязательно должен входить в список типов для данного составного поля, иначе система выдаст ошибку.
Пройдите тест
Не все реквизиты справочников или документов имеют свой тип, но те что имеют можно посмотреть в конфигураторе
Не все реквизиты справочников или документов имеют свой тип, но те что имеют можно посмотреть в режиме 1С:Предприятие
Каждый реквизит справочника или документа имеет свой тип, который можно посмотреть в режиме 1С:Предприятие
В своем коде разработчикам 1С приходится обращаться к базе данных, получать оттуда информацию и работать с ней. Операцию работы с результатом запроса данных из БД называют «выборкой». Для успешной работы и написания оптимального кода необходимо понимать, как нужно работать с запросом и полученными данными. Также важно запомнить основные инструменты платформы, используемые для выборки.
Синтаксис выборки 1С 8.3 и работа с ее результатом
Чаще всего в конфигурациях 1С можно встретить два варианта получения выборки для работы с ней:
-
Используя запрос. Программист 1С пишет запрос на языке 1С, выполняет его и получает результат запроса – таблицу с данными. Методом "Выбрать()" выбираются данные из полученного результата;
В обоих случаях, чтобы получить выборку из документов или справочников, необходимо использовать метод «Выбрать()». В результате в переменную «ВыборкаДанных» помещаются данные типа «ВыборкаИзРезультатаЗапроса». Это таблица, в которой содержаться все поля, перечисленные в запросе, использующая индексы. После этого с ними можно работать, используя различные методы данного типа данных:
Владелец() – возвращает результат запроса, из которого и была сформирована полученная выборка;
Следующий() – позволяет последовательно перебрать все записи выборки, перемещая указатель на следующую строку. Чаще всего используется, так как позволяет выполнять определенные действия со всеми выбранными записями в цикле. Будьте аккуратны и не допускайте выполнения запросов в цикле;
НайтиСледующий(УсловияПоиска) – позволяет отобрать из выборки только те записи,
которые удовлетворяют условию поиска. УсловияПоиска – переменная типа
«Структура», содержащая имена полей и нужные значения;
СледующийПоЗначениюПоля(ИмяПоля) – позволяет перебирать записи только с уникальными значениями конкретного поля, указанного в параметре;
Сбросить() – позволяет в процессе перебора результата выборки вернуться к верхней записи;
Количество() – метод показывает сколько записей получилось в результате выборки из результата запроса;
Получить(ЧислоИндекса) – команда возвращает запись с заданным индексом в качестве параметра;
Выбрать(ТипОбхода) – применяется в том случае, если в качестве параметра указан обход «По группировкам». Стандартно применяется тип "Прямой", в случае получения результатов запроса с 1 группировкой применяют "ПоГруппировкам". Если же группировок несколько, то выбирайте "ПоГруппировкамСИерархией";
Уровень() – показывает в виде числа уровень в иерархии;
ТипЗаписи() – возвращает тип текущей записи;
Группировка() – метод получает имя группировки, если это простая запись – пустую строчку.
Рис.1 Синтаксис-помощник
Выборка из результатов запроса применяется в подавляющем большинстве случаев, но иногда удобнее работать с таблицей результатов. Если нужны сразу все данные, лучше использовать не метод «Выбрать()», а «Выгрузить()». В результате в переменной оказываются данные с типом ТаблицаЗначений, где вы сможете найти сразу все данные.
Вы сможете сортировать полученную таблицу, сравнивать различные строки, осуществлять поиск одинаковых элементов и многое другое. Также вы можете и выбирать построчно данные из этого типа данных с помощью обхода строк в цикле:
В случае пакетного запроса используемые методы немного отличаются. После написания запроса необходимо использовать метод «ВыполнитьПакет()». В результате в переменной будет массив результатов запросов. В дальнейшем с помощью операторов «Выбрать()» или «Выгрузить()» можно получить выборку из результатов запроса. Помните, что индексы массива начинаются с 0.
Запомните суть методов, так как их синтаксис вы всегда сможете найти во встроенном помощнике 1С. Большинство методов применяется в случае сложных запросов с группировками. Чаще всего разработчики 1С 8.3 обходятся простым обходом выборки с помощью метода Следующий(). Но дополнительные возможности платформы необходимо знать и использовать их в нужный момент. Если у вас остались вопросы, обращайтесь к нашим специалистам за консультацией по программам 1С. Мы с радостью вам поможем!
Читайте также: