Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Первый документ движения в регистре (число прочтений - 9582 )
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Первый документ движения в регистре
09. Февраля 2009 :: 03:52
Печать  
Регистр :

Фирма справочник "Фирмы"
Склад справочник "Склады"
Товар справочник "Товары"
Партия документ

Остаток число

Задача - получить документ, который вызвал появление данный партии товара на определённом складе (это может быть не партия в регистре)

фирма, склад, товар и партия известны

заранее спасибо....

в догонку - дайте пожалуйста если не трудно пример условия по неопределённому документу в регистре. надо отобрать из этого же регистра остатки по конкретной партии
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Первый документ движения в регистре
Ответ #1 - 09. Февраля 2009 :: 09:57
Печать  
Для SQL примерно так:
Код
Выбрать все
	"	SELECT
	|		TOP 1
	|		TabJ.IDDOCDEF AS Документ_вид,
	|		TReg.IDDOC AS Документ
	|	FROM
	|		$Регистр.Партии AS TReg
	|		INNER JOIN _1SJOURN AS TabJ ON (TReg.IDDOC = TabJ.IDDOC)
	|	WHERE
	|		$TReg.Фирма = '"+ИдФирма+"'
	|		AND $TReg.Склад = '"+ИдСклад+"'
	|		AND $TReg.Товар = '"+ИдТовар+"'
	|		AND $TReg.Партия = '"+ДлиннийИдДокументПартии+"'
	|	ORDER BY
	|		TabJ.DATE_TIME_IDDOC" 

  
Наверх
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Первый документ движения в регистре
Ответ #2 - 09. Февраля 2009 :: 11:17
Печать  
>>пример условия по неопределённому документу в регистре

right($Рег.НеопределенныйДокумент, 9) = :СсылкаНаДокумент
&
$Рег.НеопределенныйДокумент = $ВидДокумента36.Приход + :СсылкаНаДокумент
  

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


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Первый документ движения в регистре
Ответ #3 - 10. Февраля 2009 :: 02:48
Печать  
забыл кажется Подмигивание

это dbf
  
Наверх
 
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Первый документ движения в регистре
Ответ #4 - 19. Февраля 2009 :: 04:28
Печать  
ничего не получается. вот вернулся к теме и упёрся опять... ткните чайника пальцем - куда чего ставить? так не работает нифига....

ещё раз условия задачи -
1. база dbf
2. подключение по oledb
3. надо получить дату первого появления остатка на складе по определёной партии. При этом документ появления остатка не всегда равен партии (например при перемещении товара со склада на склад партия не меняется а дата другая)

вот запрос

|SELECT         
           |      Рег.Товар AS [Товар $Справочник.Номенклатура],
           |      Рег.Фирма AS [Фирма $Справочник.Фирмы], 
           |      Рег.Склад AS [Склад $Справочник.МестаХранения], 
           |   Рег.Партия AS [Партия $Документ],
           |      Рег.ЦенаПродажи AS ЦенаПр,
           |      SUM(Рег.ОстатокТовара) AS Остаток
           |FROM
           |      (SELECT
           |            $Рег_1.Товар AS Товар,
           |            $Рег_1.Фирма AS Фирма,
           |            $Рег_1.Склад AS Склад,
           |            $Рег_1.ПрихДокумент AS Партия, 
           |            $Рег_1.ЦенаПродажи AS ЦенаПродажи,
           |            $Рег_1.ОстатокТовара AS ОстатокТовара
           |      FROM
           |            $РегистрИтоги.ОстаткиПоСкладамИПартиям AS Рег_1
           |      WHERE
           |            (PERIOD = :ПредМесяц~~)
           |            AND ($Рег_1.Фирма=:Фирма)
           |            AND ($Рег_1.Товар=:Товар)
           |            AND ($Рег_1.ПрихДокумент=:Парт)
           |
           |      UNION ALL
           |
           |      SELECT 
           |            $Рег_2.Товар AS Товар,
           |            $Рег_2.Фирма AS Фирма,
           |            $Рег_2.Склад AS Склад,
           |            $Рег_2.ПрихДокумент AS Партия, 
           |            $Рег_2.ЦенаПродажи AS ЦенаПродажи,
           |            $Рег_2.ОстатокТовара*(1-Рег_2.debkred*2) AS ОстатокТовара
           |      FROM
           |            $Регистр.ОстаткиПоСкладамИПартиям AS Рег_2
           |      INNER JOIN
           |            1sjourn jr ON Рег_2.iddoc = jr.iddoc
           |                  AND (jr.date BETWEEN :НачалоМесяца~~ AND :ПредДата~~)
           |                  AND ($ФлагРегистра.ОстаткиПоСкладамИПартиям = 1)
           |                  AND ($Рег_2.ПрихДокумент=:Парт)
           |      WHERE
           |            ($Рег_2.Фирма=:Фирма)
           |            AND ($Рег_2.Товар=:Товар)
           |      ) Рег
           |GROUP BY
           |   Рег.Товар,
           |   Рег.Фирма,
           |   Рег.Склад,
           |      Рег.Партия,
           |      Рег.ЦенаПродажи 
           |
           |HAVING
           |      SUM(Рег.ОстатокТовара)>0
           |
           |ORDER BY
           |      Рег.Товар,
           |      Рег.Партия";
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Первый документ движения в регистре
Ответ #5 - 19. Февраля 2009 :: 08:36
Печать  
pvase писал(а) 09. Февраля 2009 :: 09:57:
Для SQL примерно так:
Код
Выбрать все
	"	SELECT
	|		TOP 1
	|		TabJ.IDDOCDEF AS Документ_вид,
	|		TReg.IDDOC AS Документ
	|	FROM
	|		$Регистр.Партии AS TReg
	|		INNER JOIN _1SJOURN AS TabJ ON (TReg.IDDOC = TabJ.IDDOC)
	|	WHERE
	|		$TReg.Фирма = '"+ИдФирма+"'
	|		AND $TReg.Склад = '"+ИдСклад+"'
	|		AND $TReg.Товар = '"+ИдТовар+"'
	|		AND $TReg.Партия = '"+ДлиннийИдДокументПартии+"'
	|	ORDER BY
	|		TabJ.DATE_TIME_IDDOC" 


Для ДБФ анологично
Код
Выбрать все
	"	SELECT
	|		TOP 1
	|		TReg.IDDOC AS Документ
	|	FROM
	|		$Регистр.Партии AS TReg
	|		INNER JOIN 1SJOURN AS TabJ ON (TReg.IDDOC = TabJ.IDDOC)
	|	WHERE
	|		$TReg.Фирма = '"+ИдФирма+"'
	|		AND $TReg.Склад = '"+ИдСклад+"'
	|		AND $TReg.Товар = '"+ИдТовар+"'
	|		AND $TReg.Партия = '"+ДлиннийИдДокументПартии+"'
	|	ORDER BY
	|		TabJ.DATE,TabJ.TIME,TabJ.IDDOC" 



Если нужен не один документ, а столбец в базовом запросе -
предыдущий запрос в скобки
Код
Выбрать все
SELECT
....
,() as ДокДвижения 

- коррелированный подзапрос,
в предложении WHERE корр. подзапроса можно использовать поля базовуой таблицы.

Также можно оптимизировать - при помощи хранимой процедуры и индексов - но это сложнее.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Первый документ движения в регистре
Ответ #6 - 20. Февраля 2009 :: 14:08
Печать  
Так покрасивше и соединяться можно без коррелированных и без ORDER BY
Код
Выбрать все
SELECT
|		MIN(DTOS(Жур.date)+Жур.time+Жур.iddoc)) as ДатаВремяIddoc
|	FROM
|		$Регистр.Партии AS TReg
|		INNER JOIN 1SJOURN AS TabJ ON (TReg.IDDOC = TabJ.IDDOC)
|	WHERE
|		$TReg.Фирма = '"+ИдФирма+"'
|		AND $TReg.Склад = '"+ИдСклад+"'
|		AND $TReg.Товар = '"+ИдТовар+"'
|		AND $TReg.Партия = '"+ДлиннийИдДокументПартии+"'
|	"
 

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать