Создание и работа с запросами (для начинающих). Создание и работа с запросами (для начинающих) Язык запросов 1с 8

Запросы предназначены для извлечения и обработки информации из базы данных для предоставления пользователю в требуемом виде. Под обработкой здесь подразумевается группировка полей, сортировка строк, расчет итогов и т.д. Изменять данные с помощью запросов в 1С нельзя!

Запрос выполняется в соответствии с заданными инструкциями — текстом запроса . Текст запроса составляется в соответствии с синтаксисом и правилами языка запросов . Язык запросов 1С:Предприятие 8 основан на базе стандартного SQL , но имеет некоторые отличия и расширения.

Схема работы с запросом

Общая схема работы с запросом состоит из нескольких последовательных этапов:

  1. Создание объекта Запрос и установка текста запроса;
  2. Установка параметров запроса;
  3. Выполнение запроса и получение результата;
  4. Обход результата запроса и обработка полученных данных.

1. Объект Запрос имеет свойство Текст , которому необходимо присвоить текст запроса.

// Вариант 1
Запрос = Новый Запрос;
Запрос. Текст =
«ВЫБРАТЬ
| КурсыВалют.Период,
| КурсыВалют.Валюта,
| КурсыВалют.Курс
|ИЗ

|ГДЕ
;

// Вариант 2
Запрос = Новый Запрос («ВЫБРАТЬ
| КурсыВалют.Период,
| КурсыВалют.Валюта,
| КурсыВалют.Курс
|ИЗ
| РегистрСведений.КурсыВалют КАК КурсыВалют
|ГДЕ
| КурсыВалют.Валюта = &Валюта» );

2. Установка значений параметров осуществляется методом УстановитьПараметр(< Имя>, < Значение>) . Параметры в тексте запроса обозначаются символом «& » и обычно используются в условиях отбора (секция ГДЕ) и в параметрах виртуальных таблиц.

Запрос);

3. После присвоения текста и установки параметров запрос необходимо выполнить и получить результат выполнения. Выполнение производится методом Выполнить () , который возвращает объект РезультатЗапроса . Из результата запроса можно:

  • получить выборку с помощью метода Выбрать(< ТипОбхода>, < Группировки>, < ГруппировкиДляЗначенийГруппировок>) ;
  • выгрузить значения в таблицу значений или дерево значений с помощью метода Выгрузить(< ТипОбхода>) .

// Получение выборки

Выборка = РезультатЗапроса. Выбрать ();

// Получение таблицы значений
РезультатЗапроса = Запрос. Выполнить();
Таблица = РезультатЗапроса. Выгрузить ();

4. Обойти выборку результата запроса можно с помощью цикла:

Пока Выборка .Следующий () Цикл
Сообщить (Выборка .Курс );
КонецЦикла;

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

// Этап 1. Создание запроса и установка текста запроса
Запрос = Новый Запрос;
Запрос. Текст =
«ВЫБРАТЬ
| КурсыВалют.Период,
| КурсыВалют.Валюта,
| КурсыВалют.Курс
|ИЗ
| РегистрСведений.КурсыВалют КАК КурсыВалют
|ГДЕ
| КурсыВалют.Валюта = &Валюта» ;

// Этап 2. Установка параметров
Запрос. УстановитьПараметр(«Валюта» , ВыбраннаяВалюта );

// Этап 3. Выполнение запроса и получение выборки
РезультатЗапроса = Запрос. Выполнить();
Выборка = РезультатЗапроса. Выбрать ();

// Обход выборки
Пока Выборка .Следующий () Цикл
Сообщить (Выборка .Курс );
КонецЦикла;

Состав текста запроса

Текст запроса состоит из нескольких секций:

  1. Описание запроса — перечень выбираемых полей и источников данных;
  2. Объединение запросов — выражения «ОБЪЕДИНИТЬ» и «ОБЪЕДИНИТЬ ВСЕ»;
  3. Упорядочивание результатов — выражение «УПОРЯДОЧИТЬ ПО …»;
  4. Автоупорядочивание — выражение «АВТОУПОРЯДОЧИВАНИЕ»;
  5. Описание итогов — выражение «ИТОГИ … ПО …».

Обязательной является только первая секция.

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

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

Часто можно столкнуться с ситуацией, когда в качестве источника запроса нужно использовать не таблицы базы данных, а результат выполнения другого запроса. Эту задачу можно решить с помощью вложенных запросов или временных таблиц . Применение временных таблиц позволяет упростить текст сложного запроса, разделив его на составные части, а также, в некоторых случаях, ускорить выполнение запроса и уменьшить количество блокировок. Для работы с временными таблицами используется объект МенеджерВременныхТаблиц . Создание временной таблицы производится при помощи ключевого слова ПОМЕСТИТЬ, за которым следует наименование временной таблицы.

МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос. МенеджерВременныхТаблиц = МенеджерВТ;

Запрос. Текст =
«ВЫБРАТЬ
| Валюты.Код,
| Валюты.Наименование
|ПОМЕСТИТЬ ВТВалюты
|ИЗ
| Справочник.Валюты КАК Валюты» ;

РезультатЗапроса = Запрос. Выполнить ();

Для использования временной таблицы ВТВалюты в других запросах необходимо этим запросам присвоить общий менеджер временных таблиц — МенеджерВТ.

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

Для пакетных запросов доступен метод ВыполнитьПакет () , который выполняет все запросы и возвращает массив результатов. Временные таблицы в пакетном запросе будут представлены таблицей с одной строкой и одной колонкой «Количество», в которой хранится количество записей. Для отладки пакетных запросов можно использовать метод ВыполнитьПакетСПромежуточнымиДанными () : он возвращает реальное содержимое временных таблиц, а не количество записей.

// Пример работы с пакетным запросом
Запрос = Новый Запрос;
Запрос. Текст =
«ВЫБРАТЬ
| Валюты.Наименование
|ИЗ
| Справочник.Валюты КАК Валюты
|;
|ВЫБРАТЬ
| Номенклатура.Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура» ;

РезультатПакета = Запрос. ВыполнитьПакет();

ТЗВалюты = РезультатПакета[ 0 ]. Выгрузить();
ТЗНоменклатура = РезультатПакета[ 1 ]. Выгрузить();

// Пример использования временных таблиц в пакетном запросе
Запрос = Новый Запрос;
Запрос. Текст =
«ВЫБРАТЬ
| Товары.Ссылка КАК Товар
|ПОМЕСТИТЬ ВТТовары
|ИЗ
| Справочник.Номенклатура КАК Товары
|ГДЕ
| Товары.Производитель = &Производитель
|;
|ВЫБРАТЬ
| ВТТовары.Товар,
| ПТУ.Количество,
| ПТУ.Цена,
| ПТУ.Ссылка КАК ДокументПоступления
|ИЗ
| ВТТовары КАК ВТТовары
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПТУ
| ПО ВТТовары.Товар = ПТУ.Номенклатура»
;

Запрос. УстановитьПараметр(«Производитель» , Производитель);

РезультатЗапроса = Запрос. Выполнить();
Выборка = РезультатЗапроса. Выбрать ();

Пока Выборка .Следующий () Цикл

КонецЦикла;

Виртуальные таблицы

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

Существуют следующие виртуальные таблицы (в скобках указаны возможные параметры):

  • Для регистров сведений:
    • СрезПервых(<Период>, <Условие>) — наиболее ранние записи на указанную дату;
    • СрезПоследних(<Период>, <Условие>) — наиболее поздние записи на указанную дату;
  • Для регистров накопления:
    • Остатки(<Период>, <Условие>) — остатки на указанную дату;
    • Обороты(<НачалоПериода>, <КонецПериода>, <Периодичность>, <Условие>) — обороты за период;
    • ОстаткиИОбороты(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <Условие>) — остатки и обороты за период;
  • Для регистров бухгалтерии:
    • Остатки(<Период>, <УсловиеСчета>, <Субконто>, <Условие>) — остатки на указанную дату в разрезе счета, измерений и субконто;
    • Обороты(<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчета>, <Субконто>, <Условие>, <УсловиеКорСчета>, <КорСубконто>) — обороты за период в разрезе счета, измерений, кор. счета, субконто, кор. субконто;
    • ОстатковИОборотов(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <УсловиеСчета>, <Субконто>, <Условие>) — остатки и оборотов в разрезе счета, измерений и субконто;
    • ОборотыДтКт(<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчетаДт>, <СубконтоДт>, <УсловиеСчетаКт>, <СубконтоКт>, <Условие>) — обороты за период в разрезе счета Дт, счета Кт, Субконто Дт, Субконто Кт;
    • ДвиженияССубконто(<НачалоПериода>, <КонецПериода>, <Условие>, <Порядок>, <Первые>) — движения вместе со значениями субконто;
  • Для регистров расчета:
    • База(<ИзмеренияОсновногоРегистра>, <ИзмеренияБазовогоРегистра>, <Разрезы>, <Условие>) — базовые данные регистра расчета;
    • ДанныеГрафика(<Условие>) — данные графика;
    • ФактическийПериодДействия(<Условие>) — фактический период действия.

При работе с виртуальными таблицами следует накладывать отборы в параметрах виртуальных таблиц, а не в условии ГДЕ. От этого сильно зависит время выполнения запроса.

Конструктор запроса

Для ускорения ввода текстов запросов платформа имеет специальные инструменты: Конструктор запроса и Конструктор запроса с обработкой результата . Для вызова конструкторов необходимо щелкнуть правой кнопкой мыши и выбрать требуемый пункт:

Также конструкторы можно вызвать из главного меню Текст .

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

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

Объект СхемаЗапроса

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

  • УстановитьТекстЗапроса(< Текст>) — заполняет свойство ПакетЗапросов на основании переданного текста запроса;
  • ПолучитьТекстЗапроса () — возвращает сформированный на основании свойства ПакетЗапросов текст запроса;
  • НайтиПараметры () — возвращает параметры запроса.

Рассмотрим пример работы с объектом СхемаЗапроса. Для программного формирования текста запроса

УПОРЯДОЧИТЬ ПО
Валюты.Код

Код на встроенном языке может выглядеть так:

СхемаЗапроса = Новый СхемаЗапроса;
Пакет1 = СхемаЗапроса. ПакетЗапросов[ 0 ];
Оператор1 = Пакет1. Операторы[ 0 ];
// добавление источника
ТаблицаРегистра = Оператор1. Источники. Добавить(«Справочник.Валюты» , «Валюты» );
// добавление полей
ПолеСсылка = Оператор1. ВыбираемыеПоля. Добавить(«Валюты.Ссылка» , 0 );
ПолеКод = Оператор1. ВыбираемыеПоля. Добавить(«Валюты.Код» , 1 );
// указание псевдонимов полей
Пакет1. Колонки[ 0 ]. Псевдоним = «Валюта» ;
Пакет1. Колонки[ 1 ]. Псевдоним = «Код» ;
// добавление условия
Оператор1. Отбор. Добавить(«НЕ ПометкаУдаления» );
// добавление упорядочивания
Пакет1. Порядок. Добавить(ПолеКод);
ТекстЗапроса = СхемаЗапроса. ПолучитьТекстЗапроса ();

К полям запроса можно применять различные функции. В этом разделе я рассмотрю наиболее часто применяемые (лично мною) из них.

ДАТАВРЕМЯ - задает константное поле с типом Дата. Синтаксис:

ДАТАВРЕМЯ(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)
Запрос.Текст =
"ВЫБРАТЬ
| ДАТАВРЕМЯ(2013, 1, 1) КАК ОМГ";//1 января 2013

РАЗНОСТЬДАТ - возвращает разность 2-х дат в указанном измерении (год, месяц, день, час, минута, секунда). Синтаксис:

РАЗНОСТЬДАТ(<Дата1>, <Дата2>, <Тип>)
Запрос.Текст =
"ВЫБРАТЬ
| РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2013, 2, 28), ДАТАВРЕМЯ(2013, 1, 1), ДЕНЬ)
| КАК ДнейДоКонцаЗимы";

ЗНАЧЕНИЕ - задает константное поле с предопределенной записью одной из таблиц БД, также можно передать пустую ссылку. Синтаксис:

ЗНАЧЕНИЕ(<Имя>)
Запрос.Текст =
"ВЫБРАТЬ
//предопределенный элемент справочника
| ЗНАЧЕНИЕ(Справочник.Валюты.Рубли) КАК Рубль,
//пустая ссылка на документ
| ЗНАЧЕНИЕ(Документ.СчетНаОплатуПокупателю.ПустаяСсылка) КАК ПустойСчет,
//значение перечисления
| ЗНАЧЕНИЕ(Перечисление.ПолФизическихЛиц.Мужской) КАК Мужчина,
//предопределенный счет из плана счетов
| ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Товары) КАК Счет_41";

ВЫБОР - аналог конструкции ЕСЛИ для языка запросов 1С. Синтаксис:

ВЫБОР
КОГДА <Выражение> ТОГДА <Выражение>
ИНАЧЕ <Выражение>
КОНЕЦ
Запрос.Текст =
"ВЫБРАТЬ
//если цена меньше 100, то запрос все равно вернет 100
//в противном случае запрос вернет реальную цену
| ВЫБОР
| КОГДА Товары.Цена > 100
| ТОГДА Товары.Цена
| ИНАЧЕ 100
| КОНЕЦ КАК Цена
|ИЗ

ССЫЛКА <Имя таблицы>
Запрос.Текст =
"ВЫБРАТЬ
//если тип значения регистратора документ Приходная,
//тогда запрос вернет "Поступление товаров", иначе "Реализация товаров"
| ВЫБОР
| КОГДА Остатки.Регистратор ССЫЛКА Документ.Приходная
| ТОГДА ""Поступление товаров""
| ИНАЧЕ ""Реализация товаров""
| КОНЕЦ КАК ВидДвижения
|ИЗ
| РегистрНакопления.Остатки КАК Остатки";

МЕЖДУ - проверяет значение на вхождение в диапозон. Синтаксис:

МЕЖДУ <Выражение> И <Выражение>
Запрос.Текст =
//получим все товары в диапазоне цен от 100 до 1000
"ВЫБРАТЬ
| Товары.Товар
|ИЗ
|ГДЕ
| Товары.Цена МЕЖДУ 100 И 1000";

В и В ИЕРАРХИИ - проверяют наличие значения в передаваемом списке. В ИЕРАРХИИ также развернет иерархические элементы вниз и поищет значение среди подчиненных элементов. Синтаксис:

В(<СписокЗначений>), В ИЕРАРХИИ(<СписокЗначений>)
Запрос.Текст =
//получим все субсчета 41-го и 10-го счета
"ВЫБРАТЬ
| Хозрасчетный.Ссылка КАК Счет
|ИЗ
| ПланСчетов.Хозрасчетный КАК Хозрасчетный
|ГДЕ
| Хозрасчетный.Ссылка В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Товары),
| ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Материалы))";

ПОДОБНО - позволяет сравнивать строку с шаблоном, используется когда строка поиска жестко не определена. Построение шаблона:

  • % (процент): последовательность, содержащая любое количество произвольных символов
  • _ (подчеркивание): один произвольный символ
  • [...] (в квадратных скобках один или несколько символов): любой одиночный символ из перечисленных внутри квадратных скобок. В перечислении могут задаваться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона
  • [^...] (в квадратных скобках значок отрицания, за которым следует один или несколько символов): любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания

Синтаксис:

ПОДОБНО "<ТекстШаблона>"
Запрос.Текст =
//найдем все стулья в справочнике номенклатура
"ВЫБРАТЬ
| Товары.Товар
|ИЗ
| Справочник.Товары КАК Товары
|ГДЕ
| Товары.Наименование ПОДОБНО ""тул%""";
//этот запрос вернет Стул, стул, стульчик, стул офисный и т.д.,
//но стол в этом списке не окажется

ЕСТЬNULL - если поле не определено, то определяет его в указанное выражение. Синтаксис:

ЕСТЬNULL(<Выражение>, <Выражение>)
Запрос.Текст =
//Если поле не определено (NULL)? то присвоим ему пустую ссылку
"ВЫБРАТЬ
| ЕСТЬNULL(Товары.Ссылка, ЗНАЧЕНИЕ(Справочник.Товары.ПустаяСсылка)) КАК Товар
|ИЗ
| Справочник.Товары КАК Товары";

Замечу, что NULL следует обязательно обрабатывать, т.к. это очень "капризный" тип (в системе "1С:Предприятие 8" определен специальный тип NULL с одним элементом). Если вы попытаетесь сравнить со значением данного типа или присвоить его, то обязательно нарветесь на ошибку, поэтому не забывайте о данной конструкции. Когда может выскочить NULL:

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

Это далеко не полный список функций языка запросов 1С 8, если заинтересует работа каких-либо еще - пишите в комментариях.

Запросы - это один из базовых механизмов «1С:Предприятия» наряду со встроенным языком, который позволяет читать и обрабатывать данные, хранящиеся в базе. Для составления запросов «1С:Предприятия» использует собственный язык, основанный на SQL.

Книга Язык запросов 1С:Предприятия 8 поможет начинающим разработчикам, не знакомым с SQL, освоить . Книга также будет полезна и тем, кто имеет опыт составления SQL-запросов в других средах разработки, поскольку язык запросов «1С:Предприятия» содержит значительное количество расширений, ориентированных на специфику финансово-экономических задач.

В книге рассматривается значительное количество практических примеров. Для создания примеров использована версия 8.3.3.687 платформы «1С:Предприятия».

На приложенном компакт-диске содержатся демонстрационные конфигурации, иллюстрирующие эти примеры, и учебная версия платформы «1С:Предприятие 8».

Дополнительные материалы:

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

Скачайте материалы и учебную версию на странице , раскройте архив и следуйте инструкциям по установке Интернет-конференция для начинающих разработчиков.

Глава 1. Механизм запросов

  • Как хранятся данные в «1С:Предприятии»
  • Исходные таблицы для запросов
  • Язык запросов «1С:Предприятия»
    • Реальные таблицы
    • Виртуальные таблицы
  • Язык запросов «1С:Предприятия»
    • Общая схема выполнения запросов
    • Синтаксис текста запросов
    • Примеры использования языка запросов для получения данных из одной таблицы
    • Примеры использования языка запросов для получения данных из нескольких таблиц

Глава 2. Работа с запросами во встроенном языке

  • Конструктор запроса
  • Создание простого запроса
  • Связи источников запроса
  • Объединение запросов
  • Создание пакетного запроса, использующего временную таблицу
  • Выполнение запросов из встроенного языка
    • Создание запроса
    • Передача параметров в запрос
    • Получение выборки из результата запроса
    • Обход выборки из результата запроса
    • Обработка результатов запроса с помощью конструктора запроса
    • Выгрузка результата запроса в таблицу или дерево значений
    • Использование временных таблиц с помощью встроенного языка
    • Примеры решения различных задач с использованием запросов

Глава 3. Решение прикладных задач

  • Хранение информации
    • Регистры сведений
    • Планы видов характеристик
  • Учет движения средств
    • Регистры накопления
  • Бухгалтерский учет
    • Планы счетов
    • Планы видов характеристик – виды субконто
    • Регистры бухгалтерии
  • Сложные периодические расчеты
    • Планы видов расчета
    • Регистры расчета

Cкачиваемые архивы содержат файлы электронной книги:

  • 1C_QueryLanguage.epub* для чтения на устройствах, поддерживающих цветные изображения;

  • 1C_QueryLanguageBWReaders.epub* для чтения на устройствах с черно-белыми экранами;

  • 1С_QueryLanguage.pdf (формат А5).

После оплаты Вы можете скачать любой из них или все сразу.

Adobe Digital Editions

Электронный аналог печатного издания «Язык запросов «1С:Предприятия 8» (ISBN 978-5-9677-1987-5, М.: ООО «1С-Паблишинг», 2013; артикул печатной книги по прайс-листу фирмы «1С»: 4601546108029).

ООО «1С-Паблишинг», 2013
© Оформление. ООО «1С-Паблишинг», 2013
Все права защищены.
Материалы предназначены для личного индивидуального использования приобретателем.
Запрещено тиражирование, распространение материалов, предоставление доступа по сети к материалам без письменного разрешения правообладателей.
Разрешено копирование фрагментов программного кода для использования в разрабатываемых прикладных решениях.

Системные требования:

  • Программа для чтения файлов в формате.epub*
    *Файлы.epub на компьютере рекомендуется читать с использованием программы для чтения Adobe Digital Editions . При чтении с помощью других программ не рекомендуется использовать режим просмотра, предусматривающий показ двух страниц одновременно – в связи с большим количеством изображений возможно некорректное отображение.

  • Программа Adobe Reader для чтения файлов в формате pdf

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

* Файлы.epub на компьютере рекомендуется читать с использованием программы для чтения Adobe Digital Editions. При чтении с помощью других программ не рекомендуется использовать режим просмотра, предусматривающий показ двух страниц одновременно – в связи с большим количеством изображений возможно некорректное отображение.

Чем скачиваемые товары лучше?

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

Скорость скачивания зависит только от возможностей вашего подключения, менеджеры закачки поддерживаются;

При возникновении проблем с получением покупки вы можете обратиться к нашим онлайн-консультантам;

Внимание! Перед вами ознакомительная версия урока, материалы которого могут быть неполными.

Войдите на сайт как ученик

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

Язык запросов 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. Незаполненные реквизиты составного типа имеют значение

Цель курса: дать слушателям целостное представление о языке запросов платформы «1С:Предприятие 8» - одного из наиболее важных механизмов встроенного языка системы. В курсе рассматриваются языковые конструкции: предназначение каждой конструкции и ее синтаксис. Каждая конструкция используется в учебно-практической задаче. Это, в свою очередь, в дальнейшем при практической работе позволит разработчику обоснованно выбирать те или иные конструкции языка запросов, тем самым повышая эффективность программного кода.

Таким образом, данный курс предназначен для разработчиков, желающих освоить язык запросов платформы 1С:Предприятие 8.

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

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

В стоимость очного дневного курса включено:

  • 3 дня с 10:00 до 17:00
  • методические материалы
  • обеды, кофе-брейки

В стоимость очного вечернего курса включено:

  • 6 вечеров с 18:40 до 21:40
  • методические материалы
  • кофе-брейки
  • свидетельство 1С-Учебного центра №3

В стоимость WEB-курса включено:

  • 6 недель курса, 5 вебинаров с преподавателем
  • свидетельство 1С-Учебного центра №3 (при условии выполнения практики)

В стоимость очного курса-погружения включено:

  • 5 дней с 10:00 до 17:00 или 9 вечеров с 18:30 по 21:30
  • конспект, наушники
  • обеды, кофе-брейки
  • доступ на 2 года к обновляемым видеоматериалам после окончания курса
  • свидетельство 1С-Учебного центра №3

В стоимость он-лайн трансляции включено:

  • он-лайн трансляция очного курса в режиме вебинара, 3 дня с 10:00 до 17:00 по мск времени
  • методическое пособие в печатном виде (заранее отправляется почтой России)
  • свидетельство 1С-Учебного центра №3

Форматы обучения

Очное дневное

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

Продолжительность: 24 академических часа

WEB-обучение

Что это за формат: Предлагаемый формат сочетает многие преимущества дистанционного обучения с очной составляющей, представленной видеоматериалами и онлайн-консультациями.
WEB-курс состоит из видеороликов, практических задач и вебинаров с преподавателям. Ко всем материалам курса предоставляется круглосуточный доступ через Интернет – можно заниматься в удобное время. Курс разделен на занятия. В течение занятия изучаются материалы по текущей теме, выполняются практикумы, задаются вопросы преподавателю. В конце каждого занятия проводится вебинар, на котором преподаватель разбирает все поступившие вопросы, типовые ошибки, объясняет правильное решение. Запись вебинаров доступна в портале. Таким образом проходят несколько занятий одно за другим. В конце проводится итоговая самостоятельная работа и итоговый вебинар.

Продолжительность: 6 недель

Что это за формат:


Продолжительность: 40 академических часов

Онлайн-трансляция

Что это за формат: Онлайн-трансляция – это обучение в форме он-лайн вебинара, которые стремительно набирают популярность в нашей стране. Вместо специальных видеопособий, вы получаете «живую» лекцию, транслируемую через Интернет. Тем самым достигается максимальная естественность подачи материала, аналогичная обычному очному обучению – но исчезает проблема необходимости личного присутствия в учебном центре. Отличие от очного обучения состоит только в отсутствии прямого взаимодействия с аудиторией и преподавателем.

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

Продолжительность: 24 академических часа

Что это за формат: Очный курс-погружение - формат, сочетающий в себе все плюсы очного обучения, дистанционных технологий и индивидуального обучения. Занятия проходят в оборудованном учебном классе, Вы самостоятельно изучаете материалы курса (пошаговые видеоролики) и выполняете практикумы. При этом в аудитории находится преподаватель, который готов в любой момент ответить на вопрос и помочь с решением практических задач, а также проверить правильность их выполнения.
Преимущества – индивидуальные консультации преподавателя по Вашим вопросам, подходящий лично для Вас темп прохождения материала.
Все это дает более глубокую проработку материала курса.
Этот курс возможно пройти со своего рабочего места с полным эффектом присутствия преподавателя там, где ученик! Если эта возможность Вас заинтересовала – позвоните нам!

Продолжительность: 40 академических часов

Программа курса

  1. Основные конструкции языка запросов платформы "1С:Предприятие 8"
    • Зачем нужен язык запросов?
    • Представление совокупностей объектов информационной базы в виде двумерных таблиц
    • Типы данных полей таблиц языка запросов
    • Учебная информационная база
    • Обработка "Консоль запросов"
    • Создание файла хранения списка запросов
    • Общие характеристики языка запросов Платформы
    • Первый запрос, самый простой
    • Какие прикладные объекты представляются таблицами языка запросов
    • Явное задание списка полей выборки
    • Комментарии в языке запросов
    • Псевдонимы полей и таблиц
    • Выражения в языке запросов
      • Выражения в списке полей выборки
      • Условные выражения в языке запросов. Оператор ВЫБОР
      • Фильтрация результатов запроса. Операция ГДЕ
      • Логические выражения в языке запросов
      • Параметры в языке запросов
      • Встроенные функции в выражениях языка запросов
      • Задание в запросе значений предопределенных данных конфигурации. Функция ЗНАЧЕНИЕ()
    • Групповые операции в языке запросов
      • Группировка по значению поля и агрегатные функции
      • Отбор по значению результата агрегатной функции: операция ИМЕЮЩИЕ
    • Упорядочивание записей результата запроса
    • Автоупорядочивание результата запроса
    • Получение первых N записей результата запроса. Операция ПЕРВЫЕ
    • Получение неповторяющихся комбинаций значений полей результата запроса. Операция РАЗЛИЧНЫЕ
  2. Выборка из нескольких источников данных
    • Простая задача: извлечение данных, хранящихся в таблицах разных объектов конфигурации
    • Декартово произведение (или "картезиан") множеств записей таблиц - источников данных
    • Решение поставленной задачи наложением условия на картезиан
    • Операция ВНУТРЕННЕЕ СОЕДИНЕНИЕ таблиц - источников данных
      • Операция ВНУТРЕННЕЕ СОЕДИНЕНИЕ как современная форма записи условия формирования отношения
      • Коммутативность операции ВНУТРЕННЕЕ СОЕДИНЕНИЕ
      • Соединения в запросе многих таблиц
    • Операция ЛЕВОЕ СОЕДИНЕНИЕ языка запросов
      • Задача: нахождение документов прихода, по которым нет оплат
      • Отличие операции ЛЕВОЕ СОЕДИНЕНИЕ от операции ВНУТРЕННЕЕ СОЕДИНЕНИЕ
      • Тип данных языка запросов NULL - отсутствие в поле результата запроса какого- либо значения
      • Оператор ЕСТЬ NULL и функция ЕСТЬNULL()
    • Операция ПРАВОЕ СОДИНЕНИЕ языка запросов
    • Операция ПОЛНОЕ СОЕДИНЕНИЕ языка запросов
    • Операция разыменования поля ссылочного типа
    • Обращение к табличной части объекта как к таблице - источнику данных. Поле Ссылка таблицы, представляющей табличную часть
    • Обращение к табличной части объекта в списке полей выборки
    • Вложенные запросы
    • Объединение результатов нескольких запросов
      • Запрос-объединение. Операция ОБЪЕДИНИТЬ
      • Заглушка ПУСТАЯТАБЛИЦА
    • Некоторые дополнительные операторы языка запросов
      • Оператор ВЫРАЗИТЬ
      • Логический оператор ССЫЛКА
      • Логический оператор В() с подзапросом в качестве параметра
  3. Расчет итогов в запросе
    • Получение итоговых записей в результате запроса - операция ИТОГИ
    • Итоги по нескольким измерениям
    • Представление результата запроса с итогами в виде многоуровневой (древовидной) структуры
    • Общие итоги
    • Итоги по иерархии
  4. Практическая работа с языком запросов
    • Виртуальные таблицы регистров
      • Таблицы языка запросов для регистров - физическая таблица и виртуальные таблицы
      • Синтаксис обращения к виртуальным таблицам. Параметры виртуальных таблиц
      • Виртуальные таблицы регистра накопления
      • Виртуальные таблицы регистра бухгалтерии
      • Некоторые распространенные ошибки обращения к виртуальным таблицам
      • Виртуальные таблицы периодического регистра сведений - СрезПервых и СрезПоследних
      • Особенности задания условий на значения полей для виртуальной таблицы регистра сведений
    • Работа с запросами на встроенном языке Платформы 8
      • Предварительный обзор объектной модели разработки и выполнения запросов во встроенном языке
      • Внешняя обработка РазработкаЗапросов.epf
      • Объект Запрос
      • Объект РезультатЗапроса
      • Объект ВыборкаИзРезультатаЗапроса
      • Второй параметр метода Выбрать()
      • Третий параметр метода Выбрать()
      • Временные таблицы и пакетные запросы
  5. Внешние источники (внешние базы) данных
    • Характеристика работы с внешними источниками данных
    • Подготовительная работа
    • Инфология dBase-базы данных "Поставки детских игрушек"
    • Создание описания источника данных ODBC в операционной системе Windows
    • Создание и настройка объекта Внешний источник данных
    • Установление соединения и просмотр таблиц внешнего источника данных в режиме 1С:Предприятие
    • Интерактивная установка соединения
    • Программная установка соединения
    • Установление информационно-логической связи (отношений) на таблицах внешнего источника данных. Превращение внешнего источника во внешнюю базу данных
    • Задание отношений на таблицах делает источник данных базой данных
    • Настройка объектных таблиц - объявление таблиц внешнего источника данных типообразующими (ссылочными)
    • Выборка данных из внешней базы запросом
    • Внешние базы данных на основе книг MS Excel
  6. Некоторые практические приемы построения запросов
    • Логический вентиль. Возможность отключения проверки условия в запросе при пустом значении параметра
    • Коррелированный запрос. Задача получения N последних курсов валют
    • Тэта-соединение. Задача получения курса валюты на множество разных дат
    • Получение иерархических результатов по таблицам неиерархических объектов. Задача построения полного дерева зависимости видов расчета
    • Выборка данных из объекта типа...Список по установленным отборам при помощи объекта ПостроительЗапроса
  7. Краткая справка по работе с Конструктором запроса
Читать всю программу

Наполнение курса

Всего ресурсов (Web-страниц и страниц с видео)

Видео материалы (всего минут)

Практикумы для самостоятельного выполнения

Занятие 1. Начальные возможности языка запросов, функции, агрегирование, сортировка

8 (средней сложности)

Занятие 2. Выборка из нескольких источников данных

6 (средней сложности)

Занятие 3. Расчет итогов в запросе, виртуальные таблицы регистров

3 (средней сложности)

Занятие 4. Работа с запросами на встроенном языке, внешние источники (внешние базы) данных

4 (средней сложности)

Занятие 5. Некоторые практические приемы построения запросов

2 (сложных)

Технические требования:
- доступ в Интернет
(проверить свой канал связи Вы сможете подключившись к ),
- наличие платформы 1С:Предприятие 8.2 для отработки практических заданий курса.
Достаточно «1С:Предприятие 8.2» Версия для обучения программированию.