|  15.01.2007, 16:44 | #1 | 
| Участник | 
			
			Почему при отсутствии денег в кассе или на р/с Navision позволяет учитывать расходные кассовые операции, что в итоге приводит к отрицательному балансу кассы или р/с? Даже при указании минимального баланса по кассе или по р/с система не дает никаких предупреждений при учете операций.
		 | 
|  | 
|  15.01.2007, 22:14 | #2 | 
| Участник | 
			
			Поле "Миним. баланс" - это так, для красоты. Оно нигде в системе  не контролируется. В справке абсолютно правильно написано: "Здесь можно ввести минимальный баланс для данного банковского счета." Можете вводить, можете не вводить.  Никто не обещал, что это на что-то повлияет. Совет: Добавьте в учетный кодюнит пару волшебных строк и контроль заработает. 
				__________________ Должен остаться только один. | 
|  | 
|  16.01.2007, 12:03 | #3 | 
| Участник | Цитата: 
		
			Сообщение от NeNavision
			   Поле "Миним. баланс" - это так, для красоты. Оно нигде в системе  не контролируется. В справке абсолютно правильно написано: "Здесь можно ввести минимальный баланс для данного банковского счета." Можете вводить, можете не вводить.  Никто не обещал, что это на что-то повлияет. Совет: Добавьте в учетный кодюнит пару волшебных строк и контроль заработает. | 
|  | 
|  17.12.2007, 10:14 | #4 | 
| Участник | Цитата: 
		
			Сообщение от NeNavision
			   Поле "Миним. баланс" - это так, для красоты. Оно нигде в системе  не контролируется. В справке абсолютно правильно написано: "Здесь можно ввести минимальный баланс для данного банковского счета." Можете вводить, можете не вводить.  Никто не обещал, что это на что-то повлияет. Совет: Добавьте в учетный кодюнит пару волшебных строк и контроль заработает. | 
|  | 
|  17.12.2007, 10:57 | #5 | 
| Участник | Цитата: Ну и по поводу строчек - тоже. Например, просто можно написать простую проверку по данному полю и выводить ERROR, Message, доп. ветку или так далее.. | 
|  | 
|  17.12.2007, 12:04 | #6 | 
| Участник | Цитата: 
		
			Сообщение от RedFox
			   По поводу кодеюнита - все зависит от того, что именно Вам нужно. Я бы поставил проверку значение по условию к полю в 11 или 12 (на запуск процедуры PostBankAcc) Ну и по поводу строчек - тоже. Например, просто можно написать простую проверку по данному полю и выводить ERROR, Message, доп. ветку или так далее.. Привидите пожалуйста пример как это можно реализовать | 
|  | 
|  17.12.2007, 15:16 | #7 | 
| Участник | 
			
			Вроде все должно выглядеть так: Код: 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; | 
|  | 
|  17.12.2007, 15:17 | #8 | 
| Участник | Цитата: Побыстренькому можно так: 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 | 
| Участник | Цитата: Цитата: Код: 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 ?!
		
	 | 
|  | 
|  18.12.2007, 08:10 | #10 | 
| Участник | Цитата: Код: IF GenJnlLine."Bal. Account Type"=4 THEN BEGIN а этой строкой: Код: IF GenJnlLine."Bal. Account Type"= Acc::"Bank Account" THEN GenJnlLine."Bal. Account Type" :=4; Буду очень рад, если ты напишешь, как это сделать гораздо правельней! Я так и не разобрался с Get. Цитата: Ого, я и не мог предположить... =( Пока у меня выходит так: Код: 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 | 
| Участник | 
			
			Ну если честно делать, нужно писать проверки в 13 кодеюните (Gen. Jnl.-Post Batch). Ибо представляю реакцию пользователя, когда тестовый отчет показывает положительный баланс на банк. счете после учета, а самописные проверки требуют в первую очередь ввода приходных операций.  Ну а для более строгого контроля можно анализировать еще и весь фин. журнал, да и еще можно проверки добавить на валидэйте значимых полей в фин. журнале  . Имхо, бесполезная и ненужная фича. Для касс есть отчет кассира да и физически больше денег чем есть в кассе не отдадут, а для р/с обычно вводят данные по факту автоматом либо через клиент-банк либо через банковские выписки. | 
|  | 
|  18.12.2007, 09:23 | #12 | 
| Участник | 
			
			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 | 
| Участник | 
			
			by_HT - Вам жирная ДВОЙКА за такой код код. Представьте себе что у Вас 200 банковских счетов и учитывается 500 строк фин. журнала, ни в одном из которых нет банк. счета, сколько раз выполнится Calcfields? Кроме того банк. счет может быть в левой стороне проводки. PS. Строк действительно немного, если это самоцель | 
|  | 
|  18.12.2007, 09:29 | #14 | 
| MCTS | Цитата: Смысл присваивания действительно не ясен. Чтобы убедиться в том, что счет правильного типа достаточно: Код: IF GenJnlLine."Bal. Account Type"=GenJnlLine."Bal. Account Type"::"Bank Account" THEN Код: IF BankAccount.GET(GenJnlLine."Bal. Account No." ) THEN PS Документация Где найти документацию? Книги книги по Navision | 
|  | 
|  18.12.2007, 11:28 | #15 | 
| Участник | 
			
			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? Кроме того банк. счет может быть в левой стороне проводки.
		
	 ежедневных приходов и расходов (движения по расчетному счету) с различными приоритетами по платежам, где каждый счет может быть мультивалютным и некоорые овердафтные. При этом нужно помнить, что для SQL Calcfields это просто тяжелая задача, а Native Calcfields это типа фича NAV. Это было в "условиях задачи"? Цитата: 
		
			Имхо, бесполезная и ненужная фича. PS. Строк действительно немного, если это самоцель Или здесь указаны точные требования к функционалу для разработки? Спецификации? Если я правильно понял, то человек учится (иначе бы прекрасно знал про GET, CALCFIELDS, отличие от CALSCUMS и т.д.). И например, мое желание, просто помочь ему научиться анализировать и программить. P.S. Извините форумчане за лирическое отступление, но нужно опускаться на уровень собеседника для общения. | 
|  | 
|  18.12.2007, 16:46 | #16 | 
| Участник | 
			
			2 Redfox. Полегче и на полтона ниже. Не хочется заниматся флудераторством, но все же Вам отвечу по порядку: 1. Если выложил на форум свой код - будь готов к тому что его начнут оценивать. Моя оценка - два, By_HT стоит просто поучится программированию. Надеюсь что он работает не в консалтинге, а действительно учится для себя. Вы Redfox наверно никогда не сталкивались с подобных вот кодом на своих проектах, а мне пришлось. Что же, от души пожелаю Вам проявить свои таланты наставника не только на форуме. 2. По поводу "усложненной задачи". Если есть конкретные предложения - прошу в PM. Иначе попрошу не флудить. 3. Лезем на гугл и ищем что означает слово "Имхо". PS. Не стоит извинений  . Иногда действительно стоит опускаться до уровня собеседника, но при этом не стоит забывать что те советы которые Вы даете By_HT могут оказать ему медвежью услугу. Нет ничего проще чем залезть 12 кодеюнит и поправить "пару" строк, вместо того чтобы проанализировать проблему всесторонне. | 
|  | 
|  18.12.2007, 20:02 | #17 | 
| Участник | Цитата: Каждый читает так, как ему хочется читать - таково восприятие чиловеком информации. Но я учту ваши пожелания. Цитата: 
		
			1. Если выложил на форум свой код - будь готов к тому что его начнут оценивать. Моя оценка - два, By_HT стоит просто поучится программированию. Надеюсь что он работает не в консалтинге, а действительно учится для себя. Вы Redfox наверно никогда не сталкивались с подобных вот кодом на своих проектах, а мне пришлось. Что же, от души пожелаю Вам проявить свои таланты наставника не только на форуме.
		
	 TO MAZZY - Может сделать подветрку для вопросов новичков, чтобы старшие не тюкали? Цитата: 
		
			2. По поводу "усложненной задачи". Если есть конкретные предложения - прошу в PM. Иначе попрошу не флудить.
		
	 В данном случае это кусок реального примера, который делали. Цитата: 
		
			3. Лезем на гугл и ищем что означает слово "Имхо".  PS. Не стоит извинений  . Иногда действительно стоит опускаться до уровня собеседника, но при этом не стоит забывать что те советы которые Вы даете By_HT могут оказать ему медвежью услугу. Нет ничего проще чем залезть 12 кодеюнит и поправить "пару" строк, вместо того чтобы проанализировать проблему всесторонне. Еще раз приношу извинения за мои уточнения. | 
|  | 
|  20.12.2007, 15:38 | #18 | 
| Участник | 
			
			Спасибо конечно всем.... особое спасибо 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; Код: 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; | 
|  | 
|  20.12.2007, 15:41 | #19 | 
| Участник | 
			
			rmv, на 3 с минусом покатит????     | 
|  | 
|  20.12.2007, 17:39 | #20 | 
| Участник | Цитата: 
		
			Сообщение от 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; Код: 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 строк фин. журнала..... здесь я понятие и не имею что мне делать =(
		
	 Но в таком случае лучше вынести проверку в отдельную процедуру. P.S. Еще раз уточню - случай такой абстрактный может быть, а может и не быть | 
|  |