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



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #345 - 22. Мая 2012 :: 20:33
Печать  
Кстати, по поводу остатков на ТА, я делал так: передавал в качестве конечной даты ПолучитьДатуТА()+1, а то получается, что остатки рассчитывались на начало дня ТА (по крайней мере в предыдущих версиях так и было).  Улыбка
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #346 - 23. Мая 2012 :: 03:27
Печать  
А начиная с версии 1.8.5 так больше не будет.

1.8.5 от 23.05.12 г.
- Исправлена ошибка расчета даты, если в качестве даты указан документ с модификатором «~» (т.е. по документ). Таким образом это коснулось всех ВТ где в качестве границ периода можно передать документ.
  

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



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #347 - 23. Мая 2012 :: 05:06
Печать  
Доброе утро. Не получается получить срез последних на дату. База - 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 записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #348 - 23. Мая 2012 :: 07:35
Печать  
Отбой. Поставил последнее обновление. Заработало.  Очень довольный
  
Наверх
 
IP записан
 
temrmal
Junior Member
**
Отсутствует


1C++ rocks!

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

стандартный 1С++ - where ra405_vt.date_time_iddoc > '20120501' and ra405_vt.date_time_iddoc < '20120525AUX034  4B2EЦБ2

класс ПЗ - "WHERE (docjourn.DATE_TIME_IDDOC >= '20120501     0     0   ') AND (docjourn.DATE_TIME_IDDOC < '20120525AUX034')"

вот что теперь делать?
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

Пы.сы. поставил ТиС (демо). Выставил ТА на документ поступление. Сделал запрос РегистрОстаткиОбороты(:КонДата, :КонДата~), где "КонДата" - документ на котором я ранее выставил ТА. Остатки обороты показали все верно. Остаток на начало периода, + приход, = остаток на конец периода. При этом запрос выполнен верно. Что я делал не так?
  

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


1C++ rocks!

Сообщений: 58
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #351 - 20. Июня 2012 :: 18:49
Печать  
Помогите правильно УложитьТаблицуЗначений с идентификаторами видов документов, что можно было использовать в условии отбора по полю ВидДокумента таблицы ЖурналДокументов.

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


1C++ rocks!

Сообщений: 58
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #352 - 21. Июня 2012 :: 07:28
Печать  
Есть запрос
Код
Выбрать все
"
|ВЫБРАТЬ
|	 $ж.ДатаДокумента	КАК [Дата $Дата]
|	,$ж.ТекущийДокумент	КАК [Документ $Документ]
|	,$ж.ВидДокумента	КАК	[Документ_вид ]
|	,СРЕД($Ссылки.ЗначениеОтбора,7,9)		КАК	[Автор $Справочник.Пользователи]
|ИЗ
|	ЖурналДокументов КАК ж $nolock
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
|	СсылкиДокументов КАК Ссылки $nolock
|ПО
|	$Ссылки.ТекущийДокумент = $ж.ТекущийДокумент
|ГДЕ
|	$Ссылки.ГрафаОтбора = :ГрафаОтбора.жАвтор
|И
|	$ж.ВидДокумента В
|		(ВЫБРАТЬ ВидДокумента ИЗ #СписокВидовДокументов)
|";
 



Как мне правильно типизировать #СписокВидовДокументов, чтоб работал отбор по этой таблице?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #353 - 21. Июня 2012 :: 07:36
Печать  
artamir писал(а) 21. Июня 2012 :: 07:28:
Как мне правильно типизировать #СписокВидовДокументов, чтоб работал отбор по этой таблице?


в список кидай _idtostr(глМД.ИдДокумента("Реализация") )
глМД - объект метадатаворк
например..

или вот так в запросе
iddocdef in ($ВидДокумента36.Реализация,$ВидДокумента36.ПКО)
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #354 - 21. Июня 2012 :: 14:46
Печать  
Eprst писал(а) 21. Июня 2012 :: 07:36:
artamir писал(а) 21. Июня 2012 :: 07:28:
Как мне правильно типизировать #СписокВидовДокументов, чтоб работал отбор по этой таблице?


в список кидай _idtostr(глМД.ИдДокумента("Реализация") )
глМД - объект метадатаворк
например..

или вот так в запросе
iddocdef in ($ВидДокумента36.Реализация,$ВидДокумента36.ПКО)


к сожалению не получилось  Печаль.
Первый вариант выдает пустую таблицу,
а второй выдает ошибку.

РежимОтладки выдает следующее:

Цитата:
SELECT
      ж.DATE      AS [Дата $Дата]
     ,ж.IDDOC      AS [Документ $Документ]
     ,ж.IDDOCDEF      AS      [Документ_вид ]
     ,SUBSTR(Ссылки.PARENTVAL,7,9)            AS      [Автор $Справочник.Пользователи]
FROM
     [Журнал] AS ж
INNER JOIN
     [_1S.CRDOC] AS Ссылки
ON
     Ссылки.CHILDID = ж.IDDOC
WHERE
     Ссылки.MDID = ' 7T2'
AND
     ж.IDDOCDEF IN
($ВидДокумента.РасхНалоговаяНакладная,$ВидДокумента.РасходнаяНакладная)
ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : no such column: $ВидДокумента.РасхНалоговаяНакладная
ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса,ПолучательЗапроса);
1052012\SystemData\Classes\ПрямыеЗапросы\ПрямойЗапрос.ert(13401) }

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


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #355 - 21. Июня 2012 :: 15:27
Печать  
Код
Выбрать все
|	$ж.ВидДокумента В
|		($ВидДокумента.Реализация, $ВидДокумента.ПКО, $ВидДокумента.РКО) 

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


1C++ rocks!

Сообщений: 58
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #356 - 21. Июня 2012 :: 16:16
Печать  
Все равно выдает ошибку Печаль

ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : no such column: $ВидДокумента.РасхНалоговаяНакладная
ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса,ПолучательЗапроса);
1052012\SystemData\Classes\ПрямыеЗапросы\ПрямойЗапрос.ert(13401) }
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #357 - 21. Июня 2012 :: 16:17
Печать  
а ВидДокумента случайно это не предопределенная текстовая переменная?
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #358 - 21. Июня 2012 :: 16:19
Печать  
УРА!!!!
Нужно было всего-лишь заменить $ на :
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #359 - 26. Июня 2012 :: 05:41
Печать  
ХЕЛП!

Код
Выбрать все
ВЫБРАТЬ
	СОКРП($Спр.Код) КАК [КодИсх $Строка],
	$Спр.ТекущийЭлемент КАК [ТоварИсх $Справочник.Номенклатура],
	$СпрАлк.ТекущийЭлемент КАК [ТоварАлк $Справочник.АлкНоменклатура],
	РегАлк.КоличествоОборот КАК Оборот,
	$РегАлк.ТекущийДокумент КАК [ТекДок $Документ],
	$РегАлк.ВидДокумента КАК [ТекДок_Вид $ВидДокумента],
	$СпрАлк.Производитель КАК [Производитель $Справочник.Контрагенты],
	$СпрАлк.Импортер КАК [Импортер $Справочник.Контрагенты]
ИЗ
	Справочник.Номенклатура КАК Спр $nolock
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	$РегистрОстаткиОбороты.ДвиженияАлкоголя(:лДатаНач,:лДатаКон~,ДОКУМЕНТ,,
								,
								(Номенклатура),
								(Количество),) КАК РегАлк
ПО
	$Спр.ТекущийЭлемент = РегАлк.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ
	Справочник.АлкНоменклатура КАК СпрАлк $nolock
ПО
	$Спр.ТекущийЭлемент = $СпрАлк.Товар
ГДЕ
	$Спр.ТекущийЭлемент В (ВЫБРАТЬ val ИЗ #СписТов)
 



Ошибка: ", Число БезПодготовки=0) : no such column: $РегАлк.ТекущийДокумент" Печаль
Что не так?
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 22 23 [24] 25 26 ... 51
ОтправитьПечать