1с значение счета в запросе 1с

ЗНАЧЕНИЕ() в запросе

ЗНАЧЕНИЕ() в запросе

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

Как же работать с предопределенными значениями?

В коде модулей обращение к таким элементам производится через менеджер объекта, например:

В языке запросов это производится аналогично, но с использованием функции запросов ЗНАЧЕНИЕ().
Функция значение предназначена для получения ссылки на предопределенные значения справочников, перечислений, планов видов характеристик, планов счетов, планов видов расчетов, точек маршрутов бизнес процессов, к системным перечислениям.

[qu_note note_color=»#fdc8b2″]При этом имя вида объекта указывается в запросе в единственном числе.[/qu_note]

Примеры использования ЗНАЧЕНИЕ():

Ссылка справочника:

Для проверки на пустое значение справочника:

Справочник.Контрагенты КАК Контрагенты

Для получения перечислений:

Ссылка.Владелец КАК Контрагент

Справочник.ДоговорыКонтрагентов КАК Договор

ИЛИ Договор.ВидДоговора = ЗНАЧЕНИЕ (Перечисление.ВидыДоговоровКонтрагентов.ПустаяСсылка)

План видов характеристик:

Счет в плане счетов:

ВЫБРАТЬ ЗНАЧЕНИЕ (ПланСчетов.Хозрасчетный.Товары) КАК СчетТоваров

Системные перечисления:

ВЫБРАТЬ
ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) КАК Расход,
ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) КАК Приход,
ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Дебет) КАК Дебет,
ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Кредит) КАК Кредит,
ЗНАЧЕНИЕ(ВидСчета.Активный) КАК Активный,
ЗНАЧЕНИЕ(ВидСчета.Пассивный) КАК Пассивный,
ЗНАЧЕНИЕ(ВидСчета.АктивноПассивный) КАК АктивноПассивный

Аналог функции ЗначениеЗаполнено() в запросе

ГДЕ НЕ ОсновнойДоговорКонтрагента = ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагента.ПустаяСсылка)

ГДЕ НЕ ОсновнойДоговорКонтрагента В (ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагента.ПустаяСсылка), НЕОПРЕДЕЛЕНО, NULL,»»)

То есть, если значение не пустое или не входит в список пустых, его можно считать заполненным.

Ошибки при использовании ЗНАЧЕНИЕ()

При неверном синтаксисе параметра функции возникает ошибка «Неверные параметры».

Недопустима передача в ЗНАЧЕНИЕ параметра вот так:

Выйдет ошибка «Ожидается параметр»:

Ozhidaetsya parametr

Функция как раз предназначена для ухода от параметров для предопределенных в метаданных ссылках.

Не требуется указание параметра функции в кавычках: это вызовет ошибку «Ожидается имя»

Ozhidaetsya imya v ZNACHENIE

Хороший дизайнер строит ясную структуру. А плохой напихивает все, что знает, и не может привести к своей мысли зрителя.

Источник

Описание языка запросов 1С 8

Язык запросов 1С — одно из основных отличий между версиями 7.7 и 8. Одним из важнейших пунктов в изучении 1С-программирования является язык запросов. В 1С 8.3 запросы — самый мощный и эффективный инструмент получения данных. Язык запросов позволяет в удобном виде получать информацию из базы данных.

Сам синтаксис очень сильно напоминает классический T-SQL, за исключением того, что в 1С с помощью языка запросов можно только получать данные, используя конструкцию Выбрать(select). Язык поддерживает и более сложные конструкции, например, вложенные запросы (запрос в запросе). Запросы в 1С 8 можно составлять как на кириллице, так и на латинице.

В статье я постараюсь рассказать про основные ключевые слова в языке запросов 1С:

А так же небольшие хитрости языка 1С, применяя которые вы сможете оптимально построить текст запроса.

Для отладки запросов в системе 1С предусмотрен специальный инструмент — консоль запросов. Увидеть описание и скачать его можно по ссылке — консоль запросов 1C.

zapros

Основные конструкции языка запросов

Рассмотрим самые важные и интересные операторы языка запросов 1С.

ВЫБРАТЬ (SELECT)

В языке запросов 1С предприятия 8 любой запрос начинается с ключевого слова ВЫБРАТЬ. В языке 1С нет конструкций UPDATE, DELETE, CREATE TABLE, INSERT, эти манипуляции производятся в объектной технике. Предназначение его — только чтение данных.

ВЫБРАТЬ
ТекущийСправочник.Наименование
ИЗ
Справочник.Номенклатура КАК ТекущийСправочник

Запрос вернёт таблицу с наименованиями номенклатуры.

Рядом с конструкцией ВЫБРАТЬ можно встретить ключевые слова ДЛЯ ИЗМЕНЕНИЯ, РАЗРЕШЕННЫЕ, РАЗЛИЧНЫЕ, ПЕРВЫЕ

ДЛЯ ИЗМЕНЕНИЯ — блокирует записи таблицы на время транзакции (не актуально для управляемых блокировок). Подробнее в статье ДЛЯ ИЗМЕНЕНИЯ в запросах 1С.

РАЗРЕШЕННЫЕ — выбирает только записи из таблицы, на которые есть права у текущего пользователя.

РАЗЛИЧНЫЕ — означает, что в результат не попадет дублирующих строк.

ПЕРВЫЕ n — в языке 1С 8.3 запрос отберет только n первых записей.

ВЫБОР (CASE)

Очень часто данная конструкция недооценивается программистами. Пример её использования:

КОГДА ТекущийСправочник.Услуга ТОГДА

КОНЕЦ КАК ВидНоменклатуры

Справочник.Номенклатура КАК ТекущийСправочник

Пример возвратит в поле «ВидНоменклатуры» текстовое значение — «Товар» или «Услуга».

ГДЕ (WHERE)

Конструкция языка запросов 1C, позволяющая наложить отбор на получаемые данные. Учтите, что от сервера система получает все данные, а только потом они отбираются по данному параметру.

ВЫБРАТЬ
Справочник.Наименование
ИЗ
ТекущийСправочник.Номенклатура КАК ТекущийСправочник
ГДЕ ТекущийСправочник.Услуга = ИСТИНА

В примере мы отбираем записи, у которых значение реквизита «Услуга» установлено в положение «Истина». В данном примере можно было бы обойтись и таким условием:

По сути, мы отбираем строки, у которых выражение после ключевого слова равно «Истина».

В выражениях можно использовать прямые условия:

С помощью оператора «ЗНАЧЕНИЕ()» в условиях использовать обращение к предопределенным элементам и перечислениям в запросе 1С:

ГДЕ ТипНоменклатуры= Значение(Перечисление.ТипыНоменклатуры.Товар)

Значения времени могут указываться следующим образом:

ГДЕ ДатаПоступления > ДАТАВРЕМЯ(2012,01,01):

Чаще всего условия указываются в виде параметров, передаваемых в запрос:

ГДЕ НоменклатурнаяГруппа= &НоменклатурнаяГруппа

Условие можно наложить на тип реквизита, если он составного типа:

ГДЕ РегистрНакопления.Регистратор ССЫЛКА Документ.ПоступленияТоваров

Если необходимо ограничивать отбор из списка значений или массива, можно поступить следующим образом:

ГДЕ РегистрНакопления.Регистратор В (&СписокДокументовДляОтбора)

Условие может быть и сложное, состоящее из нескольких условий:

ГДЕ ДатаПоступления > ДАТАВРЕМЯ(2012,01,01) И НоменклатурнаяГруппа= &НоменклатурнаяГруппа И НЕ Услуга

СГРУППИРОВАТЬ ПО (GROUP BY)

Конструкция языка запросов 1С, используемая для группировки результата.

ВЫБРАТЬ
ПоступлениеТоваровУслугTовары.Товар,
СУММА(ПоступлениеТоваровУслугTовары.Количество) КАК Количество,
СУММА(ПоступлениеТоваровУслугTовары.Сумма) КАК Сумма
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугTовары

СГРУППИРОВАТЬ ПО
ПоступлениеТоваровУслугTовары.Товар

Данный запрос просуммирует все поступления по сумме и количеству в разрезе номенклатуры.

Помимо ключевого слова СУММА можно использовать другие агрегатные функции: КОЛИЧЕСТВО, КОЛИЧЕСТВО РАЗНЫХ, МАКСИМУМ, МИНИМУМ, СРЕДНЕЕ.

ИМЕЮЩИЕ (HAVING)

Конструкция, о которой часто забывают, но она очень важна и полезна. Она позволяет указать отбор в виде агрегатной функции, этого нельзя сделать в конструкции ГДЕ.

Пример использования ИМЕЮЩИЕ в запросе 1С:

ВЫБРАТЬ
ПоступлениеТоваровУслугТовары.Товар,
СУММА(ПоступлениеТоваровУслугТовары.Количество) КАК Количество,
СУММА(ПоступлениеТоваровУслугТовары.Сумма) КАК Сумма
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары

СГРУППИРОВАТЬ ПО
ПоступлениеТоваровУслугТовары.товар

Так мы отберем количество товаров, которых поступило более 5 штук.

ЗНАЧЕНИЕ()

В запросе 1C ЗНАЧЕНИЕ () можно использовать для указания предопределенных значений, таких как значения перечисления, пустую ссылку или значение предопределенного элемента (справочника, плана счетов, ПВХ и т.д).

ГДЕ Банк = Значение(Справочник.Банки.ПустаяСсылка)

ГДЕ ВидНоменклатуры = Значение(Справочник.ВидыНоменклатуры.Товар)

ГДЕ ТипНоменклатуры= Значение(Перечисление.ТипыНоменклатуры.Услуга)

ТИП в запросе

Тип данных можно проверить следующим образом: с помощью функций ТИП() и ТИПЗНАЧЕНИЯ() или с помощью логического оператора ССЫЛКА.

ГДЕ ТИПЗНАЧЕНИЯ(Проект.Ссылка) <> ТИП(Справочник.Проект)

ГДЕ Проект.Ссылка ССЫЛКА Справочник.Проект

ВЫРАЗИТЬ()

Оператор Выразить в запросах 1С служит для преобразования типов данных.

Синтаксис: ВЫРАЗИТЬ( КАК )

С помощью него можно преобразовать строковые значения в дату или ссылочные в строковые данные и так далее.

В практическом применении оператор Выразить() очень часто используется для преобразования полей неограниченной длины, потому что поля неограниченной длины нельзя отбирать, группировать и тд. Если такие поля не преобразовывать, Вы получите ошибку Нельзя сравнивать поля неограниченной длины и поля несовместимых типов.

ВЫБРАТЬ
КонтактнаяИнформация.Объект,
ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(150)) КАК Представление
ИЗ
РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация

СГРУППИРОВАТЬ ПО
ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(150)),
КонтактнаяИнформация.Объект

ЕСТЬNULL (ISNULL)

Достаточно полезная функция языка запросов 1С, которая проверяет значение в записи, и если оно равно NULL, то позволяет заменить на своё значение. Чаще всего используется при получении виртуальных таблиц остатков и оборотов, чтобы скрыть NULL и поставить понятный 0 (ноль).

Такая функция языка запросов 1С ЕСТЬNULL при отсутствии значения вернет ноль, что позволит избежать ошибки.

СОЕДИНЕНИЕ (JOIN)

Соединения бывают 4 типов: ЛЕВОЕ, ПРАВОЕ, ПОЛНОЕ, ВНУТРЕННЕЕ.

ЛЕВОЕ и ПРАВОЕ СОЕДИНЕНИЕ

Соединения используются для связи двух таблиц по определенному условию. Особенность при ЛЕВОМ СОЕДИНЕНИИ в том, что мы берём первую указанную таблицу полностью и привязываем по условию вторую таблицу. Поля второй таблицы, которые не удалось привязать по условию, заполняются значением NULL.

Пример левого соединения в запросе 1С:

ВЫБРАТЬ
Клиенты.Ссылка КАК Контрагент,
Банки.Ссылка КАК Банк
ИЗ
Справочник.Контрагенты КАК Клиенты
ЛЕВОЕ СОЕДИНЕНИЕ
Справочник.Банки КАК Банки
ПО
Клиенты.Наименование = Банки.Наименование

Вернет всю таблицу Контрагентов и заполнит поле «Банк» лишь в тех местах, где будет соблюдаться условие «Контрагенты.Наименование = Банки.Наименование». Если условие не соблюдается, в поле Банк будет установлено NULL.

ПРАВОЕ СОЕДИНЕНИЕ в языке 1С 8.3 абсолютно аналогично ЛЕВОМУ соединению, за исключением одного отличия: в ПРАВОМ СОЕДИНЕНИИ «главная» таблица — вторая, а не первая.

ПОЛНОЕ СОЕДИНЕНИЕ

ПОЛНОЕ СОЕДИНЕНИЕ отличается от левого и правого тем, что выводит все записи из двух таблиц, соединяет лишь те, которые может соединить по условию.

ВЫБРАТЬ
Клиенты.Ссылка КАК Клиенты,
Банки.Ссылка КАК Банк
ИЗ
Справочник.Контрагенты КАК Клиенты

ПОЛНОЕ СОЕДИНЕНИЕ
Справочник.Банки КАК Банки

ПО
Клиенты.Наименование = Банки.Наименование

Язык запросов вернет обе таблицы полностью лишь по выполненному условию Соединить записи. В отличие от левого/правого соединения возможно появления NULL в двух полях.

ВНУТРЕННЕЕ СОЕДИНЕНИЕ

ВНУТРЕННЕЕ СОЕДИНЕНИЕ отличается от полного тем, что выводит только те записи, которые смогли соединить по заданному условию.

ВЫБРАТЬ
Клиенты.Ссылка КАК Клиенты,
Банки.Ссылка КАК Банк

ИЗ
Справочник.Контрагенты КАК Клиенты

ВНУТРЕННЕЕ СОЕДИНЕНИЕ
Справочник.Банки КАК Банки

ПО
Клиенты.Наименование = Банки.Наименование

Данный запрос вернет только строки, в которых у банка и контрагента будет одинаковое наименование.

Заключение

Это лишь небольшая часть синтаксиса из языка запросов 1С 8, в дальнейшем я попробую рассмотреть более подробно некоторые моменты, показать способы оптимизации запросов и многое другое!

Рубрикатор статей сайта по запросам

Видеокурс по 1С

Если вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые виде):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Источник

Проверка счетов учета номенклатуры в документах одним запросом для БП 2.0

Запрос проверяет счета учета номенклатуры в документах (например реализации товаров услуг) за период.
Суть такая же как и в стандартном механизме получения счетов учета, проверка 5-ти вложенностей номенклатуры, + склад + вид склада + организация. по таким же приоритетам. повторяет функцию получения счетов учета, но только одним запросом.

пользуйтесь. перенос строк не работает при копипасте в HyperText Transfer Protocol

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

ИНДЕКСИРОВАТЬ ПО Организация, Склад, ТипСклада, Номенклатура, НомерСтроки, Ссылка ;

//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ИсточникИерархии.Номенклатура КАК Номенклатура, ИсточникИерархии.НоменклатураРодитель КАК НоменклатураРодитель, СУММА(ВЫБОР КОГДА ЕСТЬNULL(ИсточникИерархии.НоменклатураПорядок1, ИСТИНА) = ИСТИНА ТОГДА 0 ИНАЧЕ 1 КОНЕЦ + ВЫБОР КОГДА ЕСТЬNULL(ИсточникИерархии.НоменклатураПорядок2, ИСТИНА) = ИСТИНА ТОГДА 0 ИНАЧЕ 2 КОНЕЦ + ВЫБОР КОГДА ЕСТЬNULL(ИсточникИерархии.НоменклатураПорядок3, ИСТИНА) = ИСТИНА ТОГДА 0 ИНАЧЕ 3 КОНЕЦ + ВЫБОР КОГДА ЕСТЬNULL(ИсточникИерархии.НоменклатураПорядок4, ИСТИНА) = ИСТИНА ТОГДА 0 ИНАЧЕ 4 КОНЕЦ + ВЫБОР КОГДА ЕСТЬNULL(ИсточникИерархии.НоменклатураПорядок5, ИСТИНА) = ИСТИНА ТОГДА 0 ИНАЧЕ 5 КОНЕЦ + ВЫБОР КОГДА ЕСТЬNULL(ИсточникИерархии.НоменклатураПорядок6, ИСТИНА) = ИСТИНА ТОГДА 0 ИНАЧЕ 6 КОНЕЦ + ВЫБОР КОГДА ЕСТЬNULL(ИсточникИерархии.НоменклатураПорядок7, ИСТИНА) = ИСТИНА ТОГДА 0 ИНАЧЕ 7 КОНЕЦ) КАК ПриоритетНоменклатура ПОМЕСТИТЬ НоменклатураСоответствие ИЗ (ВЫБРАТЬ Документы.Номенклатура КАК Номенклатура, Документы.Номенклатура КАК НоменклатураРодитель, Документы.Номенклатура КАК НоменклатураПорядок7, NULL КАК НоменклатураПорядок6, NULL КАК НоменклатураПорядок5, NULL КАК НоменклатураПорядок4, NULL КАК НоменклатураПорядок3, NULL КАК НоменклатураПорядок2, NULL КАК НоменклатураПорядок1 ИЗ Документы КАК Документы ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Документы.Номенклатура, Документы.Номенклатура.Родитель, NULL, Документы.Номенклатура.Родитель, NULL, NULL, NULL, NULL, NULL ИЗ Документы КАК Документы ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Документы.Номенклатура, Документы.Номенклатура.Родитель.Родитель, NULL, NULL, Документы.Номенклатура.Родитель.Родитель, NULL, NULL, NULL, NULL ИЗ Документы КАК Документы ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Документы.Номенклатура, Документы.Номенклатура.Родитель.Родитель.Родитель, NULL, NULL, NULL, Документы.Номенклатура.Родитель.Родитель.Родитель, NULL, NULL, NULL ИЗ Документы КАК Документы ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Документы.Номенклатура, Документы.Номенклатура.Родитель.Родитель.Родитель.Родитель, NULL, NULL, NULL, NULL, Документы.Номенклатура.Родитель.Родитель.Родитель.Родитель, NULL, NULL ИЗ Документы КАК Документы ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Документы.Номенклатура, Документы.Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель, NULL, NULL, NULL, NULL, NULL, Документы.Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель, NULL ИЗ Документы КАК Документы ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Документы.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяССылка), NULL, NULL, NULL, NULL, NULL, NULL, NULL ИЗ Документы КАК Документы) КАК ИсточникИерархии ГДЕ ЕСТЬNULL(ИсточникИерархии.НоменклатураРодитель, ИСТИНА) <> ИСТИНА

СГРУППИРОВАТЬ ПО ИсточникИерархии.Номенклатура, ИсточникИерархии.НоменклатураРодитель

ИНДЕКСИРОВАТЬ ПО Номенклатура, НоменклатураРодитель, ПриоритетНоменклатура ;

//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ НоменклатураСоответствие.Номенклатура КАК Номенклатура, СчетаУчетаНоменклатуры.Номенклатура КАК НоменклатураСчетаУчета, СчетаУчетаНоменклатуры.Организация КАК Организация, СчетаУчетаНоменклатуры.Склад КАК Склад, СчетаУчетаНоменклатуры.ТипСклада КАК ТипСклада, СчетаУчетаНоменклатуры.СчетУчета, СчетаУчетаНоменклатуры.СчетДоходовОтРеализации, СчетаУчетаНоменклатуры.СчетРасходовОтРеализации, СУММА(НоменклатураСоответствие.ПриоритетНоменклатура * 1000 + ВЫБОР КОГДА СчетаУчетаНоменклатуры.Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка) ТОГДА 0 ИНАЧЕ 1 КОНЕЦ * 500 + ВЫБОР КОГДА СчетаУчетаНоменклатуры.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.ПустаяСсылка) ТОГДА 0 ИНАЧЕ 1 КОНЕЦ * 300 + ВЫБОР КОГДА СчетаУчетаНоменклатуры.Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) ТОГДА 0 ИНАЧЕ 1 КОНЕЦ) КАК ПриоритетСтрока ПОМЕСТИТЬ СчетаУчетаСПриоритетами ИЗ НоменклатураСоответствие КАК НоменклатураСоответствие ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СчетаУчетаНоменклатуры КАК СчетаУчетаНоменклатуры ПО НоменклатураСоответствие.НоменклатураРодитель = СчетаУчетаНоменклатуры.Номенклатура ГДЕ (НЕ ЕСТЬNULL(СчетаУчетаНоменклатуры.Номенклатура, ИСТИНА) = ИСТИНА)

СГРУППИРОВАТЬ ПО СчетаУчетаНоменклатуры.Номенклатура, СчетаУчетаНоменклатуры.СчетУчета, НоменклатураСоответствие.Номенклатура, СчетаУчетаНоменклатуры.Склад, СчетаУчетаНоменклатуры.Организация, СчетаУчетаНоменклатуры.ТипСклада, СчетаУчетаНоменклатуры.СчетДоходовОтРеализации, СчетаУчетаНоменклатуры.СчетРасходовОтРеализации

ИНДЕКСИРОВАТЬ ПО ПриоритетСтрока, Номенклатура ;

//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Документы.Ссылка КАК Ссылка, Документы.НомерСтроки КАК НомерСтроки, Документы.Номенклатура КАК Номенклатура, МАКСИМУМ(СчетаУчетаСПриоритетами.ПриоритетСтрока) КАК ПриоитетСтрока ПОМЕСТИТЬ СчететаУчетаПоСтрокамДокументаСПриоритетом ИЗ Документы КАК Документы ЛЕВОЕ СОЕДИНЕНИЕ СчетаУчетаСПриоритетами КАК СчетаУчетаСПриоритетами ПО (Документы.Номенклатура = СчетаУчетаСПриоритетами.Номенклатура ИЛИ СчетаУчетаСПриоритетами.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) И (Документы.ТипСклада = СчетаУчетаСПриоритетами.ТипСклада ИЛИ СчетаУчетаСПриоритетами.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.ПустаяСсылка)) И (Документы.Организация = СчетаУчетаСПриоритетами.Организация ИЛИ СчетаУчетаСПриоритетами.Организация = ЗНАЧЕНИЕ(Справочник.организации.ПустаяССылка)) И (Документы.Склад = СчетаУчетаСПриоритетами.Склад ИЛИ СчетаУчетаСПриоритетами.Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка))

СГРУППИРОВАТЬ ПО Документы.Ссылка, Документы.НомерСтроки, Документы.Номенклатура

ИНДЕКСИРОВАТЬ ПО НомерСтроки, Ссылка, ПриоитетСтрока, Номенклатура ;

//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Источник.Ссылка КАК Ссылка, Источник.НомерСтроки, Источник.Номенклатура, Источник.СчетУчета, Источник.СчетДоходов, Источник.СчетРасходов, Источник.СчетУчетаДолженБыть, Источник.СчетДоходовДолженБыть, Источник.СчетРасходовДолженБыть, ВЫБОР КОГДА Источник.СчетУчета = Источник.СчетУчетаДолженБыть И Источник.СчетДоходов = Источник.СчетДоходовДолженБыть И Источник.СчетРасходов = Источник.СчетРасходовДолженБыть ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК ВсеХороше ИЗ (ВЫБРАТЬ Документы.Ссылка КАК Ссылка, Документы.НомерСтроки КАК НомерСтроки, Документы.Номенклатура КАК Номенклатура, Документы.СчетУчета КАК СчетУчета, Документы.СчетДоходов КАК СчетДоходов, Документы.СчетРасходов КАК СчетРасходов, ВЫРАЗИТЬ(СчетаУчетаСПриоритетами.СчетУчета КАК ПланСчетов.Хозрасчетный) КАК СчетУчетаДолженБыть, ВЫРАЗИТЬ(СчетаУчетаСПриоритетами.СчетДоходовОтРеализации КАК ПланСчетов.Хозрасчетный) КАК СчетДоходовДолженБыть, ВЫРАЗИТЬ(СчетаУчетаСПриоритетами.СчетРасходовОтРеализации КАК ПланСчетов.Хозрасчетный) КАК СчетРасходовДолженБыть ИЗ Документы КАК Документы ЛЕВОЕ СОЕДИНЕНИЕ СчететаУчетаПоСтрокамДокументаСПриоритетом КАК СчететаУчетаПоСтрокамДокументаСПриоритетом ЛЕВОЕ СОЕДИНЕНИЕ СчетаУчетаСПриоритетами КАК СчетаУчетаСПриоритетами ПО СчететаУчетаПоСтрокамДокументаСПриоритетом.ПриоитетСтрока = СчетаУчетаСПриоритетами.ПриоритетСтрока И СчететаУчетаПоСтрокамДокументаСПриоритетом.Номенклатура = СчетаУчетаСПриоритетами.Номенклатура ПО Документы.Ссылка = СчететаУчетаПоСтрокамДокументаСПриоритетом.Ссылка И Документы.НомерСтроки = СчететаУчетаПоСтрокамДокументаСПриоритетом.НомерСтроки) КАК Источник ИТОГИ МИНИМУМ(ВсеХороше) ПО Ссылка

Источник

1с значение счета в запросе 1с

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

Язык запросов 1С 8.3 для начинающих программистов: функция ЗНАЧЕНИЕ

Автор уроков и преподаватель школы: Владимир Милькин

Что ещё за перечисления и предопределенные данные, спросите вы. Давайте обо всём по порядку.

Перечисления

И если программист в режиме конфигурирования создал перечисление с именем Пол и значениями Мужской и Женский, то при написании программы он может быть уверен, что в дальнейшем значения этого перечисления не изменятся. Поэтому он может смело обращаться к этим значениям из кода.

Представьте, что будет, если он попытается для этих целей использовать справочник?

Во-первых, какой-нибудь пользователь возьмёт да и добавит какой-нибудь «Марсианский пол».

Во-вторых, другой пользователь возьмёт да и удалит один из уже имеющихся полов или имя ему поменяет.

А программа от этого сломается, потому что для её работы необходимо, чтобы было ровно два пола и именно с именами «Мужской» и «Женский».

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

Давайте рассмотрим пример такого перечисления в нашей базе «Гастроном». Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

0111

Вот оно наше перечисление с именем Пол. Какие значения оно может принимать?

0211

Всего два значения. С именами «Мужской» и «Женский». То что нам надо.

Где мы в дальнейшем можем использовать это перечисление? Ну, конечно, в справочнике Клиенты. Обратите внимание, что в его списке появился новый реквизит с именем Пол и типом Перечисление.Пол:

0311

Таким образом, при заполнении карточки клиента уже в режиме пользователя мы сможем в качестве пола клиента выбирать всего из двух значений Мужской и Женский:

049

059

Теперь давайте составим запрос, выбирающий клиентов и их пол из базы:

0610

А теперь давайте изменим запрос, чтобы остались только мужчины. Если мы попробуем написать что-то типа:

то ничего не получим:

079

Потому что к значениям перечисления так обращаться нельзя. К ним нужно обращаться используя функцию ЗНАЧЕНИЕ:

0810

Предопределенные данные

Я лучше покажу на примере, что такое предопределенные данные для справочников. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

В нашей базе «Гастроном» (в режиме пользователя) откройте справочник «Единицы измерения»:

0112

Вообще же, если какой-либо элемент справочника является предопределенным (то есть на нём стоит жёлтый кружочек), то это особенный элемент.

Во-первых, это означает, что элемент был создан ещё на этапе конфигурирования программистом (в нашем случае это элементы с кодами 1, 2 и 3).

А, во-вторых, это значит, что этот элемент очень важен для функционирования программы. Что на него (вернее на его предопределенное имя) завязан какой-то код в базе данных.

Именно поэтому просто удалить такой элемент не получится. Попробуйте пометить его на удаление:

0212

Давайте теперь перейдём в режим конфигурирования и посмотрим где же эти самые предопределенные элементы (в данном случае для справочника Единицы измерения) создаются:

0312

0410

Вот они все наши предопределенные элементы для справочника Единица измерения. Обратите внимание, что все предопределенные элементы имеют специальное имя, которое не отображается в режиме пользователя.

Вы спросите почему же было не сделать единицы измерения просто перечислением с элементами Тонна, Грамм и Пачка? А всё потому, что в данном случае нам важно, чтобы справочник единицы измерения всегда содержал какие-то определенные элементы (тонна, грамм и пачка), но в то же время мы не хотим запрещать пользователю добавлять какие-то свои элементы (килограмм, штука и так далее). Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Поэтому здесь безусловно больше подходят предопределенные элементы, чем перечисления.

А обращаться к нашим предопределенным элементам из запроса мы сможем используя уже знакомую нам функцию ЗНАЧЕНИЕ:

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • 1с значение по умолчанию для реквизита формы
  • 1с зкгу форма 14