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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.04.2012, 10:44   #1  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Цитата:
Сообщение от zoya210489 Посмотреть сообщение
Попробовала написать фильтр, для поля группировки по поставщику:

IF Vendor.GET("Vendor Ledger Entry"."Vendor No.") THEN BEGIN
Vendor.SETRANGE("Date Filter",StartDate,EndDate);
Vendor.CALCFIELDS(Vendor."Debit Amount (LCY)",Vendor."Credit Amount (LCY)");
LineAmount1[3] := Vendor."Debit Amount (LCY)";
LineAmount1[4] := Vendor."Credit Amount (LCY)";
END;

Проблема возникла в том, что он рассчитал сумму для поставщика по всем учетным группам, где он участвовал, т.е. все обобщил и получилось что по счету 66 у поставшика по дебету 300, когда на самом счете 100, т.к. он еще сложил суммы и с других счетов.

Затем попробывала рассчитать значение для клиента не через таблицу Vendor, а через Detailed Vendor Ledg. Entry (DVLE):

DVLE.SETCURRENTKEY(DVLE."Vendor Posting Group",DVLE."Vendor No.",DVLE."Agreement No.");
IF DVLE.GET(AA) and DVLE.GET(vdd) THEN BEGIN
DVLE.SETRANGE(DVLE."Posting Date",StartDate,EndDate);
DVLE.CALCSUMS(DVLE."Debit Amount (LCY)",DVLE."Credit Amount (LCY)");
LineAmount1[3] := DVLE."Debit Amount (LCY)";
LineAmount1[4] := DVLE."Credit Amount (LCY)";
END;

У меня выдает ошибку "Выражение Code нельзя преобразовать по типу значения Integer". Подскажите как можно решить данную проблему.

не знаю что в себе несут переменный АА и VDD, но вот это ад:
Код:
IF DVLE.GET(AA) and DVLE.GET(vdd) THEN BEGIN
какую смысловую нагрузку вы придаете этой строчке?

в подробностях нет полей договора и группы, если вы их туда не будете подставлять при учете, предварительно создав поля и поправив учетные процедуры.
именно по этому нам нужна временная табличка, в нее мы подставим вычисленные поля из операций поставщика(почему он у вас фигурирует как клиент, кстати?), а так же поля по которым будем фильтровать. Похожий ф-ционал реализован в аналитических отчетах.

ЗЫ Чисто ради интереса. Ваш процесс обучения кто-нибудь контролирует? Есть носители знаний поблизости?
Старый 18.04.2012, 11:19   #2  
ZoyaKom is offline
ZoyaKom
Участник
 
99 / 10 (1) +
Регистрация: 05.04.2012
Цитата:
Сообщение от InTacto Посмотреть сообщение
Цитата:
Сообщение от zoya210489 Посмотреть сообщение
Попробовала написать фильтр, для поля группировки по поставщику:

IF Vendor.GET("Vendor Ledger Entry"."Vendor No.") THEN BEGIN
Vendor.SETRANGE("Date Filter",StartDate,EndDate);
Vendor.CALCFIELDS(Vendor."Debit Amount (LCY)",Vendor."Credit Amount (LCY)");
LineAmount1[3] := Vendor."Debit Amount (LCY)";
LineAmount1[4] := Vendor."Credit Amount (LCY)";
END;

Проблема возникла в том, что он рассчитал сумму для поставщика по всем учетным группам, где он участвовал, т.е. все обобщил и получилось что по счету 66 у поставшика по дебету 300, когда на самом счете 100, т.к. он еще сложил суммы и с других счетов.

Затем попробывала рассчитать значение для клиента не через таблицу Vendor, а через Detailed Vendor Ledg. Entry (DVLE):

DVLE.SETCURRENTKEY(DVLE."Vendor Posting Group",DVLE."Vendor No.",DVLE."Agreement No.");
IF DVLE.GET(AA) and DVLE.GET(vdd) THEN BEGIN
DVLE.SETRANGE(DVLE."Posting Date",StartDate,EndDate);
DVLE.CALCSUMS(DVLE."Debit Amount (LCY)",DVLE."Credit Amount (LCY)");
LineAmount1[3] := DVLE."Debit Amount (LCY)";
LineAmount1[4] := DVLE."Credit Amount (LCY)";
END;

У меня выдает ошибку "Выражение Code нельзя преобразовать по типу значения Integer". Подскажите как можно решить данную проблему.

не знаю что в себе несут переменный АА и VDD, но вот это ад:
Код:
IF DVLE.GET(AA) and DVLE.GET(vdd) THEN BEGIN
какую смысловую нагрузку вы придаете этой строчке?

в подробностях нет полей договора и группы, если вы их туда не будете подставлять при учете, предварительно создав поля и поправив учетные процедуры.
именно по этому нам нужна временная табличка, в нее мы подставим вычисленные поля из операций поставщика(почему он у вас фигурирует как клиент, кстати?), а так же поля по которым будем фильтровать. Похожий ф-ционал реализован в аналитических отчетах.

ЗЫ Чисто ради интереса. Ваш процесс обучения кто-нибудь контролирует? Есть носители знаний поблизости?
В таблице Detailed Vendor Ledg. Entry, есть поля и поставщик, и учетная группа и договор может попробывать как нибудь на нее настроить фильтр??

Код:

DVLE.SETCURRENTKEY(DVLE."Vendor Posting Group",DVLE."Vendor No.",DVLE."Agreement No.");
IF DVLE.GET("Vendor Ledger Entry"."Vendor Posting Group") and DVLE.GET("Vendor Ledger Entry"."Vendor No.") THEN BEGIN
DVLE.SETRANGE(DVLE."Posting Date",StartDate,EndDate);
DVLE.CALCSUMS(DVLE."Debit Amount (LCY)",DVLE."Credit Amount (LCY)");
LineAmount1[3] := DVLE."Debit Amount (LCY)";
LineAmount1[4] := DVLE."Credit Amount (LCY)";
END;
Старый 18.04.2012, 11:38   #3  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Цитата:
Сообщение от zoya210489 Посмотреть сообщение
В таблице Detailed Vendor Ledg. Entry, есть поля и поставщик, и учетная группа и договор может попробывать как нибудь на нее настроить фильтр??

Код:

DVLE.SETCURRENTKEY(DVLE."Vendor Posting Group",DVLE."Vendor No.",DVLE."Agreement No.");
IF DVLE.GET("Vendor Ledger Entry"."Vendor Posting Group") and DVLE.GET("Vendor Ledger Entry"."Vendor No.") THEN BEGIN
DVLE.SETRANGE(DVLE."Posting Date",StartDate,EndDate);
DVLE.CALCSUMS(DVLE."Debit Amount (LCY)",DVLE."Credit Amount (LCY)");
LineAmount1[3] := DVLE."Debit Amount (LCY)";
LineAmount1[4] := DVLE."Credit Amount (LCY)";
END;
Сорри, смотрел табличку 4 версии, там таких полей нет. В 5 есть. Это упрощает все.
Можно почти забыть про временную табличку, правда отсутствие счета может подпортить картину.
Вы так и не ответили что за смысл в этой строке
Код:
IF DVLE.GET("Vendor Ledger Entry"."Vendor Posting Group") and DVLE.GET("Vendor Ledger Entry"."Vendor No.") THEN BEGIN
для справки, GET возвращает запись по главному ключу, у DVLE это поле Entry No с типом Integer. Кроме цифорок для этой таблицы пихать в GET ничего нельзя, о чем и выводится ошибка.
Если вы хотите поставить фильтры, то используйте setrange или setfilter, что вы и делаете для даты, а вот для группы и договора делаете почему-то по другому.
Старый 18.04.2012, 11:53   #4  
ZoyaKom is offline
ZoyaKom
Участник
 
99 / 10 (1) +
Регистрация: 05.04.2012
Цитата:
Сообщение от InTacto Посмотреть сообщение
Цитата:
Сообщение от zoya210489 Посмотреть сообщение
В таблице Detailed Vendor Ledg. Entry, есть поля и поставщик, и учетная группа и договор может попробывать как нибудь на нее настроить фильтр??

Код:

DVLE.SETCURRENTKEY(DVLE."Vendor Posting Group",DVLE."Vendor No.",DVLE."Agreement No.");
IF DVLE.GET("Vendor Ledger Entry"."Vendor Posting Group") and DVLE.GET("Vendor Ledger Entry"."Vendor No.") THEN BEGIN
DVLE.SETRANGE(DVLE."Posting Date",StartDate,EndDate);
DVLE.CALCSUMS(DVLE."Debit Amount (LCY)",DVLE."Credit Amount (LCY)");
LineAmount1[3] := DVLE."Debit Amount (LCY)";
LineAmount1[4] := DVLE."Credit Amount (LCY)";
END;
Сорри, смотрел табличку 4 версии, там таких полей нет. В 5 есть. Это упрощает все.
Можно почти забыть про временную табличку, правда отсутствие счета может подпортить картину.
Вы так и не ответили что за смысл в этой строке
Код:
IF DVLE.GET("Vendor Ledger Entry"."Vendor Posting Group") and DVLE.GET("Vendor Ledger Entry"."Vendor No.") THEN BEGIN
для справки, GET возвращает запись по главному ключу, у DVLE это поле Entry No с типом Integer. Кроме цифорок для этой таблицы пихать в GET ничего нельзя, о чем и выводится ошибка.
Если вы хотите поставить фильтры, то используйте setrange или setfilter, что вы и делаете для даты, а вот для группы и договора делаете почему-то по другому.

Просто я написала код для счета поставщика (учетная группа):

IF GLA.GET("Vendor Ledger Entry"."Vendor Posting Group") THEN GL:=GLA.Name;
IF GLA.GET("Vendor Ledger Entry"."Vendor Posting Group") THEN BEGIN
GLA.SETRANGE("Date Filter",StartDate,EndDate);
GLA.CALCFIELDS(GLA."Debit Amount",GLA."Credit Amount");
LineAmount1[1] := GLA."Debit Amount";
LineAmount1[2] := GLA."Credit Amount";
END;

Где GLA - это Record G/L Account.
GL - это Text (100)
LineAmount1 - это Decimal.

У меня в отчете есть раздел groupheader в который я вывожу счета (по учетным группам поставщиков).
В этом разделе я разместила 4 textbox: 1)"Vendor Ledger Entry"."Vendor Posting Group"; 2)GL (выводит наименования счета) 3)LineAmount1[1] (выводит сумму по дебету для конкретного счета) 4) LineAmount1[2] (выводит сумму по кредиту для конкретного счета).

И у меня это получилось правильно вывести, вот я и подумала по аналогии сделать с поставщиками.

Я думала что функция GET позволит вычислить значание дебета и кредита для нужной комбинации свое.
Старый 18.04.2012, 12:59   #5  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Цитата:
Сообщение от zoya210489 Посмотреть сообщение

Просто я написала код для счета поставщика (учетная группа):

IF GLA.GET("Vendor Ledger Entry"."Vendor Posting Group") THEN GL:=GLA.Name;
IF GLA.GET("Vendor Ledger Entry"."Vendor Posting Group") THEN BEGIN
GLA.SETRANGE("Date Filter",StartDate,EndDate);
GLA.CALCFIELDS(GLA."Debit Amount",GLA."Credit Amount");
LineAmount1[1] := GLA."Debit Amount";
LineAmount1[2] := GLA."Credit Amount";
END;

Где GLA - это Record G/L Account.
GL - это Text (100)
LineAmount1 - это Decimal.
Это не правильный код.
Наверное у вас одинаковые кода учетной группы и счета, по этому показывате правильно.
На самом деле вам нужно что-то такое:

Код:
if "Vendor Posting group".get("Vendor Ledger Entry"."Vendor Posting Group") then
  begin
    IF GLA.GET("Vendor Ledger Entry".Payables Account) THEN BEGIN
      GLA.SETRANGE("Date Filter",StartDate,EndDate);
      GLA.CALCFIELDS(GLA."Debit Amount",GLA."Credit Amount");
      LineAmount1[1] := GLA."Debit Amount";
      LineAmount1[2] := GLA."Credit Amount";
    END;
 end
и даже так будет на совсем правильно. В общем случае операции поставщика у вас показывают все: основные суммы, округления, суммовые разницы. А вот на счете поставщика округление и суммовые разницы могут и не оказаться, т.к. их могут складывать на другие счета.
Старый 19.04.2012, 03:25   #6  
ZoyaKom is offline
ZoyaKom
Участник
 
99 / 10 (1) +
Регистрация: 05.04.2012
Цитата:
Сообщение от InTacto Посмотреть сообщение
Цитата:
Сообщение от zoya210489 Посмотреть сообщение

Просто я написала код для счета поставщика (учетная группа):

IF GLA.GET("Vendor Ledger Entry"."Vendor Posting Group") THEN GL:=GLA.Name;
IF GLA.GET("Vendor Ledger Entry"."Vendor Posting Group") THEN BEGIN
GLA.SETRANGE("Date Filter",StartDate,EndDate);
GLA.CALCFIELDS(GLA."Debit Amount",GLA."Credit Amount");
LineAmount1[1] := GLA."Debit Amount";
LineAmount1[2] := GLA."Credit Amount";
END;

Где GLA - это Record G/L Account.
GL - это Text (100)
LineAmount1 - это Decimal.
Это не правильный код.
Наверное у вас одинаковые кода учетной группы и счета, по этому показывате правильно.
На самом деле вам нужно что-то такое:

Код:
if "Vendor Posting group".get("Vendor Ledger Entry"."Vendor Posting Group") then
  begin
    IF GLA.GET("Vendor Ledger Entry".Payables Account) THEN BEGIN
      GLA.SETRANGE("Date Filter",StartDate,EndDate);
      GLA.CALCFIELDS(GLA."Debit Amount",GLA."Credit Amount");
      LineAmount1[1] := GLA."Debit Amount";
      LineAmount1[2] := GLA."Credit Amount";
    END;
 end
и даже так будет на совсем правильно. В общем случае операции поставщика у вас показывают все: основные суммы, округления, суммовые разницы. А вот на счете поставщика округление и суммовые разницы могут и не оказаться, т.к. их могут складывать на другие счета.

Что такое Payables Account??
Старый 18.04.2012, 11:27   #7  
ZoyaKom is offline
ZoyaKom
Участник
 
99 / 10 (1) +
Регистрация: 05.04.2012
Цитата:
Сообщение от InTacto Посмотреть сообщение
ЗЫ Чисто ради интереса. Ваш процесс обучения кто-нибудь контролирует? Есть носители знаний поблизости?
Нет, я разбираюсь сама, читаю книжки, ищю информацию в интернете.
 


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

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

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