16.03.2010, 11:59 | #1 |
Участник
|
Nav 4, SP3 на SQL Server 2008 Standart.
Есть вот такой простой CU: ///////////////////////////////////////////////// PurchHeader.SETFILTER(PurchHeader.Posted,'ДА'); PurchHeader.FINDFIRST; REPEAT PurchHeader.DELETE(TRUE); COMMIT; UNTIL PurchHeader.NEXT = 0; //////////////////////////////////////////////// Запускаю ручками - работает. NAS (с теми же правами) - ни в какую не выполняется... Куда копать? |
|
16.03.2010, 17:42 | #2 |
Участник
|
Цитата:
Сообщение от yes
Nav 4, SP3 на SQL Server 2008 Standart.
Есть вот такой простой CU: ///////////////////////////////////////////////// PurchHeader.SETFILTER(PurchHeader.Posted,'ДА'); PurchHeader.FINDFIRST; REPEAT PurchHeader.DELETE(TRUE); COMMIT; UNTIL PurchHeader.NEXT = 0; //////////////////////////////////////////////// Запускаю ручками - работает. NAS (с теми же правами) - ни в какую не выполняется... Куда копать? В-вторых, что это за 1С-кий 'Да'? Его то скорее всего NAS и не переваривает. TRUE и FALSE наши друзья. |
|
16.03.2010, 21:35 | #3 |
Участник
|
Цитата:
Оптимальнее было бы: IF NOT PurchHeader.ISEMPTY THEN BEGIN PurchHeader.FINDSET; REPEAT // CODE... UNTIL PurchHeader.NEXT = 0; END; Судя по PurchHeader.SETFILTER то Posted - это текстовое поле а не BOOLEAN? |
|
16.03.2010, 21:56 | #4 |
Administrator
|
мои 2 копейки:
PurchHeader.SETRANGE(Posted,TRUE); PurchHeader.DELETEALL(TRUE); |
|
17.03.2010, 10:05 | #5 |
Участник
|
Цитата:
НО! Когда пробую профильтровать по этому признаку - получаю (в приложении) |
|
17.03.2010, 10:08 | #6 |
Участник
|
Описание поля Posted в источнике данных
|
|
17.03.2010, 10:15 | #7 |
Участник
|
Цитата:
Либо замените ее на SETRANGE либо используйте правильно. |
|
17.03.2010, 10:54 | #8 |
Участник
|
Оставил в таком виде CU:
PurchHeader.SETRANGE(Posted,TRUE); PurchHeader.DELETEALL(TRUE); Все равно падает. В журнале приложений никаких записей не появляется. Вручную CU выполняется правильно. |
|
17.03.2010, 11:08 | #9 |
Участник
|
Цитата:
Вы его включаете вручную? Поставьте любой MESSAGE в начале и конце Вашего кода. MESSAGE в любом случае должен записаться в лог |
|
17.03.2010, 11:10 | #10 |
Участник
|
В этом CU больше кода нет
Message пробую сейчас |
|
17.03.2010, 20:14 | #11 |
Участник
|
Совсем правильно надо вот так.
Код: PurchHeader.RESET; PurchHeader.SETRANGE(PurchHeader.Posted,TRUE); IF PurchHeader.FINDSET THEN REPEAT PurchHeader2 := PurchHeader; PurchHeader2.DELETE(TRUE); COMMIT; UNTIL PurchHeader.NEXT = 0; |
|
17.03.2010, 23:10 | #12 |
Administrator
|
зачем COMMIT?
человек только начинает Нав изучать, а ты его уже плохому учишь |
|
18.03.2010, 19:51 | #13 |
Участник
|
побоюсь показаться совсем глупым, но если не сложно объясните пожалуйста,что такое пакетный планировщик в Navision, как на него ващать задая и в чем отличие от NAS?
сами задания обычно вешаем через Администрирование-> Диспетчер Задач. Просто создаем новое задание, устанавливаем время выполнения и вуаля пашет. я наивно полагаю что это творится под чутким руководством NAS, или я сильно ошибаюсь? и к заданиям которые выполняются под NAS относятся лишь те, которые прописаны в CU 1 и с каким параметром запускается NAS? ну и последнее как понять какие хитрости таятся при программирование для работы под управлением NAS? |
|
19.03.2010, 09:09 | #14 |
Участник
|
Цитата:
Пример использования Navision Application Server http://www.ms-dynamics.ru/index.php/...gy-nas-example |
|
19.03.2010, 10:09 | #15 |
Administrator
|
в самой этой функции - ничем.
что удалилось, то удалилось, пока ошибка не возникла при удалении. но, допустим, у нас есть отчетик, который что-то там изменяет и время от времени запускает нашу функцию с коммитами. если случись какая ошибка, то половина изменений сохранятся, половина - нет, а это не есть гут. если это не единоразовый код, лучше сначала все проанализировать на предмет удаления, а потом удалять |
|
19.03.2010, 12:36 | #16 |
Участник
|
Попробуй запустить NAS из консоли(командной строки, например создать .bat файл)
Если все настроено правильно, то запустится дебагер, и смотри как оно выполняется. Мое мнение: эти строчки не выполняются вообще(не заходит в ветку алгоритма). NAS как сервис работает, но не указаны параметры запуска. Смотри CU-1 NASHandler Попробуй туда вставить вызов своей процедурки, и у тебя удалится. Но Posted:строка - это уже даже не смешно, а страшно за результат вашей работы. Commit в том месте просто выглядит ужасающе. |
|
19.03.2010, 13:00 | #17 |
Участник
|
Цитата:
Сообщение от Sancho
но, допустим, у нас есть отчетик, который что-то там изменяет и время от времени запускает нашу функцию с коммитами.
если случись какая ошибка, то половина изменений сохранятся, половина - нет, а это не есть гут. если это не единоразовый код, лучше сначала все проанализировать на предмет удаления, а потом удалять |
|
22.03.2010, 10:45 | #18 |
Участник
|
Всем большое спасибо за советы. CU ни в кокоам из указанных видов выполнятся-таки не желал. Сделал следующее - снес полностью CU, потом вставил след.код:
PurchHeader.SETRANGE(PurchHeader."Posting Date", DMY2DATE(DATE2DMY(CALCDATE('<-351D>', WORKDATE),1), DATE2DMY(CALCDATE('<-351D>', WORKDATE),2), DATE2DMY(CALCDATE('<-351D>', WORKDATE),3)), DMY2DATE(DATE2DMY(CALCDATE('<-7D>', WORKDATE),1), DATE2DMY(CALCDATE('<-7D>', WORKDATE),2), DATE2DMY(CALCDATE('<-7D>', WORKDATE),3))); PurchHeader.SETRANGE(Posted,TRUE); PurchHeader.SETFILTER("Document Type",'Íàêëàäíàÿ'); PurchHeader.FINDFIRST; PurchHeader.DELETEALL(TRUE); COMMIT; Работает, как часы |
|
25.03.2010, 00:33 | #19 |
Участник
|
Цитата:
Сообщение от yes
Всем большое спасибо за советы. CU ни в кокоам из указанных видов выполнятся-таки не желал. Сделал следующее - снес полностью CU, потом вставил след.код:
PurchHeader.SETRANGE(PurchHeader."Posting Date", DMY2DATE(DATE2DMY(CALCDATE('<-351D>', WORKDATE),1), DATE2DMY(CALCDATE('<-351D>', WORKDATE),2), DATE2DMY(CALCDATE('<-351D>', WORKDATE),3)), DMY2DATE(DATE2DMY(CALCDATE('<-7D>', WORKDATE),1), DATE2DMY(CALCDATE('<-7D>', WORKDATE),2), DATE2DMY(CALCDATE('<-7D>', WORKDATE),3))); PurchHeader.SETRANGE(Posted,TRUE); PurchHeader.SETFILTER("Document Type",'Íàêëàäíàÿ'); PurchHeader.FINDFIRST; PurchHeader.DELETEALL(TRUE); COMMIT; Работает, как часы |
|
25.03.2010, 01:11 | #20 |
Administrator
|
цифра 351 это по лунному календарю?
кажется у арабов есть летоисчисление на пару недель короче обычного... |
|