8.х Валютный учет

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Student15, 10 апр 2011.

  1. TopicStarter Overlay
    Student15
    Offline

    Student15 Опытный в 1С

    Регистрация:
    10 апр 2011
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    HELP!!!
    Документ "Расходная"
    Реквезиты
    Номер
    Дата
    Контрагент
    Валюта - СправочникВалюта(Руб, USD, EUR)-РегистрВседений(ХранитьсяЗначениеВалюты)
    ТабличнаяЧасть
    Номенклатура
    Кол-Во
    Цена
    Сумма
    Задача, при изменении Реквезита Валюта, пересчет Суммы, на значение Валюты из Регистра.
    Код:
    Запрос = Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ
    |	ВалютыСрезПоследних.Период,
    |	ВалютыСрезПоследних.Валюта,
    |	ЕСТЬNULL(ВалютыСрезПоследних.Курс, 1) КАК Поле3,
    |	РеализацияТоваровИУслугРеализацияТоваров.Номенклатура,
    |	ЕСТЬNULL(РеализацияТоваровИУслугРеализацияТоваров.Сумма * ВалютыСрезПоследних.Курс,1) КАК Поле2,
    |	РеализацияТоваровИУслугРеализацияТоваров.Ссылка,
    |	РеализацияТоваровИУслугРеализацияТоваров.Количество,
    |	РеализацияТоваровИУслугРеализацияТоваров.Ссылка.Валюта КАК Валюта1
    |ИЗ
    |	Документ.РеализацияТоваровИУслуг.РеализацияТоваров КАК РеализацияТоваровИУслугРеализацияТоваров
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Валюты.СрезПоследних(, Валюта = &Валюта) КАК ВалютыСрезПоследних
    |		ПО РеализацияТоваровИУслугРеализацияТоваров.Ссылка.Валюта = ВалютыСрезПоследних.Валюта
    |ГДЕ
    |	РеализацияТоваровИУслугРеализацияТоваров.Ссылка = &Ссылка";
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.УстановитьПараметр("Валюта", Валюта);
    Запрос.Выполнить();
    
    
    Не понимаю, почему запрос не срабатывает, если у кого мысли, по этому поводу или хотя бы, если алгоритм не верен, направление куда двигаться?
    Спасибо!
  2. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Может я че не понимаю, но если надо получить курс валюты текущего документа, то зачем это?
    Код:
    Валюта = &Валюта
    
    
    Ну и надо бы дату документа указать в параметрах виртуальной таблицы
    Код:
    РегистрСведений.Валюты.СрезПоследних(&ДатаДокумента, Валюта = &Валюта) КАК ВалютыСрезПоследних
    
    
  3. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    has уже ответил, дополнительно поясню:
    Сначала вы делаете в виртуальной таблице РС отбор по валюте (например доллар), а потом пытаетесь левым соединением присоединить эту таблицу. НО если при этом у вас допустим в накладной валюта установлена рубли, то естественно теперь левое соединение таблицы ВалютыСрезПоследних к таблице РеализацияТоваровИУслугРеализацияТоваров по полю Валюта вернет NULL по всем полям (Период, Валюта, Курс), далее в конструкции EСТЬNULL, это значение будет преобразовано к единице, и естественно никакого пересчета курса не будет.

    Запросом просто получите курс валюты на дату, а потом в цикле пройдитесь по ТЧ и поменяйте сумму строк.
  4. TopicStarter Overlay
    Student15
    Offline

    Student15 Опытный в 1С

    Регистрация:
    10 апр 2011
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Спасибо за наводку, вот, что у меня получилось:
    Код:
    Запрос = Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ
    |	ВалютыСрезПоследних.Период,
    |	ВалютыСрезПоследних.Валюта,
    |	ВалютыСрезПоследних.Курс
    |ИЗ
    |	РегистрСведений.Валюты.СрезПоследних(&ДатаДокумента, ) КАК ВалютыСрезПоследних";
    Запрос.УстановитьПараметр("ДатаДокумента", Дата);
    Выборка=Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий()Цикл
    Для каждого СтрокаТоваров  Из РеализацияТоваров Цикл
    //Тч=ЭлементыФормы.РеализацияТоваров.ТекущиеДанные;
    //Тч2=Справочники.Валюты.НайтиПоНаименованию("USD");		 
    // //Если ЭлементыФормы.Валюта=Тч2 Тогда
    СтрокаТоваров.Сумма= ТЧ.Сумма*Выборка.Курс;
    //КонецЕсли;
    КонецЦикла;	
    КонецЦикла; 
    
    
    Однако, Сумма пересчитывается только на Курс "USD", какое бы значение реквизита не выбрано(USD = 28, Сумма (1) = 28; EUR= 46, Сумма(1)=28; Руб=1, Сумма(1)=28).
  5. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Вот получение курса валюты для данного документа
    Код:
    Запрос.Текст="ВЫБРАТЬ
    |    ВалютыСрезПоследних.Период,
    |    ВалютыСрезПоследних.Валюта,
    |    ВалютыСрезПоследних.Курс КАК Курс
    |ИЗ
    |    РегистрСведений.Валюты.СрезПоследних(&ДатаДокумента, Валюта = &Валюта) КАК ВалютыСрезПоследних";
    Запрос.УстановитьПараметр("ДатаДокумента", Дата);
    Запрос.УстановитьПараметр("Валюта", Валюта); //валюта в документе
    Выборка=Запрос.Выполнить().Выбрать();
    Выборка.Следующий();
    Для каждого СтрокаТоваров  Из РеализацияТоваров Цикл
    СтрокаТоваров.Сумма= СтрокаТоваров.Сумма*Выборка.Курс;
    КонецЦикла;	
    
    
    Либо можно было документ левым соединением с регистром, тогда в параметрах виртуальной таблицы условие по валюте не надо.
  6. TopicStarter Overlay
    Student15
    Offline

    Student15 Опытный в 1С

    Регистрация:
    10 апр 2011
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Спасибо!
    Тогда может вы сможете помочь, как мне запросом вытащить данные из ТабличнойЧасти Документа ЗаказПокупателя (Товары и Количество) для их подстановки в обработку заполнения
    Код:
    НоваяСтрока.Количество = Выборка.НоменклатураТовары;
    НоваяСтрока.Номенклатура = Выборка.КоличествоТовары;
    
    
    и вторым запросом вытащить РегистрЦен СрезПоследних и ТабличнуюЧасть документа Заказ покупателя, объеденить их левым соединением, чтобы получить Цену, и вставить в Документ ПоступлениеТоваров в Колонку Цена!
    ОБЪЕДИНИТЬ ВСЕ не получается!

Поделиться этой страницей