Имя: Пароль:
1C
1С v8
Выборка из регистра сведений, где ресурс - шкала
, , ,
0 i_rodionov
 
16.07.12
23:11
Есть справочник Диапазоны, с реквизитом Предел. Справочник заполнен условно так: 00000 - "0", 00001 - "10000", 00002 - "50000", 00003 - "99999999"
Нужно взять срез последних запросом из такого регистра сведений КурсПоШкале: измерения Контрагент и Диапазон (спр. Диапазоны), ресурс - КурсУЕ.

Запросом получить КурсУЕ, используя только параметры виртуальной таблицы КурсПоШкалеСрезПоследних?
1 i_rodionov
 
16.07.12
23:13
+(0) Значение предела берется из временной таблицы в этом пакете запросов. Пусть называется ОборотКонтрагента.СуммаУЕОборот
2 andrewks
 
16.07.12
23:13
про справочник не понял
3 Stim
 
16.07.12
23:14
выбрать 1
курсУЕ,
максимум(Диапазон)

из РС.СрезПоследних
сгруппировать по
курс уе
4 i_rodionov
 
16.07.12
23:15
(2) Справочник - это тип одного из ресурсов регистра.
5 andrewks
 
16.07.12
23:17
(4) это я понял. у тебя элементы записаны криво, подумал сначала, что это диапазоны
6 i_rodionov
 
16.07.12
23:17
(3) Не годится. Нужно обратиться к значению предела сначала. Писал выше, откуда значение
7 andrewks
 
16.07.12
23:18
(3) а кто тебе прогарантировал, что первый элемент выборки и будет искомым?
8 andrewks
 
16.07.12
23:19
(6) показывай, что у тебя получилось, и что ещё нет
9 i_rodionov
 
16.07.12
23:20
(5) Практическая мысль такова: найти курс УЕ для контрагента с вычисленным ранее оборотом (ОборотКонтрагента.СуммаУЕОборот - уже есть во временной таблице) по шкале. Курс дифференцируется от ОборотКонтрагента.СуммаУЕОборот. Всего участвуют: Справочник, виртуальная таблица оборотов по регистру бухии и Регистр сведений
10 H A D G E H O G s
 
16.07.12
23:21
(3) Сории за офф, Stim выйди в аську.
11 andrewks
 
16.07.12
23:22
ты запрос-то показывай. а то складывается ощущение, что ты не можешь сделать элементарное соединение таблиц
12 i_rodionov
 
16.07.12
23:22
Для очень опытных - это задача 2.20 из задачника. В сети есть решение, но мне оно не нравится, так как используется условие соединения
13 i_rodionov
 
16.07.12
23:32
"ВЫБРАТЬ
   |    УправленческийОборотыДтКт.СуммаУЕОборот
   |ПОМЕСТИТЬ ОборотКонтрагента
   |ИЗ
   |    РегистрБухгалтерии.Управленческий.ОборотыДтКт(&НачалоМесяца, &МоментВремени, , СчетДТ = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Покупатели), &СубконтоДТ, СчетКТ = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.ПрибылиУбытки), , СубконтоДт1 = &Контрагент) КАК УправленческийОборотыДтКт
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |    ОборотКонтрагента.СуммаУЕОборот,
   |    ШкалаКурсовСрезПоследних.Значение
   |ИЗ
   |    ОборотКонтрагента КАК ОборотКонтрагента,
   |    РегистрСведений.ШкалаКурсов.СрезПоследних(&МоментВремени, Контрагент = &Контрагент) КАК ШкалаКурсовСрезПоследних
   |        ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Диапазоны КАК Диапазоны
   |        ПО ШкалаКурсовСрезПоследних.Диапазон = Диапазоны.Ссылка"


Нужно добиться того, чтобы полное соединение давало только одну строку в результате
14 i_rodionov
 
16.07.12
23:39
Поставим вопрос по другому. Как сделать так, чтобы этот запрос был без последнего соединения, а в параметрах РегистрСведений.ШкалаКурсов.СрезПоследних было (&МоментВремени, (Контрагент = &Контрагент) И (?????????) ) Давало одну запись этого регистра
15 andrewks
 
16.07.12
23:40
(13) это не запрос, а произвольный набор инструкций
16 i_rodionov
 
16.07.12
23:44
(15) Нет. Он выбирает обороты между двумя счетами, выбирает все ресурсы из регистра сведений для контрагента на момент времени. Вопрос: Как получить запрос, который выбирает значение из справочника Диапазоны для Контрагента и Оборота?
17 andrewks
 
16.07.12
23:45
во-первых, для чего ты делаешь полное соединение со спр.Диапазоны? во-вторых, подумай получше над условием соединения. в-третьих, что за ШкалаКурсовСрезПоследних.Значение?
18 i_rodionov
 
16.07.12
23:49
(17) Согласен, полное соединение - ошибка. ШкалаКурсовСрезПоследних.Значение это значение из регистра сведений. Структура: Измерения - Контрагент, Диапазон. В зависимости от диапазона (объем продаж), есть ресурс - курсУЕ.
19 i_rodionov
 
16.07.12
23:51
+(18) Нужно получить из запроса только одну строку - по какому курсу продать товар данному контрагенту с данным оборотом с начала месяца. Значение курса находится в регистре ШкалаКурсов, периодическом
20 andrewks
 
16.07.12
23:53
теперь выясняется, что регистр периодический. про ШкалаКурсовСрезПоследних.Значение я так и не понял. и как же, всё-таки, называется регистр - ШкалаКурсов или КурсПоШкале?
21 i_rodionov
 
16.07.12
23:57
(20) Мне думалось, если человек видит ШкалаКурсовСрезПоследних, подразумевается, что периодический. Называется шкала курсов. Но интересна только виртуальная таблица ШкалаКурсовСрезПоследних
22 i_rodionov
 
17.07.12
00:04
Постановка задачи: расчеты с покупателями ведутся в уе. Делается проводка Дт "Покупатели" - Кт "Прибыли и убытки"
Текущий курс рассчитывается при проведении "Расходной накладной" в соответствии со шкалой, устанавливаемой пользователем для каждого контрагента. Шкала продаж написана в (0). Данные шкалы могут меняться помесячно. Курс берется в зависимости от объема продаж этому контрагенту с начала периода (месяца)
23 andrewks
 
17.07.12
00:11
вот так находишь нужный диапазон

ВЫБРАТЬ
   |    
   |    УправленческийОборотыДтКт.СубконтоДт1 как Контрагент,
   |    УправленческийОборотыДтКт.СуммаУЕОборот
   |    макс(Дипазоны.Ссылка) как Диапазон
   |ПОМЕСТИТЬ ОборотКонтрагента
   |ИЗ
   |    РегистрБухгалтерии.Управленческий.ОборотыДтКт(&НачалоМесяца, &МоментВремени, , СчетДТ = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Покупатели), &СубконтоДТ, СчетКТ = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.ПрибылиУбытки), , СубконтоДт1 = &Контрагент) КАК УправленческийОборотыДтКт
   |    левое соединение Справочник.Диапазоны как Диапазоны
   |    где Диапазоны.Диапазон>=УправленческийОборотыДтКт.СуммаУЕОборот
   |    сгруппировать по УправленческийОборотыДтКт.СубконтоДт1, УправленческийОборотыДтКт.СуммаУЕОборот
   |;


дальше дело техники - соединяешь со срезом последних
24 andrewks
 
17.07.12
00:13
макс(Дипазоны.Диапазон) , конечно
25 i_rodionov
 
17.07.12
00:17
(23) Иными словами, получить оборот, присоединить значение из справочника Диапазоны, соотвествующее обороту с помощю условия. Сделать левое соединение со Шкалой Курсов.
26 i_rodionov
 
17.07.12
00:19
+(23) Спасибо, мне это больше нравится, но я думал, есть метод, когда делается не объединение, а параметры виртуальной таблицы отбрасывают ненужное
27 i_rodionov
 
17.07.12
00:28
(24) Спрашиваю из любопытства... Вы видели решение этой задачи в сети?
28 i_rodionov
 
17.07.12
01:10
Если кому-то интересно решение задач 1С:Специалист, могу поделиться моим решением задачи 1.46
29 i_rodionov
 
17.07.12
06:35
ап
30 andrewks
 
17.07.12
08:07
(27) не видел ни задачу, ни решение.
если есть демо-база для этой задачки - выкладывайте, поищем оптимальные решения. а то руктями мета- и прочие данные забивать лень