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


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Последний документ движения
20. Января 2009 :: 03:56
Печать  
Есть некий регистр остатков (его структура думаю не важна). как получить данные (документ) последнего прихода по регистру (фильтры по регистру известны).

база dbf
подключение через oledb

т.е. мне нужен аналог

Результат="";
           Рег=СоздатьОбъект("Регистр.ОстаткиПоСкладамИПартиям");
           Рег.УстановитьЗначениеФильтра("Фирма",ВнКонтекст.Фирма,1);
           Если ПустоеЗначение(ВнКонтекст.Склад)=0 Тогда
                 Рег.УстановитьЗначениеФильтра("Склад",ВнКонтекст.Склад,1);
           КонецЕсли;      
           Рег.УстановитьЗначениеФильтра("Товар",ТекТовар,1);
           Рег.ОбратныйПорядок(1);
           Если ВнКонтекст.Выбран()=1 Тогда
                 Рег.ВыбратьДвижения(,ВнКонтекст.ТекущийДокумент());
           Иначе
                 Рег.ВыбратьДвижения(,ВнКонтекст.ДатаДок);
           КонецЕсли;      
           Пока Рег.ПолучитьДвижение()<>0 Цикл
                 Если Рег.ТекущийДокумент().Вид()="Переоценка" Тогда
                       Продолжить;
                 ИначеЕсли Рег.Расход=1 Тогда
                       Продолжить;
                 ИначеЕсли Рег.ТекущийДокумент()=ВнКонтекст.ТекущийДокумент() Тогда
                       Продолжить;
                 Иначе
                       Результат=Строка(Рег.ТекущийДокумент().ДатаДок)+" цена вх - "+СокрЛП(Формат(Рег.ЦенаВхода,"Ч19.2"))+" (цена пр - "+СокрЛП(Формат(Рег.ЦенаПродажи,"Ч19.2"))+")";
                       Прервать;
                 КонецЕсли;      
           КонецЦикла;
  
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Последний документ движения
Ответ #1 - 20. Января 2009 :: 04:16
Печать  
с oledb мало работал, там select top есть ?
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Последний документ движения
Ответ #2 - 20. Января 2009 :: 04:31
Печать  
ev-kov писал(а) 20. Января 2009 :: 04:16:
с oledb мало работал, там select top есть ?


тяжело сказать. мне всё приходится методом  тыка проверять. я не так давно с 1С++.
  
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Последний документ движения
Ответ #3 - 20. Января 2009 :: 04:56
Печать  
Проверь это работает
Код
Выбрать все
	ТекстЗапроса = "
	|select top 1
	|	Рег.iddoc [Документ $Документ]
        |           ,j.iddocdef [Документ_вид]
	|from $Регистр.ОстаткиПоСкладамИПартиям as Рег
        |   inner join 1sjourn as j on j.iddoc = Рег.iddoc
	|where
	|	($Рег.Фирма = :Фирма)
	|	and ($Рег.Товар = :Товар)
	|	and (j.Date <= :ДатаДок~~)
	|order by
	|	j.Date DESC, j.time DESC
	|";

	_RS.УстановитьТекстовыйПараметр("Фирма",ВнКонтекст.Фирма);
	_RS.УстановитьТекстовыйПараметр("Товар",ВнКонтекст.Товар);
	_RS.УстановитьТекстовыйПараметр("ДатаДок",ВнКонтекст.ДатаДок);


	Попытка
		Рез = _RS.ВыполнитьСкалярный(ТекстЗапроса);
	Исключение
		Сообщить("Не удается выполнить 1с++ запрос : "+ТекстЗапроса);
		Сообщить(ОписаниеОшибки());
		Сообщить(_RS.ПолучитьОписаниеОшибки());
		Рез = 0;
	КонецПопытки;
           Если ПустоеЗначение(Рез) = 0 Тогда
               Док = Рез.Получить(1);
           КонецЕсли 

  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Последний документ движения
Ответ #4 - 20. Января 2009 :: 04:59
Печать  
спасибо попробую. как то сам не додумался..... всё просто. только разве в dbf скалярный запрос выполняется?
  
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Последний документ движения
Ответ #5 - 20. Января 2009 :: 05:04
Печать  
Стрелок писал(а) 20. Января 2009 :: 04:59:
спасибо попробую. как то сам не додумался..... всё просто. только разве в dbf скалярный запрос выполняется?



и точно в oledb нет его, переделай с исп-ем  ВыполнитьИнструкцию
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Последний документ движения
Ответ #6 - 20. Января 2009 :: 05:08
Печать  
СПАСИБО!!!!! буду пробовать
  
Наверх
 
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Последний документ движения
Ответ #7 - 05. Марта 2009 :: 21:59
Печать  
итак кое чего сделал (только руки дошли)

вот запрос к регистру

Текст = "
    |SELECT TOP 1
    |    Рег.IdDoc as [Док $Документ],
    |   Жур.IdDocDef as Док_вид
    |FROM $Регистр.ОстаткиПоСкладамИПартиям as Рег
    |   INNER JOIN
    |        1SJourn as Жур on Жур.IdDoc=Рег.IdDoc
    |WHERE
    |    ($Рег.Фирма = :ФирмаОтбора)
    |    and ($Рег.Склад = :СкладОтбора)
    |    and (Жур.Date <= :ДатаДок~~)
    |ORDER BY
    |    Жур.Date DESC, Жур.Time DESC";
   
    БыстрыйЗапрос.УстановитьТекстовыйПараметр("ФирмаОтбора",Фирма);
    БыстрыйЗапрос.УстановитьТекстовыйПараметр("СкладОтбора",Склад); 
    БыстрыйЗапрос.УстановитьТекстовыйПараметр("ДатаДок",ТекущаяДата());

всё прекрасно работает. одно но - мне нужна группировка по реквизиту регистра "Товар". т.е. фактически - последний документ движения (прихода) товара по регистру. и в этом месте мозг отказывает Подмигивание

куда копать хотя бы скажите....

поясню почему так - заказчик возжелал чтобы у него на форме были две колонки с ценами. т.е. не текстовое поле на форме и текущий элемент а именно две колонки (аналог остатков в справочнике ТМЦ при подборе в ТиС)

поэтому хочу при открытии заполнить таблицу кэша а потом оттуда дёргать значения..
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Последний документ движения
Ответ #8 - 05. Марта 2009 :: 23:07
Печать  
Стрелок писал(а) 05. Марта 2009 :: 21:59:
всё прекрасно работает. одно но - мне нужна группировка по реквизиту регистра "Товар". т.е. фактически - последний документ движения (прихода) товара по регистру. и в этом месте мозг отказывает Подмигивание

куда копать хотя бы скажите....


Ну если хотя бы читать свои же ветки
Первый документ движения в регистре
  
Наверх
 
IP записан
 
Стрелок
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 134
Местоположение: Ukrane
Зарегистрирован: 31. Октября 2008
Пол: Мужской
Re: Последний документ движения
Ответ #9 - 05. Марта 2009 :: 23:24
Печать  
kiruha писал(а) 05. Марта 2009 :: 23:07:
Стрелок писал(а) 05. Марта 2009 :: 21:59:
всё прекрасно работает. одно но - мне нужна группировка по реквизиту регистра "Товар". т.е. фактически - последний документ движения (прихода) товара по регистру. и в этом месте мозг отказывает Подмигивание

куда копать хотя бы скажите....


Ну если хотя бы читать свои же ветки
Первый документ движения в регистре


я прошу прощения конечно но это совсем разные задачи. я плохо объяснил чего мне надо? сравните условия здесь и там. получать движения (хоть перве хоть последние) ЗНАЯ конкретный товар - я умею уже спасибо текущей ветке и ev-kov!!!!

здесь другая чуть задача. отличие видно? мне нужна группировка по товару а не фильтр по нему. непонятно?

мне надо заполнить таблицу вида
Товар|ДокументПрихода|

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


1C++ rocks!

Сообщений: 272
Местоположение: Санкт-Петербург
Зарегистрирован: 24. Января 2009
Пол: Мужской
Re: Последний документ движения
Ответ #10 - 06. Марта 2009 :: 08:54
Печать  
попробуй что нибудь вроде

Код
Выбрать все
Текст = "
	  |SELECT
 	  |Рег1.Товар as [Товар $Справочник.Товары],
 	  |Рег1.IdDoc as [$Документ]
 	  |FROM $Регистр.ОстаткиПоСкладамИПартиям as Рег1
 	  |inner join
 	  |(SELECT TOP 1
 	  |    Рег.Товар Товар,
 	  |    Рег.IdDoc Док,
 	  |    Жур.IdDocDef as Док_вид
 	  |FROM $Регистр.ОстаткиПоСкладамИПартиям as Рег
 	  |   INNER JOIN
 	  |	  1SJourn as Жур on Жур.IdDoc=Рег.IdDoc
 	  |WHERE
 	  |    ($Рег.Фирма = :ФирмаОтбора)
	|    and ($Рег.Склад = :СкладОтбора)
 	  |    and (Жур.Date <= :ДатаДок~~)
 	  |ORDER BY
 	  |    Жур.Date DESC, Жур.Time DESC) ВложеннаяВыборка
 	  |on ВложеннаяВыборка.Товар=Рег1.Товар
 	  |and ВложеннаяВыборка.IdDoc=Рег1.IdDoc
 	  |";
 

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



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Последний документ движения
Ответ #11 - 06. Марта 2009 :: 13:00
Печать  
Стрелок писал(а) 05. Марта 2009 :: 23:24:
[quote author=kiruha link=1232423805/0#8 date=1236294466]

я прошу прощения конечно но это совсем разные задачи. я плохо объяснил чего мне надо? сравните условия здесь и там. получать движения (хоть перве хоть последние) ЗНАЯ конкретный товар - я умею уже спасибо текущей ветке и ev-kov!!!!

здесь другая чуть задача. отличие видно? мне нужна группировка по товару а не фильтр по нему. непонятно?

мне надо заполнить таблицу вида
Товар|ДокументПрихода|

для всех товаров из справочника по которым естественно были хоть какие то приходы не важно когда


Вместо отбора - GROUP BY,
вместо MIN (первый) - Max (последний)
Код
Выбрать все
|SELECT
|    Подзапрос.Товар as [Товар $Справочник.Товары],
|     Right(Подзапрос.ДатаВремяIddoc,9) as [ДокПрихода $Документ],
|    ЖурДокументовПрихода.IDDOCDEF	   as  ДокПрихода_Вид
|FROM
|(SELECT
|	MAX(DTOS(Жур.date)+Жур.time+Жур.iddoc) as ДатаВремяIddoc,
|	$TReg.Товар as Товар
|FROM
|		$Регистр.Партии AS TReg
|LEFT JOIN 1SJOURN AS Жур ON Жур.IDDOC = Right(TReg.IDDOC,9)
|WHERE
|		$TReg.Фирма = '"+ИдФирма+"'
|		AND $TReg.Склад = '"+ИдСклад+"'
| GROUP BY $TReg.Товар) as Подзапрос
| LEFT JOIN
|  1SJourn as ЖурДокументовПрихода ON ЖурДокументовПрихода.IDDoc
    = Right(Подзапрос.ДатаВремяIddoc,9)  
 

« Последняя редакция: 06. Марта 2009 :: 14:24 - kiruha »  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать