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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.01.2007, 16:44   #1  
lucky_imported is offline
lucky_imported
Участник
 
3 / 10 (1) +
Регистрация: 15.01.2007
Почему при отсутствии денег в кассе или на р/с Navision позволяет учитывать расходные кассовые операции, что в итоге приводит к отрицательному балансу кассы или р/с? Даже при указании минимального баланса по кассе или по р/с система не дает никаких предупреждений при учете операций.
Старый 15.01.2007, 22:14   #2  
NeNavision_imported is offline
NeNavision_imported
Участник
Аватар для NeNavision_imported
 
241 / 10 (1) +
Регистрация: 12.08.2005
Поле "Миним. баланс" - это так, для красоты. Оно нигде в системе не контролируется.
В справке абсолютно правильно написано: "Здесь можно ввести минимальный баланс для данного банковского счета." Можете вводить, можете не вводить.
Никто не обещал, что это на что-то повлияет.
Совет:
Добавьте в учетный кодюнит пару волшебных строк и контроль заработает.
__________________
Должен остаться только один.
Старый 16.01.2007, 12:03   #3  
RobiBaggio is offline
RobiBaggio
Участник
Аватар для RobiBaggio
 
285 / 10 (1) +
Регистрация: 16.02.2004
Цитата:
Сообщение от NeNavision Посмотреть сообщение
Поле "Миним. баланс" - это так, для красоты. Оно нигде в системе не контролируется.
В справке абсолютно правильно написано: "Здесь можно ввести минимальный баланс для данного банковского счета." Можете вводить, можете не вводить.
Никто не обещал, что это на что-то повлияет.
Совет:
Добавьте в учетный кодюнит пару волшебных строк и контроль заработает.
К сожалению, все обстоит именно так как описал NeNavision. Для примера посмотри поле Кредитный контроль в карточке Клиента. Там контроль работает. А MBS незачет за это поле.
Старый 17.12.2007, 10:14   #4  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
Цитата:
Сообщение от NeNavision Посмотреть сообщение
Поле "Миним. баланс" - это так, для красоты. Оно нигде в системе не контролируется.
В справке абсолютно правильно написано: "Здесь можно ввести минимальный баланс для данного банковского счета." Можете вводить, можете не вводить.
Никто не обещал, что это на что-то повлияет.
Совет:
Добавьте в учетный кодюнит пару волшебных строк и контроль заработает.
Ну строки как я понимаю надо добавлять в 231 кодеюнит?... А как это добавить в две строки?
Старый 17.12.2007, 10:57   #5  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от by_HT Посмотреть сообщение
Ну строки как я понимаю надо добавлять в 231 кодеюнит?... А как это добавить в две строки?
По поводу кодеюнита - все зависит от того, что именно Вам нужно. Я бы поставил проверку значение по условию к полю в 11 или 12 (на запуск процедуры PostBankAcc)
Ну и по поводу строчек - тоже. Например, просто можно написать простую проверку по данному полю и выводить ERROR, Message, доп. ветку или так далее..
Старый 17.12.2007, 12:04   #6  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
Цитата:
Сообщение от RedFox Посмотреть сообщение
По поводу кодеюнита - все зависит от того, что именно Вам нужно. Я бы поставил проверку значение по условию к полю в 11 или 12 (на запуск процедуры PostBankAcc)
Ну и по поводу строчек - тоже. Например, просто можно написать простую проверку по данному полю и выводить ERROR, Message, доп. ветку или так далее..
Нам нужно, чтобы нельзя было провести учет, если баланс счета после учета будет ниже минимально разрешенного!
Привидите пожалуйста пример как это можно реализовать
Старый 17.12.2007, 15:16   #7  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
Вроде все должно выглядеть так:

Код:
IF GenJnlLine."Bal. Account Type"= Acc::"Bank Account" THEN GenJnlLine."Bal. Account Type" :=4;
 IF GenJnlLine."Bal. Account Type"=4 THEN BEGIN
   IF BankAccount.FIND('-') THEN
	REPEAT
	  IF BankAccount."No." =  GenJnlLine."Bal. Account No." THEN
	  if BankAccount."Min. Balance" > BankAccount.Balance - GenJnlLine.Amount THEN EXIT;
	UNTIL BankAccount.NEXT =0;
END;
вот только я не пойму почему при любых значениях поле BankAccount.Balance принимает значение 0 ?!
Старый 17.12.2007, 15:17   #8  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от by_HT Посмотреть сообщение
Нам нужно, чтобы нельзя было провести учет, если баланс счета после учета будет ниже минимально разрешенного!
Привидите пожалуйста пример как это можно реализовать
По поводу баланс ПОСЛЕ - тут будет послоднее написать код (если не срочно и очень нужно, то после выходных ...).
Побыстренькому можно так:
CodeUnit 11, trigger RunCheck(VAR GenJnlLine : Record "Gen. Journal Line";VAR JnlLineDim : Record "Journal Line Dimension")

"Account Type"::"Bank Account":
...
TESTFIELD("Job No.",'');
IF BankAcc.GET("Account No.") THEN
IF {Вычисления, которые можно сделать раньше} < BankAcc."Min. Balance" THEN
ERROR("Учитывать нельзя по определению - или нужное сообщение");
ELSE
ERROR("сообщение типа - Номер банкосвского счета не существует");

P.S. Условие было записано так:{Вычисления, которые можно сделать раньше}, потому что могут быть различные критерии, например счет с овердрафтом, в которым можно ходить только в исключительных случаях или признак для деления суммы, например, деление по приоритету измерений, приоритетам проплат и т.д.
Старый 17.12.2007, 15:27   #9  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от by_HT Посмотреть сообщение
Вроде все должно выглядеть так:

Код:
IF GenJnlLine."Bal. Account Type"= Acc::"Bank Account" THEN GenJnlLine."Bal. Account Type" :=4;
 IF GenJnlLine."Bal. Account Type"=4 THEN BEGIN
   IF BankAccount.FIND('-') THEN
Первая строчка для меня малеха не понятно. Так как таблица 270 "Bank Account" имеет первичный ключ "Account No" (а это рано "Account No" и "Bal. Account No"), то лучше использовать GET и это будет гораздо быстрее работать, чем фильтр в любой версии.
Цитата:
Код:
	REPEAT
	  IF BankAccount."No." =  GenJnlLine."Bal. Account No." THEN
	  if BankAccount."Min. Balance" > BankAccount.Balance - GenJnlLine.Amount THEN EXIT;
	UNTIL BankAccount.NEXT =0;
END;
EXIT не очень удачная конструкция в данному случае. ЛУчше использовать ERROR - и транзакцию прерывает (а не просто выходит!!!! из CU) и информативное сообщение можно пользователю послать ;-)
Цитата:
вот только я не пойму почему при любых значениях поле BankAccount.Balance принимает значение 0 ?!
Тип поля - FlowField. Нужно вызывать CALCFIELD вроде как
Старый 18.12.2007, 08:10   #10  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
Цитата:
Сообщение от RedFox Посмотреть сообщение
Первая строчка для меня малеха не понятно. Так как таблица 270 "Bank Account" имеет первичный ключ "Account No" (а это рано "Account No" и "Bal. Account No"), то лучше использовать GET и это будет гораздо быстрее работать, чем фильтр в любой версии.
Код:
IF GenJnlLine."Bal. Account Type"=4 THEN BEGIN
Этим я хотел узнать правдо ли у нас Bal. Account Type имеет значение: Bank Account.
а этой строкой:
Код:
IF GenJnlLine."Bal. Account Type"= Acc::"Bank Account" THEN GenJnlLine."Bal. Account Type" :=4;
Я присваеваю значение...
Буду очень рад, если ты напишешь, как это сделать гораздо правельней!
Я так и не разобрался с Get.
Цитата:
Сообщение от RedFox Посмотреть сообщение
EXIT не очень удачная конструкция в данному случае. ЛУчше использовать ERROR - и транзакцию прерывает (а не просто выходит!!!! из CU) и информативное сообщение можно пользователю послать ;-)
ясно..спасиб!

Цитата:
Сообщение от RedFox Посмотреть сообщение
Тип поля - FlowField. Нужно вызывать CALCFIELD вроде как
Ого, я и не мог предположить... =(

Пока у меня выходит так:

Код:
IF GenJnlLine."Bal. Account Type"= Acc::"Bank Account" THEN GenJnlLine."Bal. Account Type" :=4;
 IF GenJnlLine."Bal. Account Type"=4 THEN BEGIN
  IF BankAccount.FIND('-') THEN
   REPEAT
	IF BankAccount."No." =  GenJnlLine."Bal. Account No." THEN
	 IF (BankAccount.CALCFIELDS(Balance) = TRUE) AND (BankAccount.Balance <> 0) THEN
	  IF BankAccount."Min. Balance" >= BankAccount.Balance - GenJnlLine.Amount THEN
	  ERROR(Text010);
   UNTIL BankAccount.NEXT =0;
END;
Старый 18.12.2007, 09:23   #11  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
Ну если честно делать, нужно писать проверки в 13 кодеюните (Gen. Jnl.-Post Batch). Ибо представляю реакцию пользователя, когда тестовый отчет показывает положительный баланс на банк. счете после учета, а самописные проверки требуют в первую очередь ввода приходных операций.
Ну а для более строгого контроля можно анализировать еще и весь фин. журнал, да и еще можно проверки добавить на валидэйте значимых полей в фин. журнале .
Имхо, бесполезная и ненужная фича. Для касс есть отчет кассира да и физически больше денег чем есть в кассе не отдадут, а для р/с обычно вводят данные по факту автоматом либо через клиент-банк либо через банковские выписки.
Старый 18.12.2007, 09:23   #12  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
RedFox Я сделал как ты указал в 11 кодеюните =))
Мне хватило 6 строк:
Код:
  IF BankAccount.FIND('-') THEN
   REPEAT
	IF BankAccount."No." =  GenJnlLine."Bal. Account No." THEN
	 IF (BankAccount.CALCFIELDS(Balance) = TRUE) AND (BankAccount.Balance <> 0) THEN
	  IF BankAccount."Min. Balance" >= BankAccount.Balance - GenJnlLine.Amount THEN ERROR(Text010);
   UNTIL BankAccount.NEXT =0;
Старый 18.12.2007, 09:28   #13  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
by_HT - Вам жирная ДВОЙКА за такой код код. Представьте себе что у Вас 200 банковских счетов и учитывается 500 строк фин. журнала, ни в одном из которых нет банк. счета, сколько раз выполнится Calcfields? Кроме того банк. счет может быть в левой стороне проводки.
PS. Строк действительно немного, если это самоцель
Старый 18.12.2007, 09:29   #14  
apanko is offline
apanko
MCTS
MCBMSS
Лучший по профессии 2009
 
1,164 / 139 (7) +++++
Регистрация: 24.02.2005
Цитата:
Сообщение от by_HT Посмотреть сообщение
Код:
IF GenJnlLine."Bal. Account Type"=4 THEN BEGIN
Этим я хотел узнать правдо ли у нас Bal. Account Type имеет значение: Bank Account.
а этой строкой:
Код:
IF GenJnlLine."Bal. Account Type"= Acc::"Bank Account" THEN GenJnlLine."Bal. Account Type" :=4;
Я присваеваю значение...
GenJnlLine."Bal. Account Type"=4 это ОС. Поля типа Option считаются с 0, а не с 1.
Смысл присваивания действительно не ясен. Чтобы убедиться в том, что счет правильного типа достаточно:
Код:
IF GenJnlLine."Bal. Account Type"=GenJnlLine."Bal. Account Type"::"Bank Account" THEN
Что касается GET
Код:
IF BankAccount.GET(GenJnlLine."Bal. Account No." ) THEN


PS
Документация Где найти документацию?
Книги книги по Navision
Старый 18.12.2007, 11:28   #15  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от rmv Посмотреть сообщение
by_HT - Вам жирная ДВОЙКА за такой код код.
TO RMV - Ну тогда милости просим написать свой код, а не ставить оценки.. Или Вы сразу тоже начали писать код без проблем, огрех или ошибок? Может все-таки вспомните себя!?!? И человеку с чего-то начинать нужно?

Согласен, что этот код, извините by_HT, не совсем корректен (нельзя анализировать только 1 строку журнала (и при этом тем более писать "4" или строки типа IF GenJnlLine."Bal. Account Type"= Acc::"Bank Account" THEN GenJnlLine."Bal. Account Type" :=4, которые переприсваювают сами себя), а нужно весь журнал вцелом по отдельному счету без использования FIND('-'). Нужно рассматривать "Account Type" и "Bal. Account Type").
В данном коде так же не верно выбрана последовательность поиска - сначала источник информации (а именно строки жунала), а потом то, что мы хотим проверить (банковские счета).

Цитата:
Представьте себе что у Вас 200 банковских счетов и учитывается 500 строк фин. журнала, ни в одном из которых нет банк. счета, сколько раз выполнится Calcfields? Кроме того банк. счет может быть в левой стороне проводки.
TO RMV - давайте я Вам так же усложню в таком случае еще задачу - написать код, который работал бы на SQL и Native c учетом
ежедневных приходов и расходов (движения по расчетному счету) с различными приоритетами по платежам, где каждый счет может быть мультивалютным и некоорые овердафтные.
При этом нужно помнить, что для SQL Calcfields это просто тяжелая задача, а Native Calcfields это типа фича NAV.

Это было в "условиях задачи"?
Цитата:
Имхо, бесполезная и ненужная фича.
PS. Строк действительно немного, если это самоцель
Вам кто-то ее предлагает или навязывает?
Или здесь указаны точные требования к функционалу для разработки? Спецификации?
Если я правильно понял, то человек учится (иначе бы прекрасно знал про GET, CALCFIELDS, отличие от CALSCUMS и т.д.).
И например, мое желание, просто помочь ему научиться анализировать и программить.

P.S. Извините форумчане за лирическое отступление, но нужно опускаться на уровень собеседника для общения.
Старый 18.12.2007, 16:46   #16  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
2 Redfox. Полегче и на полтона ниже.
Не хочется заниматся флудераторством, но все же Вам отвечу по порядку:

1. Если выложил на форум свой код - будь готов к тому что его начнут оценивать. Моя оценка - два, By_HT стоит просто поучится программированию. Надеюсь что он работает не в консалтинге, а действительно учится для себя. Вы Redfox наверно никогда не сталкивались с подобных вот кодом на своих проектах, а мне пришлось. Что же, от души пожелаю Вам проявить свои таланты наставника не только на форуме.

2. По поводу "усложненной задачи". Если есть конкретные предложения - прошу в PM. Иначе попрошу не флудить.

3. Лезем на гугл и ищем что означает слово "Имхо".

PS. Не стоит извинений . Иногда действительно стоит опускаться до уровня собеседника, но при этом не стоит забывать что те советы которые Вы даете By_HT могут оказать ему медвежью услугу. Нет ничего проще чем залезть 12 кодеюнит и поправить "пару" строк, вместо того чтобы проанализировать проблему всесторонне.
Старый 18.12.2007, 20:02   #17  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от rmv Посмотреть сообщение
2 Redfox. Полегче и на полтона ниже.
Не хочется заниматся флудераторством, но все же Вам отвечу по порядку:
Не вопрос. но я даже и не думал писать жестко и громко ;-)
Каждый читает так, как ему хочется читать - таково восприятие чиловеком информации. Но я учту ваши пожелания.

Цитата:
1. Если выложил на форум свой код - будь готов к тому что его начнут оценивать. Моя оценка - два, By_HT стоит просто поучится программированию. Надеюсь что он работает не в консалтинге, а действительно учится для себя. Вы Redfox наверно никогда не сталкивались с подобных вот кодом на своих проектах, а мне пришлось. Что же, от души пожелаю Вам проявить свои таланты наставника не только на форуме.
а он и старается именно это сделать - научится программить. А по поводу кода - уж поверте... поэтому и пишу здесь, чтобы ТАМ меньше было такого.

TO MAZZY - Может сделать подветрку для вопросов новичков, чтобы старшие не тюкали?

Цитата:
2. По поводу "усложненной задачи". Если есть конкретные предложения - прошу в PM. Иначе попрошу не флудить.
Все свои конкретные предложения я делаю обычно сам ;-)
В данном случае это кусок реального примера, который делали.

Цитата:
3. Лезем на гугл и ищем что означает слово "Имхо".

PS. Не стоит извинений . Иногда действительно стоит опускаться до уровня собеседника, но при этом не стоит забывать что те советы которые Вы даете By_HT могут оказать ему медвежью услугу. Нет ничего проще чем залезть 12 кодеюнит и поправить "пару" строк, вместо того чтобы проанализировать проблему всесторонне.
Опять не хочу показать грубым и криящим, то чоловек задал вопрос, на который хотел получить ответ, а не мнение ;-)
Еще раз приношу извинения за мои уточнения.
Старый 20.12.2007, 15:38   #18  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
Спасибо конечно всем.... особое спасибо RedFoxу!
если "Account Type"::"Bank Account": то
Код:
IF GenJnlLine."Account Type" = GenJnlLine."Account Type"::"Bank Account" THEN BEGIN
 IF (BankAccount.CALCFIELDS(Balance) = TRUE) AND (BankAccount.Balance <> 0) THEN
  IF BankAccount."Min. Balance" >= BankAccount.Balance - GenJnlLine.Amount THEN ERROR(Text013);
END;
в случае "Bal. Account Type"::"Bank Account": то
Код:
IF GenJnlLine."Bal. Account Type" = GenJnlLine."Bal. Account Type"::"Bank Account" THEN BEGIN
 IF (BankAccount.CALCFIELDS(Balance) = TRUE) AND (BankAccount.Balance <> 0) THEN
  IF BankAccount."Min. Balance" >= BankAccount.Balance - GenJnlLine.Amount THEN ERROR(Text013);
END;
В случае 200 банковских счетов и 500 строк фин. журнала..... здесь я понятие и не имею что мне делать =(
Старый 20.12.2007, 15:41   #19  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
rmv, на 3 с минусом покатит????
Старый 20.12.2007, 17:39   #20  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от by_HT Посмотреть сообщение
Спасибо конечно всем.... особое спасибо RedFoxу!
если "Account Type"::"Bank Account": то
Код:
IF GenJnlLine."Account Type" = GenJnlLine."Account Type"::"Bank Account" THEN BEGIN
 IF (BankAccount.CALCFIELDS(Balance) = TRUE) AND (BankAccount.Balance <> 0) THEN
  IF BankAccount."Min. Balance" >= BankAccount.Balance - GenJnlLine.Amount THEN ERROR(Text013);
END;
в случае "Bal. Account Type"::"Bank Account": то
Код:
IF GenJnlLine."Bal. Account Type" = GenJnlLine."Bal. Account Type"::"Bank Account" THEN BEGIN
 IF (BankAccount.CALCFIELDS(Balance) = TRUE) AND (BankAccount.Balance <> 0) THEN
  IF BankAccount."Min. Balance" >= BankAccount.Balance - GenJnlLine.Amount THEN ERROR(Text013);
END;
Я не знаю может быть у тебя такое или нет, но в одном разделе жунала может быть несколько строк. Поэтому нужно проверять, как мне кажется, не по строчно, а суммарно по учитываемому разделу жунала.

Цитата:
В случае 200 банковских счетов и 500 строк фин. журнала..... здесь я понятие и не имею что мне делать =(
В случае, когда больше чем 1 банковских счетов - группировка и проверка каждого. При этом нужно учитывать ОБА "Account Type" и "Bal. Account Type" в одной под-проверке.
Но в таком случае лучше вынести проверку в отдельную процедуру.

P.S. Еще раз уточню - случай такой абстрактный может быть, а может и не быть
 


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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:57.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.