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

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

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

Оффлайн kereo

  • *
  • Сообщений: 38
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-11-26
  • Сайт: 
  • Профессия: Программист 1С
Re: Четверг. Вопрос 8
« Ответ #30: 15 Мар 2013, 10:08 »
Чтобы сформировать таблицу со всеми датами из этого периода в СКД необходимо использовать механизм дополнения периода. В источниках данных необходимо указать объединение двух запросов. Один запрос к физической таблице с условием по периоду, а второй запрос будет получать срез последних на начало периода. Для периода необходимо указать роль "Период", а для курса указать роль "Остаток". Пример схемы во вложении.


Оффлайн michael2k

  • *
  • Сообщений: 37
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-09-13
  • Сайт: 
  • Профессия: Разработчик 1С
Re: Четверг. Вопрос 8
« Ответ #31: 15 Мар 2013, 10:37 »
Не получилось, не силён в запросах и СКД(((
СрезПоследних() можно использовать только с передачей в него заранее готового значения даты, поэтому по-любому сначала нужна выборка по датам, а потом по курсам.

Оффлайн Vint89

  • *
  • Сообщений: 24
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-03-14
  • Сайт: 
  • Профессия: Разработчик 1С
Re: Четверг. Вопрос 8
« Ответ #32: 15 Мар 2013, 12:31 »
запрос будет один с параметром периода. Данные будут браться из периодического регистра с периодом день

Оффлайн temsan

  • *
  • Сообщений: 40
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-03-06
  • Сайт: 
  • Профессия: Разработчик 1С
Re: Четверг. Вопрос 8
« Ответ #33: 15 Мар 2013, 12:42 »
Сделал с помощью одного набора данных-запрос, пакет из 2х запросов

Схему компоновки прикрепляю

Оффлайн kitaets

  • *
  • Сообщений: 37
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-12-04
  • Сайт: 
  • Профессия: Бухгалтер
Re: Четверг. Вопрос 8
« Ответ #34: 15 Мар 2013, 15:01 »
я не знаю какой механизм надо использовать, но СКД в одном единственном запросе обращаемся к реальной таблице регистра сведений и задаем условие периода       Дата >= Период <= Дата   

Оффлайн techh

  • *
  • Сообщений: 41
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-03-11
  • Сайт: 
  • Профессия: Программист 1С
Re: Четверг. Вопрос 8
« Ответ #35: 15 Мар 2013, 15:48 »
В источниках данных СКД будет два набора данных-запрос.

Первый набор данных "Даты" - запрос, который генерирует все даты в нужном периоде.

Второй набор данных "Курсы" - запрос к регистру сведений КурсыВалют:

ВЫБРАТЬ
&Дата,
КурсыВалютСрезПоследних.Валюта,
КурсыВалютСрезПоследних.Курс
ИЗ
РегистрСведений.КурсыВалют.СрезПоследних(&Дата {(&Дата)}, ) КАК КурсыВалютСрезПоследних

Наборы данных соединяются, как показано на картинке, при этом важно указать "Параметр" - "Дата", чтобы СКД передавала значения (даты) из первого набора данных во второй.



Результат (приведен фрагмент регистра сведений и сформированный отчет):



Оффлайн elinatn@yandex.ru

  • *
  • Сообщений: 37
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-11-10
  • Сайт: 
Re: Четверг. Вопрос 8
« Ответ #36: 15 Мар 2013, 16:23 »
Здесь нужно указывать в СКД для группировок дополнение периодов с заданной периодичностью в указанном интервале. Необходимо добавить группировку ПериодДень. В свойствах группировки установить тип дополнения "День" и ввести значения в "Начальную дату периода" и "Конечную дату периода".
В источниках данных будет один запрос

Оффлайн SVGLVV

  • *
  • Сообщений: 36
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-07-25
  • Сайт: 
  • Профессия: Программист 8.1
Re: Четверг. Вопрос 8
« Ответ #37: 15 Мар 2013, 18:09 »
Есть красивое, на мой взгляд, решение этой задачи одним запросом.

ВЫБРАТЬ
   0 КАК Цифра
ПОМЕСТИТЬ ТабЦифр

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   7

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   8

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   9
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, ТабЦифр1.Цифра + 10 * ТабЦифр2.Цифра + 100 * ТабЦифр3.Цифра + 1000 * ТабЦифр4.Цифра) КАК День
ПОМЕСТИТЬ ТабДней
ИЗ
   ТабЦифр КАК ТабЦифр1,
   ТабЦифр КАК ТабЦифр2,
   ТабЦифр КАК ТабЦифр3,
   ТабЦифр КАК ТабЦифр4
ГДЕ
   ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, ТабЦифр1.Цифра + 10 * ТабЦифр2.Цифра + 100 * ТабЦифр3.Цифра + 1000 * ТабЦифр4.Цифра) <= &ДатаКонца

ИНДЕКСИРОВАТЬ ПО
   День
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ТабДней.День
ПОМЕСТИТЬ Даты
ИЗ
   ТабДней КАК ТабДней
;

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

УПОРЯДОЧИТЬ ПО
   Дата,
   Валюта,
   Курс

Оффлайн vlad___2011___

  • *
  • Сообщений: 39
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-11-19
  • Сайт: 
  • Профессия: Программист 8.1
Re: Четверг. Вопрос 8
« Ответ #38: 15 Мар 2013, 18:25 »
В СКД будут два источника. Первый должен содержать все даты из периода, как
их добыть - каждый решает сам. Второй будет содержать курсы валют (срез
поледних). Далее соединяем наборы с передачей параметра Дата, и, если надо,
то и Валюта.

Оффлайн AAlexandra

  • *
  • Сообщений: 42
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-02-28
  • Сайт: 
  • Профессия: Программист 1С
Re: Четверг. Вопрос 8
« Ответ #39: 15 Мар 2013, 18:39 »
Задан некий период. Необходимо в СКД сформировать таблицу со всеми датами из этого периода и значением курса на каждую из дат. Какой механизм необходимо для этого использовать? Какое количество запросов будет в источниках данных СКД?
Сначала необходимо создать набор данных (запрос) с перечнем всех дат, на которые нужно получить курс валют.
В большинстве типовых конфигураций есть производственный (или хоть какой-нибудь) календарь, запросом к нему это сделать проще всего. Либо, если никакого календаря совсем нет - вот таким запросом.
Дальше возможны варианты:
  • Можно все сделать одним здоровым запросом.
    Тогда к полученной таблице (назовем ее ТаблицаДат) нужно присоединить слева физическую таблицу курсов валют (назовем ее Курсы), по связи Курсы.Период <= ТаблицаДат.Дата. С группировкой по ТаблицаДат.Дата, максимум (Курсы.Период).
    К полученной таблице (назовем ее ТаблицаДатСПериодомКурса) слева еще раз присоединить физическую таблицу курсов валют по связи ТаблицаДатСПериодомКурса.Дата = Курсы.Период.
    Все, выбираем курс и дату из любой таблицы, запрос готов.
  • А можно создать в СКД другой набор данных (запрос), в нем обратиться к срезу последних регистра КурсыВалют. В качестве параметров виртуальной таблицы регистра указать параметр &ДатаКурса.
    Затем связать два набора данных (источник - ТаблицаДат, приемник - СрезПоследних курсов) по дате (периоду) с указанием параметра ВТ "ДатаКурса".
Итого: либо мы используем 1 набор данных, но тяжелый запрос с дополнительным внутренним.
либо 2 набора данных, по 1 запросу в каждом.

Как сделать все это без первоначального создания ТаблицыДат - я не знаю. :dfbsdfbsdf:
Все даты из диапазона вывести просто, указав для поля ТипДополнения "День" и связав даты периода с параметрами СКД. Но связь наборов данных выполняется раньше дополнения и нужного результата мы не получаем. :(
Если все же можно как-то проще - пожалуйста, расскажите, очень интересно! =)


Теги:
 


* Реклама

* Поиск

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

* Реклама

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

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

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

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal