- •Часть 3. Раздел 2.
- •1. Понятие документа, документопотока и документооборота
- •2. Назначение Системы Документационного Обеспечения Управления (сдоу)
- •3. Состав функций и процедур сдоу
- •4. Состав Организационно-Распорядительных документов (орд)
- •5. Содержание процедуры составления орд
- •6. Содержание процедуры получения и передачи потоков документов
- •7. Состав и содержание процедуры контроля исполнения документов
- •8. Содержание процедуры формирования дел и сдачи дел в архив
- •9. Принципы, методы и средства разработки электронной системы управления документооборотом.
- •10. Понятие электронного документа (эд).
- •11. Виды эд
- •12. Состав операций проектирования эд.
- •13. Системы электронного документооборота (сэд): назначение, архитектура, классификация и критерии выбора.
- •14. Рынок сэд в России
- •15. Классификация корпоративных информационных систем (кис).
- •16. Базовые методологии управления, реализуемые в кис: mps, sic, mrp, mrpii, erp.
- •17. Отечественный рынок кис.
- •18. Проблемы внедрения кис.
- •19. Конфигурирование в системе «1с:Предприятие».
- •20. Создание прикладных объектов конфигурации «1с:Предприятие».
- •21. Встроенный язык программирования платформы «1с:Предприятие».
- •22. Управляющие конструкции встроенного языка программирования платформы «1с:Предприятие». Если
- •Попытка
- •23. Архитектура системы «1с:Предприятие 8.1»
- •24. Прикладной объект конфигурации Справочник: свойства, структура, приемы программирования
- •25. Прикладной объект конфигурации Документ: свойства, структура, приемы программирования.
- •26. Прикладной объект конфигурации регистр (сведений, накопления, бухгалтерии, расчета): свойства, структура, приемы программирования.
- •27. Язык запросов платформы «1с:Предприятие».
27. Язык запросов платформы «1с:Предприятие».
Запросы – это один из базовых механизмов «1С:Предприятия» наряду со встроенным языком, который позволяет читать и обрабатывать данные, хранящиеся в базе. Для составления запросов «1С:Предприятие» использует собственный язык, основанный на SQL. Основные конструкции языка запросов
Рассмотрим самые важные и интересные операторы языка запросов 1С.
ВЫБРАТЬ (SELECT)
В языке запросов 1С предприятия 8 любой запрос начинается с ключевого слова ВЫБРАТЬ. В языке 1С нет конструкций UPDATE, DELETE, CREATE TABLE, INSERT, эти манипуляция производятся в объектной технике. Предназначение его — только чтение данных.
Например:
ВЫБРАТЬ
ТекущийСправочник.Наименование
ИЗ
Справочник.Номенклатура КАК ТекущийСправочник
Запрос вернёт таблицу с наименованиями номенклатуры.
Рядом с конструкцией ВЫБРАТЬ, можно встретить ключевые слова ДЛЯ ИЗМЕНЕНИЯ, РАЗРЕШЕННЫЕ, РАЗЛИЧНЫЕ, ПЕРВЫЕ …
ДЛЯ ИЗМЕНЕНИЯ — блокирует записи таблицы на время транзакции (не актуально для управляемых блокировок). Подробнее в статье ДЛЯ ИЗМЕНЕНИЯ в запросас 1С.
РАЗРЕШЕННЫЕ — выбирает только записи из таблицы, на которые есть права у текущего пользователя.
РАЗЛИЧНЫЕ — означает, что в результат не попадет дублирующих строк.
ПЕРВЫЕ n — в языке 1С 8.3, запрос отберет только n первых записей.
ВЫБОР (CASE)
Очень часто данная конструкция недооценивается программистами. Пример её использования:
ВЫБРАТЬ
ТекущийСправочник.Наименование,
ВЫБОР
КОГДА ТекущийСправочник.Услуга ТОГДА
«Услуга»
ИНАЧЕ
«Товар»
КОНЕЦ КАК ВидНоменклатуры
ИЗ
Справочник.Номенклатура КАК ТекущийСправочник
Пример возвратит в поле «ВидНоменклатуры» текстовое значение — «Товар» или «Услуга».
ГДЕ (WHERE)
Конструкция языка запросов 1C, позволяющая наложить отбор на получаемые данные. Учтите, что от сервера система получает все данные, а только потом отбираются по данному параметру.
Пример:
ВЫБРАТЬ
Справочник.Наименование
ИЗ
ТекущийСправочник.Номенклатура КАК ТекущийСправочник
ГДЕ ТекущийСправочник.Услуга = ИСТИНА
В примере мы отбираем записи, у которых значения реквизита «Услуга» установлено в положение «Истина». В данном примере можно было бы обойтись и таким условием:
«ГДЕ Услуга»
По сути, мы отбираем строки, у которых выражение после ключевого слова равно «Истина».
В выражениях можно использовать прямые условия:
ГДЕ Код = «005215»
Можно в условиях использовать обращение к предопределенным элементам и перечислениям:
ГДЕ ТипНоменклатуры= Значение(Перечисление.ТипыНоменклатуры.Товар)
Значения времени могут указываться следующим образом:
ГДЕ ДатаПоступления > ДАТАВРЕМЯ(2012,01,01):
Чаще всего условия указываются в виде параметров, передаваемых в запрос:
ГДЕ НоменклатурнаяГруппа= &НоменклатурнаяГруппа
Условие можно наложить на тип реквизита, если он составного типа:
ГДЕ РегистрНакопления.Регистратор ССЫЛКА Документ.ПоступленияТоваров
Если необходимо ограничивать отбор из списка значений или массива, можно поступить следующим образом:
ГДЕ РегистрНакопления.Регистратор В (&СписокДокументовДляОтбора)
Условие может быть и сложное, состоящее из нескольких условий:
ГДЕ ДатаПоступления > ДАТАВРЕМЯ(2012,01,01) И НоменклатурнаяГруппа= &НоменклатурнаяГруппа И НЕ Услуга
СГРУППИРОВАТЬ ПО (GROUP BY)
Конструкция языка запросов 1С 8.2, используемая для группировки результата.
Например:
ВЫБРАТЬ
ПоступлениеТоварвУслугTовары.Товар,
СУММА(ПоступлениеТоварвУслугTовары.Количество) КАК Количество,
СУММА(ПоступлениеТоварвУслугTовары.Сумма) КАК Сумма
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоварвУслугTовары
СГРУППИРОВАТЬ ПО
ПоступлениеТоварвУслугTовары.Товар
Данный запрос просуммирует все поступления по сумме и количеству в разрезе номенклатуры.
Помимо ключевого слова СУММА, можно использовать другие агрегатные функции: КОЛИЧЕСТВО, КОЛИЧЕСТВО РАЗНЫХ, МАКСИМУМ, МИНИМУМ, СРЕДНЕЕ.
ИМЕЮЩИЕ (HAVING)
Конструкция, о которой часто забывают, но она очень важна и полезна. Она позволяет указать отбор в виде агрегатной функции, этого нельзя сделать в конструкции ГДЕ.
Например:
ВЫБРАТЬ
ПоступлениеТоваровУслугТовары.Товар,
СУММА(ПоступлениеТоваровУслугТовары.Количество) КАК Количество,
СУММА(ПоступлениеТоваровУслугТовары.Сумма) КАК Сумма
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
СГРУППИРОВАТЬ ПО
ПоступлениеТоваровУслугТовары.товар
ИМЕЮЩИЕ
СУММА(ПоступлениеТоваровУслугТовары.Количество) > 5
Так мы отберем количество товаров, которых поступило более 5 штук.
ЗНАЧЕНИЕ()
В запросе 1C ЗНАЧЕНИЕ () можно использовать для указания предопределенных значений, таких как значения перечисления, пустую ссылку или значение предопределенного элемента (справочника, плана счетов, ПВХ и т.д).
Например:
ГДЕ Банк = Значение(Справочник.Банки.ПустаяСсылка)
или
ГДЕ ВидНоменклатуры = Значение(Справочник.ВидыНоменклатуры.Товар)
или
ГДЕ ТипНоменклатуры= Значение(Перечисление.ТипыНоменклатуры.Услуга)
ТИП в запросе
Тип данных можно проверить следующим образом с помощью функций ТИП() и ТИПЗНАЧЕНИЯ() или с помощью логический оператора ССЫЛКА.
Пример:
ГДЕ ТИПЗНАЧЕНИЯ(Проект.Ссылка) <> ТИП(Справочник.Проект)
или
ГДЕ Проект.Ссылка ССЫЛКА Справочник.Проект
ВЫРАЗИТЬ()
Оператор выразить служит для преобразования данных в запросе.
Синтаксис: ВЫРАЗИТЬ(<Выражение> КАК <Тип значения>)
С помощью него, можно преобразовать строковые значения в дату, или ссылочные в строковые данные и так далее.
Среди практического применения оператора Выразить() очень часто используется для преобразования полей неограниченной длинны, потому что поля неограниченной длинный нельзя отбирать, группировать и тд. Если такие поля не преобразовывать, вы получите ошибку Нельзя сравнивать поля неограниченной длины и поля несовместимых типов.
Пример:
ВЫБРАТЬ
КонтактнаяИнформация.Объект,
ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(150)) КАК Представление
ИЗ
РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
СГРУППИРОВАТЬ ПО
ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(150)),
КонтактнаяИнформация.Объект
ЕСТЬNULL (ISNULL)
Достаточно полезная функция языка запросов 1С, которая проверяет значение в записи, и, если оно равно NULL, то позволяет заменить на своё значение. Чаще всего используется при получении виртуальных таблиц остатков и оборотов что бы скрыть NULL и поставить понятный 0 (ноль).
Пример:
ЕСТЬNULL(НалогиПредМесяца.ПримененнаяЛьготаФСС, 0)
Такая функция с ЕСТЬNULL, при отсутствии значения вернет ноль, что позволит избежать ошибки.
СОЕДИНЕНИЕ (JOIN)
Соединения бывают 4 типов: ЛЕВОЕ, ПРАВОЕ, ПОЛНОЕ, ВНУТРЕННЕЕ.
ЛЕВОЕ и ПРАВОЕ СОЕДИНЕНИЕ
Соединения используются для связи двух таблиц по определенному условию. Особенность при ЛЕВОМ СОЕДИНЕНИИ в том, что мы берём первую указанную таблицу полностью и привязываем по условию вторую таблицу. Поля второй таблицы, которые не удалось привязать по условию, заполняются значением NULL.
Например:
ВЫБРАТЬ
Клиенты.Ссылка КАК Контрагент,
Банки.Ссылка КАК Банк
ИЗ
Справочник.Контрагенты КАК Клиенты
ЛЕВОЕ СОЕДИНЕНИЕ
Справочник.Банки КАК Банки
ПО
Клиенты.Наименование = Банки.Наименование
Вернет всю таблицу Контрагентов и заполнит поле «Банк», лишь в тех местах, где будет соблюдаться условие «Контрагенты.Наименование = Банки.Наименование». Если условие не соблюдается, в поле Банк будет установлено NULL.
ПРАВОЕ СОЕДИНЕНИЕ, в языке 1С 8.3, абсолютно аналогично ЛЕВОМУ соединению, за исключением одного отличия — в ПРАВОМ СОЕДИНЕНИИ «главная» таблица — вторая, а не первая.
ПОЛНОЕ СОЕДИНЕНИЕ
ПОЛНОЕ СОЕДИНЕНИЕ отличается от левого и правого тем, выводит все записи из двух таблиц, соединяет лишь те, которые может соединить по условию.
Например:
ВЫБРАТЬ
Клиенты.Ссылка КАК Клиенты,
Банки.Ссылка КАК Банк
ИЗ
Справочник.Контрагенты КАК Клиенты
ПОЛНОЕ СОЕДИНЕНИЕ
Справочник.Банки КАК Банки
ПО
Клиенты.Наименование = Банки.Наименование
Язык запросов вернет обе таблицы полностью, лишь по выполненному условию соединить записи. В отличие от левого/правого соединения возможно появления NULL в двух полях.
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ отличается от полного тем, что выводит только те записи, которые смогли соединить по заданному условию.
Например:
ВЫБРАТЬ
Клиенты.Ссылка КАК Клиенты,
Банки.Ссылка КАК Банк
ИЗ
Справочник.Контрагенты КАК Клиенты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
Справочник.Банки КАК Банки
ПО
Клиенты.Наименование = Банки.Наименование
Данный запрос вернет только строки, в которых у банка и контрагента будет одинаковое наименование.
