Вот выдержка из рабочей базы (долбался над этим часа три в субботу):
Перем ПрежняяВалюта, ПрежнийКурс;
Процедура ИзмВидОплаты()
// В зависимости от Валюты устанавливаем СчетКонтрагента
СчетКонтрагента = ?(Валюта=Гривня,СчетПоКоду("361"),СчетПоКоду("362"));
КонецПроцедуры
// ===============================
Процедура ИзмКурс(Молча=0)
Ответ = "Да";
Если Молча=0 Тогда
Если КоличествоСтрок() > 0 Тогда
Ответ = Вопрос("Пересчитать суммы?","Да+Нет");
КонецЕсли;
КонецЕсли;
Если Ответ = "Да" Тогда
Если Валюта <> Гривня Тогда
Если (ПрежнийКурс <> Курс) И (ПустоеЗначение(ПрежнийКурс) = 0) Тогда
//! Пересчет по новому курсу из Гривни в Валюту
//! Сначала в Гривню по прежнему курсу
СуммаБезСкидки = глПересчет(СуммаБезСкидки,Валюта,Гривня,ПрежнийКурс,ДатаДок);
//! Затем в Валюту по новому курсу
СуммаБезСкидки = глПересчет(СуммаБезСкидки,Гривня,Валюта,1,Курс,ДатаДок);
ПрежнийКурс = 0; //! Потому что используем как признак ручного изменения Курса
ИзмСуммаБезСкидки();
Возврат;
КонецЕсли;
КонецЕсли;
Если ПустоеЗначение(ПрежняяВалюта) = 0 Тогда
СуммаБезСкидки = глПересчет(СуммаБезСкидки,ПрежняяВалюта,Валюта,Курс,ДатаДок);
ИзмСуммаБезСкидки();
Возврат;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// ===============================
Процедура ИзмВалюта(Молча=0)
ИзмКурс(Молча);
Курс = Валюта.Курс.Получить(ДатаДок);
ИзмВидОплаты();
КонецПроцедуры
// ===============================
Процедура ПриНачалеВыбораЗначения(Рекв,ФлагСтандОбр)
Если Рекв = "ВидНДС" Тогда
глВыбратьНДС(Контекст);
ФлагСтандОбр = 0;
Возврат;
КонецЕсли;
Если Рекв = "Валюта" Тогда
ПрежняяВалюта = Валюта;
Возврат;
КонецЕсли;
Если Рекв = "Курс" Тогда
ПрежнийКурс = Курс;
Возврат;
КонецЕсли;
КонецПроцедуры