Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Вопрос по использованию РегистрОстаткиОбороты (число прочтений - 6329 )
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Вопрос по использованию РегистрОстаткиОбороты
Ответ #15 - 28. Мая 2010 :: 06:25
Печать  
Сережа писал(а) 27. Мая 2010 :: 09:20:
     |Группировка День;

Тут группировка - День, а в #0 - Агент, Клиент, День, вот у тебя разные результаты и получаются. А ВТ в данном случае работает правильно.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Сережа
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 20
Зарегистрирован: 01. Февраля 2010
Re: Вопрос по использованию РегистрОстаткиОбороты
Ответ #16 - 31. Мая 2010 :: 07:32
Печать  
Eprst писал(а) 27. Мая 2010 :: 13:10:

    |      TabJ.DATE_TIME_IDDOC >= :ДатаНач
    |      AND TabJ.DATE_TIME_IDDOC <= :датаКон~
 
|      WHERE Р.period = :ПредМесяц~

:НачалоМесяца AND :ПредДата~)
    |"; [/code]


пробую понять и запустить но не выходит нужный результат,
может я с датами накосячил, ДатаНач и датаКон~ это даты
периода отчета, допустим с 03.05.10 по 08.05.10, ПредМесяц - как я понял это дата конца предыдущего месяца для получения остатков на 01.05.10, выходит в данном случае ПредМесяц = 30.04.10, а вот с НачалоМесяца и ПредДата~ ломаю голову а понять не могу... не мог бы автор объяснить какие даты он имел ввиду когда писал код, буду еще раз очень благодарен Улыбка
  
Наверх
 
IP записан
 
Сережа
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 20
Зарегистрирован: 01. Февраля 2010
Re: Вопрос по использованию РегистрОстаткиОбороты
Ответ #17 - 31. Мая 2010 :: 07:34
Печать  
berezdetsky писал(а) 28. Мая 2010 :: 06:25:
Сережа писал(а) 27. Мая 2010 :: 09:20:
     |Группировка День;

Тут группировка - День, а в #0 - Агент, Клиент, День, вот у тебя разные результаты и получаются. А ВТ в данном случае работает правильно.


с группировками понятно, но вся проблема в том что, при выборе допустим периода с 01,01,01 по 03,01,01 ВТ выдаст начальные и конечные остатки на 01 и/или 03 число, за 02 он даст начальные и конечные остатки если были какие то движения, поэтому не получаются нужные цифры на 02 число....
  
Наверх
 
IP записан
 
Сережа
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 20
Зарегистрирован: 01. Февраля 2010
Re: Вопрос по использованию РегистрОстаткиОбороты
Ответ #18 - 31. Мая 2010 :: 07:36
Печать  
Z1 писал(а) 28. Мая 2010 :: 06:08:
(0) Сорри за off
А регистр у Вас закрывается?
т.е. если сделку по клиенту начал один менеджер а закончил ее другой.

у нас такое запрещено, у каждого менеджера свой клиент и только он совершает сделку
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Вопрос по использованию РегистрОстаткиОбороты
Ответ #19 - 31. Мая 2010 :: 09:19
Печать  
Сережа писал(а) 31. Мая 2010 :: 07:36:
Z1 писал(а) 28. Мая 2010 :: 06:08:
(0) Сорри за off
А регистр у Вас закрывается?
т.е. если сделку по клиенту начал один менеджер а закончил ее другой.

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

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

А как такой случай :
менеджер начал сделку
менеджер уволился
другой менеджер завершил сделку.
  
Наверх
 
IP записан
 
Сережа
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 20
Зарегистрирован: 01. Февраля 2010
Re: Вопрос по использованию РегистрОстаткиОбороты
Ответ #20 - 31. Мая 2010 :: 09:35
Печать  
Z1 писал(а) 31. Мая 2010 :: 09:19:
Сережа писал(а) 31. Мая 2010 :: 07:36:
Z1 писал(а) 28. Мая 2010 :: 06:08:
(0) Сорри за off
А регистр у Вас закрывается?
т.е. если сделку по клиенту начал один менеджер а закончил ее другой.

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

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

А как такой случай :
менеджер начал сделку
менеджер уволился
другой менеджер завершил сделку.


у нас такого нет, между начал и закончил минута максимум Улыбка не думаю что в этот промежуток его уволят)))
  
Наверх
 
IP записан
 
ssk
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 04. Июня 2010
Пол: Мужской
Re: Вопрос по использованию РегистрОстаткиОбороты
Ответ #21 - 04. Июня 2010 :: 10:32
Печать  
Если отчет с детализацией по дням получился - напиши результирующий код.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Вопрос по использованию РегистрОстаткиОбороты
Ответ #22 - 04. Июня 2010 :: 11:31
Печать  
Сережа писал(а) 31. Мая 2010 :: 07:32:
пробую понять и запустить но не выходит нужный результат,
может я с датами накосячил, ДатаНач и датаКон~ это даты
периода отчета, допустим с 03.05.10 по 08.05.10, ПредМесяц - как я понял это дата конца предыдущего месяца для получения остатков на 01.05.10, выходит в данном случае ПредМесяц = 30.04.10, а вот с НачалоМесяца и ПредДата~ ломаю голову а понять не могу... не мог бы автор объяснить какие даты он имел ввиду когда писал код, буду еще раз очень благодарен Улыбка


Неправильно понял..
Допустим твой период отчета НачДата и КонДата
в этом запросе:

Код
Выбрать все
мд = СоздатьОбъект("MetaDataWork");
НачПериод = мд.ПолучитьНачПериода(НачДата);//начало периода останков, для периодичности месяц = НачМесяца(НачДата)
ПредМесяц = мд.ПолучитьНачПериода(НачПериод-1);//предыдущее начало периода останков

ПредДата = НачДата-1;
НачалоМесяца = НачПериод;
ДатаНач = ДатаНач;
датаКон = КонДата;
 







  
Наверх
 
IP записан
 
Сережа
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 20
Зарегистрирован: 01. Февраля 2010
Re: Вопрос по использованию РегистрОстаткиОбороты
Ответ #23 - 04. Июня 2010 :: 12:36
Печать  
Eprst писал(а) 27. Мая 2010 :: 13:10:
тип того:
Код
Выбрать все
 |SELECT
     |   Выборка.Агент as [Агент $Справочник.Агенты],
     |   Выборка.ДатаДок as День,
	 |   Sum(Выборка.НачОстБезНал+Выборка.НачОстБазовая) НачОст
	 |   Sum(Выборка.НачОстБезНал+Выборка.НачОстБазовая+Выборка.КвоПриходБезНал + Выборка.КвоПриходБазовая
	 |     -Выборка.КвоРасходБезНал - Выборка.КвоРасходБазовая)) КонОст
	 |  
     |   Sum(Выборка.КвоПриходБезНал + Выборка.КвоПриходБазовая) As Приход,
     |   Sum(Выборка.КвоРасходБезНал + Выборка.КвоРасходБазовая) As Расход
	 |  
     |FROM
     |(
	 |SELECT
     |	$TabReg.Агент as Агент,
     |   CAST(LEFT(TabJ.Date_Time_IDDoc, 8) as DateTime) as ДатаДок,
     |	0 As НачОстБезНал,
     |	0 As НачОстБазовая,
     |	$TabReg.СуммаБезНал*((DEBKRED+1)%2) As КвоПриходБезНал,
     |	$TabReg.СуммаБезНал*DEBKRED As КвоРасходБезНал,
     |	$TabReg.СуммаБазовая*((DEBKRED+1)%2) As КвоПриходБазовая,
     |	$TabReg.СуммаБазовая*DEBKRED As КвоРасходБазовая
     |FROM
     |	$Регистр.Взаиморасчеты As TabReg
     |INNER JOIN _1SJOURN As TabJ ON (TabReg.IDDOC = TabJ.IDDOC)
     |WHERE
     |	TabJ.DATE_TIME_IDDOC >= :ДатаНач
     |	AND TabJ.DATE_TIME_IDDOC <= :датаКон~
     |   AND $TabReg.Агент = :Агент
	 |Union ALL
 	 | SELECT
	 |		$Р.Агент,
	 |		'',
	 |		$Р.СуммаБезНал,
	 |		$Р.СуммаБазовая,
	 |		0,
	 |	0,
	 |	0,
	 |	0
	 |	FROM
	 |		$РегистрИтоги.Взаиморасчеты as Р
	 |	WHERE Р.period = :ПредМесяц~
	 |
     |	UNION ALL
	 |
	 |	SELECT
	 |		$Р.Агент,
	 |		'',
	 |		$Р.СуммаБезНал*(1 - Р.debkred * 2),
	 |		$Р.СуммаБазовая*(1 - Р.debkred * 2),
	 |		0,
	 |	0,
	 |	0,
	 |	0
	 |	FROM
	 |		$Регистр.Взаиморасчеты AS Р
	 |	INNER JOIN
	 |		1sjourn jr ON (Р.iddoc = jr.iddoc)
	 |			AND (jr.DATE_TIME_IDDOC BETWEEN :НачалоМесяца AND :ПредДата~)
	 |
     |) as Выборка
     |GROUP BY
     |	Выборка.Агент,Выборка.ДатаДок
     |ORDER BY
     |	Выборка.Агент
     |";  


С датами я так примерно и понял, эта вся конструкция очень хорошо работает без детализации по дням, вся фишка с детализацией по дням…. Эх как бы это решить с днями,… но автору спасибо все равно за текст Улыбка
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Вопрос по использованию РегистрОстаткиОбороты
Ответ #24 - 04. Июня 2010 :: 14:25
Печать  
Ну ё.. делаешь еще одну группировку по period + условие, что если
Рег.period<НачДата, то возвращаем НачДата, иначе Рег.period

всё собственно.. если нужны все даты, а не только те, по которым была движуха - джойним с предварительно сформированной табличкой дат..
Как-то так.

  
Наверх
 
IP записан
 
Сережа
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 20
Зарегистрирован: 01. Февраля 2010
Re: Вопрос по использованию РегистрОстаткиОбороты
Ответ #25 - 04. Июня 2010 :: 14:58
Печать  
Eprst писал(а) 04. Июня 2010 :: 14:25:
Ну ё.. делаешь еще одну группировку по period + условие, что если
Рег.period<НачДата, то возвращаем НачДата, иначе Рег.period

всё собственно.. если нужны все даты, а не только те, по которым была движуха - джойним с предварительно сформированной табличкой дат..
Как-то так.


цикл нужен...Рег.period это одна дата,а как посчитать начальный остаток на каждый день? в том коде допустим можно получить начальный остаток на НачДата, есть обороты, выйдет конечный остаток. но это все будет только на НачДата, по остальным дням будет только обороты...
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Вопрос по использованию РегистрОстаткиОбороты
Ответ #26 - 07. Июня 2010 :: 05:15
Печать  
Дык конечный остаток на конец дня = НачОст следующего Улыбка
если что..
На выходе проссумируешь и всё..
Если нужна сразу готовая табличка (т.е нарастающим итогом) - то джойнишь сам запрос к себе (т.е 2 одинаковых селекта) + условие на период.
Или коррелированный подзапрос делаешь
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать