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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.04.2011, 12:25   #1  
lobster is offline
lobster
Участник
Аватар для lobster
 
115 / 10 (1) +
Регистрация: 25.04.2008
Здравствуйте.
Создал поле "Дата первого заказа" (тип поля, дата) - в карточке клиента.
С помощью report'а мне нужно заполнить это поле у всех клиентов, основываясь на поле дата учета из таблицы sales invoice header (SIH).
Т,е. если у клиента были заказы, то мне нужна дата самого первого заказа которая будет проставляться в поле "Дата первого заказа" в карточке клиента, при отработке отчета.
Подскажите пожалуйста какой нужен для этого код.
Старый 18.04.2011, 12:54   #2  
Fly is offline
Fly
Участник
Аватар для Fly
 
102 / 10 (1) +
Регистрация: 05.10.2007
Цитата:
Сообщение от lobster Посмотреть сообщение
Здравствуйте.
Создал поле "Дата первого заказа" (тип поля, дата) - в карточке клиента.
С помощью report'а мне нужно заполнить это поле у всех клиентов, основываясь на поле дата учета из таблицы sales invoice header (SIH).
Т,е. если у клиента были заказы, то мне нужна дата самого первого заказа которая будет проставляться в поле "Дата первого заказа" в карточке клиента, при отработке отчета.
Подскажите пожалуйста какой нужен для этого код.
Думаю, что рассчитывать все таки надо по таблице Cust. Ledger Entry. Для этого необходимо определить следующий ключ (через SETCURRENTKEY или в свойствах DataItem):
"Customer No.", "Posting Date", "Currency Code"

Код будет примерно такой:
Код:
CustLedgEntry.SETCURRENTKEY("Customer No.", "Posting Date", "Currency Code");
CustLedgEntry.SETRANGE("Document Type", CustLedgEntry,"Document Type"::Invoice);
IF Cust.FINDSET
  REPEAT
    CustLedgEntry.SETRANGE("Customer No.", Cust."No.");
    IF CustLedgEntry.FINDFIRST THEN BEGIN
      Cust."First Order Date" := CustLedgEntry."Posting Date";
      Cust.MODIFY;
    END;
  UNTIL Cust.NEXT=0;
Старый 18.04.2011, 23:50   #3  
jopagames2 is offline
jopagames2
Участник
 
151 / 11 (1) +
Регистрация: 11.02.2010
Цитата:
Сообщение от Fly Посмотреть сообщение
Код будет примерно такой:
...

Хороший код.
Главное, надёжный.
Уважаю!

Только, имхо, не проще ли будет выставить тип поля "Дата первого заказа" как FlowField ?
А в формуле вписать, что-то типа:
Min("Sales Invoice Header"."Posting Date" WHERE (Bill-to Customer No.=FIELD(No.)))

Глядишь, никаких отчётов "запускать" и не надо будет, да и программировать не придётся.
Старый 19.04.2011, 10:35   #4  
Fly is offline
Fly
Участник
Аватар для Fly
 
102 / 10 (1) +
Регистрация: 05.10.2007
Цитата:
Сообщение от jopagames2 Посмотреть сообщение
Хороший код.
Главное, надёжный.
Уважаю!

Только, имхо, не проще ли будет выставить тип поля "Дата первого заказа" как FlowField ?
А в формуле вписать, что-то типа:
Min("Sales Invoice Header"."Posting Date" WHERE (Bill-to Customer No.=FIELD(No.)))

Глядишь, никаких отчётов "запускать" и не надо будет, да и программировать не придётся.
Спасибо Вариант с FlowField действительно здоровский. Таким образом мы можем и на любую интересную нам форму это поле вынести и в отчете посчитать.
Единственное - я все таки настаиваю, что считать надо по 21 таблице:
Min("Cust. Ledger Entry"."Posting Date" WHERE (Customer No.=FIELD(No.),Document Type=CONST(Invoice)))
 


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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:35.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.