Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
25 ноя 2024, 04:09

Запрос для отчета

Автор ArtProg, 13 апр 2015, 08:47

0 Пользователей и 1 гость просматривают эту тему.

ArtProg

Здравствуйте, уважаемые форумчане!
Я новичек в 1с, перешел с SQL. При построении запроса для отчета возникли сложности, хотя не знаю почему. Подобные вещи делал на SQL 100500 раз.
Существуют 2 документа "ВыдачаЗайма" и "ВозвратЗайма". Оба документа проводятся в регистре накопления. Причем, документ ВозвратЗайма заполняется на основании ВыдачаЗайма и в ВозвратЗайма хранится ссылка на ВыдачаЗайма.
Запрос: "Выбрать те документы ВыдачаЗайма, по которым займ не выплачен". Т.е нужно получить разность.
Текст запроса:
ВЫБРАТЬ
   ОстаточныеСредства.Регистратор.Ссылка
ИЗ
   РегистрНакопления.ОстаточныеСредства КАК ОстаточныеСредства
ГДЕ
   ОстаточныеСредства.ВидДвижения = &ВидДвиженияРасход И
   (НЕ ОстаточныеСредства.Регистратор.Ссылка В
   (ВЫБРАТЬ
      ОстаточныеСредстваВложенный.Регистратор.ДокументВыдачи
   ИЗ
      РегистрНакопления.ОстаточныеСредства КАК ОстаточныеСредстваВложенный
   ГДЕ
      ОстаточныеСредстваВложенный.ВидДвижения = &ВидДвиженияПриход))

Т.е подзапросом выводим все ВыдачаЗайма, по которым выплачено, а в основном запросе выводим те, которые не принадлежал возвращаемому подзапросом множеству.
Прикрепил скрин регистра. На нем видно, что запрос должен в итоге вернуть ссылку на документ №3, а он возвращает все три документа ВыдачаЗайма. Подзапрос работает правильно(возвращает №1 и №2), почему основной возвращает все 3 никак не пойму второй день.
Помогите кто сможет, завис на такой мелочи капитально... Спасибо

LexaK

странно, это какое-же у вас знание СКЛ? если не можете такой элементарный запрос построить?
задача-то сводится к следующей
у вас есть две таблицы, надо из первой таблицы выбрать все записи у которых нет какого-то соответствия в другой таблице?

Запрос выглядел примерно бы так, это Схема,
Выбрать
Таб1.Поле1,
...
из Таб1
левое соединение Таб2
по Таб1.Поле2 = Таб2.Поле5
где Таб2.Поле5 Есть Null

таким запросом выбираете все строки из таблицы1, которым нет соответствия в таблице2

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

да еще
- не надо запрос в запросе писать (без острой необходимости)
- поле Регистратор - это уже ссылка, НЕ НАДО ПИСАТЬ -Регистратор.Ссылка
если помогло нажмите: Спасибо!

cska-fanat-kz

да достаточно взять не основную таблицу регистра а таблицу остатков!
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

ArtProg

Цитата: LexaK от 13 апр 2015, 10:35
странно, это какое-же у вас знание СКЛ? если не можете такой элементарный запрос построить?
...
да еще
- не надо запрос в запросе писать (без острой необходимости)
- поле Регистратор - это уже ссылка, НЕ НАДО ПИСАТЬ -Регистратор.Ссылка
Знания - базовые. Да, я понимаю не оптимальность запроса, тут больше спортивный интерес - запрос составлен правильно, но работает неправильно. Проблема крылась в типизации полей ссылок.
Спасибо, все грамонтно обьясняете. Про "Регистратор.ссылка" уяснил)
Добавлено: 14 апр 2015, 09:06


Цитата: cska-fanat-kz от 13 апр 2015, 10:35
да достаточно взять не основную таблицу регистра а таблицу остатков!
В таблице остатков отсутствует поле регистратор.
[

cska-fanat-kz

Цитата: ArtProg от 14 апр 2015, 09:04В таблице остатков отсутствует поле регистратор.

кто сказал?
добавляем в настройках вирт таблицы периодичность "Регистратор" и вуаля.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

ArtProg

Цитата: cska-fanat-kz от 14 апр 2015, 09:40
Цитата: ArtProg от 14 апр 2015, 09:04В таблице остатков отсутствует поле регистратор.

кто сказал?
добавляем в настройках вирт таблицы периодичность "Регистратор" и вуаля.
Спасибо!

Похожие темы (5)

Рейтинг@Mail.ru

Поиск