Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: скд  (Прочитано 30268 раз)
0 Пользователей и 1 Гость смотрят эту тему.
kat
Участник

ua
Offline Offline

« Ответ #30 : 01-02-2010 12:19 » new

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

Текст запроса:

ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
   ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход,
   ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход КАК КоличествоРасход,
   ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток
ИЗ
   РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(НАЧАЛОПЕРИОДА(&ДатаНач,ДЕНЬ),НАЧАЛОПЕРИОДА(&ДатаКон,ДЕНЬ), Регистратор, Движения, ) КАК ТоварыНаСкладахОстаткиИОбороты
ГДЕ
   (НЕ ТоварыНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)
« Последнее редактирование: 01-02-2010 12:25 от Sel » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #31 : 02-02-2010 15:44 » 

Программа все делает верно,  если осознать логику работы запроса:
сначала отбираются Движения по заданным условиям а потом выполняется агрегатная функция СУММА с группировкой по полю Номенклатура, итого имеем:
01.01.2010 Редис НачОст=0, Приход=1, Расход=0, КонОст=1;
02.01.2010 Редис НачОст=1, Приход=0, Расход=1, КонОст=0;
----
Сумма Редис НачОст=1, Приход=1, Расход=1, КонОст=1;

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

ЕстьNULL - это перестраховка от несуществуюих записей. Порой забывание про эту функцию в случае объединения запросов приводит к трудновыловимым ошибкам.

P.S. Запрос писался прямо в форуме и не проверялся на конфигурации - могут быть синтаксические ошибки
Записан
kat
Участник

ua
Offline Offline

« Ответ #32 : 04-02-2010 13:56 » 

Выдает пустой отчет Улыбаюсь
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #33 : 05-02-2010 08:35 » 

Параметры Дн и Дк установила правильно?
Записан
kat
Участник

ua
Offline Offline

« Ответ #34 : 05-02-2010 09:39 » 

Спасибо огромное! все работает)))
Записан
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines