22.03.2011, 18:54 | #1 |
Участник
|
Здравствуйте! Сегодня сделал импорт данных в базу и полезли баги.
Я сделал форму (на основе Items By Location). У меня стояла задача при выборе клиента отображать его цены и наличие на складах. Сразу оговорюсь: работает это все отвратительно и с ошибками (когда много записей), а когда их мало то все нормально. Кто нибудь пожалуйста подскажите более рациональное решение этой проблемы. Добавил в таблицу поле ClientPrice и написал такой код: Cust.GET(ClientNo); //Берем клиента //Смотрим его валюту и вытаскиваем курс IF Cust."Currency Code"<>'' THEN Currency.SETFILTER("Currency Code",'%1',Cust."Currency Code") ELSE Currency.SETFILTER("Currency Code",'%1','EUR'); Currency.FIND('+'); CurrencyRate:=Currency."Exchange Rate Amount"; SalesPrice.SETFILTER("Sales Code",Cust."Customer Price Group"); //Делаем фильтр по группе продажи Rec.FIND('-'); REPEAT BEGIN SalesPrice.SETFILTER("Item No.",'%1',Rec."No."); //Выбираем товар и добавляем его цену (если нет то обнуляем) IF SalesPrice.FIND('-') THEN Rec.ClientPrice:=SalesPrice."Unit Price"*CurrencyRate ELSE Rec.ClientPrice:=0 END UNTIL Rec.NEXT=0; CurrForm.UPDATE(TRUE); <----Вот тут выскакивает запрос на переименование записи и ошибка |
|
22.03.2011, 22:05 | #2 |
Administrator
|
функция, например, GetCustomerPrice(Cust): Decimal
вызываем откуда угодно, никакого поля вводить не надо. SalesPrice.SETRANGE("Sales Type", SalesPrice."Sales Type"::"Customer Gr"); // или типа того, пишу по памяти SalesPrice.SETRANGE("Sales Code",Cust."Customer Price Group"); //Делаем фильтр по группе продажи SalesPrice.SETRANGE("Item No.", "No."); IF SalesPrice.FIND('+') THEN // ищем ПОСЛЕДНЮЮ запись, вдруг там разные даты, а нам неохота замарачиваться? EXIT(SalesPrice."Unit Price"); с курсом вообще кошмар. я не понимаю, почему в кустомере пусто, а в сейлз прайсе это типа Евро? в упор не понимаю. |
|
23.03.2011, 10:07 | #3 |
Участник
|
Спасибо за ответ!
Насчет курса могу сказать только одно в свое оправдание. Валюта баланса EUR. То есть оно может быть не заполнено вот и вставил я туда проверку. Но вопрос у меня в следующем: Если форма основана на таблице Item то мне просто надо создать текстовое поле и в тригере допустим AfterGetRecord (по моему) его заполнять? У меня основная проблема я не могу понять как подвязать данные одной таблицы (Item) с данными другой (Sales Price) и как их правильно отобразить. Так чтоб каждому ItemNo соответствует SalesPrice."UnitPrice" отфильтрованные по группе продажи. |
|
23.03.2011, 11:46 | #4 |
Участник
|
Цитата:
Сообщение от nikshev
Но вопрос у меня в следующем: Если форма основана на
таблице Item то мне просто надо создать текстовое поле и в тригере допустим AfterGetRecord (по моему) его заполнять? У меня основная проблема я не могу понять как подвязать данные одной таблицы (Item) с данными другой (Sales Price) и как их правильно отобразить. Так чтоб каждому ItemNo соответствует SalesPrice."UnitPrice" отфильтрованные по группе продажи. P.S Как пример посмотрите список товаров там есть такой текстбокс AverageCost(LCY), значение которого вычисляется. |
|
23.03.2011, 12:02 | #5 |
Участник
|
Да! Да! Да!
Уже так и сделал! Все заработало! И так как надо! Спасибо за ответы! |
|