![]() |
![]() |
![]() |
|
Как в запросе получить курсы валют на даты документов? | ☑ | ||
---|---|---|---|---|
0
tciban
30.09.09
✎
12:12
|
Доброго дня всем! Есть следующий запрос:
ВЫБРАТЬ СУММА(ОплатаПоставщику.СуммаДокумента * КурсыВалютСрезПоследних.Курс) КАК СуммаДокумента, СУММА(ОплатаПоставщику.СуммаЗатрат * КурсыВалютСрезПоследних.Курс) КАК СуммаЗатрат ИЗ Документ.ОплатаПоставщику КАК ОплатаПоставщику ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних КАК КурсыВалютСрезПоследних ПО ОплатаПоставщику.ВалютаДокумента = КурсыВалютСрезПоследних.Валюта ГДЕ ОплатаПоставщику.Сделка = &Сделка Но хотелось бы переводить суммы в рубли не по последнему курсу, а для каждого документа на его дату. Ума не приложу как это сделать и возможно ли? Заранее благодарен за все толковые советы! |
|||
1
ShoGUN
30.09.09
✎
12:15
|
Баян... Ща дам ссылку...
|
|||
2
ShoGUN
30.09.09
✎
12:16
|
||||
3
tciban
30.09.09
✎
12:22
|
Ага! Вдумчиво курим ссылку...
|
|||
4
tciban
30.09.09
✎
12:46
|
Читал, не понял - что нужно поместить во временную таблицу? Получается весь регистр курсов валют? Я ведь не знаю какие валюты и на какие даты мне понадобятся.
|
|||
5
мудазвон митичкин356
30.09.09
✎
12:46
|
да код не причем 100%
но если просишь.............. Функция Импорт_Файла_ДБФ(Параметр) ФайлБД = СоздатьОбъект("XBase"); Попытка ФайлБД.ОткрытьФайл(Путь,,1); Исключение Предупреждение(Путь + РазделительСтрок + "Ошибка открытия файла!"); Возврат 0; КонецПопытки; Если ФайлБД.Открыта() = 0 Тогда Предупреждение(Путь + РазделительСтрок + "Ошибка открытия файла!" + РазделительСтрок + "Возможно, файл используется другим приложением."); Возврат 0; КонецЕсли; ФайлБД.КодоваяСтраница(2-Кодировка); ФайлБД.Первая(); Пока (ФайлБД.вКонце() = 0) Цикл Если ФайлБД.ЗаписьУдалена() = 1 Тогда ФайлБД.Следующая(); Продолжить; КонецЕсли; Состояние("Обрабатывается строка №" + ФайлБД.НомерЗаписи()); ДатаОплаты = СокрЛП(ФайлБД.DATA); ДатаОплаты = Дата(Число(Сред(ДатаОплаты,7,4)),Число(Сред(ДатаОплаты,4,2)),Число(Сред(ДатаОплаты,1,2))); |
|||
6
Живой Ископаемый
30.09.09
✎
12:47
|
У меня получилось при помощи СКД - метод, который в той статье внизу...
|
|||
7
ShoGUN
30.09.09
✎
12:48
|
(4) Во временную таблицу можно поместить валюты и даты документов. Можно, но необязательно.
|
|||
8
tciban
30.09.09
✎
12:50
|
Как я могу поместить в таблицу даты документов? Я ведь их не знаю до запроса. И почему это необязательно?
|
|||
9
ShoGUN
30.09.09
✎
12:52
|
(8) Врубись в то, что делает описанный запрос. Очень детально и тщательно. После этого - всё поймешь.
|
|||
10
wason
30.09.09
✎
12:56
|
ВЫБРАТЬ
СУММА(таб1.СуммаДокумента * таб2.Курс) КАК СуммаДокумента, СУММА(таб1.СуммаЗатрат * таб2.Курс) КАК СуммаЗатрат ИЗ (ВЫБРАТЬ ОплатаПоставщику.Ссылка КАК СсылкаДок, ОплатаПоставщику.СуммаДокумента, ОплатаПоставщику.СуммаЗатрат, ОплатаПоставщику.Дата КАК ДатаДок, ОплатаПоставщику.ВалютаДокумента КАК ВалютаДок, МАКСИМУМ(Валюты.Период) КАК ПериодДок ИЗ Документ.ОплатаПоставщику КАК ОплатаПоставщику ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК Валюты ПО Валюты.Период <= ОплатаПоставщику.Дата И Валюты.Валюта = ОплатаПоставщику.ВалютаДокумента СГРУППИРОВАТЬ ПО ОплатаПоставщику.Ссылка) КАК Таб1 ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК Таб2 ПО Таб1.ПериодДок = Таб2.Период И Таб1.ВалютаДок = Таб2.Валюта теперь возми и обдумай всё ето |
|||
11
мудазвон митичкин378
30.09.09
✎
12:58
|
да код не причем 100%
но если просишь.............. Функция Импорт_Файла_ДБФ(Параметр) ФайлБД = СоздатьОбъект("XBase"); Попытка ФайлБД.ОткрытьФайл(Путь,,1); Исключение Предупреждение(Путь + РазделительСтрок + "Ошибка открытия файла!"); Возврат 0; КонецПопытки; Если ФайлБД.Открыта() = 0 Тогда Предупреждение(Путь + РазделительСтрок + "Ошибка открытия файла!" + РазделительСтрок + "Возможно, файл используется другим приложением."); Возврат 0; КонецЕсли; ФайлБД.КодоваяСтраница(2-Кодировка); ФайлБД.Первая(); Пока (ФайлБД.вКонце() = 0) Цикл Если ФайлБД.ЗаписьУдалена() = 1 Тогда ФайлБД.Следующая(); Продолжить; КонецЕсли; Состояние("Обрабатывается строка №" + ФайлБД.НомерЗаписи()); ДатаОплаты = СокрЛП(ФайлБД.DATA); ДатаОплаты = Дата(Число(Сред(ДатаОплаты,7,4)),Число(Сред(ДатаОплаты,4,2)),Число(Сред(ДатаОплаты,1,2))); Если (ДатаОплаты <> Параметр.Получить("ДатаДок")) или (СокрЛП(ФайлБД.KL_CHK) <> РСчет) или (Цел(ФайлБД.CUR_ID) <> 980) Тогда ФайлБД.Следующая(); Продолжить; КонецЕсли; Если ФайлБД.DK = 1 Тогда // расход Сп = СоздатьОбъект("СписокЗначений"); Сп.Установить("Расход", ФайлБД.S); Сп.Установить("Приход", 0); ИначеЕсли ФайлБД.DK = 0 Тогда // приход |
|||
12
tciban
30.09.09
✎
13:30
|
(10) Ваш запрос дал цифры в 33 раза больше :)
а запрос ВЫБРАТЬ СУММА(ОплатаПоставщику.СуммаДокумента * КурсыВалют.Курс) КАК Оплата, СУММА(ОплатаПоставщику.СуммаЗатрат * КурсыВалют.Курс) КАК Затраты ИЗ РегистрСведений.КурсыВалют КАК КурсыВалют ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ОплатаПоставщику КАК ОплатаПоставщику ПО (ОплатаПоставщику.ВалютаДокумента = КурсыВалют.Валюта) И (ОплатаПоставщику.Дата = КурсыВалют.Период) ГДЕ ОплатаПоставщику.Сделка = &Сделка Вообще ничего не дал... :( |
|||
13
tciban
30.09.09
✎
13:31
|
(9) Про какой именно запрос идет речь в вашем посте?
|
|||
14
Шурик71
30.09.09
✎
14:21
|
(0) автор, вот тебе поясняющий мануал "на пальцах" /код писать не буду/:
1) выбрать все различные даты документов и валюты из самих документов, получится табличка ------------- Дата | Валюта ------------- 01.01 USD 10.01 USD 15.01 EUR 2) присоединить к этому по валюте регистр сведений курсов, так: ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК Валюты ПО Валюты.Период <= Док.Дата И Валюты.Валюта = Док.ВалютаДокумента -------------------------- Дата | Валюта | ДатаКурса -------------------------- 01.01 USD 01.01 10.01 USD 01.01 10.01 USD 05.01 10.01 USD 07.01 15.01 EUR 01.01 15.01 EUR 08.01 3) группируем по "валюта, дата" и добавляем ДатаКурса = MAX(Валюты.Период), получим дату реальной записи в рег. сведений -------------------------- Дата | Валюта | ДатаКурса -------------------------- 01.01 USD 01.01 10.01 USD 07.01 15.01 EUR 08.01 4) присоединяем сам курс из рег. сведений (не срез!) на дату "ДатаКурса". Готово. Как собирать разные части - твое дело, хочешь - через временные таблицы, хочешь - оборачивай в подзапросы. Не принципиально. Код пиши сам. |
|||
15
Живой Ископаемый
30.09.09
✎
14:33
|
Ну да, в общем-то основной фокус что нужно использовать не срезпоследних, а сами записи...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |