|
26.10.2010, 18:30 | #1 |
Участник
|
Цитата:
Сообщение от Prophetic
Но проблема в том, что пока я не очищу используемый запрос и ранее используемый запрос (нажав на кнопку "выбрать" и далее, кнопкой "очистить") в классе далее запрос не отрабатывает, и выводит ошибку о невозможности выбрать запись в одной из таблиц.
Как мне программно "обнулить" этот запрос? Если речь идет именно об избыточном Range, то укажите ему пустую строку "". Пустая строка эквивалентна отсутствию Range Если речь идет о том, чтобы зафиксировать ваше условие в Range, то в свойстве Status программно задайте hidden или Locked. пример в \Classes\CustInterestCreate\queryBuildUpdate X++: protected void queryBuildUpdate() { QueryBuildRange rangeCanBeReversed; ; ... rangeCanBeReversed = queryRun.query().dataSourceTable(tablenum(CustSettlement)).addRange(fieldnum(CustSettlement, CanBeReversed)); rangeCanBeReversed.value(queryValue(NoYes::Yes)); rangeCanBeReversed.status(RangeStatus::Hidden); ... } |
|
|
За это сообщение автора поблагодарили: Prophetic (1). |
10.11.2010, 12:10 | #2 |
Участник
|
Они возвращаются...
Здравия, уважаемые.
Всем спасибо за ответы, однако, пришлось вернуться к старой проблеме. Дело в том, что я в классе поставил showQueryValues = true, в результате опять появились поля на форме для выбора значений и стала возникать ошибка. Повторяю эксперимент: удаляю критерии в диалоге (удаляю вообще строки в таблице критериев) , и ошибка не возникает. Ставлю showQueryValues = false, а затем возвращаю в true, критерии заново появляются с пустыми значениями и при работе с классом появляется та же проблема. Приведу её: Код: Описание ошибки SQL: [Microsoft][ODBC SQL Server Driver][SQL Server]Не удалось привязать составной идентификатор "B.ITEMID". Оператор SQL: SELECT A.ITEMID FROM INVENTTABLE A WHERE (A.DATAAREAID=?) AND EXISTS (SELECT 'x' FROM CUSTINVOICETRANS B,INVENTDIM C WHERE ((B.DATAAREAID=?) AND (((B.INVOICEDATE>=?) AND (B.INVOICEDATE<=?)) AND (A.ITEMID=B.ITEMID))) AND ((C.DATAAREAID=?) AND ((((C.INVENTLOCATIONID=?) OR (C.INVENTLOCATIONID=?)) OR (C.INVENTLOCATIONID=?)) AND (B.INVENTDIMID=C.INVENTDIMID))) GROUP BY B.ITEMID,B.INVOICEDATE) GROUP BY A.ITEMID,B.ITEMID,B.INVOICEDATE ORDER BY A.ITEMID Цитата:
Я так и сделал: X++: qbrItem = qr.dataSourceTable(tablenum(InventTable)).addRange(fieldnum(InventTable,ItemId)); qbrItem.value(""); qbrItem.status(RangeStatus::Hidden); // qbrItem.status(RangeStatus::Locked); Что делать? |
|
10.11.2010, 12:36 | #3 |
Участник
|
Цитата:
Попробуйте очистить xLastValue и запустить снова. (Если LastValue вам ни о чем не говорит, то зайдите в Параметры \ Использование данных \ Кнопка Сброс) |
|
|
За это сообщение автора поблагодарили: Prophetic (1). |
10.11.2010, 14:29 | #4 |
Участник
|
xLastValue действительно ни о чём не говорит. Вопрос то остался: есть ли возможность программно очистить xLastValue и только для текущего запроса?
|
|
10.11.2010, 14:38 | #5 |
Участник
|
Цитата:
делайте что Владимир Максимов говорит. тогда не нужны костыли в виде "программно очистить" а вообще читайте про паттерн pack/unpack и про работу с sysLastValue. |
|
10.11.2010, 14:53 | #6 |
Участник
|
Всем спасибо за помощь, буду копать.
|
|
|
|