Переключение на Главную Страницу Страницы: 1 ... 21 22 [23] 24 25 ... 51 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПрямойЗапрос" - обсуждения. Часть № 2. (число прочтений - 258732 )
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #330 - 10. Мая 2012 :: 08:13
Печать  
vandalsvq писал(а) 08. Мая 2012 :: 21:07:
Почему ты используешь "УложитьСписокГрупп"??? При этом потом сравнение делаешь поля контрагент, которое почти наверняка ссылка, а в таблице у тебя уложены группы.

Ну как я понял из описания, если передать в этот метод группу справочника, то он уложить в ВТ все подчиненные ей элементы (и элементы вложенных групп).
Разве не так?)
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #331 - 10. Мая 2012 :: 09:58
Печать  
Не так Улыбка)) она укладывает не подчиненные элементы, а подчиненные элементы с признаком "Это группа".

Документацию распечатать, свернуть, выкурить и придет озарение Подмигивание
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #332 - 10. Мая 2012 :: 11:07
Печать  
vandalsvq писал(а) 10. Мая 2012 :: 09:58:
Не так Улыбка)) она укладывает не подчиненные элементы, а подчиненные элементы с признаком "Это группа".

Документацию распечатать, свернуть, выкурить и придет озарение Подмигивание

Точно, невнимательно прочитал. Эх, только зря кипишь поднял.
Тогда такой вопрос - как мне собрать все подчиненные элементы? Отдельным запросом? (или просто перебором?)
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #333 - 10. Мая 2012 :: 11:13
Печать  
Код
Выбрать все
УложитьСписокОбъектов(Родитель, "#Таблица", ИмяСправочника);
ТаблицаДанных = Запрос.Выполнить(, "ВЫБРАТЬ val ИЗ #Таблица"); 


Так не подойдет?
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #334 - 11. Мая 2012 :: 00:34
Печать  
vandalsvq писал(а) 10. Мая 2012 :: 11:13:
Код
Выбрать все
УложитьСписокОбъектов(Родитель, "#Таблица", ИмяСправочника);
ТаблицаДанных = Запрос.Выполнить(, "ВЫБРАТЬ val ИЗ #Таблица"); 


Так не подойдет?

ТО что доктор прописал! Улыбка Спасибо!
В следующий раз буду читать внимательней документацию Улыбка

Цитата:
Если задана иерархия (название справочника либо плана счетов), то вместо объектов-групп выгружаются все входящие в группу элементы/счета всех нижележащих уровней. Сами группы при этом не выгружаются.
  
Наверх
 
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #335 - 12. Мая 2012 :: 12:01
Печать  
Пардон, вопрос не в ту ветку...
  
Наверх
ICQ  
IP записан
 
novichek
Экс-Участник


Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #336 - 15. Мая 2012 :: 11:36
Печать  
Верно ли я понимаю, что если периодический реквизит справочника может изменяться документами и вручную, то $СрезПоследних проигнорирует ручные изменения?
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #337 - 15. Мая 2012 :: 17:19
Печать  
Срез анализирует какие реквизиты запрошены и отбирает как ручные так и документарные
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #338 - 22. Мая 2012 :: 06:55
Печать  
Возвращаюсь к теме остатков на ТА

вот запрос

     рс = СоздатьОбъект("ПрямойЗапрос");
     //Данный фрагмент построен конструктором.
     //При повторном использовании конструктора внесенные вручную изменения будут потеряны!!!
     ТекстЗапроса = "-- qryMaker:Тест.2012.05.09.17.52.42
           |SELECT ОстаткиТМЦОстаткиОбороты.Номенклатура [Номенклатура $Справочник.Номенклатура]
           |      , ОстаткиТМЦОстаткиОбороты.Склад [Склад $Справочник.Склады]
           |      , ОстаткиТМЦОстаткиОбороты.КоличествоНачальныйОстаток
           |      , ОстаткиТМЦОстаткиОбороты.КоличествоПриход
           |      , ОстаткиТМЦОстаткиОбороты.КоличествоРасход
           |      , ОстаткиТМЦОстаткиОбороты.КоличествоКонечныйОстаток
           |FROM $РегистрОстаткиОбороты.ОстаткиТМЦ(:НачДата,
           |            :КонДата~,,ДвиженияИГраницыПериода,
           |            (Номенклатура IN (:ВыбНом))
           |            AND (Склад IN (:ВыбСклад)),
           |            (Номенклатура, Склад),) AS ОстаткиТМЦОстаткиОбороты
           |";
     рс.УстановитьТекстовыйПараметр("ВыбНом", ВыбНом);
     рс.УстановитьТекстовыйПараметр("ВыбСклад", ВыбСклад);
     рс.УстановитьТекстовыйПараметр("НачДата", НачДата);
     рс.УстановитьТекстовыйПараметр("КонДата", КонДата);
     тз =  рс.Выполнить(,ТекстЗапроса);
     тз.ВыбратьСтроку();

Не видит последний документ на ТА приход
А вот если использовать не класс прямой запрос, а через просто СоздатьОбъект("ODBCRecordset") - видит. В чем дело может быть?
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #339 - 22. Мая 2012 :: 07:11
Печать  
Давай версию класса и текст запроса в режиме отладки
  
Наверх
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #340 - 22. Мая 2012 :: 12:35
Печать  
Добрый день. Не получается получить срез последних на дату. База - DBF.

ТекстЗапроса:
Код
Выбрать все
глМетаДата = СоздатьОбъект("MetadataWork");
РеквизитЦены = Метаданные.Справочник("Номенклатура").Реквизит("ДисконтнаяЦена").Идентификатор;
ИдЦены = глМетаДата.ИДРеквизитаСправочника("Номенклатура",РеквизитЦены);
Сообщить("Идентификатор = "+ИдЦены);

ТекстЗапроса = "
|ВЫБРАТЬ
|	История.ТекущийЭлемент КАК [Товар $Справочник.Номенклатура]
|,	История."+РеквизитЦены+" КАК Цена
|ИЗ
|	$СрезПоследних.Номенклатура(:ДатаКон,("+РеквизитЦены+")) КАК История
|";

ПрямойЗапросDBF.УстановитьТекстовыйПараметр("ДатаКон",ДатаЗавершенияПериода);
ПрямойЗапросDBF.Текст = ТекстЗапроса;
ПрямойЗапросDBF.Выполнить().Выгрузить(ТаблицаЗначенийЦен);

ТаблицаЗначенийЦен.ВыбратьСтроку(,РеквизитЦены); 



Получаю пустую таблицу значений!

Отладка:
Цитата:
1. Формирование цен:
- ОптоваяЦена
Идентификатор = 36
SELECT
           История.ТекущийЭлемент AS [Товар $Справочник.Номенклатура]
,      История.ДисконтнаяЦена AS Цена
FROM
           (
     select
           vt_slicelast_SC33.ТекущийЭлемент
           
           ,max(vt_slicelast_SC33.ДисконтнаяЦена) as ДисконтнаяЦена
     from (
           select
                 slicelast_SC33.objid ТекущийЭлемент
                 
                 ,case when slicelast_SC33.id = '  10' then slicelast_SC33.VALUE end ДисконтнаяЦена
           from (
                 
                 select tconst_2.objid, tconst_2.id, tconst_2.date, tconst_2.time, tconst_2.docid, tconst_2.value
                 from (select tconst_1.objid, tconst_1.id, max(const_j.idx_date_time_iddoc) date_time_iddoc
                       from [_1S.CONST] tconst_1
                             left join [Журнал] const_j
                             on tconst_1.docid = const_j.iddoc
                       
                       where tconst_1.date <= '20110101'
                       and tconst_1.id = '  10'
                       
                       group by tconst_1.id, tconst_1.objid) slicelast_SC331
                 left join [_1S.CONST] tconst_2
                 on slicelast_SC331.id = tconst_2.id
                 and slicelast_SC331.objid = tconst_2.objid
                 and substr(slicelast_SC331.date_time_iddoc, 1, 8) = tconst_2.date
                 and substr(slicelast_SC331.date_time_iddoc, 9, 6) = tconst_2.time
                 and substr(slicelast_SC331.date_time_iddoc, 15, 9) = tconst_2.docid
           ) slicelast_SC33
     ) vt_slicelast_SC33
     group by vt_slicelast_SC33.ТекущийЭлемент
           

) AS История
Подбор индекса для таблицы 1SCONST:
     Ограничения: DATE<=; ID=;
     Упорядочить: ID, OBJID,
     Найдено в кэше
     Выбран индекс IDD: ID+OBJID+DTOS(DATE)+TIME+DOCID+STR(PARTNO,3)
     Попадает в сортировку
     Стоимость: 40
Подбор индекса для таблицы 1SCONST:
     Ограничения: DATE<=; ID=;
     Упорядочить: ID, OBJID,
     Найдено в кэше
     Выбран индекс IDD: ID+OBJID+DTOS(DATE)+TIME+DOCID+STR(PARTNO,3)
     Попадает в сортировку
     Стоимость: 40
Подбор индекса для таблицы 1SJOURN:
     Ограничения: IDDOC=;
     Найдено в кэше
     Выбран индекс IDDOC: IDDOC
     Стоимость: 20
Подбор индекса для таблицы 1SJOURN:
     Ограничения: IDDOC=;
     Найдено в кэше
     Выбран индекс IDDOC: IDDOC
     Стоимость: 20
Подбор индекса для таблицы 1SCONST:
     Ограничения: DATE=; TIME=; DOCID=; OBJID=; ID=;
     Найдено в кэше
     Выбран индекс IDD: ID+OBJID+DTOS(DATE)+TIME+DOCID+STR(PARTNO,3)
     Стоимость: 24
Подбор индекса для таблицы 1SCONST:
     Ограничения: DATE=; TIME=; DOCID=; OBJID=; ID=;
     Найдено в кэше
     Выбран индекс IDD: ID+OBJID+DTOS(DATE)+TIME+DOCID+STR(PARTNO,3)
     Стоимость: 24
Время подготовки запроса: 7 мс, время выполнения запроса: 3439 мс.
Формирование цен завершено. Время работы: 0/00:00:04.833

Объект MetadataWork возвращает представление периодического реквизита в БД = число 36. Разбор запроса почему-то показывает строковое представление этого идентификатора = '  10'.
Что я делаю не так?

P.S. ПрямойЗапросDBF.Версия = "1.8.4 25.02.2012"
  
Наверх
 
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #341 - 22. Мая 2012 :: 16:37
Печать  
вот запрос, который получился в отладке
(тема насчет ТА)

SELECT ОстаткиТМЦОстаткиОбороты.Номенклатура [Номенклатура $Справочник.Номенклатура]
     , ОстаткиТМЦОстаткиОбороты.Склад [Склад $Справочник.Склады]
     , ОстаткиТМЦОстаткиОбороты.КоличествоНачальныйОстаток
     , ОстаткиТМЦОстаткиОбороты.КоличествоПриход
     , ОстаткиТМЦОстаткиОбороты.КоличествоРасход
     , ОстаткиТМЦОстаткиОбороты.КоличествоКонечныйОстаток
FROM (select
     vt_totalreg.Номенклатура as Номенклатура
     ,vt_totalreg.Склад as Склад
     ,sum(vt_totalreg.КоличествоОстаток) as КоличествоНачальныйОстаток
     ,sum(vt_totalreg.КоличествоПриход) as КоличествоПриход
     ,sum(vt_totalreg.КоличествоРасход) as КоличествоРасход
     ,sum(vt_totalreg.КоличествоОборот) as КоличествоОборот
     ,sum(vt_totalreg.КоличествоОстаток) + sum(vt_totalreg.КоличествоОборот) as КоличествоКонечныйОстаток
from(select
                 vt_balance.Номенклатура as Номенклатура
           ,vt_balance.Склад as Склад
                 ,vt_balance.КоличествоОстаток as КоличествоОстаток
           ,0 as КоличествоПриход
           ,0 as КоличествоРасход
           ,0 as КоличествоОборот
           from (
     SELECT
           Номенклатура
           ,Склад
           ,SUM(КоличествоОстаток) AS КоличествоОстаток
           
     FROM
           (SELECT
                 rg_405.sp408 AS Номенклатура
                 ,rg_405.sp418 AS Склад
                 ,rg_405.sp411 AS КоличествоОстаток
                 
           FROM
                 RG405 AS rg_405 (nolock)
           WHERE
                 rg_405.PERIOD = '20120501'
           AND
                 (rg_405.sp408 IN ('   398   '))
           AND (rg_405.sp418 IN ('     1   '))
           
           UNION ALL
           
           SELECT
                 ra_405.sp408
                 ,ra_405.sp418
                 ,CASE WHEN ra_405.debkred = 0 THEN -ra_405.sp411 ELSE ra_405.sp411 END
                 
           FROM
                 _1SJOURN AS docjourn (nolock)
           LEFT JOIN RA405 AS ra_405 (nolock)
           ON ra_405.IDDOC = docjourn.IDDOC
           WHERE (docjourn.DATE_TIME_IDDOC >= '20120521     0     0   ')
           AND (docjourn.DATE_TIME_IDDOC < '20120521BFW3Q8')            AND
                 (ra_405.sp408 IN ('   398   '))
           AND (ra_405.sp418 IN ('     1   '))
           ) AS vt_ra_405
     GROUP BY
           Номенклатура
           ,Склад
     HAVING (SUM(КоличествоОстаток) <> 0)
     
) as vt_balance
           
           union all
           
           select
           vt_turnover.Номенклатура
           ,vt_turnover.Склад
           ,0
           ,vt_turnover.КоличествоПриход
           ,vt_turnover.КоличествоРасход
           ,vt_turnover.КоличествоОборот
     from (
     SELECT
           Номенклатура
           ,Склад
           ,SUM(КоличествоПриход) AS КоличествоПриход
           ,SUM(КоличествоРасход) AS КоличествоРасход
           ,SUM(КоличествоОборот) AS КоличествоОборот
           
     FROM
           (SELECT
                 ra_405.sp408 AS Номенклатура
                 ,ra_405.sp418 AS Склад
                 ,CASE WHEN ra_405.debkred = 0 THEN ra_405.sp411 ELSE 0 END AS КоличествоПриход
                 ,CASE WHEN ra_405.debkred = 1 THEN ra_405.sp411 ELSE 0 END AS КоличествоРасход
                 ,CASE WHEN ra_405.debkred = 0 THEN ra_405.sp411 ELSE -ra_405.sp411 END AS КоличествоОборот
                 
           FROM
                 RA405 AS ra_405 (nolock)
           INNER JOIN _1SJOURN AS docjourn (nolock)
           ON ra_405.IDDOC = docjourn.IDDOC
           WHERE (docjourn.DATE_TIME_IDDOC >= '20120521     0     0   ')
           AND (docjourn.DATE_TIME_IDDOC < '20120521BFW3Q8')            AND
                 (ra_405.sp408 IN ('   398   '))
           AND (ra_405.sp418 IN ('     1   '))
           ) AS vt_ra_405
     GROUP BY
           Номенклатура
           ,Склад
     HAVING (SUM(КоличествоПриход) <> 0)
     OR (SUM(КоличествоРасход) <> 0)
     OR (SUM(КоличествоОборот) <> 0)
     
) as vt_turnover
       ) as vt_totalreg
group by
     vt_totalreg.Номенклатура,vt_totalreg.Склад
HAVING (sum(vt_totalreg.КоличествоОстаток) <> 0)
OR (sum(vt_totalreg.КоличествоПриход) <> 0)
OR (sum(vt_totalreg.КоличествоРасход) <> 0)
OR (sum(vt_totalreg.КоличествоОборот) <> 0)

) AS ОстаткиТМЦОстаткиОбороты

Версия класса последняя 011, да и на 007 то же самое. Разбирал функцию получения ТА и БИ в классе - вроде правильно написано.. А вот выделенное - очень смущает. Там разве равно не пропущено?
  
Наверх
 
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 13. Января 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #342 - 22. Мая 2012 :: 17:02
Печать  
ТАК, новости продолжаются -
Ситуация - ТА = 21.05.12 на документе ПоступлениеТМЦ
Если Делаю выложэенный выше отчет за период с 21.05.12 по 21.05.12, то в остатке и в начальном и в конечном количество  С УЧЕТОМ ПРИХОДА!!! (2000 штук), т.е. берет он кон остаток на ТА, но приход и расход равны 0 естественно, как будто он и начальную дату и конечную воспринимает как дату на ТА, делаю период с 01.05.12 по 21.05.12 - картина меняется, и конечный остаток 1000 штук!!! т.е. уже не видит приход последний!! Причем второй вариант возникает тогда когда беру период с даты предыдущего движения по этому товару. Надеюсь понятно описал?
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #343 - 22. Мая 2012 :: 17:44
Печать  
Версия определяется как
Код
Выбрать все
ПрямойЗапрос = СоздатьОбъект("ПрямойЗапрос");
Сообщить("Версия: "+ПрямойЗапрос.Версия) 

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


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #344 - 22. Мая 2012 :: 19:04
Печать  
Скажи мне пожалуйста какая версия? (Именно прочитай из переменной Версия самого класса). Нумерация когда возможно было 011 и 007 была еще в конце 10-го года. На дворе 12-й, последняя версия 1.8.4 от 25.02.2012.
У меня такая проблема не подтверждается. А ранее была, боролся с ней где-то версиях 1.07.016, 1.7.20, после ошибки по проблеме с границей по ТА не было
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 21 22 [23] 24 25 ... 51
ОтправитьПечать