:: Вопросы по 1С
1C + 1C++ + VFPOLEDB + ХП
wing
Автор

Сообщений: 13
Дата регистрации: 20.07.2009
VFPOLEDB не справилось с запросом, который мне требовалось выполнить, так и сообщив "данный тип запроса не поддерживается" (по английски, но смысл такой), потому было решено реализовать подзапрос в виде ХП (хранимой процедуры), что с точки зрения FoxPro является файлом prg. Получился следующий код (начал писать сразу универсально на случай, если появится надобность еще в других функциях):
PARAMETERS Func, Param1, Param2, Param3
IF Func = "max_date_card_to" THEN
RETURN max_date_card_to(Param1, Param2)
ENDIF
FUNCTION max_date_card_to
LPARAMETERS cur_date, worker
CREATE CURSOR ResultInit(dd date)
SELECT MAX(j.Date) INTO cursor ResultInit;
FROM 1SJourn as j;
INNER JOIN dh179 as d ON j.IDDoc = d.IDDoc;
WHERE j.IDDocDef = ' 4Z';
AND j.Date < [cur_date];
AND d.sp171 = [worker]
RETURN SETRESULTSET ('ResultInit')
Никто ни на что не ругается, однако результат получается пустым. Если же этот же запрос вызвать из 1С с теми же параметрами, то получается искомая дата. В чем ошибка?

P.S.: Забыл уточнить, что 1С используется версии 7.7 (вдруг кому важно)



Исправлено 1 раз(а). Последнее : wing, 20.07.09 11:13
Ratings: 0 negative/0 positive
Re: 1C + 1C++ + VFPOLEDB + ХП
PaulWist

Сообщений: 14720
Дата регистрации: 01.04.2004
1. Приведите сам запрос на который ргается провайдер

2.

SELECT MAX(j.Date) INTO cursor ResultInit;
FROM 1SJourn as j;
INNER JOIN dh179 as d ON j.IDDoc = d.IDDoc;
WHERE j.IDDocDef = ' 4Z';
AND j.Date < cur_date;
AND d.sp171 == worker && если worker символьный


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: 1C + 1C++ + VFPOLEDB + ХП
wing
Автор

Сообщений: 13
Дата регистрации: 20.07.2009
1. Оно не ругается. просто нет результатов. Видимо косяк именно в коде ХП ... а какой? - не знаю...

стоп. понял ...
SELECT
Сотр.id as [Сотрудник_1c_type_Справочник_1c_dot_Сотрудники]
,Док.iddoc as [Док_1c_type_Документ_1c_dot_КартаВыполненияТО]
,Жур.Date
,Жур1.Date
FROM
sc130 as Сотр
INNER JOIN dh179 as Док ON Док.sp171 = Сотр.id
INNER JOIN 1SJourn as Жур ON Жур.IDDoc = Док.IDDoc AND Жур.Date BETWEEN {d'2009-06-01'} AND {d'2009-06-01'}
INNER JOIN dh179 as Док1 ON Док1.sp171 = Сотр.id AND Док1.IDDoc <> Док.IDDoc
INNER JOIN 1SJourn as Жур1 ON Жур1.IDDoc = Док1.IDDoc AND Жур1.Date = (
SELECT MAX(Жур0.Date)
FROM 1SJourn as Жур0, dh179 as Док0
WHERE Жур0.IDDocDef = ' 4Z'
AND Жур0.Date < Жур.Date
AND Жур0.IDDoc = Док0.IDDoc
AND Док0.sp171 = Док.sp171
)
WHERE Сотр.isMark = '' AND Сотр.isFolder = 2
ORDER BY 1
Мат:
ICommandText::Execute(): SQL: Queries of this type are not supported.

2.worker символьный, однако количество знаков равенство не повлияло на результат (это мне уже советовали - пробовал)



Исправлено 3 раз(а). Последнее : wing, 20.07.09 12:16
Ratings: 0 negative/0 positive
Re: 1C + 1C++ + VFPOLEDB + ХП
ssa

Сообщений: 13061
Откуда: Москва
Дата регистрации: 23.03.2005
wing
VFPOLEDB не справилось с запросом, который мне требовалось выполнить, так и сообщив "данный тип запроса не поддерживается" (по английски, но смысл такой), потому было решено реализовать подзапрос в виде ХП (хранимой процедуры), что с точки зрения FoxPro является файлом prg.
С чего бы это вдруг? Хранимки перстали хранится в базе?
Цитата:
Получился следующий код (начал писать сразу универсально на случай, если появится надобность еще в других функциях):
PARAMETERS Func, Param1, Param2, Param3
IF Func = "max_date_card_to" THEN
RETURN max_date_card_to(Param1, Param2)
ENDIF
FUNCTION max_date_card_to
LPARAMETERS cur_date, worker
CREATE CURSOR ResultInit(dd date)
SELECT MAX(j.Date) INTO cursor ResultInit;
FROM 1SJourn as j;
INNER JOIN dh179 as d ON j.IDDoc = d.IDDoc;
WHERE j.IDDocDef = ' 4Z';
AND j.Date < [cur_date];
AND d.sp171 = [worker]
RETURN SETRESULTSET ('ResultInit')
Никто ни на что не ругается, однако результат получается пустым. Если же этот же запрос вызвать из 1С с теми же параметрами, то получается искомая дата. В чем ошибка?

P.S.: Забыл уточнить, что 1С используется версии 7.7 (вдруг кому важно)
Ну и где тут создание хранимки? На кой ляд создается отдельно курсор? Каким образом сей код запускался?

ps: Тексты сообщений надо приводить буквально, а не в переводе или интерпретации.


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: 1C + 1C++ + VFPOLEDB + ХП
PaulWist

Сообщений: 14720
Дата регистрации: 01.04.2004
INNER JOIN dh179 as d ON j.IDDoc == d.IDDoc; - опять же если символьные
WHERE j.IDDocDef == ' 4Z';


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: 1C + 1C++ + VFPOLEDB + ХП
wing
Автор

Сообщений: 13
Дата регистрации: 20.07.2009
ssa
Ну и где тут создание хранимки? На кой ляд создается отдельно курсор? Каким образом сей код запускался?
ps: Тексты сообщений надо приводить буквально, а не в переводе или интерпретации.

Хранимкой в данном случае и является файл _GetData.prg, код которого приведен в первом сообщении.
Сообщение и сам запрос описал уже выше.


PaulWist
INNER JOIN dh179 as d ON j.IDDoc == d.IDDoc; - опять же если символьные
WHERE j.IDDocDef == ' 4Z';
Все три поля пробовал - не помогает ...



Исправлено 1 раз(а). Последнее : wing, 20.07.09 12:21
Ratings: 0 negative/0 positive
Re: 1C + 1C++ + VFPOLEDB + ХП
rhs72

Сообщений: 1934
Откуда: Алматы - Чарджоу
Дата регистрации: 21.03.2007
А в таблице точно набито как
WHERE j.IDDocDef == ' 4Z';
Может стоит попробовать Alltrim()


------------------
"Знание того, что считать ответом, равносильно знанию ответа".
Ratings: 0 negative/0 positive
Re: 1C + 1C++ + VFPOLEDB + ХП
wing
Автор

Сообщений: 13
Дата регистрации: 20.07.2009
rhs72
А в таблице точно набито как
WHERE j.IDDocDef == ' 4Z';
Может стоит попробовать Alltrim()

Нет. в таблице оно именно так.
Если модифицировать ХП так:
FUNCTION max_date_card_to
LPARAMETERS cur_date, worker
RETURN Param1
*RETURN Param2
То получаю исходную дату, а если второй параметр - то исходную строку кода

Отсюда и увереность, что механизм ХП работает, а косяк где-то в том, как я получаю максимальную дату.



Исправлено 1 раз(а). Последнее : wing, 20.07.09 12:28
Ratings: 0 negative/0 positive
Re: 1C + 1C++ + VFPOLEDB + ХП
PaulWist

Сообщений: 14720
Дата регистрации: 01.04.2004
Убирайте условия по одному, иначе нам не найти ошибку.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: 1C + 1C++ + VFPOLEDB + ХП
wing
Автор

Сообщений: 13
Дата регистрации: 20.07.2009
PaulWist
Убирайте условия по одному, иначе нам не найти ошибку.

Не в условиях дело, а в синтаксисе ... повторяю: запрос работает, елси его выполнить из 1С посредством самого VFPOLEDB
Ratings: 0 negative/0 positive
Re: 1C + 1C++ + VFPOLEDB + ХП
PaulWist

Сообщений: 14720
Дата регистрации: 01.04.2004
Пробуй такой код

SELECT MAX(j.Date) as MAxDate INTO cursor ResultInit;
FROM 1SJourn as j;
INNER JOIN dh179 as d ON j.IDDoc == d.IDDoc;
WHERE j.IDDocDef == ' 4Z';
AND j.Date < cur_date;
AND d.sp171 == worker
RETURN ResultInit.MaxDate


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: 1C + 1C++ + VFPOLEDB + ХП
wing
Автор

Сообщений: 13
Дата регистрации: 20.07.2009
PaulWist
Пробуй такой код
Спасибо! Помогло! ... всему виной были квадратные скобки ...
Ratings: 0 negative/0 positive
Re: 1C + 1C++ + VFPOLEDB + ХП
ssa

Сообщений: 13061
Откуда: Москва
Дата регистрации: 23.03.2005
wing
ssa
Ну и где тут создание хранимки? На кой ляд создается отдельно курсор? Каким образом сей код запускался?
ps: Тексты сообщений надо приводить буквально, а не в переводе или интерпретации.

Хранимкой в данном случае и является файл _GetData.prg, код которого приведен в первом сообщении.
Хранимка - это хранимка, а файл - это файл. Хранимки без контейнера базы данных не может быть. 1С контейнер базы данных не создает. Так о какой еще хранимке может идти речь?
Цитата:
Сообщение и сам запрос описал уже выше.
Там был перевод сообщения. Там не был представлен запрос, вызвавший это сообщение. Не представлен код запуска и запроса, и _GetData. Каким кодом они запускались?
Цитата:
PaulWist
INNER JOIN dh179 as d ON j.IDDoc == d.IDDoc; - опять же если символьные
WHERE j.IDDocDef == ' 4Z';
Все три поля пробовал - не помогает ...
Это тоже сообщение об ошибке?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: 1C + 1C++ + VFPOLEDB + ХП
wing
Автор

Сообщений: 13
Дата регистрации: 20.07.2009
ssa
Хранимка - это хранимка, а файл - это файл. Хранимки без контейнера базы данных не может быть. 1С контейнер базы данных не создает. Так о какой еще хранимке может идти речь?
Цитата:
Сообщение и сам запрос описал уже выше.
Там был перевод сообщения. Там не был представлен запрос, вызвавший это сообщение. Не представлен код запуска и запроса, и _GetData. Каким кодом они запускались?
Цитата:
PaulWist
INNER JOIN dh179 as d ON j.IDDoc == d.IDDoc; - опять же если символьные
WHERE j.IDDocDef == ' 4Z';
Все три поля пробовал - не помогает ...
Это тоже сообщение об ошибке?

Сообщение и исходный запрос приведены здесь во втором моем сообщении ... в остальных же местах никакой ошибки не возвращалось ... к тому же проблема уже найдена и ликвидирована.

Хранимкой я назвал это потому, что оно работает как хранимка ... хотя тут я, наверное, ошибся - ближе к UDF это.



Исправлено 1 раз(а). Последнее : wing, 20.07.09 12:51
Ratings: 0 negative/0 positive
Re: 1C + 1C++ + VFPOLEDB + ХП
PaulWist

Сообщений: 14720
Дата регистрации: 01.04.2004
Квадратные скобки - это первое, а второе

RETURN (SETRESULTSET(ResultInit)
RETURN ResultInit.MaxDate

две большие разницы


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: 1C + 1C++ + VFPOLEDB + ХП
wing
Автор

Сообщений: 13
Дата регистрации: 20.07.2009
Последующий анализ показал неприменимость использования этого метода в данной ситуации ... время выполнения запроса неоправданно возрасло ... выгоднее выполнить основной запрос (получить группу документов, а затем в цикле найти каждому соответствующий предыдущий ... быстрее выйдет по времени ...
Ratings: 0 negative/0 positive
Re: 1C + 1C++ + VFPOLEDB + ХП
wing
Автор

Сообщений: 13
Дата регистрации: 20.07.2009
PaulWist
Квадратные скобки - это первое, а второе
RETURN (SETRESULTSET(ResultInit)
RETURN ResultInit.MaxDate

две большие разницы

Согласен, но из-за скобок запроc всегда возвращал пустоту, а почему было не важно, как именно он ее представляет. Спасибо.
Ratings: 0 negative/0 positive
Re: 1C + 1C++ + VFPOLEDB + ХП
ssa

Сообщений: 13061
Откуда: Москва
Дата регистрации: 23.03.2005
wing
к тому же проблема уже найдена и ликвидирована.
А мы так и останемся в неведении?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: 1C + 1C++ + VFPOLEDB + ХП
wing
Автор

Сообщений: 13
Дата регистрации: 20.07.2009
ssa
wing
к тому же проблема уже найдена и ликвидирована.
А мы так и останемся в неведении?

Почему же? Я уже отписался:

wing
PaulWist
Пробуй такой код
Спасибо! Помогло! ... всему виной были квадратные скобки ...
Ratings: 0 negative/0 positive
Re: 1C + 1C++ + VFPOLEDB + ХП
ssa

Сообщений: 13061
Откуда: Москва
Дата регистрации: 23.03.2005
wing
Последующий анализ показал неприменимость использования этого метода в данной ситуации ... время выполнения запроса неоправданно возрасло ... выгоднее выполнить основной запрос (получить группу документов, а затем в цикле найти каждому соответствующий предыдущий ... быстрее выйдет по времени ...
И все это подтверждается SYS(3054)?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 1 (Гостей: 1)

© 2000-2024 Fox Club 
Яндекс.Метрика