Разделы сайта
Выбор редакции:
- Почему не осуществляется вход в Skype
- Функции преобразования строк
- Новые функции работы со строками Неверное количество категорий в исходной строке 1с
- Несколько вариантов поиска ошибок и решений
- История почты и почтовых марок чили Иностранные почтовые отделения
- ВКонтакте Украина: вход закрыт
- Почему флешка не отображается в моем компьютере: что делать?
- Как полностью удалить записи со стены ВК?
- Как настроить выключение компьютера по расписанию в Windows!
- Преобразование PDF в презентацию Преобразование файла pdf в формат ppt
Реклама
Подстрока в запросе 1с 8.2 описание. Особенность выполнения функции подстрока() |
Язык запросов в 1С 8 — это упрощенный аналог широко известного «структурированного языка программирования» (как чаще его называют, SQL). Но в 1С он используется только для чтения данных, для изменения данных применяется объектная модель данных. Еще одно интересное отличие – русский синтаксис. Хотя на самом деле Вы можете использовать и англоязычные конструкции. Пример запроса:
Данный запрос позволит увидеть нам информацию о наименовании и корреспондентском счете всех существующих в базе данных банков. Описание конструкций языка запросовСтруктура запросовДля получения данных достаточно использовать конструкции «ВЫБРАТЬ» (select) и «ИЗ» (from). Простейший запрос выглядит следующим образом:
Где «*» означает выбор всех полей таблицы, а Справочники.Номенклатура – имя таблицы в базе данных. Рассмотрим более сложный и общий пример:
В данном запросе мы выбираем данные полей «ИмяПоля1» и «ИмяПоля1» из таблиц «ИмяТаблицы1» и «ИмяТаблицы», присваиваем полям синонимы с помощью оператора «КАК», соединяем их по некому условию «УсловиеСоединениеТаблиц». Из полученных данных мы отбираем только данные, соответствующие условию из «ГДЕ» «УсловиеОтбораДанных».Далее мы группируем запрос по полю «ИмяПоля1», при этом суммируя «ИмяПоля2».Создаём итоги по полю «ИмяПоля1» и итоговым полем «ИмяПоля2». Последним действием мы сортируем запрос с помощью конструкции «УПОРЯДОЧИТЬ ПО». Общие конструкцииРассмотрим общие конструкции языка запросов 1С 8.2. ПЕРВЫЕ n С помощью данного оператора можно получить n количество первых записей. Порядок записей определяется порядком в запросе.
Запросом будет получено первых 100 записей справочника «Банки», упорядоченных по алфавиту. РАЗРЕШЕННЫЕ Эта конструкция актуальна для работы с механизмом . Суть механизма в ограничении чтения (и других действий) пользователям для конкретных записей в таблице базы данных, а не таблицы в целом. Если пользователь пытается с помощью запроса прочитать записи недоступные ему, он получит сообщение об ошибке. Чтобы этого избежать, следует использовать конструкцию «РАЗРЕШЕННЫЕ», т.е запрос будет читать только разрешенные ему записи.
РАЗЛИЧНЫЕ Использование «РАЗЛИЧНЫЕ» позволит исключить попадание строк-дублей в результат запроса 1С. Дублирование означает совпадение всех полей запроса.
ПустаяТаблица Данная конструкция используется очень редко для объединения запросов. При объединении может возникнуть необходимость указать в одной из таблиц пустую вложенную таблицу. Для этого как раз подойдет оператор «ПустаяТаблица» Пример из справки 1С 8:
ЕСТЬNULL Очень полезная функция, которая позволяет избежать многих ошибок. ЕстьNULL() позволяет заменить значение NULL на нужное. Очень часто используется в проверках на наличие значения в присоединенных таблицах, например:
Можно использовать и по-другому. Например, если для каждой строки не известно, в какой таблице существует значение:
КАК – оператор, который позволяет нам присвоить имя (синоним) таблицы или полю. Пример использования мы видели выше. Данные конструкции очень похожи – они позволяют получить строковое представление нужного значения. Единственное отличие в том, что ПРЕДСТАВЛЕНИЕ преобразует любые значения в строковый тип, а ПРЕДСТАВЛЕНИЕССЫЛКИ — только ссылочные. ПРЕДСТАВЛЕНИЕССЫЛКИ рекомендуется применять в запросах системы компоновки данных для оптимизации, если, конечно, поле ссылочных данных не планируется использовать в отборах .
ВЫРАЗИТЬ Выразить позволяет преобразовать значения поля к нужному типу данных. Можно преобразовать значение как к примитивному типу, так и к ссылочному типу. Выразить для ссылочного типа используется для ограничения запрашиваемых типов данных в полях составного типа, часто используется для оптимизации работы системы. Пример:
Для примитивных типов эта функция часто используется для ограничения количества символов в полях неограниченной длины (с такими полями нельзя сравнивать). Чтобы избежать ошибки «Неверные параметры в операции сравнения. Нельзя сравнивать поля
РАЗНОСТЬДАТ Получите 267 видеоуроков по 1С бесплатно: Пример использования ЕСТЬ NULL в запросе 1С:
Тип данных в запросе можно определить следующим образом: с помощью функций ТИП() и ТИПЗНАЧЕНИЯ() или с помощью логического оператора ССЫЛКА. Эти две функции аналогичны. Предопределенные значения Помимо использования в запросах переданных параметров в языке запросов 1С можно использовать предопределенные значения или . Например, перечисления, предопределенные справочники, планы счетов и так далее.Для этого используется конструкция «Значение()». Пример использования:
СоединенияСоединения бывают 4 типов: ЛЕВОЕ , ПРАВОЕ , ПОЛНОЕ, ВНУТРЕННЕЕ . ЛЕВОЕ и ПРАВОЕ СОЕДИНЕНИЕ Соединения используются для связи двух таблиц по определенному условию. Особенность при ЛЕВОМ СОЕДИНЕНИИ в том, что мы берём первую указанную таблицу полностью и привязываем по условию вторую таблицу. Поля второй таблицы, которые не удалось привязать по условию, заполняются значением NULL . Например: Вернет всю таблицу Контрагентов и заполнит поле “Банк” лишь в тех местах, где будет соблюдаться условие “Контрагенты.Наименование = Банки.Наименование”. Если условие не соблюдается, в поле Банк будет установлено NULL . ПРАВОЕ СОЕДИНЕНИЕ в языке 1С абсолютно аналогично ЛЕВОМУ соединению , за исключением одного отличия – в ПРАВОМ СОЕДИНЕНИИ “главная” таблица – вторая, а не первая. ПОЛНОЕ СОЕДИНЕНИЕ ПОЛНОЕ СОЕДИНЕНИЕ отличается от левого и правого тем, что выводит все записи из двух таблиц, соединяет лишь те, которые может соединить по условию. Например:
Язык запросов вернет обе таблицы полностью лишь по выполненному условию соединить записи. В отличие от левого/правого соединения возможно появления NULL в двух полях. ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВНУТРЕННЕЕ СОЕДИНЕНИЕ отличается от полного тем, что выводит только те записи, которые смогли соединить по заданному условию. Например:
Данный запрос вернет только строки, в которых у банка и контрагента будет одинаковое наименование. ОбъединенияКонструкция ОБЪЕДИНИТЬ и ОБЪЕДИНИТЬ ВСЕ объединяет два результата в один. Т.е. результат выполнения двух будет «слит» в один, общий. Т.е система работает точно так же, как и обычные , только для временной таблицы. Как использовать ИНДЕКСИРОВАТЬ ПО Однако следует учесть один момент. Построение индекса временной таблицы также требует времени на выполнение. Поэтому целесообразно использовать конструкцию ” ”, только если точно известно, что во временной таблице будет не 1-2 записи. В противном случае эффект может быть обратным – быстродействие от индексированных полей не компенсирует времени построения индекса.
ГруппировкаЯзык запросов 1С позволяет использовать специальные агрегатные функции при группировке результатов запросов. Группировку можно также использовать без агрегатных функций, для «устранения» дублей. Существуют следующие функции: Сумма, Количество, Количество разных, Максимум, Минимум, Среднее. Пример №1:
Запрос получает все строки с товарами и суммирует их по количеству и суммам в разрезе номенклатуры. Пример №2
Данный пример отобразит список БИКов справочника «Банки» и покажет, сколько дублей существует по каждому из них. ИтогиИтоги – способ получения данных из системы с иерархической структурой. Для итоговых полей могут использоваться агрегатные функции, как для группировок. Один из самых популярных способов использования итогов в практике – партионное списание товаров.
В результате запроса получится следующее иерархическое : Общие итоги Если необходимо получить итоги по всем «итогам», используйте оператор «ОБЩИЕ».
В результате выполнения запроса получим следующий результат: В котором 1 уровень группировки – агрегирование всех нужных полей. УпорядочиваниеОператор УПОРЯДОЧИТЬ ПО используется для сортировки результата запроса. Сортировка для примитивных типов (строка, число, булево) происходит по обычным правилам. Для полей ссылочных типов сортировка происходит по внутреннему представлению ссылки (уникальный идентификатор), а не по коду или по представлению ссылки.
Запрос выведет список наименований справочника номенклатуры, отсортированного по алфавиту. Автоупорядочивание Результат запроса без сортировки представляет собой хаотично представленный набор строк. Разработчики платформы 1С не гарантируют вывод строк в одинаковой последовательности при выполнении одинаковых запросов. Если необходимо выводить записи таблицы в постоянном порядке, необходимо использовать конструкцию «Автоупорядочивание».
Виртуальные таблицыВиртуальные таблицы в 1С – это уникальная особенность языка запросов 1С, которой нет в других аналогичных синтаксисах. Виртуальная таблица – быстрый способ получения профильной информации из регистров. Для каждого из типов регистров свой набор виртуальных таблиц, который может отличаться в зависимости от настроек регистра.
Для разработчика решения данные берутся из одной (виртуальной) таблицы, но на самом деле платформа 1С берёт из множества таблиц, преобразуя их в нужных вид.
Параметры виртуальных таблиц Очень важный аспект работы с виртуальными таблицами – использование параметров. Параметры виртуальных таблиц – специализированные параметры для отбора и настройки. Для таких таблиц считается неверным использования отбора в конструкции «ГДЕ». Помимо того, что запрос становится не оптимальным, возможно получение неверных данных. Пример использования таких параметров: РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Месяц, ДвиженияИГраницыПериода, Номенклатура = &НужнаяНоменклатура) Алгоритм работы виртуальных таблиц Например, наиболее используемая виртуальная таблица типа «Остатки» хранит данные двух физических таблиц – остатков и движений. При использовании виртуальной таблицы система проделывает следующие манипуляции:
Использование конструктора запросовКонструктор запросов – инструмент, встроенный в систему 1С предприятие, существенно облегчающий разработку запросов к базе данных. Конструктор запроса имеет достаточно простой, интуитивно понятный интерфейс. Тем не менее рассмотрим применение конструктора запроса подробнее. Описание конструктора запроса 1СРассмотрим каждую вкладку конструктора подробнее. Исключение – вкладка Построитель, это тема для отдельного разговора. Вкладка Таблицы и поляНа этой вкладке указывается источник данных и поля, которые необходимо выводить в отчет. По сути тут описываются конструкции ВЫБРАТЬ.. ИЗ. В качестве источника может служить физическая таблица базы данных, виртуальная таблица регистров, временные таблицы, вложенные запросы и т.д. В контекстном меню виртуальных таблиц можно задать параметры виртуальной таблицы: Вкладка СвязиВкладка служит для описания соединений нескольких таблиц, создает конструкции со словом СОЕДИНЕНИЕ. Вкладка ГруппировкаНа данной вкладке система позволяет группировать и суммировать нужные поля результата таблицы. Описывается использование конструкций СГРУППИРОВАТЬ ПО, СУММА, МИНИМУМ, СРЕДНЕЕ, МАКСИМУМ, КОЛИЧЕСТВО, КОЛИЧЕСТВО РАЗЛИЧНЫХ. Вкладка УсловияОтвечает за всё, что идёт в тексте запроса после конструкции ГДЕ, т.е за все условия, накладываемые на получаемые данные. Вкладка ДополнительноВкладка Дополнительно изобилует всевозможными параметрами, которые являются очень важными. Рассмотрим каждое из свойств. Группировка Выборка записей :
Группировка Тип запроса определяет, какой будет тип запроса: выборка данных, создание временной таблицы или же уничтожение временной таблицы. Ниже существует флаг Блокировать полученные данные для последующего изменения . Он позволяет включить возможность установки блокировки данных, которая обеспечивает сохранность данных от момента их чтения до изменения (актуально только для Автоматического режима блокировок, конструкция ДЛЯ ИЗМЕНЕНИЯ). Вкладка Объединения/ПсевдонимыНа этой вкладке конструктора запросов устанавливается возможность объединения разных таблиц и псевдонимов(конструкция КАК). В левой части указываются таблицы. Если установить флаги напротив таблицы, будет использоваться конструкция ОБЪЕДИНИТЬ, иначе – ОБЪЕДИНИТЬ ВСЕ (отличия двух способов ). В правой части указываются соответствия полей в разных таблицах, если соответствие не указано, запрос будет возвращать NULL. Вкладка ПорядокЗдесь указывается порядок сортировки значений (УПОРЯДОЧИТЬ ПО) – по убыванию (УБЫВ) или возрастанию(ВОЗР). Также есть интересный флаг – Автоупорядочивание (в запросе – АВТОУПОРЯДОЧИВАНИЕ). По умолчанию система 1С выводит данные в “хаотичном” порядке. Если установить этот флаг, система будет сортировать данные по внутренним данным. Вкладка Пакет запросовНа вкладке конструктора запросов можно создавать новые , а также использовать её в роли навигации. В тексте запроса пакеты разделяются символом “;”(точка запятая). Кнопка “Запрос” в конструкторе запросовВ левом нижнем углу конструктора запроса есть кнопка Запрос, с помощью которого можно в любой момент просмотреть текст запроса: В данном окне можно внести коррективы в запрос и выполнить его. Использование консоли запросовКонсоль запросов – простой и удобный способ для отладки сложных запросов и быстрого получения информации. В этой статье я постараюсь описать, как пользоваться консолью запросов, и дам ссылку для скачивания консоли запросов. Рассмотрим этот инструмент подробнее. Скачать консоль запросов 1СПервым делом, чтобы начать работу с консолью запросов, её нужно откуда-то скачать. Обработки обычно делятся на два вида – на управляемых формах и обычных (или, иногда, их называют на 8.1 и на 8.2/8.3). Я постарался объединить эти два вида в одной обработке – в нужном режиме работы открывается нужная форма (в управляемом режиме консоль работает только в толстом режиме). Описание консоли запросов 1СНачнем рассмотрение консоли запросов с описания главной панели обработки: В шапке консоли запросов можно увидеть время выполнения последнего запроса с точностью до миллисекунды, это позволяет сравнивать разные конструкции по производительности. Первая группа кнопок в командной панели отвечает за сохранение текущих запросов во внешнем файле. Это очень удобно, Вы всегда сможете вернуться к написанию сложного запроса. Или же, например, хранить список типичных примеров тех или иных конструкций. Слева, в поле “Запрос”, можно создавать новые запросы и сохранять их в древовидной структуре. Вторая группа кнопок как раз отвечает за управление списком запросов. С помощью неё можно создать, скопировать, удалить, переместить запрос.
Параметры запроса: Позволяют установить текущие параметры для запроса. В окне параметров запроса интересно следующее:
Задать параметр списком значений очень просто, достаточно при выборе значения параметра нажать на кнопку очистки значения (крестик), система предложит выбрать тип данных, где надо выбрать “Список значения”: Также в верхней панели очень есть кнопка вызова настроек консоли запросов: Здесь можно указать параметры автосохранения запросов и параметры выполнения запроса. В поле запроса консоли заносится текст запроса. Сделать это можно простым набором теста запроса или же вызовом специального инструмента – конструктора запросов. Конструктор запроса 1С 8 вызывается из контекстного меню (правая кнопка мыши) при нажатии на поле ввода: Также в этом меню есть такие полезные функции, как очистка или добавление в запрос символов переноса строки (“|”) или же получения кода запроса вот в таком удобном виде:
В нижнем поле консоли запросов отображается поле результата запроса, ради чего и создана эта обработка:
Оптимизация запросовОдним из важнейших пунктов в повышении производительности работы 1С предприятия 8.3 является оптимизация запросов . Этот пункт также очень важен при сдаче аттестации . Ниже пойдет речь о типичных причинах не оптимальной работы запросов и способах из оптимизации. Отборы в виртуальной таблице с помощью конструкции ГДЕНакладывать фильтры на реквизиты виртуальной таблицы необходимо только через параметры ВТ. Ни в коем случае для отбора в виртуальной таблице нельзя использовать конструкцию ГДЕ, это грубейшая ошибка с точки зрения оптимизации. В случае с отбором с помощью ГДЕ по факту система получит ВСЕ записи и только потом отберет нужные. ПРАВИЛЬНО :
НЕПРАВИЛЬНО :
Получение значения поля составного типа через точкуПри получении данных составного типа в запросе через точку система соединяет левым соединением ровно столько таблиц, сколько типов возможно в поле составного типа. Например, крайне нежелательно для оптимизации обращаться к полю записи регистра – регистратор. Регистратор имеет составной тип данных, среди которых все возможные типы документов, которые могут писать данные в регистр. НЕПРАВИЛЬНО:
Т.е по факту вот такой запрос будет обращаться не к одной таблице, а к 22 таблицам базы данных (у этого регистра 21 тип регистратора). ПРАВИЛЬНО:
Либо второй вариант – добавление такой информации в реквизит, например, в нашем случае – добавление даты. ПРАВИЛЬНО:
Подзапросы в условии соединенияДля оптимизации недопустимо использовать подзапросы в условиях соединения, это существенно замедляет работу запроса. Желательно в таких случаях использовать ВТ. Для соединения нужно использовать только объекты метаданных и ВТ, предварительно проиндексировав их по полям соединения. НЕПРАВИЛЬНО:
ПРАВИЛЬНО:
Соединение записей с виртуальными таблицамиБывают ситуации, когда при соединении виртуальной таблицы с другими система работает не оптимально. В таком случае для оптимизации работы запроса можно попробовать поместить виртуальную таблицу во временную, не забыв проиндексировать соединяемые поля в запросе временной таблицы. Связано это с тем, что ВТ часто содержатся в нескольких физических таблицах СУБД, в итоге для их выборки составляется подзапрос, и проблема получается аналогичной предыдущему пункту. Использование отборов по не индексируемым полямОдна из самых распространенных ошибок при составления запросов – использование условий по не индексируемым полям, это противоречитправилам оптимизации запросов. СУБД не может выполнить запрос оптимально, если в запросе накладывается отбор по неиндексируемым полям. Если же берется временная таблица – также необходимо индексировать поля соединения. Обязательно для каждого условия должен существовать подходящий индекс. Подходящим является индекс, удовлетворяющий следующим требованиям:
Если СУБД не подобрал правильные индексы, то будет просканирована таблица полностью – это очень негативно скажется на производительности и может привести к продолжительной блокировке всего набора записей. Использование логического ИЛИ в условияхВот и всё, в данной статье были освещены основы аспекты оптимизации запросов, которые должен знать каждый эксперт 1С. Очень полезный бесплатный видеокурс по разработке и оптимизации запросов, категорически рекомендую новичкам и не только!
Остальные рассмотрим сейчас. Функции работы со строками в запросах 1СФункций и операторов для работы со строковыми данными в запросах 1С немного. Во-первых, строки в запросах можно складывать. Для этого используется оператор «+»: Запрос.
Текст=
"ВЫБРАТЬ Во-вторых, можно выделить часть строки. Для этого используется функция ПОДСТРОКА. Функция аналогична встроенного языка 1С. У нее три параметра:
Запрос.
Текст=
"ВЫБРАТЬ Функция ЕСТЬNULLNULL — особый тип данных на платформе 1С:Предприятие. Он же является единственным возможным значением этого типа. NULL может возникать в запросах в нескольких случаях: при соединениях источников запроса, если не было найдено соответствующего значения в одной из таблиц; при обращении к реквизитам несуществующего объекта; если NULL был указан в списке полей запроса (например при объединении результатов выборки из нескольких таблиц) и т.д. Поскольку NULL не является ни нулем, ни пустой строкой, ни даже значением Неопределено, его часто бывает полезно заменять на какой-то более полезный тип данных. Для этого и предназначена функция ЕСТЬNULL. Она имеет два параметра:
Запрос.
Текст=
"ВЫБРАТЬ Функции ПРЕДСТАВЛЕНИЕ и ПРЕДСТАВЛЕНИЕССЫЛКИЭти функции предназначены для получения строковых представлений различных значений. То есть, они преобразуют ссылки, числа, булево и т.д. в обычный текст. Разница между ними в том, что функция ПРЕДСТАВЛЕНИЕ преобразует в текст (строку) любые типы данных, а функция ПРЕДСТАВЛЕНИЕССЫЛКИ — только ссылки, а остальные значения возвращает как есть, не преобразованными. Запрос.
Текст=
"ВЫБРАТЬ Запрос.
Текст=
"ВЫБРАТЬ Функции ТИП и ТИПЗНАЧЕНИЯФункция ТИП возвращает тип данных платформы 1С:Предприятие. Запрос.
Текст=
"ВЫБРАТЬ Функция ТИПЗНАЧЕНИЯ возвращает тип переданного в нее значения. Запрос.
Текст=
"ВЫБРАТЬ Эти функции удобно применять, например, когда нужно выяснить является ли полученное в запросе поле значением какого-то типа. Например, получим контактную информацию контрагентов из регистра сведений КонтактнаяИнформация (там хранятся контакты не только контрагентов, но и организаций, физических лиц и т.д.): Запрос.
Текст=
"ВЫБРАТЬ Функция ЗНАЧЕНИЕФункция Значение позволяет использовать в запросе объекты конфигурации 1С напрямую, без применения . Дополним предыдущий пример еще одним условием. Необходимо получить только телефоны контрагентов. Запрос.
Текст=
"ВЫБРАТЬ Следует отметить, что эту функцию можно использовать только с предопределенными значениями, т.е. со значениями, к которым можно обратиться напрямую из конфигуратора. То есть функция ЗНАЧЕНИЕ не можно использоваться с элементами справочников, созданными пользователями, но может работать с перечислениями, с предопределенными элементами справочников, со значениями ПустаяСсылка . Оператор ССЫЛКАОператор ССЫЛКА предназначен для проверки значений, получаемых запросом, на принадлежность к определенному ссылочному типу. Эту же задачу можно выполнить с помощью функций ТИП и ТИПЗНАЧЕНИЯ (которые имеют более широкую область применения и были рассмотрены выше). Например, задачу выбора контактной информации контрагентов можно было решить и так: Запрос.
Текст=
"ВЫБРАТЬ Оператор ВЫРАЗИТЬОператор ВЫРАЗИТЬ используется в запросах 1С в двух случаях:
К примитивным типам данных относятся: число, строка, дата, булево. Некоторые из этих типов данных имеют дополнительные характеристики. Тип Число имеет длину и точность, тип Строка — длину или неограниченность. Оператор ВЫРАЗИТЬ позволяет изменять не тип данных, а именно дополнительные характеристики. Например, он может из строки с неограниченной длиной сделать строку с длиной ограниченной. Это бывает полезно, если нужно сгруппировать результаты запроса по такому полю. Выполнять группировку по полям с неограниченной длиной нельзя, поэтому мы его преобразуем в строку с длиной 200 символов. Запрос.
Текст=
"ВЫБРАТЬ В ряде случаев, запросы к полям с составным типом данных могут обрабатываться платформой 1С неоптимально. Это приводит к увеличению времени выполнения запросов, поэтому бывает полезно заранее преобразовать составной тип в одиночный. Запрос.
Текст=
"ВЫБРАТЬ Операторы ВЫБОР и ЕСТЬ NULLОператор ВЫБОР аналогичен оператору ЕСЛИ во встроенном языке 1С, но имеет несколько урезанный функционал. Допустим мы хотим получить контактные данные из регистра сведений КонтактнаяИнформация и при этом в отдельном поле запроса указать, принадлежат ли они контрагенту или физическому лицу. Запрос.
Текст=
"ВЫБРАТЬ Как видно из примера, в конструкции ВЫБОР всегда присутствует условие после слова КОГДА; значение, применяемое, если условие выполняется, после слова ТОГДА и значение, применяемое, если условие не выполняется, после слова ИНАЧЕ. Все три элемента конструкции ВЫБОР являются обязательными. Опустить элемент ИНАЧЕ , так же, как это делается при использовании оператора ЕСЛИ во встроенном языке 1С, нельзя. Также у оператора ВЫБОР отсутствует аналог конструкции ИНАЧЕЕСЛИ , зато можно вложить один ВЫБОР в другой, как и было сделано в нашем примере. Оператор ЕСТЬ NULL используется в конструкции ВЫБОР для сравнения поля запроса с типом NULL. Запрос.
Текст=
"ВЫБРАТЬ Кроме того, оператор ЕСТЬ NULL можно использовать в условиях запроса, например в предложении ГДЕ. Механизмов для работы со строками в запросах 1С мало. Во-первых, строки можно складывать. Во-вторых, от строки можно взять подстроку. В-третьих, строки можно сравнивать, в том числе по шаблону. Вот пожалуй и всё, что можно делать со строками. Сложение строкДля сложения строк в запросе используется операция «+». Складывать можно только строки ограниченной длины. ВЫБРАТЬ "Наименование: " + Контрагенты.Наименование КАК Колонка1 ИЗ Справочник.Контрагенты КАК Контрагенты ГДЕ Контрагенты.Ссылка = &Ссылка Функция ПодстрокаПОДСТРОКА(<Строка>, <НачальнаяПозиция>, <Длина>) Аналог функции Сред() из объектной модели. Функция Подстрока() может применяться к данным строкового типа и позволяет выделить фрагмент <Строки> , начинающийся с символа номер <НачальнаяПозиция> (символы в строке нумеруются с 1) и длиной <Длина> символов. Результат вычисления функции имеет строковый тип переменной длины, причем длина будет считаться неограниченной, если <Строка> имеет неограниченную длину и параметр <Длина> не является константой или превышает 1024. Если длина строки меньше, чем указана во втором параметре, то функция вернет пустую строку. Внимание! Использование функции ПОДСТРОКА() с целью приведения строк неограниченной длины к строкам ограниченной длины не рекомендуется. Вместо нее лучше использовать операцию приведения типа ВЫРАЗИТЬ(). Функция ПодобноЕсли нужно убедиться, что строковый реквизит соответствует определённым критериям мы его сравниваем: ВЫБРАТЬ Контрагенты.Наименование КАК Колонка1 ИЗ Справочник.Контрагенты КАК Контрагенты ГДЕ Контрагенты.Наименование = "Газпром" А что, если нужно более хитрое сравнение? Не просто на равенство или неравенство, а на подобие определенному шаблону? Вот как раз для этого и создана функция ПОДОБНО. ПОДОБНО — Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если значение выражения удовлетворяет шаблону – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ. Следующие символы в строке шаблона являются служебными и имеют смысл, отличный от символа строки:
Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки. Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать <Спецсимвол>. Сам <Спецсимвол> (любой подходящий символ) определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ. В языке запросов 1С:Предприятия функция ПОДСТРОКА() в формате ПОДСТРОКА(<Исходная строка>, <Начало>, <Длина>) может применяться к данным строкового типа и позволяет выделить фрагмент <Исходной строки>, начинающийся с символа номер <Начало> (символы в строке нумеруются с 1) и длиной <Длина> символов. Результат вычисления функции ПОДСТРОКА() имеет строковый тип переменной длины, причем длина будет считаться неограниченной, если <Исходная строка> имеет неограниченную длину и параметр <Длина> не является константой или превышает 1024. Вычисление функции ПОДСТРОКА() на SQL сервере:
В большинстве случаев эти правила не оказывают влияния на выполнение запроса 1С:Предприятия, однако есть случаи, когда для исполнения запроса существенна максимальная длина строки результата, вычисленная SQL Server. Важно иметь в виду, что в некоторых контекстах использования функции ПОДСТРОКА() максимальная длина ее результата может оказаться равной максимальной длине строки ограниченной длины, которая в SQL Server равна 4000 символам. Это может привести к неожиданному аварийному завершению выполнения запроса. Например, запрос: В связи с описанной особенностью исполнения функции SUBSTRING() на SQL Server использование функции ПОДСТРОКА() с целью приведения строк неограниченной длины к строкам ограниченной длины не рекомендуется. Вместо нее лучше использовать операцию приведения типа ВЫРАЗИТЬ(). В частности, приведенный пример можно переписать в виде: Приветсвую вас, уважаемые читатели блога сайт! Сегодня, с помощью примеров, мы рассмотрим, как на практике можно использовать функцию запросов 1С ПОДСТРОКА / SUBSTRING . Использование данной функции пригодится не только в простых запросах, которые мы рассмотрим здесь, но и при и запросов, а также в запросах. Задача состояла в том, что нужно было из реквизита документа Сответствие выделить две строки и сделать сортировку по ним. Соответствие счета, такого вида: 779000/004599. Как разбить это значение на два? У функции ПОДСТРОКА три параметра. В качестве первого указывается исходная строка, из которой требуется выделить часть символов — подстроку. Понятно, что тип значения этого параметра — это Строка . Внимание, это очень важное замечание, если использовать тип первого параметра не строку, функция не будет работать, запрос будет выдавать ошибку! Второй параметр определяет позицию символа в исходной строке, с которого начинается выделение части строки, а третий — это длина выделяемой подстроки. Тип значения для второго и третьего параметров — число. Перейдём к практике: ВЫБРАТЬ Типовой.Регистратор КАК Название, ПОДСТРОКА (Типовой.Регистратор.Соотв.Наименование, 1, 6) КАК СчетЗатрат, ПОДСТРОКА (Типовой.Регистратор.Соотв.Наименование, 8, 11) КАК Отдел, СУММА(ВЫБОР КОГДА МЕСЯЦ(Типовой.Период) = 3 ТОГДА ВЫРАЗИТЬ(Типовой.Сумма КАК ЧИСЛО(15, 2)) ИНАЧЕ 0 КОНЕЦ) КАК Март ИЗ РегистрБухгалтерии.Типовой КАК Типовой ГДЕ Типовой.СчетКт = &СчетКт И Типовой.Период МЕЖДУ &ПериодНач И &ПериодКон СГРУППИРОВАТЬ ПО ПОДСТРОКА (Типовой.Регистратор.Соотв.Наименование, 1, 6), ПОДСТРОКА (Типовой.Регистратор.Соотв.Наименование, 8, 11), Типовой.Регистратор УПОРЯДОЧИТЬ ПО Отдел, СчетЗатрат Результат этого запроса следующий:
Итак, если мы берём строку 779000/004599, то ПОДСТРОКА(Типовой.Регистратор.Соотв.Наименование, 1, 6) будет выделять строку «779000». А ПОДСТРОКА(Типовой.Регистратор.Соотв.Наименование, 8, 11) будет выводить «004599». В этом же запросе, используется выражение: СУММА(ВЫБОР КОГДА МЕСЯЦ(Типовой.Период) = 3 ТОГДА ВЫРАЗИТЬ(Типовой.Сумма КАК ЧИСЛО(15, 2)) ИНАЧЕ 0 КОНЕЦ) КАК Март В этой же задаче необходимо было добавить новые колонки с названиями месяцев и с суммами по ним. Как раз это выражение решает эту задачу. Если Вам нужно использовать другие месяца, например январь, то заменим выражение: СУММА(ВЫБОР КОГДА МЕСЯЦ(Типовой.Период) = 1 ТОГДА ВЫРАЗИТЬ(Типовой.Сумма КАК ЧИСЛО(15, 2)) ИНАЧЕ 0 КОНЕЦ) КАК Январь Приведу пример текста запроса, в котором с помощью цикла формируются поля месяцев (выделено жирным), начиная с марта по февраль. ТекстЗапроса = " |ВЫБРАТЬ |Типовой.Регистратор КАК Название, |ПОДСТРОКА(Типовой.Регистратор.Соотв.Наименование, 1, 6) КАК СчетЗатрат, |ПОДСТРОКА(Типовой.Регистратор.Соотв.Наименование, 8, 11) КАК Отдел,"; Для Сч = 1 По 12 Цикл Если Сч < 11 Тогда Мес = Сч + 2; Иначе Мес = Сч - 10; КонецЕсли; ТекстЗапроса = ТекстЗапроса + " |СУММА(ВЫБОР | КОГДА МЕСЯЦ(Типовой.Период) = " + Мес + " | ТОГДА ВЫРАЗИТЬ(Типовой.Сумма КАК ЧИСЛО(15, 2)) | ИНАЧЕ 0 |КОНЕЦ) КАК Поле" + Мес + ?(Сч=12,"",","); КонецЦикла; ТекстЗапроса = ТекстЗапроса + " |ИЗ | РегистрБухгалтерии." + ИмяРегистраБухгалтерии + ".ДвиженияССубконто(| &НачПериода, | &КонПериода,"; СтрокаОграниченийПоРеквизитам = " (Активность = ИСТИНА) И (Счет В ИЕРАРХИИ (&СчетАнализа))"; ТекстЗапроса = ТекстЗапроса + СтрокаОграниченийПоРеквизитам + " |) КАК Типовой |"; ТекстЗапроса = ТекстЗапроса + " |ГДЕ | Типовой.СчетКт = &СчетАнализа | И Типовой.Период МЕЖДУ &НачПериода И &КонПериода |СГРУППИРОВАТЬ ПО | ПОДСТРОКА(Типовой.Регистратор.Соотв.Наименование, 1, 6), | ПОДСТРОКА(Типовой.Регистратор.Соотв.Наименование, 8, 11), | Типовой.Регистратор |УПОРЯДОЧИТЬ ПО | Отдел, | СчетЗатрат"; Итак, с помощью кода приведенного выше (выделено жирным), выводятся части запроса с месяцами. Таким образом, происходит добавление новых колонок с названиями месяцев и с суммами по ним. |
Читайте: |
---|
Популярное:
Новое
- Функции преобразования строк
- Новые функции работы со строками Неверное количество категорий в исходной строке 1с
- Несколько вариантов поиска ошибок и решений
- История почты и почтовых марок чили Иностранные почтовые отделения
- ВКонтакте Украина: вход закрыт
- Почему флешка не отображается в моем компьютере: что делать?
- Как полностью удалить записи со стены ВК?
- Как настроить выключение компьютера по расписанию в Windows!
- Преобразование PDF в презентацию Преобразование файла pdf в формат ppt
- Элементы web-страницы Элементы веб-страниц: заголовок