Разделы сайта
Выбор редакции:
- Скачать программу сервисы google play на андроид
- Видеоплееры для windows - выбираем лучший видео проигрыватель для компьютера
- Бесплатные программы для записи CD-DVD дисков на русском языке: Список лучших
- Узнаем как отформатировать флешку если она защищена от записи
- Использование телефона в качестве модема
- Установка Ubuntu LINUX с флешки - инструкция
- Лучшие компактные смартфоны по отзывам покупателей
- Как узнать какие платные подписки и услуги подключены на ваш номер МТС и отключить их?
- Бюджетная колонка S28 Portable Mini Wireless Bluetooth V3
- Распиновка микро USB разъема
Реклама
Как в запросе получить Вид (тип) Документа? Проверка типа значения в запросе 1с. |
43 Язык запросов 1С — одно из основных отличий между версиями 7.7 и 8. Одним из важнейших пунктов в изучении 1С-программирования является язык запросов. В 1С 8.3 запросы — самый мощный и эффективный инструмент получения данных. Язык запросов позволяет в удобном виде получать информацию из базы данных. Сам синтаксис очень сильно напоминает классический T-SQL, за исключением того, что в 1С с помощью языка запросов можно только получать данные, используя конструкцию Выбрать(select). Язык поддерживает и более сложные конструкции, например, (запрос в запросе). Запросы в 1С 8 можно составлять как на кириллице, так и на латинице. В статье я постараюсь рассказать про основные ключевые слова в языке запросов 1С:
А так же небольшие хитрости языка 1С, применяя которые вы сможете оптимально построить текст запроса. Для отладки запросов в системе 1С 8.2 предусмотрен специальный инструмент — консоль запросов. Увидеть описание и скачать его можно по ссылке — . Рассмотрим самые важные и интересные операторы языка запросов 1С. ВЫБРАТЬ (SELECT)В языке запросов 1С предприятия 8 любой запрос начинается с ключевого слова ВЫБРАТЬ . В языке 1С нет конструкций UPDATE, DELETE, CREATE TABLE, INSERT, эти манипуляции производятся в объектной технике. Предназначение его — только чтение данных. Например:
Запрос вернёт таблицу с наименованиями номенклатуры. Рядом с конструкцией ВЫБРАТЬ можно встретить ключевые слова ДЛЯ ИЗМЕНЕНИЯ , РАЗРЕШЕННЫЕ , РАЗЛИЧНЫЕ , ПЕРВЫЕ … РАЗРЕШЕННЫЕ — выбирает только записи из таблицы, на которые есть права у текущего пользователя. РАЗЛИЧНЫЕ — означает, что в результат не попадет дублирующих строк. ВЫБОР (CASE)Очень часто данная конструкция недооценивается программистами. Пример её использования:
Пример возвратит в поле «ВидНоменклатуры» текстовое значение — «Товар» или «Услуга». ГДЕ (WHERE)Конструкция языка запросов 1C, позволяющая наложить отбор на получаемые данные. Учтите, что от сервера система получает все данные, а только потом они отбираются по данному параметру.
В примере мы отбираем записи, у которых значение реквизита «Услуга» установлено в положение «Истина». В данном примере можно было бы обойтись и таким условием:
По сути, мы отбираем строки, у которых выражение после ключевого слова равно «Истина». В выражениях можно использовать прямые условия:
С помощью оператора «ЗНАЧЕНИЕ()» в условиях использовать обращение к предопределенным элементам и перечислениям в запросе 1С:
Значения времени могут указываться следующим образом:
Чаще всего условия указываются в виде параметров, передаваемых в запрос: Получите 267 видеоуроков по 1С бесплатно:
Условие можно наложить на тип реквизита, если он составного типа: Если необходимо ограничивать отбор из списка значений или массива, можно поступить следующим образом:
Условие может быть и сложное, состоящее из нескольких условий:
СГРУППИРОВАТЬ ПО (GROUP BY)Конструкция языка запросов 1С 8.2, используемая для группировки результата. Например:
Данный запрос просуммирует все поступления по сумме и количеству в разрезе номенклатуры. Помимо ключевого слова СУММА можно использовать другие агрегатные функции: КОЛИЧЕСТВО , КОЛИЧЕСТВО РАЗНЫХ , МАКСИМУМ , МИНИМУМ , СРЕДНЕЕ . ИМЕЮЩИЕ (HAVING)Конструкция, о которой часто забывают, но она очень важна и полезна. Она позволяет указать отбор в виде агрегатной функции, этого нельзя сделать в конструкции ГДЕ . Пример использования ИМЕЮЩИЕ в запросе 1С:
Так мы отберем количество товаров, которых поступило более 5 штук. ЗНАЧЕНИЕ()Например:
ТИП в запросеТип данных можно проверить следующим образом: с помощью функций ТИП() и ТИПЗНАЧЕНИЯ() или с помощью логического оператора ССЫЛКА. ВЫРАЗИТЬ()Оператор Выразить в запросах 1С служит для преобразования типов данных. Синтаксис: ВЫРАЗИТЬ(<Выражение> КАК <Тип значения>) С помощью него можно преобразовать строковые значения в дату или ссылочные в строковые данные и так далее. В практическом применении оператор Выразить() очень часто используется для преобразования полей неограниченной длины, потому что поля неограниченной длины нельзя отбирать, группировать и тд. Если такие поля не преобразовывать, Вы получите ошибку Нельзя сравнивать поля неограниченной длины и поля несовместимых типов .
ЕСТЬNULL (ISNULL)Достаточно полезная функция языка запросов 1С, которая проверяет значение в записи, и если оно равно NULL, то позволяет заменить на своё значение. Чаще всего используется при получении виртуальных таблиц остатков и оборотов, чтобы скрыть NULL и поставить понятный 0 (ноль).
Такая функция языка запросов 1С ЕСТЬNULL при отсутствии значения вернет ноль, что позволит избежать ошибки. СОЕДИНЕНИЕ (JOIN)Соединения бывают 4 типов: ЛЕВОЕ , ПРАВОЕ , ПОЛНОЕ, ВНУТРЕННЕЕ . ЛЕВОЕ и ПРАВОЕ СОЕДИНЕНИЕСоединения используются для связи двух таблиц по определенному условию. Особенность при ЛЕВОМ СОЕДИНЕНИИ в том, что мы берём первую указанную таблицу полностью и привязываем по условию вторую таблицу. Поля второй таблицы, которые не удалось привязать по условию, заполняются значением NULL . Пример левого соединения в запросе 1С: Вернет всю таблицу и заполнит поле «Банк» лишь в тех местах, где будет соблюдаться условие «Контрагенты.Наименование = Банки.Наименование». Если условие не соблюдается, в поле Банк будет установлено NULL . ПРАВОЕ СОЕДИНЕНИЕ в языке 1С 8.3 абсолютно аналогично ЛЕВОМУ соединению , за исключением одного отличия: в ПРАВОМ СОЕДИНЕНИИ «главная» таблица — вторая, а не первая. ПОЛНОЕ СОЕДИНЕНИЕПОЛНОЕ СОЕДИНЕНИЕ отличается от левого и правого тем, что выводит все записи из двух таблиц, соединяет лишь те, которые может соединить по условию. Например:
Язык запросов вернет обе таблицы полностью лишь по выполненному условию Соединить записи. В отличие от левого/правого соединения возможно появления NULL в двух полях. ВНУТРЕННЕЕ СОЕДИНЕНИЕВНУТРЕННЕЕ СОЕДИНЕНИЕ отличается от полного тем, что выводит только те записи, которые смогли соединить по заданному условию. Например:
Данный запрос вернет только строки, в которых у банка и контрагента будет одинаковое наименование. ЗаключениеЭто лишь небольшая часть синтаксиса из языка запросов 1С 8, в дальнейшем я попробую рассмотреть более подробно некоторые моменты, показать и многое другое! 1С позволяет значительно упростить ведение бухгалтерии или просто управление любой организацией, будь то маленький магазинчик или крупное предприятие. Программа представляет собой крупную систему по управлению базами данных . Чтобы не запутаться во всём этом, необходимо уметь выполнять различные простейшие действия и понимать суть. Далее вы поймёте, как в 1С проверить тип значения в запросе, а также какие они, вообще, бывают, а также как их различать. Типы значений1С: Предприятие включило в новые версии специальную функцию (платформа 8.2). С помощью неё можно к любым наименованиям, элементам системы данных добавлять какие-либо особые параметры. Сделано это для того, чтобы систему было легче редактировать и добавлять туда новые элементы. Функция эта как раз и называется «Тип значения». На самом деле это одно из базовых понятий, которое содержит большинство языков программирования. При помощи его можно проводить классификацию различных данных. Например: даты, числа, строки, ссылки. Это лишь базовые классификации. Их может быть гораздо больше. Скажем, если вы заносите в вашу систему информацию о городах, можно использовать: материк, страна, район и т. п. ПроверкаПроверить то или иное поле можно при помощи языка запросов. А точнее его функции: ТИПЗНАЧЕНИЯ. То есть, если мы хотим узнать, информацию какого вида содержит интересующая ячейка, мы должны воспользоваться командой.
На примере выше мы определили, воспользовавшись командой, простейший вид. Другой пример проверки запроса: ДокументыСамих видов довольно много, пользователи могут обходиться как начальными, так и вводить свои, чтобы совершенствовать информационную базу. Вот некоторые из них.
Кроме того, есть специальные термины, характеризующие любые данные:
Это лишь часть из них. Любой объект может являться только чем-то из этого списка. Булево - специальный параметр, который принимает два значения: правда или ложь. Также есть специальные теги, позволяющие корректировать запрос: когда, где, как, иначе и т. п. Они задают алгоритм поведения программы. 1С отличает то, что эти слова здесь, как и всё остальное, можно вписывать на русском языке. Важно понимать, что все это будет восприниматься новичками и непрофессионалами как китайская грамота. Чтобы понимать, о чём идёт речь и эффективно использовать 1С, необходимо знать основы программирования. В целом, проверить тип в запросе в программе 1С будет достаточно легко, в сравнении с другими действиями. Запрос.Текст = "ВЫБРАТЬ | усЕдиницыХранения.Ссылка |ИЗ | Справочник.усЕдиницыХранения КАК усЕдиницыХранения // Пример 1. сравнение с не заполненным булевым значением: |ГДЕ | усЕдиницыХранения.РазрешитьОтборИзРезервнойЗоны = Ложь // Пример 2. но если это булево определено, то лучше так: // условие на отрицательное булево: |ГДЕ | НЕ усЕдиницыХранения.РазрешитьОтборИзРезервнойЗоны // Пример 3. выборка по условию не заполненного поля, имеющего тип "справочник конкретного типа" |ГДЕ | усЕдиницыХранения.АктивнаяОбластьОтбора = ЗНАЧЕНИЕ(Справочник.усОбластиОтбора.ПустаяСсылка) // Пример 3а. выборка по условию не заполненного поля, имеющего тип "документ конкретного типа" |ГДЕ | НашРегистрСведений.Документ = ЗНАЧЕНИЕ(Документ.НашДокумент.ПустаяСсылка) // Пример 3б. выборка по условию не заполненного поля, имеющего тип "документы разных типов" (составное поле) |ГДЕ | (НашРегистрСведений.Документ = ЗНАЧЕНИЕ(Документ.НашДокумент1.ПустаяСсылка) | ИЛИ НашРегистрСведений.Документ = ЗНАЧЕНИЕ(Документ.НашДокумент2.ПустаяСсылка) | ИЛИ...(и т.д. - последовательно перечисляем условия для всех возможных типов этого составного поля)) // Пример 4. или наоборот, если нужно выбрать заполненное значение типа "строка", то поможет условие: |ГДЕ | усЕдиницыХранения.Наименование > """" // Пример 5. если нужно выбрать документы конкретного типа, при составном типе данных, например в регистре "ВыполняемыеЗадания" ресурс "Задание" имеет составной тип, среди значений которого возможен документ "Отбор" |ГДЕ | ВЫРАЗИТЬ(РегистрСведенийВыполняемыеЗадания.Задание КАК Документ.Отбор) ССЫЛКА Документ.Отбор // Пример 5а. Еще аналогичный пример, когда нужно выбрать документы конкретного типа | ВЫБОР | КОГДА ВЫРАЗИТЬ(агСоответствиеДокументов.ДокументБУ КАК Документ.ПоступлениеТоваровУслуг) ССЫЛКА Документ.ПоступлениеТоваровУслуг | ТОГДА ""ПоступлениеТоваровУслуг"" | КОГДА ВЫРАЗИТЬ(агСоответствиеДокументов.ДокументБУ КАК Документ.РеализацияТоваровУслуг) ССЫЛКА Документ.РеализацияТоваровУслуг | ТОГДА ""РеализацияТоваровУслуг"" | ИНАЧЕ """" | КОНЕЦ КАК ВидДокумента // Пример 6. выбор по условию не определенного значения: |ГДЕ | СохраненныеНастройки.Пользователь = НЕОПРЕДЕЛЕНО // Пример 7. выбор по виду движения "Приход" регистра накопления, "Расход" - аналогично): |ГДЕ | РегТоварыВРознице.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) // Пример 8. Как в запросе указать, что выполнять запрос не нужно (например, нужно программно в зависимости от какого-то условия вернуть пустой результат запроса - Запрос.Текст = СтрЗаменить(Запрос.Текст, "ГДЕ Док.Ссылка = &ДокументСсылка", "ГДЕ ЛОЖЬ");). Для этого достаточно добавить условие "Где Ложь". Кстати, независимо от объема запрашиваемых в выборке данных, такой запрос будет выполнен мгновенно. |ГДЕ ЛОЖЬ // Пример 9. Проверка на то, что результат выполнения запроса содержит данные: Если НЕ Запрос.Выполнить().Пустой() Тогда // Пример 10. выбор по условию не заполненной даты: |ГДЕ | тбСтроки.ДатаОтмены = ДАТАВРЕМЯ(1, 1, 1) Внимание! Перед вами ознакомительная версия урока, материалы которого могут быть неполными. Войдите на сайт как ученик Войдите как ученик, чтобы получить доступ к материалам школы Язык запросов 1С 8.3 для начинающих программистов: функции и операторы для работы с типами (ТИПЗНАЧЕНИЯ, ТИП, ССЫЛКА, ЕСТЬNULL, ВЫРАЗИТЬ)Давайте вспомним, что каждый реквизит (свойство, поле) справочника, документа или любого другого прикладного объекта имеет свой тип . И этот тип мы можем посмотреть в конфигураторе: В языке запросов существует целый класс функций и операторов для работы с типами реквизитов. Давайте рассмотрим их. Функция ТИПЗНАЧЕНИЯЭта функция принимает один параметр (значение) и возвращает его тип. Для описанного на картинке (выше) реквизита Вкус справочника Еда вернётся следующее: А теперь давайте рассмотрим реквизит ОтличительныйПризнак у справочника Города : Вы видите, что этот реквизит может иметь один из нескольких типов: Строка , Справочник.Вкусы , Справочник.Цвета . Такой тип реквизитов называется СОСТАВНЫМ . Если мы попытаемся заполнить значение такого реквизита в режиме 1С:Предприятие, то система спросит нас, какого типа будет вводимое значение: И только после нашего выбора позволит ввести значение выбранного типа. Таким образом, элементы справочника одного вида (Справочник.Города ) смогут хранить в одном и том же реквизите (ОтличительныйПризнак ) значения разных типов (Строка, Цвета или Вкусы). Вы можете убедиться в этом сами пощёлкав по элементам справочника Города в режиме 1С:Предприятие. Вы читаете ознакомительную версию урока, полноценные уроки находятся . Здесь значение отличительного признака является элементом справочника Вкусы : Здесь строкой: А здесь вообще элементом справочника Цвета : Вот какие возможности открывает перед нами составной тип данных! Интересно, как поведёт себя функция ТИПЗНАЧЕНИЯ на реквизите ОтличительныйЭлемент , имеющий составной тип данных: Это уже очень интересно. Давайте разбираться с каждой строкой в отдельности. Тип значения отличительного признака для элемента Россия равен NULL . Мы впервые сталкиваемся с этим типом. Значения данного типа используются исключительно для определения отсутствующего значения при работе с базой данных. Так и есть, ведь элемент Россия является группой, а не обычным элементом справочника Города , поэтому у него отсутствует поле ОтличительныйПризнак . А тип у отсутствующего значения, как мы прочитали выше, всегда равен NULL . Тип значения отличительного признака для Перми равен Вкусы . Так и есть, ведь значение отличительного признака забитое в базе для города Пермь является ссылкой на элемент справочника Вкусы . Для Красноярска тип признака равен Цвета , потому что значение выбранное в базе является ссылкой на элемент справочника Цвета . Для Воронежа тип признака равен Строка , потому что значение введенное в базе является обычной строкой. Индия снова группа, поэтому значение отсутствует. А тип у отсутствующего значения, как мы помним, равен NULL . А дело вот в чём. Если вы зайдёте в элемент справочника Города с наименованием Сан-Паулу , то увидите, что поле ОтличительныйПризнак совершенно никак не заполнено. Оно пустое. А все незаполненные поля составного типа имеют специальное значение НЕОПРЕДЕЛЕНО . С НЕОПРЕДЕЛЕНО мы также сталкиваемся впервые. Значение НЕОПРЕДЕЛЕНО применяется, когда необходимо использовать пустое значение, не принадлежащее ни к одному другому типу. Это как раз наша ситуация. А тип значения НЕОПРЕДЕЛЕНО , как вы уже наверное догадались равен NULL . Функция ТИПОна принимает всего один параметр - имя примитивного типа (СТРОКА , ЧИСЛО , ДАТА , БУЛЕВО ), либо имя таблицы, тип ссылки которой нужно получить. Результатом данной конструкции будет значение типа Тип для указанного типа. Звучит туманно, не правда ли? Давайте рассмотрим применение данной конструкции и всё сразу станет на свои места. Пусть нам требуется отобрать все записи справочника Города , у которых составной реквизит ОтличительныйПризнак имеет значение типа СТРОКА : Теперь давайте отберём все записи, у которых значения реквизита ОтличительныйПризнак являются ссылками на элементы справочника Цвета (таблица Справочник.Цвета ): ОтступлениеКак вы помните, некоторые элементы справочника Города не имеют реквизита ОтличительныйПризнак . Функция ТИПЗНАЧЕНИЯ для таких элементов выдаёт NULL . Как можно сделать отбор таких элементов в запросе? Для этого предусмотрен специальный логический оператор ЕСТЬ NULL (не путать с функцией ЕСТЬNULL , которую мы рассмотрим ниже). Вы читаете ознакомительную версию урока, полноценные уроки находятся . Вот пример его использования: Отлично. Но вы заметили, что здесь нет элемента Сан-Паулу, тип значения реквизита ОтличительныйПризнак которого также выдавал NULL . Почему так произошло? А всё дело в том, что ситуация для групп (Россия, Индия, Бразилия), для которых заполнение реквизита ОтличительныйПризнак невозможно в принципе, так как его у них нет вовсе, отличается от ситуации для элемента Сан-Паулу, для которого заполнение реквизита возможно, но оно просто не заполнено и равно, как мы помним, специальному значению НЕОПРЕДЕЛЕНО . Чтобы отобрать все записи, у которых реквизит ОтличительныйПризнак присутствует, но не заполнен следует использовать другую конструкцию: Но сравнение с НЕОПРЕДЕЛЕНО для определения пустых (не заполненных) реквизитов будет работать только для составных типов. Кстати, у логического оператора ЕСТЬ NULL форма отрицания выглядит следующим образом: Логический оператор ССЫЛКАК примеру, давайте выберем из справочника Города только те записи, у которых значение составного реквизита ОтличительныйПризнак являются ссылкой на элемент справочника Вкусы : Как вы помните, эту же задачу мы могли бы решить используя ТИПЗНАЧЕНИЯ и ТИП : Функция ЕСТЬNULLФункция предназначена для замены значения NULL на другое значение. Мы помним, что значение NULL возвращается в том случае, если запрашиваемый реквизит (поле, свойство) не существует. Как например, реквизит ОтличительныйПризнак для групп справочника Города : Функция ЕСТЬNULL поможет нам вывести другое значение в том случае, если это значение равно NULL . Вы читаете ознакомительную версию урока, полноценные уроки находятся . Пусть в данном случае это будет строка "Такого реквизита нет!": Получается, что если первый параметр функции ЕСТЬNULL не равен NULL , то возвращается он. Если же он равен NULL, то возвращается второй параметр. Функция ВЫРАЗИТЬЭта функция предназначена только для полей , имеющих составной тип . Отличным примером такого поля является свойство ОтличительныйПризнак у элементов справочника Города . Как мы помним, составные поля могут быть одного из нескольких типов, указанных в конфигураторе. Для поля ОтличительныйПризнак такими допустимыми типами являются СТРОКА , Справочник.Цвета и Справочник.Вкусы . Иногда возникает необходимость привести значения составного поля к какому-либо определенному типу. Давайте приведём все значения поля ОтличительныйПризнак к типу Справочник.Цвета: В результате, все значения элементов, которые имели тип Справочник.Цвета, остались заполненными и оказались приведенными к указанному типу. Все значения других типов (СТРОКА , Справочник.Вкусы ) теперь стали равны NULL . В этом состоит особенность приведения типа при помощи функции ВЫРАЗИТЬ . Приводить тип можно или к примитивному типу (БУЛЕВО , ЧИСЛО , СТРОКА , ДАТА ) или к ссылочному типу. Вы читаете ознакомительную версию урока, полноценные уроки находятся . Но тип, к которому делается приведение, обязательно должен входить в список типов для данного составного поля, иначе система выдаст ошибку. Пройдите тестНачать тест 1. Выберите наиболее верное утверждение 2. Реквизиты, способные принимать значения одного из нескольких типов называются 3. Для определения типа значения реквизита подойдёт функция 4. Незаполненные реквизиты составного типа имеют значение |
Читайте: |
---|
Популярное:
Новое
- Видеоплееры для windows - выбираем лучший видео проигрыватель для компьютера
- Бесплатные программы для записи CD-DVD дисков на русском языке: Список лучших
- Узнаем как отформатировать флешку если она защищена от записи
- Использование телефона в качестве модема
- Установка Ubuntu LINUX с флешки - инструкция
- Лучшие компактные смартфоны по отзывам покупателей
- Как узнать какие платные подписки и услуги подключены на ваш номер МТС и отключить их?
- Бюджетная колонка S28 Portable Mini Wireless Bluetooth V3
- Распиновка микро USB разъема
- Кастрация защищенных аккумуляторов Sanyo и Panasonic и небольшой ликбез по Li-ion