Что это за запрос?1 с 8 требуется выбрать последние версии

Доброго времени суток, коллеги! Много раз на нашем сайте обсуждалась тема запросов в 1С, например, как получить всех родителей элемента справочника одним запросом. В этой статье вы увидите еще много разных примеров запросов, которые помогут вам решать повседневные задачи. Вот, посмотрите.

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

Разберем на примере демо-базы УТ11, найдем последние документы прихода номенклатуры по регистру «ТоварыНаСкладе». Под последним документом в контексте данной задачи может пониматься как документ с наибольшей датой документа, так и последний документ, введенный пользователем.

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

ВЫБРАТЬ
ТоварыНаСкладахОборотыНоменклатура КАК Номенклатура
ТоварыНаСкладахОборотыРегистратор КАК Регистратор
ТоварыНаСкладахОборотыВНаличииПриход КАК ВНаличииПриход
РегистрНакопленияТоварыНаСкладахОбороты Регистратор Номенклатура КАК ТоварыНаСкладахОбороты
ГДЕ
ТоварыНаСкладахОборотыВНаличииПриход
УПОРЯДОЧИТЬ Регистратор УБЫВ
АВТОУПОРЯДОЧИВАНИЕ

ВЫБРАТЬ ПЕРВЫЕ ТоварыНаСкладахОборотыНоменклатура КАК Номенклатура
ТоварыНаСкладахОборотыРегистратор КАК Регистратор
ТоварыНаСкладахОборотыВНаличииПриход КАК ВНаличииПриход
РегистрНакопленияТоварыНаСкладахОбороты Регистратор Номенклатура КАК ТоварыНаСкладахОбороты
ГДЕ
ТоварыНаСкладахОборотыВНаличииПриход
УПОРЯДОЧИТЬ Регистратор УБЫВ
АВТОУПОРЯДОЧИВАНИЕ

Без автоупорядочивания сортировка произойдет без учета даты документа, по уникальному идентификатору. В этом случае, документы введенные позже приходного ордера ЦУ-33 задним числом встанут в начало выборки. Уберем «АВТОУПОРЯДОЧИВАНИЕ» из запроса и посмотрим результат.

Если воспользоваться методом получения даты создания объекта из GUID, то в первом случае 3339428b-6656-11e0-af2a-0015e9b8c48d создан 14.04.2011, во втором b2c7cfa2-6ca9-11e0-af30-0015e9b8c48d — 22.04.2011. То есть второй способ можно применять, если нужно определить последний документ прихода, введенный пользователем.

В случае, когда нужно определить последние документы для перечня номенклатуры конструкция «ВЫБРАТЬ ПЕРВЫЕ» нам уже не подходит. Поэтому, чтобы свернуть выборку по регистратору, будем использовать функцию МАКСИМУМ.

ВЫБРАТЬ
ТоварыНаСкладахОборотыНоменклатура КАК Номенклатура
ТоварыНаСкладахОборотыРегистратор КАК Регистратор

РегистрНакопленияТоварыНаСкладахОбороты Регистратор КАК ТоварыНаСкладахОбороты
ГДЕ
ТоварыНаСкладахОборотыВНаличииПриход
УПОРЯДОЧИТЬ Номенклатура
Регистратор УБЫВ
АВТОУПОРЯДОЧИВАНИЕ

ВЫБРАТЬ
ТоварыНаСкладахОборотыНоменклатура КАК Номенклатура
МАКСИМУМТоварыНаСкладахОборотыРегистратор КАК Регистратор

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

УПОРЯДОЧИТЬ Номенклатура
Регистратор УБЫВ
АВТОУПОРЯДОЧИВАНИЕ

Как видно из результата, функция МАКСИМУМ сворачивает выборку по GUID объекта. То есть, этот способ не подходит для случая, когда нам нужно получить последний документ, исходя из даты документа. Получать перечень номенклатуры и потом в цикле для каждой позиции получать последний документ тоже не наш вариант, замедляется быстродействие. Поэтому перепишем запрос, добавим временную таблицу, в которой свернем выборку по максимуму даты регистратора. Эту дату и будем использовать для соединения с основной выборкой. В последнем запросе так же сворачиваем выборку по максимуму регистратора, но теперь мы получим последний введенный документ с учетом последней даты документа.

ВЫБРАТЬ
ТоварыНаСкладахОборотыНоменклатура КАК Номенклатура
ТоварыНаСкладахОборотыРегистратор КАК Регистратор
ТоварыНаСкладахОборотыВНаличииПриход КАК ВНаличииПриход
РегистрНакопленияТоварыНаСкладахОбороты Регистратор КАК ТоварыНаСкладахОбороты
ГДЕ
ТоварыНаСкладахОборотыВНаличииПриход
УПОРЯДОЧИТЬ Номенклатура
Регистратор УБЫВ
АВТОУПОРЯДОЧИВАНИЕ

ВЫБРАТЬ
ТоварыНаСкладахОборотыНоменклатура КАК Номенклатура
МАКСИМУМТоварыНаСкладахОборотыРегистраторДата КАК Дата
ПОМЕСТИТЬ времДата
РегистрНакопленияТоварыНаСкладахОбороты Регистратор КАК ТоварыНаСкладахОбороты
ГДЕ
ТоварыНаСкладахОборотыВНаличииПриход
СГРУППИРОВАТЬ ТоварыНаСкладахОборотыНоменклатура

ВЫБРАТЬ
ТоварыНаСкладахОборотыНоменклатура КАК Номенклатура
МАКСИМУМТоварыНаСкладахОборотыРегистратор КАК Регистратор
времДата КАК времДата
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопленияТоварыНаСкладахОбороты Регистратор КАК ТоварыНаСкладахОбороты
времДатаНоменклатура ТоварыНаСкладахОборотыНоменклатура
времДатаДата ТоварыНаСкладахОборотыРегистраторДата
ГДЕ
ТоварыНаСкладахОборотыВНаличииПриход
СГРУППИРОВАТЬ ТоварыНаСкладахОборотыНоменклатура

УПОРЯДОЧИТЬ Номенклатура
АВТОУПОРЯДОЧИВАНИЕ

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

привет, подскажите в запросе есть ссылка на документ и дата, как выбрать самый последний док из кучи строк регистра бухгалтерии, функция МАКСИМУМ?

В поиск епта. Через день такое спрашивают

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

СГРУППИРОВАТЬ ПО
   Промежуточная_ТЗ. Контрагент,
   Промежуточная_ТЗ. Счет

УПОРЯДОЧИТЬ ПО
   Документ УБЫВ

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

ну ты по дате попробуй упорядочить чтоле

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

УПОРЯДОЧИТЬ ПО
   ДокументДата УБЫВ

Читайте также:  Где в "1С:ЗУП 8" (ред. 3) указать данные Фонда социального страхования для отражения в отчетности? :: Отвечает специалист 1С

поля:
датадокумента         документ
31.10.2012 23:59:59  операция 00001 от 31.01.2012:23 59 59

Регистратор в Сгруппировать

И что тебя удивляет? Смотри

Не читать, не проснулся еще

МАКСИМУМ(ХозрасчетныйОбороты. Регистратор. Дата)
и
МАКСИМУМ(ХозрасчетныйОбороты. Регистратор)
вообще-то не связаны др/др

ДатаКон чему равно?

Выбрать первый с конца

Максимум по ссылке — это не последний документ.

а если сначала выбрать макс(дата) и потом макс(Ссылка)?

сначала получаются максимальные даты и уже для этих дат находятся документы

может так
ВЫБРАТЬ ПЕРВЫЕ 1
ИЗ

УПОРЯДОЧИТЬ ПО
   Дата УБЫВ

я ж говорю сначала получает документы по максимальной даты и потом из этой даты выбирает макс(Ссылка). почему фигня?

а номер то причем?

моя ветка дошла до 100 постов точно по этому вопросу 🙂

помент времени? в запросе?

Ладно уж, сорри тс, — потрите мои посты — это тяпница виновата 🙂

Если «без шуток», то в запросе «скрытая» ошибка. Желая получить дату и ссылку на последний документ — нельзя использовать максимум по дате и максимум по ссылке. Вы можете получить дату из одного документа и ссылку на другой документ.

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ТаблицаДвижений. Номенклатура,
   МАКСИМУМ(ТаблицаДвижений. Дата) КАК Дата
ПОМЕСТИТЬ ТаблицаДат
ИЗ
   ТаблицаДвижений КАК ТаблицаДвижений

СГРУППИРОВАТЬ ПО
   ТаблицаДвижений. Номенклатура
;

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

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

это ответ на

что так можно? 🙂

Грац — у меня мозг взорвался от просветления при чтении поста.

PS: я говорил про конкретный запрос, а не «в общем виде».

вы гений,спасибо!:) переделал под свой запрос все получилось!!

хотя на самом деле в

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

имхо самый правильный вариант:
получить в запросе  отсортированную по Номенклатуре и МоментуВремени (убыв) таблицу ТАБЛ1
Номенклатура Регистратор МоментВремени
Пронумеровать строки в запросе.

Полученную ТАБЛ1 сгруппировать по Номенклатуре и Максимум по НомеруСтроки и сунуть в ТАБЛ2

Соединить ТАБЛ2 и ТАБЛ1 по номеру строки и получить регистратор (напримере соединения в

)

хотя гоню. вариант в

ничем не отличается от

🙂

Нуф-Нуф, не парься. Регистратором в регистре накопления могут быть документы различного вида и тогда сортировка или максимум по ссылке  — информация «не об чём» в контексте поиска последнего документа.

да нашлась строка результата запроса в которой некорректно вывелся последний документ, в осв это документ не последний а предпоследний т.е даты у 2х документов совпадают 31.10.2012 23 59 59

Момент времени — это дата документа + номер таблицы вида документа + уникальный идентификатор документа. Ссылка — это номер таблицы + идентификатор. Так?

Имхо: сортировки по дате и ссылке с отбором первых/последних (от сортировки зависит) — достаточно.

Я не прав?

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

СГРУППИРОВАТЬ ПО
   ХозрасчетныйОбороты. Счет,
   ХозрасчетныйОбороты. Субконто1
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   МАКСИМУМ(ХозрасчетныйОбороты. Регистратор) КАК Регистратор,
   ХозрасчетныйОбороты. Счет,
   ХозрасчетныйОбороты. Субконто1 КАК Субконто1
ИЗ
   РегистрБухгалтерии. Хозрасчетный. Обороты(, , Регистратор, , , , , ) КАК ХозрасчетныйОбороты
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПоследниеДокументыНаДату КАК ПоследниеДокументыНаДату
       ПО ХозрасчетныйОбороты. Счет = ПоследниеДокументыНаДату. Счет
           И ХозрасчетныйОбороты. Субконто1 = ПоследниеДокументыНаДату. Субконто1
           И ХозрасчетныйОбороты. Регистратор. Дата = ПоследниеДокументыНаДату. РегистраторДата

УПОРЯДОЧИТЬ ПО
   Субконто1,
   Регистратор

но почему-то этот запрос медленее отрабатывает по сравнению с тем если получить все документы по оборотам 60.01(в случае с программной обработкой результата запроса)

ВЫБРАТЬ
   ХозрасчетныйОбороты. Регистратор КАК Регистратор,
   ХозрасчетныйОбороты. Счет,
   ХозрасчетныйОбороты. Субконто1 КАК Субконто1
ИЗ
   РегистрБухгалтерии. Хозрасчетный. Обороты(, &КонДата, Регистратор, , , , , ) КАК ХозрасчетныйОбороты
ГДЕ
   ХозрасчетныйОбороты. Счет = &Счет

СГРУППИРОВАТЬ ПО
   ХозрасчетныйОбороты. Счет,
   ХозрасчетныйОбороты. Субконто1,
   ХозрасчетныйОбороты. Регистратор

на моих тестовых базах разница в 3-5 сек.

12.

Luck_DMST

Сейчас в теме

13.

Tatitutu

Сейчас в теме

Luck_DMST, ты ждал ??? 7 лет. Сидел что ль ? тьфу, тьфу,тьфу

15.

Luck_DMST

Сейчас в теме

Ахахаха))) Ну нет конечно)) Ну смешно же было увидеть моё сообщение по прошествии стольких лет, не правда ли? 😉 😉

16.

akR00b

Сейчас в теме

Luck_DMST, аахахах в голос)

17.

Luck_DMST

Сейчас в теме

Да дело вообще в том что автор в

написал что выложит нам, как доделает)) а ведь так и не выложил, теперь уже вопрос в том, а доделал ли он? 🙂

18.

fzt

Сейчас в теме

Luck_DMST, не, не доделал. Вообще люди вместо ника использующие И. Ф. в большинстве — странные.

Читайте также:  Выделить ошибку на сайте и отправить и сообщить об ошибках и опечатках на сайте

14.

пользователь

Сообщение было скрыто модератором.

19.

adnvl

Сейчас в теме

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

20.

Vitek

Сейчас в теме

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

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

21.

adnvl

Сейчас в теме

нет так вываливаются все предидущие поступления с самого начала

22.

Tatitutu

Сейчас в теме

смотри в

23.

adnvl

Сейчас в теме

что не так??

ВЫБРАТЬ РАЗЛИЧНЫЕ
ВложенныйЗапрос. Ссылка,
ВложенныйЗапрос. Номенклатура,
ВложенныйЗапрос. Дата,
ВложенныйЗапрос. КоличествоПриход,
ВложенныйЗапрос. КоличествоПриходКг
ИЗ
(ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1
ПоступлениеТоваровУслугТовары. Ссылка. Ссылка КАК Ссылка,
ПоступлениеТоваровУслугТовары. Номенклатура. Ссылка КАК Номенклатура,
ПоступлениеТоваровУслугТовары. Ссылка. Дата КАК Дата,
ПоступлениеТоваровУслугТовары. Количество КАК КоличествоПриход,
ПоступлениеТоваровУслугТовары. Количество * ПоступлениеТоваровУслугТовары. Номенклатура. ЕдиницаХраненияОстатков. Коэффициент КАК КоличествоПриходКг
ИЗ
Документ. ПоступлениеТоваровУслуг. Товары КАК ПоступлениеТоваровУслугТовары
ГДЕ
ПоступлениеТоваровУслугТовары. Ссылка. Дата <= &ДатаКон
И ПоступлениеТоваровУслугТовары. Ссылка. Проведен = ИСТИНА

УПОРЯДОЧИТЬ ПО
Дата УБЫВ) КАК ВложенныйЗапрос
ГДЕ
ВложенныйЗапрос. Номенклатура В ИЕРАРХИИ(&Номенклатура)

24.

Поручик

Сейчас в теме

Попробуй ещё
Простые примеры разработки.
Как по состоянию на заданную дату по регистру «ОстаткиНаСкладе» найти последний документ «ПоступлениеТоваровУслуг», по которому приходила номенклатура?

25.

Vitek

Сейчас в теме

В запросах ковыряться лень, уж извини 🙂

А что там не так?
См.

, правильную наводку дал.

Я бы все таки партионный учет использовал.

26.

adnvl

Сейчас в теме

Всем спасибо ! Тема закрыта 🙂

27.

Vitek

Сейчас в теме

Решение то выложи, для потомков 🙂

28.

adnvl

Сейчас в теме

29.

Volfy

Сейчас в теме

30.

lextor

Сейчас в теме

31.

Nigmatul

Сейчас в теме

Добрый день, если ведутся партии можно из регистра партий получить. Запрос к докам не кашерно )

32.

dima_home

Сейчас в теме

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

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

Как запросом для документа найти все подчинённые ему документы?

Воспользуемся следующим запросом:

Запрос Запрос
ЗапросТекст

ЗапросУстановитьПараметр Накладная
РезультатЗапроса ЗапросВыполнить

Выборка РезультатЗапросаВыбрать

ВыборкаСледующий
СФ ВыборкаСсылкаПолучитьОбъект
СФДокументОснование
СФЗаписатьРежимЗаписиДокументаЗапись

Как составить запрос к табличной части документа?

Особенность этого запроса в том, что мы обращаемся к табличной части «Товары». Поэтому к реквизитам документа «ЧекККМ» мы обращаемся через свойство «Ссылка». Только в этом случае мы сможем получить строки табличной части документа. Если не указать свойство «Ссылка», то появится ошибка, примерно такого вида:

Срез последних на каждую дату в запросе

Эта статья перенесена в Книгу знаний v.2 http://wiki.mista.ru/doku.php?id=1c:v8:srez_poslednix_na_kazhduju_datu_v_zaprose

Существует несколько способов получить нужные данные.

Как запросом получить все подчиненные документы?

С помощью Функции «ПолучитьСписокВводимыхДокументовНаОсновании» получим список документов, которые вводятся на основании заданного документа:

// Параметры: ДокументПоиска: Тип — Метаданные объекта
ПолучитьСписокВводимыхДокументовНаОснованииДокументПоиска
СписокДокументов СписокЗначений
Документ МетаданныеДокументы
ДокументВводитсяНаОснованииСодержитДокументПоиска
СписокДокументовДобавитьДокументИмя ДокументСиноним

СписокДокументов

Теперь, на основании списка документов найдем все подчинённые заданному документу:

ПолучитьПодчиненныеДокументы
СписокЗаполнения ПолучитьСписокВводимыхДокументовНаОснованииСсылкаНаОбъектМетаданные
ТекстЗапросаПоСтатусу
ЭлементСписка СписокЗаполнения
ПустаяСтрокаТекстЗапросаПоСтатусу
ТекстЗапросаПоСтатусу ТекстЗапросаПоСтатусу

ТекстЗапросаПоСтатусу ТекстЗапросаПоСтатусу
ПустаяСтрокаТекстЗапросаПоСтатусу

ЭлементСпискаЗначение » КАК Док

Запрос Запрос
ЗапросУстановитьПараметр СсылкаНаОбъект
ЗапросТекст ТекстЗапросаПоСтатусу

ЗапросВыполнитьВыгрузитьВыгрузитьКолонку

Выведем полученные документы:

ВывестиПодчиненныеДокументы
Массив ПолучитьПодчиненныеДокументы
Эл Массив
СообщитьЭл

Система компоновки данных

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

Для этого создадим набор данных «Документы» — запрос:

Для того, чтобы получить информацию о курсах валют, добавим второй набор данных — запрос «Курсы
валют»:

Главное здесь — параметры связи. При соединении наборов данных, если указан параметр, СКД передает в подчиненный набор (в нашем случае — запрос «Курсы валют») параметры, указанные в соединении.
Значениями параметров будут значения соответствующих полей набора-источника.

Как сравнить строки в запросе?

Вот нестандартный вариант синтаксиса оператора ВЫБОР:

ВЫБРАТЬ
ВЫБОР ДЕНЬНЕДЕЛИ(ДАТАВРЕМЯ(2015, 4, 1))
КОГДА 1
ТОГДА «Понедельник»
КОГДА 2
ТОГДА «Вторник»
КОГДА 3
ТОГДА «Среда»
КОГДА 4
ТОГДА «Четверг»
КОГДА 5
ТОГДА «Пятница»
КОГДА 6
ТОГДА «Суббота»
ИНАЧЕ «Воскресенье»
КОНЕЦ КАК ДеньНедели

В этом примере показано, как с помощью опрератора ВЫБОР выводить текстовое представление дня недели.

Читайте также:  Фонд социального страхования кандалакша

Как запросом получить последний по дате документ?

Сортируем документы по убыванию даты и используем конструкцию «ВЫБРАТЬ ПЕРВЫЕ 1»:

Код 1C v 8.х

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

А как сделать запрос, который вернёт последние документы по всем контрагентам, а не по одному конкретному?

Используем функцию МАКСИМУМ в запросе для решения данной задачи.

Этот запрос выбирает последние документы по всем контрагентам.

Как в запросе проверить поле на пустую ссылку?

НачислениеСсылка
УвольнениеСсылка КАК Ссылка1
НачислениеДокументОснование
УвольнениеДокументОснование КАК ДокументОснование1

ДокументНачислениеЗарплатыРаботникамОрганизаций КАК Начисление
СОЕДИНЕНИЕ
ДокументУвольнениеИзОрганизаций КАК Увольнение

НачислениеДокументОснование УвольнениеДокументОснование

НачислениеДокументОснованиеЗНАЧЕНИЕДокументТабельУчетаРабочегоВремениОрганизацииПустаяСсылка

Заметим, что в параметре пишем «Документ», а не «Документы» и «ПустаяСсылка» без скобок.

Непосредственно в запросе

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

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

В 8.1. вместо обращения к курсам валют удобнее и надежнее использовать временную таблицу с нужными
датами, потому что не во всех организациях ведут курсы валют ежедневно. 😉

Для общего развития:
Что есть срез последних в платформе?

ВЫБРАТЬ
Рег. Период,
Рег. Измерение,
Рег. Ресурс
ИЗ
РегистрСведений. ПериодическийРегистр. СрезПоследних(&Дата) КАК Рег

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

2. По позиции регистратора
В данном случае нужно еще раз обернуть выборку

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

Как посчитать возраст по дате рождения в запросе 1С8?

Использовать функцию языка запроса РАЗНОСТЬДАТ:

ВЫБРАТЬ
СотрудникиСотрудник
СотрудникиПол
РАЗНОСТЬДАТСотрудникиДатаРождения &ТекДата, ГОД) КАК Возраст

Сотрудники КАК Сотрудники
ПОЛНОЕ СОЕДИНЕНИЕ ПриемНаРаботу КАК ПриемНаРаботу
СотрудникиСотрудник ПриемНаРаботуСотрудник
ПОЛНОЕ СОЕДИНЕНИЕ Пенсия КАК Пенсия
СотрудникиСотрудник ПенсияСотрудник

Как правильно обрабатывать значения NULL в запросе 1С8?

В запросе значения типа NULL образуются в результате соединений (ЛЕВОЕ, ПРАВОЕ), когда элементу из одной таблицы по условию не находится соответствующего элемента из другой. Значение типа NULL имею специфические особенности:

ГДЕ
ГТД. Количество = NULL

ГТД. Количество+300 КАК Поле1

ЕСТЬNULL(ГТД. Количество, 0)+300 КАК Поле1

ГДЕ
ГТД. Регистратор. Организация IS NOT NULL

ГДЕ
NOT ГТД. Регистратор. Организация IS NULL

Как в запросе убрать фильтр на значение параметра?

Например, нам нужно вывести данные о продажах, отфильтровав их по значению в поле формы «Товар», если в этом поле выбран нужный нам товар. И если товар не выбран, то вывести данные по всем товарам. Пример запроса такой:

Запрос Запрос

ЗапросТекст

ЗапросУстановитьПараметр ДатаНачала
ЗапросУстановитьПараметр ДатаОкончания
ЗапросУстановитьПараметр Товар

Рассмотрим четыре способа, как избавится от фильтра в запросе.

ПОДПИСКА

Бывает, что в консоли запрос отрабатывается нормально, но в рабочем режиме падает с ошибкой «Значение не является значением объектного типа (Сумма)». При этом отладчик показывает, что в коллекции «ВыборкаИзРезультатаЗапроса» находиться сумма со значением «Ошибка чтения значения». При отладке выдается «Ошибка чтения значения», если в функции написать так:

Результат Запрос
Выборка РезультатВыбрать
Выборка

Ошибка чтения значений результата запроса, возникает из-за того, что в выборке еще не осуществлена установка на первый элемент выборки. Для этого существует метод «Следующий()» коллекции «ВыборкаИзРезультатаЗапроса». Поэтому надо писать так:

ВыборкаСледующий
ДоговорКонтрагента ВыборкаНаименование

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

Для этого можно использовать объект ПостроительОтчета:

ТабДок ТабличныйДокумент
Результат РезультатЗапросаВыгрузить

Построитель ПостроительОтчета
ПостроительИсточникДанных ОписаниеИсточникаДанныхРезультат
ПостроительВывестиТабДок

ТабДокЗаписать

Как в запросе 1с8 установить условие проверки периода на конец дня?

В запросе воспользуемся функцией КОНЕЦПЕРИОДА(&ДатаКонец, ДЕНЬ), она приведет дату к виду «23:59:59».

Запрос Запрос
ЗапросТекст

ЗапросУстановитьПараметр ДатаКонец
ЗапросУстановитьПараметр ДатаНачала
РезультатЗапроса Запрос

Оцените статью
ФСС Help
Добавить комментарий