Имя: Пароль:
1C
1С v8
Пересчет по курсу.Поле на Найдено,
0 Начинающий_13
 
09.06.14
12:30
Здравствуйте
Документ Корректировка долга
Не типовая
Процедуры типовые.
При изменении Сумма в ТЧ должна пересчитаться валютная сумма, но
Ссылается на следующую ошибку. Не могу понять что не так Все вроде есть

{ОбщийМодуль.РаботаСВалютойКлиентСервер.Модуль(21)}: Поле объекта не обнаружено (ВалютаДокумента)
    Если ПараметрыТекущегоКурса.ВалютаДокумента = ПараметрыНовогоКурса.ВалютаДокумента

КОДЫ

1.

&НаКлиенте
Процедура ТаблицаДебиторскаяЗадолженностьСуммаПриИзменении(Элемент)

    ДанныеСтрокаТаблицы = ПолучитьСтруктуруРеквизитовСтроки();
    ЗаполнитьЗначенияСвойств(ДанныеСтрокаТаблицы, Элемент.Родитель.ТекущиеДанные);
    
    ПараметрыОбъекта = ПолучитьСтруктуруРеквизитовШапки();
    ПараметрыОбъекта.Дата               = Объект.Дата;
    ПараметрыОбъекта.ВалютаДокумента    = Объект.Валюта;
    ПараметрыОбъекта.КурсДокумента      = Объект.Курс;
    ПараметрыОбъекта.КратностьДокумента = Объект.Кратность;
    ПараметрыОбъекта.КонтрагентДебитор  = Объект.КонтрагентДебитор;
    ПараметрыОбъекта.КонтрагентКредитор = Объект.КонтрагентКредитор;
    ПараметрыОбъекта.Ссылка             = Объект.Ссылка;
        // Все загружено
    ПересчитатьСуммуПоСтрокеНаСервере(ДанныеСтрокаТаблицы, ПараметрыОбъекта, ВалютаРегламентированногоУчета);
    
    ЗаполнитьЗначенияСвойств(Элемент.Родитель.ТекущиеДанные, ДанныеСтрокаТаблицы);

    
КонецПроцедуры

2.

&НаСервереБезКонтекста
Процедура ПересчитатьСуммуПоСтрокеНаСервере(СтрокаДанных, ДанныеОбъекта, ВалютаРегламентированногоУчета, ПересчетВалютнойСуммы = Истина)

    Если СтрокаДанных = Неопределено Тогда
        Возврат;
    КонецЕсли;
     //// Все есть
    //ВалютаДокумента    = ДанныеОбъекта.ВалютаДокумента;
    //КурсДокумента      = ДанныеОбъекта.ВалютаДокумента;
    //КратностьДокумента = ДанныеОбъекта.ВалютаДокумента;

    ВалютаДоговора = СтрокаДанных.ДоговорКонтрагента.Валюта;
    РасчетыВУЕ = СтрокаДанных.ДоговорКонтрагента.РасчетыВУсловныхЕдиницах;
    
    
        Если ПересчетВалютнойСуммы Тогда
            СтрокаДанных.СуммаВзаиморасчетов = РаботаСВалютойКлиентСервер.ПересчитатьИзВалютыВВалюту(СтрокаДанных.Сумма,
                    ДанныеОбъекта.ВалютаДокумента, ВалютаДоговора,
                    ДанныеОбъекта.КурсДокумента, СтрокаДанных.КурсВзаиморасчетов,
                    ДанныеОбъекта.КратностьДокумента,СтрокаДанных.КратностьВзаиморасчетов);
        Иначе
            СтрокаДанных.Сумма = РаботаСВалютойКлиентСервер.ПересчитатьИзВалютыВВалюту(СтрокаДанных.СуммаВзаиморасчетов,
                    ВалютаДоговора, ДанныеОбъекта.ВалютаДокумента,
                    СтрокаДанных.КурсВзаиморасчетов, ДанныеОбъекта.КурсДокумента,
                    СтрокаДанных.КратностьВзаиморасчетов, ДанныеОбъекта.КратностьДокумента);
        КонецЕсли;

    
    
КонецПроцедуры

3.
Функция ПересчитатьПоКурсу(Сумма, ПараметрыТекущегоКурса, ПараметрыНовогоКурса) Экспорт
    
    Если ПараметрыТекущегоКурса.ВалютаДокумента = ПараметрыНовогоКурса.ВалютаДокумента
        ИЛИ (
            ПараметрыТекущегоКурса.КурсДокумента = ПараметрыНовогоКурса.КурсДокумента
            И ПараметрыТекущегоКурса.КратностьДокумента = ПараметрыНовогоКурса.КратностьДокумента
        ) Тогда
        
        Возврат Сумма;
        
    КонецЕсли;
    
    Если ПараметрыТекущегоКурса.КурсДокумента = 0
        ИЛИ ПараметрыТекущегоКурса.КратностьДокумента = 0
        ИЛИ ПараметрыНовогоКурса.КурсДокумента = 0
        ИЛИ ПараметрыНовогоКурса.КратностьДокумента = 0 Тогда
        
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
            СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                НСтр("ru = 'При пересчете в валюту %1 сумма %2 установлена в нулевое значение, т.к. курс валюты не задан.'"),
                ПараметрыНовогоКурса.ВалютаДокумента,
                Формат(Сумма, "ЧДЦ=2; ЧН=0")
            )
        );
        
        Возврат 0;
        
    КонецЕсли;
    
    Возврат Окр((Сумма * ПараметрыТекущегоКурса.КурсДокумента * ПараметрыНовогоКурса.КратностьДокумента) / (ПараметрыНовогоКурса.КурсДокумента * ПараметрыТекущегоКурса.КратностьДокумента), 2);
    
КонецФункции


4.
Функция ПересчитатьИзВалютыВВалюту(Сумма, ВалютаНач, ВалютаКон, ПоКурсуНач, ПоКурсуКон,
    ПоКратностьНач = 1, ПоКратностьКон = 1) Экспорт
    
    Возврат ПересчитатьПоКурсу(
        Сумма,
        Новый Структура("Валюта, Курс, Кратность", ВалютаНач, ПоКурсуНач, ПоКратностьНач),
        Новый Структура("Валюта, Курс, Кратность", ВалютаКон, ПоКурсуКон, ПоКратностьКон)
    );
    
КонецФункции

5.

&НаКлиенте
Функция ПолучитьСтруктуруРеквизитовСтроки()
    
    Возврат Новый Структура("ДоговорКонтрагента,КурсВзаиморасчетов,КратностьВзаиморасчетов, Сделка,  
    | Сумма,СуммаВзаиморасчетов,СчетУчетаРасчетов, ЭтоАванс, КурсВзаиморасчетовДоступность");

КонецФункции

6

&НаКлиенте
Функция ПолучитьСтруктуруРеквизитовШапки()
    
    Возврат Новый Структура("Ссылка, Дата, ВалютаДокумента, КурсДокумента, КратностьДокумента,
    | КонтрагентДебитор, КонтрагентКредитор");

КонецФункции
1 Начинающий_13
 
09.06.14
12:34
Извеняюсь, не корректно отобразилось
Функция ПересчитатьПоКурсу(Сумма, ПараметрыТекущегоКурса, ПараметрыНовогоКурса) Экспорт
    
    Если ПараметрыТекущегоКурса.ВалютаДокумента = ПараметрыНовогоКурса.ВалютаДокумента
        ИЛИ (
            ПараметрыТекущегоКурса.КурсДокумента = ПараметрыНовогоКурса.КурсДокумента
            И ПараметрыТекущегоКурса.КратностьДокумента = ПараметрыНовогоКурса.КратностьДокумента
        ) Тогда
        
        Возврат Сумма;
        
    КонецЕсли;
    
    Если ПараметрыТекущегоКурса.КурсДокумента = 0
        ИЛИ ПараметрыТекущегоКурса.КратностьДокумента = 0
        ИЛИ ПараметрыНовогоКурса.КурсДокумента = 0
        ИЛИ ПараметрыНовогоКурса.КратностьДокумента = 0 Тогда
        
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
            СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                НСтр("ru = 'При пересчете в валюту %1 сумма %2 установлена в нулевое значение, т.к. курс валюты не задан.'"),
                ПараметрыНовогоКурса.ВалютаДокумента,
                Формат(Сумма, "ЧДЦ=2; ЧН=0")
            )
        );
        
        Возврат 0;
        
    КонецЕсли;
    
    Возврат Окр((Сумма * ПараметрыТекущегоКурса.КурсДокумента * ПараметрыНовогоКурса.КратностьДокумента) / (ПараметрыНовогоКурса.КурсДокумента * ПараметрыТекущегоКурса.КратностьДокумента), 2);
    
КонецФункции


Функция ПересчитатьИзВалютыВВалюту(Сумма, ВалютаНач, ВалютаКон, ПоКурсуНач, ПоКурсуКон,
    ПоКратностьНач = 1, ПоКратностьКон = 1) Экспорт
    
    Возврат ПересчитатьПоКурсу(
        Сумма,
        Новый Структура("Валюта, Курс, Кратность", ВалютаНач, ПоКурсуНач, ПоКратностьНач),
        Новый Структура("Валюта, Курс, Кратность", ВалютаКон, ПоКурсуКон, ПоКратностьКон)
    );
    
КонецФункции
2 Apokalipsec
 
09.06.14
12:48
Новый Структура("ВалютаДокумента , Курс, Кратность", ВалютаНач, ПоКурсуНач, ПоКратностьНач)
3 Начинающий_13
 
09.06.14
12:50
(2) Что Имеете Ввиду
4 Apokalipsec
 
09.06.14
12:53
(3) следующая подсказка уже за деньги.
5 Начинающий_13
 
09.06.14
13:11
Переделал на нувую Функцию
ВОПРОС СНЯТ

&НаСервереБезКонтекста
Процедура ПересчитатьСуммуПоСтрокеНаСервере(СтрокаДанных, ДанныеОбъекта, ВалютаРегламентированногоУчета, ПересчетВалютнойСуммы = Истина)


    
    Если СтрокаДанных = Неопределено Тогда
        Возврат;
    КонецЕсли;

    ВалютаДоговора = СтрокаДанных.ДоговорКонтрагента.Валюта;
    РасчетыВУЕ = СтрокаДанных.ДоговорКонтрагента.РасчетыВУсловныхЕдиницах;
          
    ПараметрыТекущегоКурса = Новый Структура;
    ПараметрыТекущегоКурса.Вставить("ВалютаДокумента",    ДанныеОбъекта.ВалютаДокумента);
    ПараметрыТекущегоКурса.Вставить("КурсДокумента",      ДанныеОбъекта.КурсДокумента);
    ПараметрыТекущегоКурса.Вставить("КратностьДокумента", ДанныеОбъекта.КратностьДокумента);
    
    ПараметрыНовогоКурса = Новый Структура;
    Если ВалютаРегламентированногоУчета <> ПараметрыТекущегоКурса.ВалютаДокумента Тогда
        ПараметрыНовогоКурса.Вставить("ВалютаДокумента",    ВалютаРегламентированногоУчета);
        ПараметрыНовогоКурса.Вставить("КурсДокумента",      1);
        ПараметрыНовогоКурса.Вставить("КратностьДокумента", 1);                                              
    Иначе
        ПараметрыНовогоКурса.Вставить("ВалютаДокумента",    ВалютаДоговора);
        ПараметрыНовогоКурса.Вставить("КурсДокумента",      СтрокаДанных.КурсВзаиморасчетов);
        ПараметрыНовогоКурса.Вставить("КратностьДокумента", СтрокаДанных.КратностьВзаиморасчетов);
    КонецЕсли;


    СтрокаДанных.СуммаВзаиморасчетов = РаботаСВалютойКлиентСервер.ПересчитатьПоКурсу(СтрокаДанных.Сумма, ПараметрыНовогоКурса,  ПараметрыТекущегоКурса);


КонецПроцедуры