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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.02.2011, 12:26   #1  
ska_punx is offline
ska_punx
Участник
Аватар для ska_punx
 
66 / 10 (1) +
Регистрация: 19.05.2004
Доброго времени суток.

Дело в том, что у нас Заказы продажи отгружаются частично и порой в достаточно большом промежутке времени.
Оплаты от Клиентов поступают частями (бывают и предоплаты), причем в большинстве случаев, сумма оплаты не равняется сумме уже произведенной отгрузке.
И назрела необходимость иметь форму, которая бы показывала в одной строке суммарные данные в Целом по Заказу Продажи - на какую сумму отгружено, на какую сумму пришли оплаты. Но так же форма должна показывать построчно каждую отгрузку, связанную с этим Заказом Продажи.

Очень приглянулся функционал формы 5847 (Average Cost Calc. Overview).
Форму, которая показывает построчно отгрузки с суммами и измерениями товара я сделал, но вот, как сделать, чтобы строки с одинаковым номером Заказа свернуть/сгруппировать в одну строку... вот тут у меня тупик...
С суммированием оплат по заказу, тоже проблем нету

Я с кодом "на ВЫ", поэтому, если, кто-нибудь покажет "на пальцах", какие тут основные моменты - буду премного благодарен.

NAV5SP3 SQL

Заранее благодарен за вразумительные ответы.
__________________
Просто я из того поколения, которое кот Матроскин учил правильно есть бутерброды, а не Картман - материться...
Старый 07.02.2011, 19:19   #2  
.Quattro. is offline
.Quattro.
Участник
Лучший по профессии 2009
 
194 / 22 (1) +++
Регистрация: 22.05.2006
У вас есть 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);
Если захочется, чтобы у строк вообще не было +/-, то BitMap List должен быть 1001,46,47, в качестве Source Expression должна быть переменная типа integer.
За это сообщение автора поблагодарили: mira (1).
 


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

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

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