Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
20 Ноя 2018, 03:04
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Четверг. Вопрос 8  (Прочитано 38238 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DarKySiK

  • *
  • Сообщений: 41
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-02-17
  • Сайт: 
  • Профессия: Программист 1С
Re: Четверг. Вопрос 8
« Ответ #10: 14 Мар 2013, 11:15 »
Запрос 1. текст примерно следующий.
ВЫБРАТЬ
   РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
ПОМЕСТИТЬ Вт_Вседаты
ИЗ
   РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
   РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &п1 И &п2
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВложенныйЗапрос.ДатаКалендаря,
   ВложенныйЗапрос.Период,
   ВложенныйЗапрос.Валюта,
   КурсыВалют.Курс,
   КурсыВалют.Кратность
ИЗ
   (ВЫБРАТЬ
      Вт_Вседаты.ДатаКалендаря КАК ДатаКалендаря,
      МАКСИМУМ(КурсыВалют.Период) КАК Период,
      КурсыВалют.Валюта КАК Валюта
   ИЗ
      Вт_Вседаты КАК Вт_Вседаты
         ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
         ПО Вт_Вседаты.ДатаКалендаря >= КурсыВалют.Период
   
   СГРУППИРОВАТЬ ПО
      Вт_Вседаты.ДатаКалендаря,
      КурсыВалют.Валюта) КАК ВложенныйЗапрос
      ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
      ПО ВложенныйЗапрос.Период = КурсыВалют.Период
         И ВложенныйЗапрос.Валюта = КурсыВалют.Валюта


Оффлайн Spider244

  • *
  • Сообщений: 37
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-07-26
  • Сайт: 
  • Профессия: Программист 1С
Re: Четверг. Вопрос 8
« Ответ #11: 14 Мар 2013, 11:28 »
Нужно использовать дополнение периодов. В источниках данных будет один запрос.

Оффлайн Vit1501

  • ****
  • Сообщений: 360
  • РЕПУТАЦИЯ: 60
  • КПД: 17%
  • Регистрация: 2010-06-05
  • Сайт: 
  • Профессия: Программист 1С
Re: Четверг. Вопрос 8
« Ответ #12: 14 Мар 2013, 11:31 »
В СКД делаем два набора данных типа запрос. Один получает таблицу с датами ( надеюсь  в этом запросе не будет ни у кого проблем) , второй таблицу курсов причем запрос нужно сделать с параметрами :
ВЫБРАТЬ
    &Дата КАК Дата,
    КурсыВалютСрезПоследних.Валюта КАК Валюта,
    КурсыВалютСрезПоследних.Курс КАК Курс,
    КурсыВалютСрезПоследних.Кратность КАК Кратность
{ВЫБРАТЬ
    Дата,
    Валюта.*,
    Курс,
    Кратность}
ИЗ
    РегистрСведений.КурсыВалют.СрезПоследних(&Дата) КАК КурсыВалютСрезПоследних
{ГДЕ
    КурсыВалютСрезПоследних.Курс,
    КурсыВалютСрезПоследних.Кратность}   

Далее объединяем наборы на закладке объединения по дате и обязательно заполняем поле "Параметр" в условии связи чтобы СКД автоматически дату связи использовала как параметр. Все - результат готов)))

Оффлайн Evgeny

  • *
  • Сообщений: 46
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-02-09
  • Сайт: 
  • Профессия: Разработчик 1С
Re: Четверг. Вопрос 8
« Ответ #13: 14 Мар 2013, 11:37 »
пр. регистр сведений Курсы валют БП

в настройках отчета
в группировке по "периоду", тип дополнения : "День"

Начальные и конечные даты в периоде  :
01.06.2010  10.062010
запрос :
ВЫБРАТЬ
   КурсыВалют.Период,
   КурсыВалют.Валюта,
   КурсыВалют.Курс,
   КурсыВалют.Кратность
ИЗ
   РегистрСведений.КурсыВалют КАК КурсыВалют

результат

Период      
Валюта   Курс   Кратность
01.06.2010      
02.06.2010      
03.06.2010      
04.06.2010      
руб.   38,0117   1
05.06.2010      
руб.   37,8476   1
06.06.2010      
руб.   37,8476   1
07.06.2010      
руб.   37,8476   1
08.06.2010      
09.06.2010      
10.06.2010      
О_о Кто здесь?

Оффлайн toxicoff

Re: Четверг. Вопрос 8
« Ответ #14: 14 Мар 2013, 11:50 »
Я бы взял таблицу нужных дат, занес его в набор данных, потом соединил с запросом по курсам валют

Оффлайн nidom

  • **
  • Сообщений: 50
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-11-22
  • Сайт: 
  • Профессия: Программист 1С
Re: Четверг. Вопрос 8
« Ответ #15: 14 Мар 2013, 12:45 »
Сделал внешним отчетом

Оффлайн Efa

  • *
  • Сообщений: 37
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-03-25
  • Сайт: 
  • Профессия: Программист 1С
Re: Четверг. Вопрос 8
« Ответ #16: 14 Мар 2013, 13:52 »
Необходимо использовать набор-источник (для выбора дат, как параметров для выбора курсов), в источниках будет два запроса.

Оффлайн MrStomak

  • *
  • Сообщений: 38
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-03-11
  • Сайт: 
  • Профессия: Программист 1С
Re: Четверг. Вопрос 8
« Ответ #17: 14 Мар 2013, 13:54 »
Конечно, решить можно по-разному. Самый элегантный вариант: выбрать в запросе регистр сведений курсов валют, отфильтрованный по периоду, выбрать срезом последних начальные курсы по границе периода (всё в одном запросе с объединениями), поле курс выбрать 2 раза, в настройках полей компоновки назначить роли для подсчета остатков - валюта измерение, период - период, два поля курс - начальный и конечный остаток, сделать поле курс ресурсом, затем в настройке группировок настроить дополнение по дням для поля период с периодом дополнений равному периоду отчета - в результате на "пустые" дни курсов мы будем получать значения предыдущих курсов (используя внутреннюю систему подсчета остатков СКД), при этом гарантированно попадут все дни периода. Такой вариант имеет ограничения - мы не сможет использовать агрегатные функции СКД для подсчета уникальных значений ресурсов, т.е. сумма всех курсов или средний курс будет рассчитываться из существующих, а не дополненных, полей.
Можно решать задачу железобетонно и грубо, не используя механизм дополнений и подсчета остатков СКД, зато обеспечив корректную работу функций - это, например, через внешний набор передать в СКД таблицу со всеми днями периода и через связь наборов данных соединить со срезом последних курсов валют с передачей параметра период - это менее производительно(запрос в цикле), но достаточно просто и надёжно. Можно сделать по-другому - не использовать второй набор данных, а отбирать все курсы на все дни в запросе через тета-соединения (т.е. сначала передать также внешний набор с днями периода, потом срез последних на начало периода, потом  запрос записей курсов, затем тета-соединением простановка для пустых периодов прошлых значений). Тут не будет запроса в цикле, но сам запрос достаточно сложным получается.

Оффлайн mamanelli

  • *
  • Сообщений: 36
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-04-19
  • Сайт: 
  • Профессия: Разработчик 1С
Re: Четверг. Вопрос 8
« Ответ #18: 14 Мар 2013, 14:06 »
Необходимо использовать "Дополнение периодов в системе компоновки данных". Количество запросов = 1.

Оффлайн serj1C

  • **
  • Сообщений: 53
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-12-09
  • Компания: Стройландия
  • Профессия: Программист 1С
Re: Четверг. Вопрос 8
« Ответ #19: 14 Мар 2013, 14:35 »
Так я понимаю нужно вывести список дата по порядку без пропусков и курс, вне зависимости менялся ли курс в этот день или нет. Т.к. иначе проблемы вообще нет.

По формулировке вопроса подразумевается ответ, где будет 2 источника данных:
Первый - список дат. Он может быть получен с помощью "пораждающего" запроса, выборки из спец регистра, например, РегламентированныйПроизводственныйКалендарь (если он есть, где нет пропусков дат) или с помощью объекта (таблицы значений, созданной программно).
Второй - простой запрос Выбрать курс из Среза с параметром &Дата
Два источника соединялись бы по параметру Дата, тогда мы бы получили искомую таблицу со срезами на каждый день.

Но в реальных задачах я бы не стал применять этот подход. Т.к. на выходе мы получаем "запрос в цикле". Посторить срез для SQL не так легко, а мы его заставляем выполнить эту операцию множество раз.

Я бы все сделал в одном источнике данных. Взял даты (одним из выше указанным способом), Выбрал курсы с даты1 по Дату2. Соединил эти таблицы с условием Период.Дата > Курс.Период, сгруппировал по Период.Дата, взял Максимум(Курс.Период). Опять соединился с курсами и все пучком.


Теги:
 


* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

oleg-x
69 Сообщений
AIFrame AIFrame
63 Сообщений
wise wise
50 Сообщений
alexandr_ll
45 Сообщений
alex0402
44 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
38 Сообщений
BuhRust
28 Сообщений
andron81_81
24 Сообщений
LexaK
21 Сообщений
byte777
21 Сообщений

* Кто онлайн

  • Точка Гостей: 142
  • Точка Скрытых: 0
  • Точка Пользователей: 1
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal