Переключение на Главную Страницу Страницы: 1 ... 17 18 [19] 20 21 ... 51 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПрямойЗапрос" - обсуждения. Часть № 2. (число прочтений - 245685 )
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #270 - 13. Января 2012 :: 13:53
Печать  
База ведь DBF? Выложить можешь? Скачаю все посмотрю. Ты меня прямо заинтриговал. Желательно с данными (и да...у тебя какая ОС стоит?)...
  

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



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #271 - 13. Января 2012 :: 13:59
Печать  
Код
Выбрать все
|	$СпрНП.Количество КАК [Количество Число.10.5],

|	Ост.КоличествоОстаток КАК [Количество Число.10.5], 


не помогло

windows xp sp3
dbf (ТиИ делал)
7.70.027
1cpp 3.2.3.16
1sqlite 1023
ПрямойЗапрос 008 30/12/2011

По поводу выложить базу придется отложить до понедельника.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #272 - 13. Января 2012 :: 14:14
Печать  
Жаль, у меня на рабочей неделе времени почти не бывает Печаль
  

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



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #273 - 17. Января 2012 :: 09:36
Печать  
vandalsvq, нужна помощь.
Нужно получить последнее значение. Запрос рабочий. Добавляю
Код
Выбрать все
Элемент, :ДатаДок) КАК Рекв 

, получаю ошибку. $СпрНП.ТекущийЭлемент - элемент из запроса нужного типа, ДатаДок - тип Дата через УстановитьТекстовыйПараметр. Причем, в режиме отладки идет сначала
Получить последнее значение реквизита 'имя_реквизита' объекта 'имя_объекта' не удалось., а потом, что у меня syntax error где-то near "(".
« Последняя редакция: 17. Января 2012 :: 11:05 - vinogradoff »  

listing.txt ( 2 KB | Загрузки )
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #274 - 17. Января 2012 :: 21:04
Печать  
В тексте запроса заметил вот это "ПоследнееЗначение.НаборПродкутов.ФНеИсп" уж не в этом ли дело??? (Вроде спр. называется НаборПродуктов)

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


  

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



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #275 - 18. Января 2012 :: 04:59
Печать  
vandalsvq Спасибо!

Цитата:
Виртуальные таблицы
При использовании виртуальных таблиц все предусмотренные параметры являются не обязательными.
ВНИМАНИЕ: при построении запросов с использованием временных таблиц, у которых существуют параметры, предусматривающие перечисления через запятую, рекомендуется:
•      одно значение писать без обрамления в скобки
•      два и более значения писать только в скобках.
Например: Субконто1 или (Субконто1, Субконто2).
Подмигивание
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #276 - 18. Января 2012 :: 08:34
Печать  
vinogradoff, с тех пор как количество юзверей моих классов превысило нескольких знакомых я стал писать запросы по принципу "как попало", так ошибки проще отлавливать. Рекомендации - это для всех чтобы меньше головной боли. Но для тестера и разработчика, рекомендации - это вред  Смех
  

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


I Love YaBB 2!

Сообщений: 21
Зарегистрирован: 27. Апреля 2007
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #277 - 10. Февраля 2012 :: 07:11
Печать  
Код
Выбрать все
ТекстЗапроса = "
	|ВЫБРАТЬ
	|Пр.ACCDTID as [СчетПоДебету $Счет.Основной],
	|Пр.DOCID
	|ИЗ Проводки КАК Пр
	|ГДЕ
	|Пр.ACCDTID collate_1C = :Сч_ДБ";

	Сч97   = СчетПоКоду("97");
	Запрос = СоздатьОбъект("ПрямойЗапрос");
	Запрос.УстановитьТекстовыйПараметр("Сч_ДБ", Сч97);
	Запрос.Текст = ТекстЗапроса;
	Запрос.Режимотладки = 1;
	Запрос.ОперативныйУчет= 0;
	ТЗ = Запрос.Выполнить("ТаблицаЗначений");
	ТЗ.ВыбратьСтроку();
 

Подскажите, как сделать параметризацию по Пр.DOCID ?

ЗЫ: Справку читал вдоль и поперек, не помогло  Печаль
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #278 - 10. Февраля 2012 :: 08:23
Печать  
Соединение с 1sjourn сделать вестимо, из него взять iddocdef в качестве типизирующего поля.
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #279 - 15. Февраля 2012 :: 10:08
Печать  
Добрый день.

Подскажите, что не так в запросе:
Код
Выбрать все
SELECT
	MAX($Журнал.НомерДокумента) КАК НомерДокумента
ИЗ
	ЖурналДокументов КАК Журнал
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	Документ.Заявка КАК Шапка ПО $Журнал.ТекущийДокумент = $Шапка.ТекущийДокумент
ГДЕ
	LEFT($Журнал.НомерДокумента,4) = '"+Префикс+"'
 



Цитата:
ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : near "(": syntax error
ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса,ПолучательЗапроса);
{E:\Bases\SystemData\Classes\ПрямыеЗапросы\Пр
ПрямойЗапрос.Выполнить().Выгрузить(ТЗ);
{E:\BASES\EXTFORMS\ЗАГРУЗКАЗАЯВКИ.ERT(278)}: ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : near "(": syntax error
ЗапросSQLite.Выполн


LEFT убираю - работает
  
Наверх
 
IP записан
 
ssamm
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 19
Зарегистрирован: 24. Декабря 2009
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #280 - 15. Февраля 2012 :: 12:10
Печать  
Помогите пожалуйста с запросом.
Есть рабочий запрос (тут правда я его урезал)

SELECT
     РегОст.Номенклатура КАК [Номенклатура $Справочник.Номенклатура],
     РегОст.НачалоПериода КАК [День $Дата],
     РегОст.КоличествоКонечныйОстаток КАК [Остатки],
     Рег.Период КАК [Дата $Дата],
     Рег.КоличествоОборот КАК [Продано $ЧИСЛО]
FROM
     $РегистрОстаткиОбороты.ПартииНаличие(
                                        :НачПериода,
                                        :КонПериода~,
                                        Неделя,
                                        ДвиженияИГраницыПериода,
                                        (Номенклатура В (Выбрать val ИЗ #Номенклатура)),
                                        (Номенклатура),
                                        (Количество)
                                        ) КАК РегОст
ЛЕВОЕ СОЕДИНЕНИЕ
     $РегистрОбороты.Продажи(
                            :НачПериода,
                            :КонПериода~,
                            Неделя,
                            (Номенклатура В (Выбрать val ИЗ #Номенклатура)),
                            (Номенклатура),
                            (Количество)
                            ) КАК Рег
ПО (Рег.Номенклатура = РегОст.Номенклатура) И  (Рег.Период = РегОст.НачалоПериода)

Работает, на выходе имеем таблицу следующего вида:
Номенклатура   -  День  -  Остатки  -  Продано
"Швабра синяя"  01.02.12    329          0
"Швабра синяя"  06.02.12    325          4

Тут возникла необходимость, дабавить в запрос условие по "МОЛ", т.е. остатки чтоб брал только на определенных складах
Меняю условие отбора в виртуальной таблице "РегОст" на:
(Номенклатура В (Выбрать val ИЗ #Номенклатура)) И (МОЛ В (Выбрать val ИЗ #спсМОЛ)) ну и в списке отбираемых измерений указываю (МОЛ, Номенклатура)

Но теперь в результирующей таблице у меня идет разбивка на МОЛы:
Номенклатура   -  День  -  Остатки  -  Продано
"Швабра синяя"  01.02.12    12          0  (Склад 1)
"Швабра синяя"  01.02.12    18          0  (Склад 2)
"Швабра синяя"  06.02.12    8           4  (Склад 1)

А надо, чтоб было как и раньше, т.е.
Номенклатура   -  День  -  Остатки  -  Продано
"Швабра синяя"  01.02.12    30          0
"Швабра синяя"  06.02.12    26          4
  
Наверх
 
IP записан
 
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #281 - 15. Февраля 2012 :: 21:06
Печать  
ssamm писал(а) 15. Февраля 2012 :: 12:10:
...
ну и в списке отбираемых измерений указываю (МОЛ, Номенклатура)

Убери из измерений МОЛ, оставь только Номенклатура, как раньше.
Ну а ограничение(условие) накладывай и по МОЛ.
Помоему так.
  
Наверх
 
IP записан
 
ssamm
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 19
Зарегистрирован: 24. Декабря 2009
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #282 - 16. Февраля 2012 :: 05:13
Печать  
zk96 писал(а) 15. Февраля 2012 :: 21:06:
Убери из измерений МОЛ, оставь только Номенклатура, как раньше.
Ну а ограничение(условие) накладывай и по МОЛ.
Помоему так.


Вот спасибо, ларчик то, просто открывался, думал что условие работать не будет
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос". Часть № 2.
Ответ #283 - 16. Февраля 2012 :: 08:31
Печать  
ReLock писал(а) 15. Февраля 2012 :: 10:08:
Добрый день.

Подскажите, что не так в запросе:
Код
Выбрать все
SELECT
	MAX($Журнал.НомерДокумента) КАК НомерДокумента
ИЗ
	ЖурналДокументов КАК Журнал
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	Документ.Заявка КАК Шапка ПО $Журнал.ТекущийДокумент = $Шапка.ТекущийДокумент
ГДЕ
	LEFT($Журнал.НомерДокумента,4) = '"+Префикс+"'
 



Цитата:
ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : near "(": syntax error
ЗапросSQLite.ВыполнитьЗапрос(ТекстЗапроса,ПолучательЗапроса);
{E:\Bases\SystemData\Classes\ПрямыеЗапросы\Пр
ПрямойЗапрос.Выполнить().Выгрузить(ТЗ);
{E:\BASES\EXTFORMS\ЗАГРУЗКАЗАЯВКИ.ERT(278)}: ПрямойЗапрос::Выполнить(Строка ТипОбъекта=ИндексированнаяТаблица, Строка ТекстВыполнения=, Число БезПодготовки=0) : near "(": syntax error
ЗапросSQLite.Выполн


LEFT убираю - работает



в sqllite нет left- юзай substr
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

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