07.02.2011, 12:26 | #1 |
Участник
|
Доброго времени суток.
Дело в том, что у нас Заказы продажи отгружаются частично и порой в достаточно большом промежутке времени. Оплаты от Клиентов поступают частями (бывают и предоплаты), причем в большинстве случаев, сумма оплаты не равняется сумме уже произведенной отгрузке. И назрела необходимость иметь форму, которая бы показывала в одной строке суммарные данные в Целом по Заказу Продажи - на какую сумму отгружено, на какую сумму пришли оплаты. Но так же форма должна показывать построчно каждую отгрузку, связанную с этим Заказом Продажи. Очень приглянулся функционал формы 5847 (Average Cost Calc. Overview). Форму, которая показывает построчно отгрузки с суммами и измерениями товара я сделал, но вот, как сделать, чтобы строки с одинаковым номером Заказа свернуть/сгруппировать в одну строку... вот тут у меня тупик... С суммированием оплат по заказу, тоже проблем нету Я с кодом "на ВЫ", поэтому, если, кто-нибудь покажет "на пальцах", какие тут основные моменты - буду премного благодарен. NAV5SP3 SQL Заранее благодарен за вразумительные ответы.
__________________
Просто я из того поколения, которое кот Матроскин учил правильно есть бутерброды, а не Картман - материться... |
|
07.02.2011, 19:19 | #2 |
Участник
|
У вас есть 2 пути:
1 - через маркировку записей показывать/скрывать 2 - Сделать форму на временной таблице, показывать/срывать записи через удаление/добавление записей или через фильтры 2ой вариант более надежен, пользователь ничего не поломает. Создаете форму, предположим, на 37 таблице. В свойствах указываете SourceTableTemporary = Yes Первым полем надо сделать +/-. Я бы для этого использовал некое поле в 37, например "Allow Item Charge Assignment". Добавляем на форму в табличную часть PictureBox, в его свойствах указываем Source Expression = "Allow Item Charge Assignment", Bitmap List - 46,47 Затем добавляем поля Тип документа, Номер Документа, Код Товара, Описание, Кол-во При открытии формы необходимо заполнить таблицу данными: Код: Sales.Header.RESET; SalesHeader.SETCURRENTKEY(...); SalesHeder.SETRANGE("Customer No.", 'C00001'); SalesHeder.SETRANGE(...); IF SalesHeader.FINDSET THEN REPEAT Clear(rec); "Document Type" := SalesHeader."Document Type"; "Document No." := SalesHeader."No."; "Line No." := -1; "Allow Item Charge Assignment" := TRUE; INSERT(FALSE); // Никаких тригеров не должно быть! SalesLine.RESET; SalesLine.SETRANGE("Document type", SalesHeader."Document Type"); SalesLine.SETRANGE("Document No.", SalesHeader."No."); IF SalesLine.FINDSET THEN REPEAT Rec := SalesLine; "Allow Item Charge Assignment" := FALSE; Insert(FALSE); UNTIL SalesLine.NEXT = 0; UNTIL SalesHeader.NEXT = 0; Для этого можно использовать еще одно поле 37, на которое предварительно наложили фильтр. Те записи, которые необходимо отобразить, должны будут в этом поле иметь значение, удовлетворяющее фильтру. К примеру, код раскрытия/скрытия может быть примерно следующим: Код: IF "Line No." <> -1 THEN EXIT; Rec2.COPY(Rec); // Rec2 - тоже 37 RESET; SETRANGE("Document Type", "Document Type"); SETRANGE("Document No." "Documnt No."); SETFILTER("Line No.", '>0'); IF FINDSET(TRUE) THEN REPEAT "Поле Видимости" := NOT Rec2."Allow Item Charge Assignment"; MODIFY; UNTIL NEXT = 0; Rec.COPY(Rec2); "Allow Item Charge Assignment" := NOT "Allow Item Charge Assignment"; MODIFY; CurrForm.UPDATE(FALSE); |
|
|
За это сообщение автора поблагодарили: mira (1). |