С каждым клиентом может быть достигнута договоренность о специальном для него курсе, по которому клиент оплачивает продажу
Если клиент платит в национальной валюте, то он платит столько сколько выписали в документе
Если клиент платит в другой валюте, то она платит по специальному курсу
Важно, что договоренность может быть достигнута не только в момент продажи, но и в любой другой момент. Например, позвонили клиенту, напомнили об оплате, договорились о новом курсе
Постановка задачи
В момент переоценки и в момент сопоставления система должна оценивать задолженность по специальному курсу – Курс Сопоставления, если он установлен (если не установлен, то система должна брать курс из справочника валют, как и раньше)
Система должна «помнить» о договоренностях для каждой продажи и платежа
Система должна автоматически использовать последний установленный Курс Сопоставления
Пример
10.01.05 Клиенту продали товар на 100 доларов, 2900 рублей
15.01.05 Договорились о спецкурсе 27, текущий курс 28.5
15.01.05 Запустили переоценку. Переоценка для этого клиента создала нереализованную курсовую разница на -200 рублей
20.01.05 Клиент оплатил 2500 по курсу 26, после согласования, продажа полностью сопоставлена с платежом и создана проводка с реализованной курсовой разницей на на -100 рублей.
Как решать
I. Создание полей для хранения информации о Курсе сопоставления
Создание полей.
Для хранения курса валюты проводки обычно создается два поля: курс валюты проводки (ExchRate) и курс основной валюты (ExchRateSecondary). В случае если для указания курса валюты проводки не используется триангуляция, заполняется только поле ExchRate, в которое записывается курс валюты по отношению к основной валюте компании (курс за 100 единиц основной валюты). Если используется триангуляция, в ExchRate записывается курс валюты проводки по отношению к валюте триангуляции, а в ExchRateSecondary – курс основной валюты к валюте триангуляции. Таким образом, на основании полей ExchRate и ExchRateSecondary всегда можно вычислить курс (или кросс-курс) валюты проводки к основной валюте компании.
Для хранения курса сопоставления также надо создать два поля. Для пользователя будет доступно только поле ExchRate. В поле ExchRateSecondary система сама должна проставлять курс основной валюты по отношению к валюте триангуляции, если курс валюты проводки на дату проводки указан с триангуляцией в справочнике ExchRate (для выяснения этого можно воспользоваться функцией Currency::triangulation()).
Если возникнет потребность в вводе обратного курса, это следует организовать с помощью edit-метода (так же, как это сделано в форме справочника «Курсы валют»).
Хранить курсы, вероятно, следует в таблице CustTransOpen, так как «желаемый курс» – свойство открытой проводки. После сопоставления курс будет храниться в таблице CustSettlement.
(зел)а почему в CustTransOpen? может просто в CustTrans? MazzyMazzy /27.01.2005 20:17/Потому что «курс сопоставления» – свойство открытой проводки. Сопоставление и переоценка работают с открытыми проводками
(зел)Ну и что? Пользователи то работают с накладными и платежами. Пользователи работают с клиентскими проводками. Пользователей можно заставить работать с открытыми проводками. Какая разница, где хранить курс?
А открытые проводки могут пересоздаваться, если пересчитать график.
В открытые проводки надо вспоминать курс, если будет выполнено рассопоставление.
Может быть хранить курс где-нибудь в обычной клиентской проводке? а в открытой только доставать его? MazzyMazzy /06.02.2005 03:22/
Добавление элементов дизайна для редактирования полей.
Возможность изменения курса сопоставления следует добавить в форму «Открыто» (CustTransOpen; доступна из справочника клиентов по нажатию на кнопку «Проводки», а затем на кнопку «Открыто»).
Кроме того, Курс Сопоставления должен как минимум выводиться в форме «Сопоставление открытых проводок» (CustOpenTrans; доступна из справочника клиентов по нажатию на кнопку Функции/Сопоставление открытых проводок»).
Дополнительный сервис
Курс Сопоставления должен автоматически устанавливаться равным фиксированному курсу, если фиксированный курс не равен 0
Курс Сопоставления должен автоматически устанавливаться из формы платежей в журнале платежей. Для этого надо добавить поля в строки журнала платежей клиентов
Курс Сопоставления возможно будет правится из накладных. Продавец заходит в журнал накладных и правит курс, если накладная еще не сопоставлена Необязательный пункт
II. Обработка желаемого курса при сопоставлении открытых проводок
Желаемый курс должен подставляться в поле «Кросс-курс» при отметке одной из открытых проводок для сопоставления. При этом следует учесть, что поле «Кросс-курс» доступно для редактирования только для проводок по накладным в том случае, если предварительно была отмечена основная оплата (кнопкой «Отметить оплату»).
Желаемый курс необходимо инициализировать и при реверсе сопоставленных проводок (так как в этот момент заново создаются строки в таблице CustTransOpen). При этом необходимо проверить, используется ли триангуляция по валюте проводки на дату проводки. Если нет – ExchRate можно получить, разделив SettleAmountCur на SettleAmountMST из таблицы CustSettlement (сопоставленные проводки). Иначе, курс основной валюты на дату проводки следует взять из справочника «Курсы валют», а ExchRate получить, учитывая кросс-курс валюты проводки к основной валюте, который получается делением SettleAmountCur на SettleAmountMST.
III. Обработка желаемого курса при переоценке
Для того, чтобы «желаемый курс» был учтен при переоценке, следует доработать алгоритм расчета переменной newAmountMST в методе класса CustVendExchAdjTrans.exchAdjustTrans(). При этом, возможно, придется изменить Map CustVendTransOpen.