|
![]() |
#1 |
Участник
|
Цитата:
Сообщение от 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 в подробностях нет полей договора и группы, если вы их туда не будете подставлять при учете, предварительно создав поля и поправив учетные процедуры. именно по этому нам нужна временная табличка, в нее мы подставим вычисленные поля из операций поставщика(почему он у вас фигурирует как клиент, кстати?), а так же поля по которым будем фильтровать. Похожий ф-ционал реализован в аналитических отчетах. ЗЫ Чисто ради интереса. Ваш процесс обучения кто-нибудь контролирует? Есть носители знаний поблизости? |
|
![]() |
#2 |
Участник
|
Цитата:
Сообщение от 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 в подробностях нет полей договора и группы, если вы их туда не будете подставлять при учете, предварительно создав поля и поправив учетные процедуры. именно по этому нам нужна временная табличка, в нее мы подставим вычисленные поля из операций поставщика(почему он у вас фигурирует как клиент, кстати?), а так же поля по которым будем фильтровать. Похожий ф-ционал реализован в аналитических отчетах. ЗЫ Чисто ради интереса. Ваш процесс обучения кто-нибудь контролирует? Есть носители знаний поблизости? Код: 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; |
|
![]() |
#3 |
Участник
|
Цитата:
Сообщение от 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; Можно почти забыть про временную табличку, правда отсутствие счета может подпортить картину. Вы так и не ответили что за смысл в этой строке Код: IF DVLE.GET("Vendor Ledger Entry"."Vendor Posting Group") and DVLE.GET("Vendor Ledger Entry"."Vendor No.") THEN BEGIN Если вы хотите поставить фильтры, то используйте setrange или setfilter, что вы и делаете для даты, а вот для группы и договора делаете почему-то по другому. |
|
![]() |
#4 |
Участник
|
Цитата:
Сообщение от 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; Можно почти забыть про временную табличку, правда отсутствие счета может подпортить картину. Вы так и не ответили что за смысл в этой строке Код: IF DVLE.GET("Vendor Ledger Entry"."Vendor Posting Group") and DVLE.GET("Vendor Ledger Entry"."Vendor No.") THEN BEGIN Если вы хотите поставить фильтры, то используйте 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 позволит вычислить значание дебета и кредита для нужной комбинации свое. |
|
![]() |
#5 |
Участник
|
Цитата:
Сообщение от 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 |
|
![]() |
#6 |
Участник
|
Цитата:
Сообщение от 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?? |
|
![]() |
#7 |
Участник
|
|
|