Переключение на Главную Страницу Страницы: 1 ... 41 42 [43] 44 45 ... 51 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПрямойЗапрос" - обсуждения. Часть № 2. (число прочтений - 244271 )
Alexx_S
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 41
Местоположение: UA
Зарегистрирован: 23. Сентября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #630 - 24. Марта 2014 :: 13:25
Печать  
В отладке смущает строка :

Подбор индекса для таблицы 1SCONST:
     Ограничения: DATE<=;
     Упорядочить: OBJID, ID,
     Найдено в кэше
     Индекс не выбран.
     Стоимость: 9980

Незнаю куда копать Печаль
  
Наверх
 
IP записан
 
Alexx_S
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 41
Местоположение: UA
Зарегистрирован: 23. Сентября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #631 - 24. Марта 2014 :: 14:00
Печать  
Вопрос снят. Решил через $ПоследнееЗначение
  
Наверх
 
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #632 - 30. Марта 2014 :: 12:37
Печать  
А это фишка такая да?
перемучался пока не понял в ВТ ОстаткиОбороты параметр :Начало работает, а вот :Конец падает на ошибки не найдено as что то типа такого, а выясняется, что парсер этот параметр меняет на END Улыбка
Заменил на НачалоПериода и КонецПериода стало работать, но не айс Подмигивание
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #633 - 30. Апреля 2014 :: 09:28
Печать  
1C ДБФ падает если задать период больше 3 месяцев.
Если устанавливать период квартал, то все нормально.

лТЗ = "
     |ВЫБРАТЬ
     |      ОстаткиОборотыОсновной.Субконто1            КАК [Агент                  $Субконто      ]
     |,      ОстаткиОборотыОсновной.Субконто1_вид      КАК [Агент_вид            $ВидСубконто]
     |,      ОстаткиОборотыОсновной.Субконто2            КАК [ТаксаХХ            $Субконто      ]
     |,      ОстаткиОборотыОсновной.Субконто2_вид      КАК [ТаксаХХ_вид      $ВидСубконто]
     |,      ОстаткиОборотыОсновной.НачалоПериода      КАК [НачалоПериода      $Дата            ]
     
     |,      ОстаткиОборотыОсновной.СуммаНачальныйОстаток      КАК [СН_Сумма            $Число      ]
     |,      ОстаткиОборотыОсновной.ВалютаНачальныйОстаток      КАК [СН_СумКорп            $Число      ]
     |,      ОстаткиОборотыОсновной.СуммаОборот                        КАК [Оборот_Сумма      $Число      ]
     |,      ОстаткиОборотыОсновной.ВалютаОборот                        КАК [Оборот_СумКорп      $Число      ]
     |,      ОстаткиОборотыОсновной.СуммаКонечныйОстаток            КАК [СК_Сумма            $Число      ]
     |,      ОстаткиОборотыОсновной.ВалютаКонечныйОстаток      КАК [СК_СумКорп            $Число      ]
     |
     |
     |ИЗ
     |      $БИОстаткиОбороты.Основной(            :ДатаНач~
                                                     |,      :ДатаКон~
                                                     |,      МЕСЯЦ ДОПОЛНЕНИЕ
                                                     |,      
                                                     |,      #СчетаТКС
                                                     |,      (Сотрудники, ТаксыХХ)
                                                     |,      (Сумма, Валюта)
                                                     |,
                                                     |) КАК ОстаткиОборотыОсновной";
  
Наверх
 
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #634 - 19. Мая 2014 :: 08:24
Печать  
Обнаружилась видимо ошибка класса.
Вот тема http://www.1cpp.ru/forum/YaBB.pl?num=1400237399/6#6

Попробовал снять галку отбор, результат не изменился.
Причем косяк возникает только на dbf версии.
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #635 - 26. Мая 2014 :: 08:20
Печать  
Хелп!
Надо
Код
Выбрать все
$ПоследнееЗначение.Цены.Цена($СпрЦеныВыб.ТекущийЭлемент,$Жур.ПозицияДокумента) 


на дбф взлетает, на СКЛь падает (Conversion failed when converting datetime from character string.)
Залез в доку и сам класс. Нашел неутешительное:
"...Если подставляется текстовый параметр то значением параметра может выступать документ или дата. Значением реквизита может выступать только дата."
В классе вижу, что в случае внутреннего реквизита запроса значение не парсится и предполагается только "Дата". Как быстро сделать, чтобы парсилась ПозицияДокумента?

З.Ы.
На самом деле довольно критичная хотелка: строим отчет по продажам в нужном типе цен. При этом цена меняется создана переоценкой, допустим в 14:45, документ - в 15:10. В итоге по документу = 0 по этому типу цены  Печаль
« Последняя редакция: 26. Мая 2014 :: 09:47 - Dolly_EV »  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #636 - 26. Мая 2014 :: 16:39
Печать  
2 Dolly_EV.
Не уверен что надо менять класс, во-первых запросы будут не оптимальными если снимать по позиции, во-вторых и без него решение существует.

1. Считал данные, документы все во временную таблицу уложил
2. Считал все данные по ценам с позиция документа, цена
3. Сделал соединение таблицы документов и таблицы цен с условием ПозицияДокумента < ПозицияДокументаЦены
4. Результат сгруппировал по "ПозицияДокумента" и вычислил максимум(позицияДокументаЦены)
5. Итоговый сбор
- таблица данных
- таблица максимальных позиций (по позиции документа)
- таблица цен (по позиции документа цены)
Примерный набросок запросов

Код
Выбрать все
insert into #t
select t.iddoc
from ЖурналДокументов;

insert into #t1
select t.iddoc, t.price
from ИсторияЗначений;

insert into #t2
select t.iddoc, max(t1.iddoc) as iddoc_p
from #t as t
left join #t1 as t1
on t.iddoc < t1.iddoc
group by t.iddoc;

select t.iddoc, t1.price
from #t as t
left join #t2
on t.iddoc = t2.iddoc
left join #t1 as t1
on t2.iddoc_p = t1.iddoc; 

  

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #637 - 26. Мая 2014 :: 16:42
Печать  
Ну и в продолжение. Через ИТ наверняка даже лучше можно решить задачу.
Просто в ИТ грузишь таблицу цен по документам и уже при выводе отчета считаешь данные по цене. Ну и пересчитываешь другие показатели.
  

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


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #638 - 27. Мая 2014 :: 00:31
Печать  
vandalsvq писал(а) 26. Мая 2014 :: 16:39:
2 Dolly_EV.
Не уверен что надо менять класс, во-первых запросы будут не оптимальными если снимать по позиции

Ну хотя бы возможность модификатора, чтобы считалось на конец даты?

vandalsvq писал(а) 26. Мая 2014 :: 16:39:
, во-вторых и без него решение существует.

Это очень длинный обходной путь в моем случае, т.к. отчет - универсальный, и показатель "По типу цен" там один из многих, и ради этого огород городить с временными тз не хочется. Тем более, что отчет уже полностью рабочий и остался только этот момент.
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #639 - 27. Мая 2014 :: 02:37
Печать  
2 Dolly_EV
Есть проблема что в ближайшее время (неделя, две) я вообще не планировал садиться за 7-ку, даже просто ради развлечения. У меня 3-4 незаконченных проекта. Так что боюсь я пока плохой помощник.

Так что прости, но пока решай вопрос самостоятельно.
  

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


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #640 - 02. Июня 2014 :: 21:15
Печать  
Dolly_EV писал(а) 26. Мая 2014 :: 08:20:
Хелп!
Надо
Код
Выбрать все
$ПоследнееЗначение.Цены.Цена($СпрЦеныВыб.ТекущийЭлемент,$Жур.ПозицияДокумента) 


на дбф взлетает, на СКЛь падает....

...При этом цена меняется создана переоценкой, допустим в 14:45, документ - в 15:10. ... (


а почему бы не

Код
Выбрать все
та,8)) 



Из документации:
•      Дата – Тип: Строка. Текстовый параметр или реквизит запроса

Должно взлететь на конец дня (не пробовал, но должно).
  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #641 - 06. Июня 2014 :: 23:20
Печать  
Намучался я с модификаторами параметров. Набил шишек.
Хочу поделится.

Коротко:

Описание модификаторов ODBC:      
http://1cpp.ru/docum/icpp/html/ODBC.html#id42            

Для прямого запроса - в документации (word):      
http://www.1cpp.ru/forum/YaBB.pl?num=1273512019      

Согласно описаний в документациях
- поведение модификаторов ODBCRecordSet и ПрямойЗапрос
у обоих объектов должны совпадать, но не совпадают.

Более подробно:
- с различиями "в цвете" так сказать
- плюс с внешним отчетом (UnitTest расхождений)

вот в этой теме
http://www.1cpp.ru/forum/YaBB.pl?num=1402096437

Создал отдельную тему,
- чтобы бросалось в глаза как "напоминалка для всех"
- имеет отношение к объекту ODBC, а не только к ПрямойЗапрос.

Прошу прощения за дубль.

PS. (2014-06-09) нашел решение. Описано по ссылке, что выше.

Уважаемый vandalsvq

Можно ли ждать такое исправление в классе (как в предложенном по ссылке решении)?
Ведь делов-то: добавить одну строчку кода.
Зато - сразу 2 "плюса": корректность + скорость ?
« Последняя редакция: 09. Июня 2014 :: 10:14 - kos »  
Наверх
 
IP записан
 
kos
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 127
Местоположение: Киев
Зарегистрирован: 03. Марта 2013
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #642 - 08. Июня 2014 :: 19:30
Печать  
Еще одну ошибку нашел. И ее причину.

Хочется иметь такую возможность:

Код
Выбрать все
Запрос.Текст = "Некоторый запрос";
Запрос.ОписаниеПараметра(аа)
Запрос.УстановитьТекстовыйПараметр(бб)
Запрос.ОписаниеПараметра(вв)
Запрос.УложитьСписокОбъектов(Список,ВремТб)
Запрос.УстановитьТекстовыйПараметр(гг)
Запрос.ПодготовитьПараметризованныйЗапрос() 



НО! Метод ПодготовитьПараметризованныйЗапрос()
вываливает ошибку
Meta name parser error: параметр <:ИмяПараметра> не определен
на параметры, установленные ранее при помощи
метода УстановитьТекстовыйПараметр()

Причина - между строками (моего, который "хочу") кода:

Код
Выбрать все
Запрос.Текст = "Некоторый запрос";
... далее: при каждом последующем вызове мотодов класса
... ВНУТРИ класса
... происходят промежуточные маленькие запросы
.... (СоздатьIdToStr, РежимRPC, ...)
... от имени того же самого объекта "ЗапросODBC"
... что приводит к сбрасыванию параметров,
... установленных ранее методом "УстановитьТекстовыйПараметр"
... Как результат - вызов "ЗапросODBC.Подготовить()"
... не работает и вываливает ошибку
... (ошибка Meta name parser error: параметр <:ИмяПараметра> не определен)
Запрос.ПодготовитьПараметризованныйЗапрос() 



Решение: ПРЕДЛАГАЮ ТАКОЕ ИСПРАВЛЕНИЕ (ПРОШУ АВТОРА ВНЕСТИ В КЛАСС)
в методе "ПодготовитьПараметризованныйЗапрос"

вместо одной строки
Код
Выбрать все
ЗапросПодготовленУспешно = ЗапросODBC.Подготовить(ПараметризированныйТекст); 



написать такой код:

Код
Выбрать все
Для к=1 По ПараметрыЗапроса.РазмерСписка() Цикл
     //восстановим ранее сброшенные параметры
     Переменная="";Значение = ПараметрыЗапроса.ПолучитьЗначение(к,Переменная);
     ЗапросODBC.УстановитьТекстовыйПараметр(Переменная,Значение);
КонецЦикла;
ЗапросПодготовленУспешно = ЗапросODBC.Подготовить(ПараметризированныйТекст);
Если ЗапросПодготовленУспешно<>1  Тогда
     ОбработкаОшибки(ЗапросODBC.ПолучитьОписаниеОшибки(),"!!!")
КонецЕсли;
 



ИЛИ (еще лучше) сделать отдельную приватную процедуру
которая будет выполнять установку текстовых параметров
НЕПОСРЕДСТВЕННО перед отправкой запроса в объект "ЗапросODBC"
по списку "ПараметрыЗапроса"
(после автоподстановок, парсинга и т.д.)
для всех случаев:
- Выполнить()
- ВыполнитьЗапрос()
- ПодготовитьПараметризованныйЗапрос/ВыполнитьПараметризованныйЗапрос()
  
Наверх
 
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #643 - 17. Июня 2014 :: 08:23
Печать  
вот такой запрос
Код
Выбрать все
		ТекстЗапроса="
		|ВЫБРАТЬ
		|	РегПартОО.НачалоПериода КАК [День $Дата]
		|	,РегПартОО.Склад КАК [Склад $Справочник.МестаХранения]
		|	,РегПартОО.Товар КАК [Товар $Справочник.Номенклатура]
		|	,РегПартОО.КоличествоКонечныйОстаток КАК Кво
		|ИЗ
		|	$РегистрОстаткиОбороты.ПартииТоваров(:лНачДата, :лКонДата~, День ДОПОЛНЕНИЕ,,
		|												(1=1 И 2=2 И Фирма=:лФирма),
		|												(Товар,Склад),
		|												(Количество),) КАК РегПартОО
		|ГДЕ
		|	РегПартОО.КоличествоКонечныйОстаток<>0
		|УПОРЯДОЧИТЬ
		|	РегПартОО.НачалоПериода, Склад, Товар";
 


При отсутствии модификатора у КонДата выдает не верный остаток для последнего дня в периоде (на начало), при наличии модификатора - для последнего дня выдает правильно, НО добавляет строки с днем, следующим за последним Печаль
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #644 - 17. Июня 2014 :: 08:35
Печать  
kos писал(а) 02. Июня 2014 :: 21:15:
а почему бы не

Код
Выбрать все
та,8)) 



Из документации:
•      Дата – Тип: Строка. Текстовый параметр или реквизит запроса

Должно взлететь на конец дня (не пробовал, но должно).


Не, не взлетает.
Там (в классе) в случае с внутренним параметром просто идет сравнение на < с датой, которая никак не модифицируется
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 41 42 [43] 44 45 ... 51
ОтправитьПечать