Имя: Пароль:
1C
1С v8
Как выбрать данные из запроса, где уже посчитанны итоги?
0 Jack-Sun
 
23.09.11
11:36
Задача:
Проверить, по всем ли Счетам на оплату выставлены Реализации в полном объеме. На один Счет на оплату может приходится несколько Реализаций.
Видимое решение:
Выбрать все Реализации, и сгруппировать их по Счетам на оплату, просуммировав реквизит "СуммаДокумента" Реализаций и Сравнив их с "СуммойДокумента" Счета на оплату. Пользователю вывести только те, где общая сумма реализаций по счету отличается от суммы счета.
Как делаю:
Запросом выбираю счета и реализации, рассчитываю ИТОГИ Сумма(РеализацияСумма), Максимум(СчетСумма)
Проблема:
Как из получившейся таблицы запросом выбрать только те строки, где (РеализацияСумма - СчетСумма) <> 0 ?
Текст запроса:
ВЫБРАТЬ
   Счет.Ссылка КАК СчетСсылка,
   Счет.СуммаДокумента КАК СчетСумма,
   Реализация.Ссылка КАК РеализацияСсылка,
   Реализация.СуммаДокумента КАК РеализацияСумма
ИЗ
   Документ.РеализацияТоваровУслуг КАК Реализация
       ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю КАК Счет
       ПО Реализация.СчетНаОплатуПокупателю = Счет.Ссылка
       ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактураВыданный КАК СФ
       ПО (СФ.ДокументОснование = Реализация.Ссылка)
ГДЕ
   (Реализация.СчетНаОплатуПокупателю = ЗНАЧЕНИЕ(Документ.СчетНаОплатуПокупателю.ПустаяСсылка)
           ИЛИ Реализация.СчетНаОплатуПокупателю.Дата МЕЖДУ &НачалоПериода И &КонецПериода)

УПОРЯДОЧИТЬ ПО
   Реализация.СчетНаОплатуПокупателю.Дата
ИТОГИ
   МАКСИМУМ(СчетСумма),
   СУММА(РеализацияСумма)
ПО
   СчетСсылка
1 unregistered
 
23.09.11
11:43
Группировать по счету и реализации и условие ИМЕЮЩИЕ МАКСИМУМ(СчетСумма)<>СУММА(РеализацияСумма)
2 unregistered
 
23.09.11
11:43
(1)* Группировать по счету разумеется.
3 Jack-Sun
 
23.09.11
12:25
(2) Большое спасибо. Помогло!
4 Jack-Sun
 
26.09.11
13:42
Вскрылась проблемка: запрос работает, но неверно выбирает данные по строке:
МАКСИМУМ(Счет.СуммаДокумента) <> СУММА(Реализация.СуммаДокумента)
Данное условие как буд-то стоит без функций МАКСИМУМ и МИНИМУМ.

Полный текст запроса (конфигурация Бухгалтерия предприятия 2.0):
ВЫБРАТЬ
   Реализация.СчетНаОплатуПокупателю КАК СчетВРеализации,
   ВЫБОР
       КОГДА Счет.Проведен
           ТОГДА "+"
       ИНАЧЕ "-"
   КОНЕЦ КАК СчетПроведен,
   ВЫБОР
       КОГДА Счет.ПометкаУдаления
           ТОГДА "х"
       ИНАЧЕ ""
   КОНЕЦ КАК СчетУдален,
   Счет.Ссылка КАК СчетСсылка,
   Счет.СуммаДокумента КАК СчетСумма,
   ВЫБОР
       КОГДА Реализация.Проведен
           ТОГДА "+"
       ИНАЧЕ "-"
   КОНЕЦ КАК РеализацияПроведен,
   ВЫБОР
       КОГДА Реализация.ПометкаУдаления
           ТОГДА "х"
       ИНАЧЕ ""
   КОНЕЦ КАК РеализацияУдален,
   Реализация.Ссылка КАК РеализацияСсылка,
   Реализация.СуммаДокумента КАК РеализацияСумма,
   ВЫБОР
       КОГДА СФ.Проведен
           ТОГДА "+"
       ИНАЧЕ "-"
   КОНЕЦ КАК СФПроведен,
   ВЫБОР
       КОГДА СФ.ПометкаУдаления
           ТОГДА "х"
       ИНАЧЕ ""
   КОНЕЦ КАК СФУдален,
   СФ.Ссылка КАК СФСсылка,
   СФ.СуммаДокумента КАК СФСумма
ИЗ
   Документ.РеализацияТоваровУслуг КАК Реализация
       ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактураВыданный КАК СФ
       ПО (СФ.ДокументОснование = Реализация.Ссылка)
       ПОЛНОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю КАК Счет
       ПО Реализация.СчетНаОплатуПокупателю = Счет.Ссылка

СГРУППИРОВАТЬ ПО
   Счет.Ссылка,
   Счет.СуммаДокумента,
   Реализация.Ссылка,
   Реализация.СуммаДокумента,
   СФ.Ссылка,
   Реализация.СчетНаОплатуПокупателю,
   ВЫБОР
       КОГДА Счет.Проведен
           ТОГДА "+"
       ИНАЧЕ "-"
   КОНЕЦ,
   ВЫБОР
       КОГДА Счет.ПометкаУдаления
           ТОГДА "х"
       ИНАЧЕ ""
   КОНЕЦ,
   ВЫБОР
       КОГДА Реализация.Проведен
           ТОГДА "+"
       ИНАЧЕ "-"
   КОНЕЦ,
   ВЫБОР
       КОГДА Реализация.ПометкаУдаления
           ТОГДА "х"
       ИНАЧЕ ""
   КОНЕЦ,
   ВЫБОР
       КОГДА СФ.Проведен
           ТОГДА "+"
       ИНАЧЕ "-"
   КОНЕЦ,
   ВЫБОР
       КОГДА СФ.ПометкаУдаления
           ТОГДА "х"
       ИНАЧЕ ""
   КОНЕЦ,
   СФ.СуммаДокумента

ИМЕЮЩИЕ
   ((НЕ Счет.Проведен)
       ИЛИ Счет.ПометкаУдаления
       ИЛИ (НЕ Реализация.Проведен)
       ИЛИ Реализация.ПометкаУдаления
       ИЛИ (НЕ СФ.Проведен)
       ИЛИ СФ.ПометкаУдаления
       ИЛИ МАКСИМУМ(Счет.СуммаДокумента) <> СУММА(Реализация.СуммаДокумента)
       ИЛИ Реализация.СуммаДокумента <> СФ.СуммаДокумента
       ИЛИ Реализация.СчетНаОплатуПокупателю = ЗНАЧЕНИЕ(Документ.СчетНаОплатуПокупателю.ПустаяСсылка)
           И (Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода)
       ИЛИ СФ.ДокументОснование = ЗНАЧЕНИЕ(Документ.РеализацияТоваровУслуг.ПустаяСсылка)) И
   Счет.Дата МЕЖДУ &НачалоПериода И &КонецПериода

УПОРЯДОЧИТЬ ПО
   Счет.Дата,
   Реализация.Дата
ИТОГИ
   МАКСИМУМ(СчетСумма),
   СУММА(РеализацияСумма),
   СУММА(СФСумма)
ПО
   СчетВРеализации

Подскажите пожалуйста литературу по языку запросов 1С.
5 kuza2000
 
26.09.11
14:24
(4) Почитай основы SQL - вначале разницы не заметишь. Потом про виртуальные таблицы и итоги. Потом про то, что значат фигурные скобки :)
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.