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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.11.2011, 16:42   #1  
JayCooller is offline
JayCooller
Участник
Аватар для JayCooller
 
9 / 10 (1) +
Регистрация: 04.08.2010
Доброго дня всем!
Столкнулись в NAV 5 с проблемой. Перестала работать проверка допустимых измерений при Учете. Измерения настроены как положено,
в плане счетов "кликаем" "Фин. Счет Карточка" -> Измерения. Заполняем : "Код Измерения" (например CPL), "Код Значения Измерения" (например '05.33'), "Учет Значения" (например 'Единый Код'), "Фильтр значений" (например '01*'). До недавних пор данные проверки отрабатывали на Ура, но сейчас не работают вообще и "Фин. Книга Операций" кишит проводками с неправильными измерениями. Есть ли еще какие нибудь настройки в NAV - е, влияющие на работу проверки измерений, при том, что в C/AL коде этот функционал не менялся?
Старый 09.11.2011, 17:07   #2  
Eugeny_F is offline
Eugeny_F
Участник
 
371 / 30 (2) +++
Регистрация: 18.11.2003
Адрес: Москва
Подозреваю, что в стандартном функционале есть некоторые режимы, когда проводки могут формироваться в обход данной проверки. Например в 4-ке у меня была такая проблема с проводками по нереализованным курсовым разницам.
Ну и еще могут быть конфликты между фин. счетом и другим справочником, для которого определено значение измерения. Например,на счете 60-01 у измерения стоит единый код 01, а на поставщике с учетной группой, настроенной на данный фин. счет определен единый код 02. В этом случае, если мне не изменяет память, следует смотреть настройку приоритетов стандартных измерений.
Старый 10.11.2011, 09:10   #3  
Васыо is offline
Васыо
Участник
 
316 / 12 (1) ++
Регистрация: 15.11.2006
Как вариант:
Цитата:
Таблица Приоритет измерения по умолчанию
Список полей в таблице


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

В строке журнала, например, можно вводить и учетный финансовый счет, и балансирующий счет. Если заданы стандартные измерения для обоих счетов, автоматически будут предложены значения стандартных измерений для обоих счетов. В такой ситуации может оказаться, что для одного и того же измерения будут предложены разные значения, что приведет к конфликту. Такой же конфликт может возникнуть между финансовыми счетами или типами счетов в документах и журналах, а также между заголовками и строками в документах.

Распределяя приоритеты между типами счетов, можно влиять на то, как в программе будут разрешаться конфликты между значениями измерений. Например, если финансовым счетам присвоен более высокий приоритет, чем клиентским, в программе в случае конфликта между значениями измерений финансового и клиентского счета будет отдаваться предпочтение финансовому счету.

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

В документе продажи или покупки: измерения заголовка обладают преимуществом над измерениями строки.
Старый 10.11.2011, 11:41   #4  
JayCooller is offline
JayCooller
Участник
Аватар для JayCooller
 
9 / 10 (1) +
Регистрация: 04.08.2010
Спасибо большое, попробую, отпишусь.
Старый 09.12.2011, 12:48   #5  
JayCooller is offline
JayCooller
Участник
Аватар для JayCooller
 
9 / 10 (1) +
Регистрация: 04.08.2010
В общем, все прозаично получилось со Стандартными Измерениями. Мы их заполнили только на уровне одиночных Счетов, поэтому политики групп счетов не проверяются и между значениями Стандартных Измерений разных уровней конфликтов быть не должно. В случае конфликта между стандартными измерениями, которые не удается разрешить на основе установленных приоритетов, применяются следующие правила : если два счета с конфликтующими значениями Ст. Измерений имеют одинаковые приоритеты или относятся к одному типу, конфликт разрешается в пользу счета, введенного последним. Так, на примере Акта Списания в Codeunit - е 12 формируется строка "Gen. Jnl. Line" Фин. Журнала, а только в каком порядке вводятся Счета одному NAVISION - у известно и например при списании со Счета 20.02.22.1 измерение CPL в таблице Счетов настроено в "Единый Код" = 02.22, но при Учете с пустым измерением CPL ошибка не формируется. В итоге в том же Codeunit - е 12 написал функцию по проверке Стандартных Измерений. Добавил вот такой кусочек в InitGLEntry (т.е. это уже этап формирования Фин. Книги Операций):
Код:
{IF (GenJnlLine."Account Type" = GenJnlLine."Account Type"::"G/L Account") THEN BEGIN
    TableID[1] := DimMgt.TypeToTableID1(GenJnlLine."Account Type"::"G/L Account");
    AccNo[1] := GLAccNo;
    IF NOT CheckJnlLineDimValuePosting(TempJnlLineDim,TableID[1],AccNo[1]) THEN BEGIN
      IF GenJnlLine."Line No." <> 0 THEN
        ERROR(
          Text013,
          GenJnlLine.TABLECAPTION,GenJnlLine."Journal Template Name",
          GenJnlLine."Journal Batch Name",GenJnlLine."Line No.",
          DimMgt.GetDimValuePostingErr);
      END;
END;
и написал две функции : CheckJnlLineDimValuePosting и CheckDefaultDimensionAccount - для контроля только Фин. Счетов.
Код:
CheckJnlLineDimValuePosting(VAR JnlLineDim : Record "Journal Line Dimension";TableID : Integer;No : Code[20]) IsChecked : Boolean
TempDimBuf2.RESET;
TempDimBuf2.DELETEALL;
IF JnlLineDim.FINDSET THEN BEGIN
  i := 1;
  REPEAT    
    TempDimBuf2.INIT;
    TempDimBuf2."Table ID" := DATABASE::"Journal Line Dimension";
    TempDimBuf2."Dimension Code" := JnlLineDim."Dimension Code";
    IF JnlLineDim."Dimension Value Code" <> '' THEN BEGIN
      TempDimBuf2."Entry No." := i;
      TempDimBuf2."Dimension Value Code" := JnlLineDim."Dimension Value Code";
      TempDimBuf2.INSERT;
      i := i + 1;
    END;
    IF JnlLineDim."New Dimension Value Code" <> '' THEN BEGIN
      TempDimBuf2."Entry No." := i;
      TempDimBuf2."Dimension Value Code" := JnlLineDim."Dimension Value Code";
      TempDimBuf2.INSERT;
      i := i + 1;
    END;
  UNTIL JnlLineDim.NEXT = 0;
END;
IF (NOT CheckDefaultDimensionAccount(TableID, No, TempDimBuf2)) THEN
  EXIT (FALSE)
ELSE
  EXIT (TRUE);
Код:
CheckDefaultDimensionAccount(VAR TableID : Integer;VAR No : Code[20];VAR TempDimBuf2 : Record "Dimension Buffer") IsChecked : Boolean
boolExitCode := TRUE;
recDefaultDImension.SETFILTER ( "Value Posting", '<>%1', recDefaultDImension."Value Posting"::" ");
IF ( (No <> '') AND (TableID > 0) ) THEN BEGIN
  IF TableID = 15 THEN BEGIN
    recDefaultDImension.SETFILTER ("Table ID", '%1', TableID);
    recDefaultDImension.SETFILTER ("No.", '%1', No);
    IF recDefaultDImension.FINDSET THEN BEGIN
      REPEAT
        TempDimBuf2.SETRANGE("Dimension Code",recDefaultDImension."Dimension Code");
        CASE recDefaultDImension."Value Posting" OF
          recDefaultDImension."Value Posting"::"Code Mandatory":
            BEGIN
              IF (NOT TempDimBuf2.FINDFIRST) OR
                 (TempDimBuf2."Dimension Value Code" = '') THEN BEGIN
                    DimValuePostingErr :=
                      STRSUBSTNO(
                        Text50008,
                        recDefaultDImension."Dimension Code",
                        recDefaultDImension."Dimension Code",
                        recDefaultDImension."No."
                        );
                    boolExitCode := FALSE;
                    ERROR ( DimValuePostingErr );
              END
              ELSE
                BEGIN              
                    IF recDefaultDImension.FilterValues <> '' THEN BEGIN
                      recDimensionValue.RESET;
                      recDimensionValue.FILTERGROUP (10);
                      recDimensionValue.SETFILTER ( "Dimension Code", '%1',
                                                    TempDimBuf2."Dimension Code");
                      recDimensionValue.SETFILTER ( Code,
                                                    recDefaultDImension.FilterValues );
                      recDimensionValue.FILTERGROUP (11);
                      recDimensionValue.SETFILTER ( Code, TempDimBuf2."Dimension Value Code" );
                      IF recDimensionValue.ISEMPTY THEN BEGIN
                        DimValuePostingErr :=
                          STRSUBSTNO(
                            Text50009,
                            recDefaultDImension."Dimension Code",
                            recDefaultDImension."Dimension Code",
                            TempDimBuf2."Dimension Value Code",
                            recDefaultDImension."No.",
                            recDefaultDImension.FIELDCAPTION (FilterValues) + ' ' + recDefaultDImension.FilterValues
                            );
                        ERROR (DimValuePostingErr);
                      END;
                    END;
                END;
            END;
          recDefaultDImension."Value Posting"::"Same Code":
            BEGIN
              IF (NOT TempDimBuf2.FINDFIRST) OR
                 (TempDimBuf2."Dimension Value Code" = '') THEN BEGIN
                    DimValuePostingErr :=
                      STRSUBSTNO(
                        Text50030,
                        recDefaultDImension."Dimension Code",
                        recDefaultDImension."Dimension Code",
                        recDefaultDImension."No.",
                        recDefaultDImension."Dimension Value Code"
                        );
                    ERROR ( DimValuePostingErr );
              END
              ELSE
                BEGIN
                  IF ((TempDimBuf2."Dimension Value Code" <> recDefaultDImension."Dimension Value Code") AND
                      (TempDimBuf2."Dimension Value Code" <> recDefaultDImension.FilterValues)) THEN
                    BEGIN
                      DimValuePostingErr :=
                        STRSUBSTNO (
                          Text50031,
                          recDefaultDImension."Dimension Code",
                          recDefaultDImension."Dimension Code",
                          TempDimBuf2."Dimension Value Code",
                          recDefaultDImension."No.",
                          recDefaultDImension."Dimension Value Code"
                        );
                      boolExitCode := FALSE;
                      ERROR ( DimValuePostingErr );
                    END;
                END;
            END;
          recDefaultDImension."Value Posting"::"No Code":
            BEGIN
              IF TempDimBuf2.FINDFIRST THEN
                BEGIN
                  DimValuePostingErr :=
                    STRSUBSTNO (
                      Text50032,
                      recDefaultDImension."Dimension Code",
                      recDefaultDImension."Dimension Code",
                      recDefaultDImension."No."
                      );
                  ERROR ( DimValuePostingErr );
                END;
            END;
        END;
      UNTIL recDefaultDImension.NEXT = 0;
    END;
  END;
END;
EXIT (boolExitCode);
В результате перед формирование каждой записи в Фин. Книгу будет выполнена проверка Стандартных Измерений последовательно для каждой формируемой записи, правда без учета приоритетов, но нам это и не нужно пока.
Старый 09.12.2011, 14:50   #6  
Fly is offline
Fly
Участник
Аватар для Fly
 
102 / 10 (1) +
Регистрация: 05.10.2007
Хм, интересная штука. А вы не проверяли, в шестерке эта ошибка воспроизводится?
А можете написать по шагам небольшой кейс, который позволит воспроизвести эту ошибку?
Я так понимаю, что ошибка возникает и-за российской функциональности (вы писали про учет акта списания). Или это W1-баг?
Старый 12.12.2011, 15:36   #7  
JayCooller is offline
JayCooller
Участник
Аватар для JayCooller
 
9 / 10 (1) +
Регистрация: 04.08.2010
Да, конечно, тест - кейс очень простой. В 5-ом NAV-e берем Акт Списания. Выбираем Общая Бизнес Группа "@20 МФМОСТ" (для определенности). Эта бизнес группа имеет настройку "Товары Коррекция Фин. Счет" = "20.02.22.1". У Фин. Счета "20.02.22.1" в карточке настроены Измерения : CPL, "Код Значения Измерения" = "02.22", "Учет Значения" = "Единый Код", "Фильтр значений" = "02.22". В закладке Измерения Акта Списания CPL не заполняем. В строках Акта заполняем одну строку с любым товаром, относящимся к данному Счету. Жмем Учет->Учет. Акт учитывается, а должно быть сообщение об ошибке в модальном окне вида : Измерение CPL является причиной ошибки ... А насчет ошибки российской функциональности мысль интересная, но в этом случае скорее всего проверки должны отрабатывать в Фин Журнале, а они там тоже игнорируются. Или я что то не правильно понял? Но в любом случае спасибо.
Старый 12.12.2011, 16:16   #8  
Fly is offline
Fly
Участник
Аватар для Fly
 
102 / 10 (1) +
Регистрация: 05.10.2007
Странно. Попробовал на чистой кронусовской демо-базе 50 SP1. Залез в настройку ПОСТОТЕЧ-РОЗНИЦА, Товарный Коррекция Фин. Счет 41-998. Для этого счета указал измерение по-умолчанию:
Измерение ОТДЕЛ
Значение Измерения АДМ
Учет значения Единый Код

В строку добавил товар с общей товарной группок РОЗНИЦА (товар но. 1000). Учитываю. Ошибка про выбор измерения.
Вы мне написали про то, что измерения у вас заданы для определенно счета. Общую бизнес-группу вы мне тоже написали. Но про конкретный товар не написали. Ведь при учете настройка ищется не только от общей бизнес-группы, но и еще от общей товарной группы (которая берется от товара), поэтому товар важен. Посмотрите какая у него группа и убедитесь, что вы смотрите ту настройку!
Старый 13.12.2011, 14:53   #9  
JayCooller is offline
JayCooller
Участник
Аватар для JayCooller
 
9 / 10 (1) +
Регистрация: 04.08.2010
В случае Акта Списания проверка измерений срабатывает, если выставить настройку конкретно для товара. Товар->Измерения->Для одного и там проставить Единый Код, то Измерения проверяются, но что случилось со счетами непонятно. А настраивать каждую карточку товара у нас никто не будет, их 300000. В C/AL коде каких то доработок не нашел и сделал свою. А Общая Товарная Группа на стандартные измерения не влияет. В ней задается Общая Настройка Учета с Фин. Счетами, которые в свою очередь уже настроены на Стандартные Измерения. Есть у меня подозрения, что внедренцы где то нахамутали, только найти это вряд ли получится.
Старый 13.12.2011, 16:28   #10  
GalaM is offline
GalaM
Moderator
Лучший по профессии 2009
 
640 / 42 (3) +++
Регистрация: 13.03.2008
Адрес: Москва
Цитата:
Сообщение от JayCooller Посмотреть сообщение
В случае Акта Списания проверка измерений срабатывает, если выставить настройку конкретно для товара. Товар->Измерения->Для одного и там проставить Единый Код, то Измерения проверяются, но что случилось со счетами непонятно.
То, что случилось со счетами понятно, проводки на фин. счета выполняются отдельно от учета товарных операций.


Кстати, в NAV 2009 Это ошибка исправлена, так что можно оттуда фикс взять.
 


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

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

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