AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.03.2010, 11:59   #1  
yes is offline
yes
Участник
 
53 / 10 (1) +
Регистрация: 08.07.2008
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  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
Цитата:
Сообщение от 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 (с теми же правами) - ни в какую не выполняется... Куда копать?
Во-первых, посмотрите, что пишет лог (мой компутер - управление- просмотр событий - приложения, и ищите ваш NAS)
В-вторых, что это за 1С-кий 'Да'? Его то скорее всего NAS и не переваривает. TRUE и FALSE наши друзья.
Старый 16.03.2010, 21:35   #3  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
Цитата:
Сообщение от yes Посмотреть сообщение
PurchHeader.SETFILTER(PurchHeader.Posted,'ДА');
PurchHeader.FINDFIRST;

REPEAT
PurchHeader.DELETE(TRUE);
COMMIT;
UNTIL PurchHeader.NEXT = 0;
И почему используется для REPEAT-UNTIL-цикла FINDFIRSТ вместо FINDSET?
Оптимальнее было бы:

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  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
мои 2 копейки:
PurchHeader.SETRANGE(Posted,TRUE);
PurchHeader.DELETEALL(TRUE);
Старый 17.03.2010, 10:05   #5  
yes is offline
yes
Участник
 
53 / 10 (1) +
Регистрация: 08.07.2008
Цитата:
Сообщение от AlexB Посмотреть сообщение
Судя по PurchHeader.SETFILTER то Posted - это текстовое поле а не BOOLEAN?
Оно определенно Boolean.
НО! Когда пробую профильтровать по этому признаку - получаю (в приложении)
Миниатюры
Нажмите на изображение для увеличения
Название: Boolean.JPG
Просмотров: 443
Размер:	44.7 Кб
ID:	10580  
Старый 17.03.2010, 10:08   #6  
yes is offline
yes
Участник
 
53 / 10 (1) +
Регистрация: 08.07.2008
Описание поля Posted в источнике данных
Миниатюры
Нажмите на изображение для увеличения
Название: FromTable.JPG
Просмотров: 333
Размер:	11.1 Кб
ID:	10581  
Старый 17.03.2010, 10:15   #7  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
Цитата:
Сообщение от yes Посмотреть сообщение
Цитата:
Сообщение от AlexB Посмотреть сообщение
Судя по PurchHeader.SETFILTER то Posted - это текстовое поле а не BOOLEAN?
Оно определенно Boolean.
НО! Когда пробую профильтровать по этому признаку - получаю (в приложении)
Вы не верно обращаетесь к функции SETFILTER.
Либо замените ее на SETRANGE либо используйте правильно.
Старый 17.03.2010, 10:54   #8  
yes is offline
yes
Участник
 
53 / 10 (1) +
Регистрация: 08.07.2008
Оставил в таком виде CU:

PurchHeader.SETRANGE(Posted,TRUE);
PurchHeader.DELETEALL(TRUE);

Все равно падает. В журнале приложений никаких записей не появляется. Вручную CU выполняется правильно.
Старый 17.03.2010, 11:08   #9  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
Цитата:
Сообщение от yes Посмотреть сообщение
Оставил в таком виде CU:

PurchHeader.SETRANGE(Posted,TRUE);
PurchHeader.DELETEALL(TRUE);

Все равно падает. В журнале приложений никаких записей не появляется. Вручную CU выполняется правильно.
А Вы уверены, что NAS доходит до этих строчек?
Вы его включаете вручную?

Поставьте любой MESSAGE в начале и конце Вашего кода. MESSAGE в любом случае должен записаться в лог
Старый 17.03.2010, 11:10   #10  
yes is offline
yes
Участник
 
53 / 10 (1) +
Регистрация: 08.07.2008
В этом CU больше кода нет
Message пробую сейчас
Старый 17.03.2010, 20:14   #11  
.Quattro. is offline
.Quattro.
Участник
Лучший по профессии 2009
 
194 / 22 (1) +++
Регистрация: 22.05.2006
Совсем правильно надо вот так.
Код:
PurchHeader.RESET;
PurchHeader.SETRANGE(PurchHeader.Posted,TRUE);
IF PurchHeader.FINDSET THEN
  REPEAT
    PurchHeader2 := PurchHeader;
    PurchHeader2.DELETE(TRUE);
    COMMIT;
  UNTIL PurchHeader.NEXT = 0;
Но скорее всего вы что-то намудрили с вызовом через NAS - используете Job Queue?
Старый 17.03.2010, 23:10   #12  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
зачем COMMIT?
человек только начинает Нав изучать, а ты его уже плохому учишь
Старый 18.03.2010, 19:51   #13  
Thrice is offline
Thrice
Участник
Аватар для Thrice
 
46 / 10 (1) +
Регистрация: 09.07.2008
побоюсь показаться совсем глупым, но если не сложно объясните пожалуйста,что такое пакетный планировщик в Navision, как на него ващать задая и в чем отличие от NAS?

сами задания обычно вешаем через Администрирование-> Диспетчер Задач. Просто создаем новое задание, устанавливаем время выполнения и вуаля пашет. я наивно полагаю что это творится под чутким руководством NAS, или я сильно ошибаюсь? и к заданиям которые выполняются под NAS относятся лишь те, которые прописаны в CU 1 и с каким параметром запускается NAS?

ну и последнее как понять какие хитрости таятся при программирование для работы под управлением NAS?
Старый 19.03.2010, 09:09   #14  
LOGIC_BBS is offline
LOGIC_BBS
Участник
 
61 / 10 (1) +
Регистрация: 14.12.2005
Цитата:
Сообщение от Sancho Посмотреть сообщение
зачем COMMIT?
человек только начинает Нав изучать, а ты его уже плохому учишь
Простите а чем COMMIT плох?

Пример использования Navision Application Server
http://www.ms-dynamics.ru/index.php/...gy-nas-example
Старый 19.03.2010, 10:09   #15  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
в самой этой функции - ничем.
что удалилось, то удалилось, пока ошибка не возникла при удалении.

но, допустим, у нас есть отчетик, который что-то там изменяет и время от времени запускает нашу функцию с коммитами.
если случись какая ошибка, то половина изменений сохранятся, половина - нет, а это не есть гут.

если это не единоразовый код, лучше сначала все проанализировать на предмет удаления, а потом удалять
Старый 19.03.2010, 12:36   #16  
Storkich is offline
Storkich
Участник
 
149 / 10 (1) +
Регистрация: 08.03.2007
Попробуй запустить NAS из консоли(командной строки, например создать .bat файл)
Если все настроено правильно, то запустится дебагер, и смотри как оно выполняется.
Мое мнение: эти строчки не выполняются вообще(не заходит в ветку алгоритма). NAS как сервис работает, но не указаны параметры запуска.
Смотри CU-1 NASHandler
Попробуй туда вставить вызов своей процедурки, и у тебя удалится.

Но Posted:строка - это уже даже не смешно, а страшно за результат вашей работы.
Commit в том месте просто выглядит ужасающе.
Старый 19.03.2010, 13:00   #17  
LOGIC_BBS is offline
LOGIC_BBS
Участник
 
61 / 10 (1) +
Регистрация: 14.12.2005
Цитата:
Сообщение от Sancho Посмотреть сообщение
но, допустим, у нас есть отчетик, который что-то там изменяет и время от времени запускает нашу функцию с коммитами.
если случись какая ошибка, то половина изменений сохранятся, половина - нет, а это не есть гут.

если это не единоразовый код, лучше сначала все проанализировать на предмет удаления, а потом удалять
Понял, огромное спасибо.
Старый 22.03.2010, 10:45   #18  
yes is offline
yes
Участник
 
53 / 10 (1) +
Регистрация: 08.07.2008
Всем большое спасибо за советы. 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  
Romul is offline
Romul
Участник
 
186 / 11 (1) +
Регистрация: 26.12.2007
Цитата:
Сообщение от 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;

Работает, как часы
David Blaine...
Старый 25.03.2010, 01:11   #20  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
цифра 351 это по лунному календарю?
кажется у арабов есть летоисчисление на пару недель короче обычного...
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:40.