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. Еще раз уточню - случай такой абстрактный может быть, а может и не быть |
|