17.04.2012, 06:40 | #21 |
Участник
|
Написала код, который рассчитывает сумму строк, также как если бы я просто указала на них в groupfooter. Если я расчитанное значение подставляю в body то вижу все итерации, если в groupfooter то вижу правильное значение, если в groupheader то только сумму первой строки, а не всех строк, подскажите как мне отобразить полную рассчитанную сумма в groupheader. Или же какие то другие способы группировать и выводить итоги над записями.
|
|
17.04.2012, 08:38 | #22 |
Участник
|
Цитата:
P.S. попробуйте отчет в Excel вывести, как мне кажется, получается более гибко. |
|
17.04.2012, 08:47 | #23 |
Участник
|
Цитата:
Сообщение от Constantine
Цитата:
P.S. попробуйте отчет в Excel вывести, как мне кажется, получается более гибко. |
|
17.04.2012, 08:57 | #24 |
Участник
|
В Header, в который вы хотите вывести значения. Объявляете переменные, ставите на них нужные фильтры и потом
Код: REPEAT ... UNTIL ...NEXT = 0; |
|
17.04.2012, 10:17 | #25 |
Участник
|
Цитата:
Счет 60.....Сумма счета - документ - ... - ... Счет 66 ....Сумма счета и т.д. Каким образом, можно их друг от друга отделить, чтобы суммировать и выводить сумма для каждого счета в отдельности. Написала вот такой код Vendor Ledger Entry, GroupHeader (2) - OnPreSection() CurrReport.SHOWOUTPUT(CurrReport.TOTALSCAUSEDBY=FIELDNO("Vendor Ledger Entry"."Vendor Posting Group")); REPEAT VLE.CALCFIELDS(VLE."Debit Amount (LCY)"); A:=A+VLE."Debit Amount (LCY)"; UNTIL VLE.NEXT = 0; показывает непонятные значения, которые не понять как расчитаны. Подскажите исправить данную ситуацию. |
|
17.04.2012, 10:23 | #26 |
Участник
|
Объясните зачем здесь использовать группировку?
Было бы проще просто использовать для каждого датайтема только боди и обычный хидер, раз все равно в начале суммы выводить придется. Уверен, что сейчас начнуться проблемы с тем куда вставлять вычисление и как получить фильтр из датайтема (Скорее всего в пресектион групфутера) |
|
17.04.2012, 10:24 | #27 |
Участник
|
UPD чуть-чуть не успел с ответом.
|
|
17.04.2012, 10:42 | #28 |
Участник
|
Цитата:
Сообщение от InTacto
Объясните зачем здесь использовать группировку?
Было бы проще просто использовать для каждого датайтема только боди и обычный хидер, раз все равно в начале суммы выводить придется. Уверен, что сейчас начнуться проблемы с тем куда вставлять вычисление и как получить фильтр из датайтема (Скорее всего в пресектион групфутера) Мне необходимо построить отчет по иерархии, вначале суммы по счету поставщика, потом из чего эта сумма складывается (по поставщикам), далее для каждого поставщика по договорам, а затем по документам. у меня один датайтем - Vendor Ledger Entry. Просто я начинала делать при помощи многий датайтемов и столкнулась с проблемами: 1.Vendor Posting Group 2.Vendor (тут я не знаю как связать с предыдущей таблицей, т.к. учетная группа поставщика постоянно меняется, а как для данной учетной группы отобразить суммы по дебету и кредиту в разрезе данного клиента???) 3.Vendor Agreement ( договор можно связать с поставщиком, но опять же проблема с учетной группой, точнее с счетом ГК для участвовал данный договор) 4.Vendor Ledger Entry (тут просто выводим все документы относящиеся к данной учетной группе, поставщику и договору). Подскажите как быть в данной ситуации. |
|
17.04.2012, 11:04 | #29 |
Участник
|
У вас должно быть так:
Счет ( в онпридайтайтем смотрим есть ли операции по учетным группым с которыми связан счет) Поставщик1 ( в онпридайтайтем смотрим есть ли операции по данному поставщику) Учетная группа1 ( в онпридайтайтем смотрим есть ли операции по данному поставщику и данной учетной группе) Договор1 ( в онпридайтайтем смотрим есть ли операции по данному поставщику, учетно) Документ1 Документ2 Договор2 ....... Учетная группа2 Договор1 Документ1 ..... ..... Поставщик2 Учетная группа1 ..... Учетная группа2 Хотя разные учетные группы у одного поставщика меня смущают, ну да ладно. Теперь по производительности. |
|
17.04.2012, 11:18 | #30 |
Участник
|
Цитата:
Сообщение от InTacto
У вас должно быть так:
Счет ( в онпридайтайтем смотрим есть ли операции по учетным группым с которыми связан счет) Поставщик1 ( в онпридайтайтем смотрим есть ли операции по данному поставщику) Учетная группа1 ( в онпридайтайтем смотрим есть ли операции по данному поставщику и данной учетной группе) Договор1 ( в онпридайтайтем смотрим есть ли операции по данному поставщику, учетно) Документ1 Документ2 Договор2 ....... Учетная группа2 Договор1 Документ1 ..... ..... Поставщик2 Учетная группа1 ..... Учетная группа2 Хотя разные учетные группы у одного поставщика меня смущают, ну да ладно. Теперь по производительности. |
|
17.04.2012, 11:38 | #31 |
Участник
|
Случайно запостил раньше сообщение, вот полный текст.
У вас должно быть так: _Счет ( в онпридайтайтем смотрим есть ли операции по учетным группым с которыми связан счет) ___Поставщик1 ( в онпридайтайтем смотрим есть ли операции по данному поставщику) ______Учетная группа1 ( в онпридайтайтем смотрим есть ли операции по данному поставщику и данной учетной группе) __________Договор1 ( в онпридайтайтем смотрим есть ли операции по данному поставщику, учетной группе, договору) _____________Документ1 (выводим документы) _____________Документ2 __________Договор2 __________....... ______Учетная группа2 __________Договор1 _____________Документ1 _____________..... __________..... ___Поставщик2 ______Учетная группа1 __________..... ______Учетная группа2 Хотя разные учетные группы у одного поставщика меня смущают, ну да ладно. Теперь по производительности. Тут сложнее. Поля дебета и кредита вычесляемые, каждый раз их суммировать не айс. Лучше при подсчете суммы для счет загнать все операции во временную таблицу (например в GL Entry), не забыв указать номер постащика, группу, договор, документ в схожие по типу поля. Например, будем использовать ключик Source Type (оставляем пустым) ,Source No.( номер поставщика) ,G/L Account No. (пустой) ,Global Dimension 1 Code (группа) ,Global Dimension 2 Code (договор) ,Business Unit Code(пустой),Posting Date ( сюда на всякий случай запишем дату учета из операции) на временную табличку и указываем необходимые фильтры в зависимости от датайтема, в котором сейчас находимся. И делаем calcsums по дебету и кредиту. Выводить придется записи из временной таблицы. Возможно поля измерений не подойдут по длине и придется мутить другой ключ с подходящими полями, а может и другую табличку брать под временную |
|
17.04.2012, 11:42 | #32 |
Участник
|
вы же сами сказали, что Учетная группа меняется. или они должны в другой счет перетечь?
|
|
18.04.2012, 03:22 | #33 |
Участник
|
Просто документы относящиеся к одному поставщику или договору могут иметь разные учетные группы. А вот про временные таблицы то мы должны вычислять не только сумму дебета и кредита для счета, а также для поставщика и договора, получается у нас будет несколько временных таблиц???
|
|
18.04.2012, 03:55 | #34 |
Участник
|
Цитата:
Сообщение от zoya210489
Просто документы относящиеся к одному поставщику или договору могут иметь разные учетные группы. А вот про временные таблицы то мы должны вычислять не только сумму дебета и кредита для счета, а также для поставщика и договора, получается у нас будет несколько временных таблиц???
Если поля дебет и кредит вычисляемые, то если попробовать наложить на них правильные фильтры то тогда может получится вывести правильные суммы; Я вот попробовала вывести сумму по дебету для счета (например 66-2100), у меня получилось, использовала код: IF GLA.GET("Vendor Ledger Entry"."Vendor Posting Group") THEN BEGIN GLA.SETRANGE("Date Filter",StartDate,EndDate); GLA.CALCFIELDS(GLA."Debit Amount"); AB:= GLA."Debit Amount"; END; где GLA это Record - G/L Account; Сумма выводится в HeaderGroup для каждого счета. Но вот по поставщику так сумму не вывести просто, т.к. в его таблице Vendor сумма по дебету и кредиту отображается полная, как отфильтровать только ту, которая у нас получится при сложении сумм документов для данного поставщика и определенного счета из таблицы Vendor Ledger Entry. Можно ли будет как то наложить фильтры и вывести также просто сумму как у меня получилось для счета??? |
|
18.04.2012, 10:27 | #35 |
Участник
|
Попробовала написать фильтр, для поля группировки по поставщику:
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". Подскажите как можно решить данную проблему. |
|
18.04.2012, 10:30 | #36 |
Участник
|
Цитата:
Сообщение от zoya210489
Просто документы относящиеся к одному поставщику или договору могут иметь разные учетные группы. А вот про временные таблицы то мы должны вычислять не только сумму дебета и кредита для счета, а также для поставщика и договора, получается у нас будет несколько временных таблиц??? Для того чтобы получить сумму по счету нужно наложить фильтр только на поле счета. для поставщика по счету и поставщику для договора по счету, постовщику и договору использовать будем calcsums по ключу, о чем я писал в предыдущем посте. |
|
18.04.2012, 10:44 | #37 |
Участник
|
Цитата:
Сообщение от 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 | #38 |
Участник
|
Цитата:
Сообщение от 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; |
|
18.04.2012, 11:21 | #39 |
Участник
|
Я просто уже создала какую то часть отчета, и он у меня работает нормально, за исключением только того, что не выводит правильно суммы по поставщику и договорам, не хотелось бы полностью переписывать его.
|
|
18.04.2012, 11:27 | #40 |
Участник
|
|
|