Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема 1C++ Получение итогов (число прочтений - 4887 )
quest
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 19
Зарегистрирован: 21. Августа 2006
1C++ Получение итогов
21. Августа 2006 :: 06:36
Печать  
Было
резТовара.УстановитьЗначениеФильтра("Товар",СписокТовараФ,2);
резТовара.УстановитьЗначениеФильтра("ПоЗаявке",конт.ДокументОснование);
резТовара.УстановитьЗначениеФильтра("Склад",конт.Склад);
Если (конт.ИтогиАктуальны()=0) тогда
сообщить("Проведение задним числом для "+строка(конт.ТекущийДокумент()));
резТовара.ВременныйРасчет(1);
РассчитатьРегистрыНа(конт.ТекущийДокумент());
конецесли;
резТовара.ВыгрузитьИтоги(ТЗ,1,1);

Стало:
ТекстЗапроса = "
| SELECT
| $Рег.Товар as [Товар $Справочник.Номенклатура],
| $Рег.ПоСчету as [ПоСчету $Документ]
| SUM($Количество) as РезервТовара
| FROM
| $РезервТовара as Рег
| WHERE
| $Рег.Товар in (select val from #ГруппаТоваров)
| $Рег.Склад = :выбСклад
| $Рег.ПоЗаявке = :выбЗаявка
| GROUP BY
| $Рег.ПоСчету
| $Рег.Товар
";

RS.УложитьСписокОбъектов(СписокТовараФ,"#ГруппаТоваров","Номенклатура");

RS.УстановитьТекстовыйПараметр("выбСклад",конт.Склад);
RS.УстановитьТекстовыйПараметр("выбЗаявка",конт.Склад);


Подскажите как расчитать на текущий документ?

ФАК читал, но не понял как ставить фильтр по товару...
  
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: 1C++ Получение итогов
Ответ #1 - 21. Августа 2006 :: 06:45
Печать  
используй виртуальную таблицу остатков, все описание есть в доке
  
Наверх
 
IP записан
 
tav13
1c++ donor
Отсутствует



Сообщений: 108
Местоположение: Donetsk
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: 1C++ Получение итогов
Ответ #2 - 21. Августа 2006 :: 06:50
Печать  
Например вот так:
Код
Выбрать все
FROM $РегистрОстатки.Остатки(:ДатаРасчета~,,ТМЦ in (Select val from #Сырье) AND (Фирма=:ВыбФирма) AND (Склад =:ВыбСклад),,) AS ОстаткиСырье 


И
Код
Выбрать все
Если Конт.Выбран()=1 Тогда
	рс.УстановитьТекстовыйПараметр("ДатаРасчета", СформироватьПозициюДокумента(Конт.ТекущийДокумент(),-1));
Иначе
	рс.УстановитьТекстовыйПараметр("ДатаРасчета", Конт.ДатаДок); 


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


I Love YaBB 2!

Сообщений: 19
Зарегистрирован: 21. Августа 2006
Re: 1C++ Получение итогов
Ответ #3 - 22. Августа 2006 :: 08:52
Печать  
Спасибо за помощь, но вот очередная проблема -
есть
     рс = СоздатьОбъект("ODBCRecordset");
     рс.УстБД1С();
     
     ТекстЗапроса = "
     | SELECT 
     | Рег.Товар as [Товар $Справочник.Номенклатура],
     | Рег.ПоСчету as [ПоСчету $Документ]
     | Рег.РезервТовараОстаток  as РезервТовара
     | FROM $РегистрОстатки.РезервыТоваров  (:ДатаРасчета,,Товар in (Select val from #ГруппаТоваров) AND (Склад =:ВыбСклад) and (ПоЗаявке = :ВыбЗаявка), ,) AS Рег
     |";
     
           конт.ВыгрузитьТабличнуюЧасть(ТЗТовара);
           СписокТовараФ = СоздатьОбъект("СписокЗначений");
           ТЗТовара.Выгрузить(СписокТовараФ,,,"Товар");

     рс.УложитьСписокОбъектов(СписокТовараФ,"#ГруппаТоваров","Номенклатура");
     рс.УстановитьТекстовыйПараметр("ВыбСклад",конт.Склад);
     рс.УстановитьТекстовыйПараметр("ВыбЗаявка",конт.ДокументОснование);      
     рс.УстановитьТекстовыйПараметр("ДатаРасчета", СформироватьПозициюДокумента(Конт.ТекущийДокумент()));
   
     
     рс.Отладка(1);
     ТЗ = рс.ВыполнитьИнструкцию(ТекстЗапроса);

транслируется в
  SELECT 
Рег.Товар as [Товар $Справочник.Номенклатура],
Рег.ПоСчету as [ПоСчету $Документ]
Рег.РезервТовараОстаток  as РезервТовара
FROM (
select
rg2409_vt.sp2405 as ПоСчету,
rg2409_vt.sp2404 as Товар,
rg2409_vt.sp2406 as Склад,
rg2409_vt.sp2517 as ПоЗаявке,
rg2409_vt.sp2407 as Сотрудник,
rg2409_vt.sp2408 as РезервТовараОстаток
from rg2409 as rg2409_vt (nolock)
where rg2409_vt.period={d '2004-09-01'}
and (
rg2409_vt.sp2408 <> 0
)
) as Rests2409 ('#20040804 333610000      1778   ',,Товар in (Select val from #ГруппаТоваров) AND (Склад ='     9   ') and (ПоЗаявке = '   15B   '), ,) AS Рег

и потом ругается
ТЗ = рс.ВыполнитьИнструкцию(ТекстЗапроса);
{Глобальный модуль(3996)}: State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 5: Incorrect syntax near 'Рег'.
Понимаю что ошибка здесь - "as Rests2409 ('#20040804 333610000      1778   ',,Товар in (Select val from #ГруппаТоваров) AND (Склад ='     9   ') and (ПоЗаявке = '   15B   '), ,) AS Рег
"
Но как от нее избавиться?
  
Наверх
 
IP записан
 
quest
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 19
Зарегистрирован: 21. Августа 2006
Re: 1C++ Получение итогов
Ответ #4 - 22. Августа 2006 :: 09:02
Печать  
Так. Косяк был в пробеле перед скобкой... Не ожидал.

Но теперь другая проблема, запрос транслиреутся в
SELECT 
рег.Товар as [Товар $Справочник.Номенклатура],
рег.ПоСчету as [ПоСчету $Документ] ,
рег.РезервТовараОстаток  as РезервТовара
FROM (
select
rr2409_vt.sp2405 as ПоСчету,
rr2409_vt.sp2404 as Товар,
rr2409_vt.sp2406 as Склад,
rr2409_vt.sp2517 as ПоЗаявке,
rr2409_vt.sp2407 as Сотрудник,
sum(rr2409_vt.sp2408) as РезервТовараОстаток
from (
select
rg2409_vt.sp2405,
rg2409_vt.sp2404,
rg2409_vt.sp2406,
rg2409_vt.sp2517,
rg2409_vt.sp2407,
rg2409_vt.sp2408
from rg2409 as rg2409_vt (nolock)
where rg2409_vt.period={d '0000-00-00'}
and (rg2409_vt.sp2404 in (Select val from #ГруппаТоваров) AND (rg2409_vt.sp2406 ='     9   ') and (rg2409_vt.sp2517 = '   15B   '))
union all
select
ra2409_vt.sp2405,
ra2409_vt.sp2404,
ra2409_vt.sp2406,
ra2409_vt.sp2517,
ra2409_vt.sp2407,
case ra2409_vt.debkred when 0 then ra2409_vt.sp2408 else -ra2409_vt.sp2408 end
from ra2409 as ra2409_vt (nolock)
where ra2409_vt.date_time_iddoc > '00000000' and ra2409_vt.date_time_iddoc < '#20040804 333610000      1778   '
and (ra2409_vt.sp2404 in (Select val from #ГруппаТоваров) AND (ra2409_vt.sp2406 ='     9   ') and (ra2409_vt.sp2517 = '   15B   '))
) as rr2409_vt
group by
rr2409_vt.sp2405,
rr2409_vt.sp2404,
rr2409_vt.sp2406,
rr2409_vt.sp2517,
rr2409_vt.sp2407
having
sum(rr2409_vt.sp2408) <> 0
) as рег
и на
ТЗ = рс.ВыполнитьИнструкцию(ТекстЗапроса);
ругается -
{Глобальный модуль(3992)}: State 22007, native 241, message [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting datetime from character string.

Как правильно установить дату?

Извините за глупые вопросы, но в документации ничего не нашел по этому поводу Печаль
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1C++ Получение итогов
Ответ #5 - 22. Августа 2006 :: 09:17
Печать  
Цитата:
Для формирования моментов времени также можно воспользоваться позицией документа: процедурой СформироватьПозициюДокумента() синтаксис 1, указывая не нулевой ФлагСмещения; или СформироватьПозициюДокумента() синтаксис 2.

Цитата:
Модификаторы определены для следующих типов 1С:

Строка:

0: char() - строка как есть;
1: char(23) - должна быть передана позиция документа, из которой будет сформирована строка в формате date_time_iddoc.
  

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



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1C++ Получение итогов
Ответ #6 - 22. Августа 2006 :: 09:28
Печать  
quest писал(а) 22. Августа 2006 :: 09:02:
Как правильно установить дату?

Извините за глупые вопросы, но в документации ничего не нашел по этому поводу Печаль

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

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
quest
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 19
Зарегистрирован: 21. Августа 2006
Re: 1C++ Получение итогов
Ответ #7 - 22. Августа 2006 :: 09:40
Печать  
Спасибо. Не дочитал просто документацию....
Проблема была в модификаторах, правильно
     ТекстЗапроса = "
     | SELECT 
     | рег.Товар as [Товар $Справочник.Номенклатура],
     | рег.ПоСчету as [ПоСчету $Документ] ,
     | рег.РезервТовараОстаток  as РезервТовара
     | FROM $РегистрОстатки.РезервыТоваров(:ДатаРасчета~,,Товар in (Select val from #ГруппаТоваров) AND (Склад =:ВыбСклад) and (ПоЗаявке= :ВыбЗаявка~ ),,)  as рег";

Всем спасибо кто помогал. Кстати увеличение по сравнению с 1С - в 8 раз!!!!
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать