Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) ПОлучить остатки по всем дням (а не только с движ) (число прочтений - 8230 )
stepman1
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 86
Зарегистрирован: 02. Июля 2007
ПОлучить остатки по всем дням (а не только с движ)
17. Июля 2007 :: 09:50
Печать  
Есть запрос
                 | SELECT ОстаткиТМЦОстаткиОбороты.Номенклатура as Номенклатура
           | , RIGHT(ОстаткиТМЦОстаткиОбороты.ПозицияДокумента,9) as Док
           | , CAST( LEFT(ОстаткиТМЦОстаткиОбороты.ПозицияДокумента,8) as DateTime) as ДатаДок
           |      , ОстаткиТМЦОстаткиОбороты.КоличествоНачальныйОстаток НачОст
           |      , ОстаткиТМЦОстаткиОбороты.КоличествоПриход Приход
           |      , ОстаткиТМЦОстаткиОбороты.КоличествоРасход Расход
           |      , ОстаткиТМЦОстаткиОбороты.КоличествоКонечныйОстаток КонОст
           | , 0 as Продано
           | , 0 as Возвращено
                       |
           | FROM $РегистрОстаткиОбороты.ОстаткиТМЦ(:ДатаНач, :ДатаКон~, Документ , Движения,
           |  ,
           |  (Номенклатура IN (SELECT val FROM #Ном)), (Номенклатура), ) AS ОстаткиТМЦОстаткиОбороты  

Но в нем  я могу получить остатки только по дням с движеними (документами)
а как бы получить их по всем дням  в выбранном периоде?
  
Наверх
 
IP записан
 
mc
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 59
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: ПОлучить остатки по всем дням (а не только с д
Ответ #1 - 17. Июля 2007 :: 10:11
Печать  
из документации
Код
Выбрать все
С периодичностью
Период может быть: День, Неделя, Месяц, Квартал, Год

ТекстЗапроса = "
|SELECT
|	Рег.Товар as [Товар $Справочник.Номенклатура],
|	Рег.КоличествоНачальныйОстаток as КоличествоНачОст,
|	Рег.КоличествоПриход as КоличествоПриход,
|	Рег.КоличествоРасход as КоличествоРасход,
|	Рег.КоличествоКонечныйОстаток as КоличествоКонОст,
|	Рег.Период Период
|FROM
|	$РегистрОстаткиОбороты.ОстаткиТоваров(:НачДата, :КонДата~, Месяц,,
|                               Склад = :ВыбСклад,
|                               (Товар), (Количество)) as Рег";
 


  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: ПОлучить остатки по всем дням (а не только с д
Ответ #2 - 17. Июля 2007 :: 12:16
Печать  
Никак.
Можешь проджойнить в табл. дней, а потом дополнить руками при обходе выборки.
  
Наверх
 
IP записан
 
mc
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 59
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: ПОлучить остатки по всем дням (а не только с д
Ответ #3 - 18. Июля 2007 :: 12:06
Печать  
Попробуй так
Код
Выбрать все
|SELECT
|	Жур.IDDoc as [Док $Документ],
|	Жур.IDDocDef as Док_вид,
|	CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок
|FROM
|	_1SJourn Жур
|WHERE
|	Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
|	Жур.IDDocDef = $ВидДокумента.Реализация”;
 

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


I Love YaBB 2!

Сообщений: 86
Зарегистрирован: 02. Июля 2007
Re: ПОлучить остатки по всем дням (а не только с д
Ответ #4 - 18. Июля 2007 :: 12:11
Печать  
to MC
я тож умею копипаст делать из документации
но от этого задачи не решаются Улыбка

а как насчет With ROLLUP ??
  
Наверх
 
IP записан
 
val
Full Member
***
Отсутствует


Дорогу осиливает идущий

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Re: ПОлучить остатки по всем дням (а не только с д
Ответ #5 - 18. Июля 2007 :: 14:28
Печать  
(4) - 27.
А что 27?
А что Rollup?   Подмигивание
В (2) тебе дали правильный совет. Без приложения рук ничего не будет.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: ПОлучить остатки по всем дням (а не только с д
Ответ #6 - 18. Июля 2007 :: 20:08
Печать  
Типа группировка день все?
Предлагаю следующее "мега" решение  Подмигивание

Сначала создать таблицу дней, типа так (цы) pvase... только ниасилел пока понять как именно в промежутке сделать... ну или можно самому, в цикле по дням:

Код
Выбрать все
|CREATE TABLE td (Dat DateTime)
|DECLARE @DateStart DateTime
|SET @DateStart = Convert(datetime,'20020101',112)
|INSERT INTO td
|select top 365 dateadd(dd, -Day(@DateStart), dateadd(mm,-Month(@DateStart)+1,@DateStart)) +
|(select count(*) from master..sysobjects where id<=a.id) AS [Date] from master..sysobjects AS a Order by [Date]
 



Только указываем стартовую дату и кол-во дней после top
Затем выполняем следующее (простой пример, без ВТ):

Код
Выбрать все
|SELECT $ОстаткиТМЦ.Номенклатура [Номенклатура $Справочник.Номенклатура]
|,  CASE WHEN CAST(LEFT(Журнал.DATE_TIME_IDDOC,8) as DateTime) = CAST(LEFT(ТД.DAT,8) as DateTime) THEN $ОстаткиТМЦ.Количество ELSE 0 END AS Колво
| , CAST(LEFT(ТД.DAT,8) as DateTime) as Дата
|FROM $Регистр.ОстаткиТМЦ AS ОстаткиТМЦ With (NOLOCK)
|	INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON ОстаткиТМЦ.IDDOC = Журнал.IDDOC
|	LEFT JOIN TD AS ТД With (NOLOCK) ON 1=1
|WHERE Журнал.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~
 


  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
mc
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 59
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: ПОлучить остатки по всем дням (а не только с д
Ответ #7 - 20. Июля 2007 :: 11:14
Печать  
вот рабочий код под ТиС для Украины
Код
Выбрать все
|SELECT
|	CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as Дата,
|	$СпрНоменклатураДляФильтров.Артикул as Артикулы,
|	$Рег.Товар as [Товары $Справочник.Номенклатура],
|	Подзапрос.Склад as [Склады $Справочник.МестаХранения],
|	Жур.$ОбщийРеквизит.Автор as [Авторы $Справочник.Пользователи],
|	$Рег.ОстатокТовара as Кво,
|	$Рег.Оборот as Оборот,
|	$Рег.Прибыль as Наценка
|
|	FROM (
|		SELECT ДокРасходнаяРозничнаяТТ.IDDoc,
|			$ДокРасходнаяРозничнаяТТ.Склад as Склад,
|		FROM $Документ.РасходнаяРозничная_ТТ AS ДокРасходнаяРозничнаяТТ
|
|		UNION ALL
...
|	) as Подзапрос
|
|	INNER JOIN $Регистр.ПартииТоваров AS Рег ON Подзапрос.IDDOC = Рег.IDDOC
|
|	INNER JOIN _1Sjourn as Жур ON Жур.IDDoc = Рег.IDDoc
|
|	INNER JOIN $Справочник.Номенклатура as СпрНоменклатураДляФильтров ON
|		СпрНоменклатураДляФильтров.ID = $Рег.Товар
|";

 

  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: ПОлучить остатки по всем дням (а не только с д
Ответ #8 - 20. Июля 2007 :: 11:20
Печать  
mc писал(а) 20. Июля 2007 :: 11:14:
вот рабочий код под ТиС для Украины
...
|


Не понял, какое отношение к "ПОлучить остатки по всем дням (а не только с движ)" ?
  
Наверх
 
IP записан
 
toypaul
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 43
Зарегистрирован: 29. Июня 2006
Re: ПОлучить остатки по всем дням (а не только с д
Ответ #9 - 24. Июля 2007 :: 07:17
Печать  
если я правильно понял автора, то в ToySQL, например, есть возможность указать дополнять периоды движений периодами в которых не было оборотов
  
Наверх
wwwICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: ПОлучить остатки по всем дням (а не только с д
Ответ #10 - 24. Июля 2007 :: 07:51
Печать  
toypaul писал(а) 24. Июля 2007 :: 07:17:
если я правильно понял автора, то в ToySQL, например, есть возможность указать дополнять периоды движений периодами в которых не было оборотов


Если я правильно понял - toypaul не в первый раз занимается рекламой своей компоненты, причем коммерческой.
Это разрешено?
(про большие заслуги знаю)
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: ПОлучить остатки по всем дням (а не только с д
Ответ #11 - 24. Июля 2007 :: 08:41
Печать  
Загляни в закладочку 1cpp  Подмигивание
"Павел Шемякин aka ToyPaul
первоначальная версия подсистемы прямого доступа к данным через ODBC"
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
toypaul
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 43
Зарегистрирован: 29. Июня 2006
Re: ПОлучить остатки по всем дням (а не только с д
Ответ #12 - 24. Июля 2007 :: 10:35
Печать  
kiruha писал(а) 24. Июля 2007 :: 07:51:
toypaul писал(а) 24. Июля 2007 :: 07:17:
если я правильно понял автора, то в ToySQL, например, есть возможность указать дополнять периоды движений периодами в которых не было оборотов


Если я правильно понял - toypaul не в первый раз занимается рекламой своей компоненты, причем коммерческой.
Это разрешено?
(про большие заслуги знаю)


ну это с какой стороны посмотреть. если хочешь позавидовать и повозмущаться, то это конечно РЕКЛАМА. а если скажем хочешь посмотреть как это реализовано в библиотеке получив демо-версию и изучив код в профайлере, то вроде получается и не реклама. зависит от человека в общем. а я знаю что многие кто использует 1С++ так и поступаю - "тырят" реализацию из ToySQL. на что я в общем-то не обижаюсь ибо это не запрещено.
  
Наверх
wwwICQ  
IP записан
 
stepman1
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 86
Зарегистрирован: 02. Июля 2007
Re: ПОлучить остатки по всем дням (а не только с д
Ответ #13 - 25. Июля 2007 :: 09:06
Печать  
ToySQL не пользую - там при загрузке куча сообчений вылазит + нет Виртуальных регистров (кажный раз кучу джойнов писать ломает)+ нет индексированной таблицы, ломанную использовать религия не позволяет.
ВСЕ Сделал  по другому. в процессе обхода по индексированной таблице сматрю разницу  в днях, если больше одного, то дополняю "холостым" циклом Подмигивание
  
Наверх
 
IP записан
 
cristobald
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 3
Зарегистрирован: 25. Июля 2007
Re: ПОлучить остатки по всем дням (а не только с д
Ответ #14 - 25. Июля 2007 :: 15:02
Печать  
Надо было посчитать средний конечный остаток по складам номенклатур за период.

Я решал так:
1. в 1с: сделал

мЗапрос = СоздатьОбъект("ODBCRecordSet");
мета = СоздатьОбъект("MetaDataWork");      
cпДата = СоздатьОбъект("СписокЗначений");
дата1  = НачДата;
     
мЗапрос.УложитьСписокОбъектов(спДата,"LISTDATES");
Пока дата1 <= КонДата Цикл
     тЗапросСкл = "insert into ListDates values (' "+мета.ПолучитьСтрИзДаты(дата1)+"',0);";
     мЗапрос.Выполнить(тЗапросСкл);
     дата1 = дата1 + 1;
КонецЦикла;
.......
Установка условий и прочее.....

2.Собственно запрос:
тЗапроса = "select  a.Склад [Склад $Справочник.Склады]
             ,a.Номенклатура [Номенклатура $Справочник.Номенклатура]
             ,sum(a.СреднееКоличествоКонечныйОстаток) / b.VAL as Количество
      from (
     SELECT ОстаткиТМЦОстаткиОбороты.Склад as Склад
                 , ОстаткиТМЦОстаткиОбороты.Номенклатура as Номенклатура
                 , tblDates.Val VAL
                 , ОстаткиТМЦОстаткиОбороты.КоличествоКонечныйОстаток
     FROM
               $РегистрОстаткиОбороты.ОстаткиТМЦ(:НачДата,
                       :КонДата~,
                       День,
                       ДвиженияИГраницыПериода,,
                       "+ ТекстУсловия+",
                       (Склад, Номенклатура),) AS ОстаткиТМЦОстаткиОбороты
                  , (select CAST(LISTDates.VAL as dateTime) as VAL from LISTDates) as tblDates
                 
           where
               ОстаткиТМЦОстаткиОбороты.Период = (select max(ОстаткиТМЦОстаткиОбороты1.Период) from $РегистрОстаткиОбороты.ОстаткиТМЦ(:НачДата,
                       :КонДата~,
                       День,
                       ДвиженияИГраницыПериода,,
                       "+ ТекстУсловия+",
                       (Склад, Номенклатура),) AS ОстаткиТМЦОстаткиОбороты1
              where
                ОстаткиТМЦОстаткиОбороты1.Склад = ОстаткиТМЦОстаткиОбороты.Склад
              and
                ОстаткиТМЦОстаткиОбороты1.Номенклатура = ОстаткиТМЦОстаткиОбороты.Номенклатура
              and
                tblDates.VAL >= ОстаткиТМЦОстаткиОбороты1.Период
            )
           ) as a , (select datediff(dd,min(CAST(ListDates.Val as datetime)),max(CAST(ListDates.Val as datetime))) + 1 as VAL from ListDates)  as b
           
           group by a.Склад,a.Номенклатура,b.Val
           ";
ЗЫ: Единственный косяк в том, что если остатки появились в течении периода то отсчет дат будет с начала появления, но у меня была именно такая задача переделать там ИМХО не очень сложно .
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать