|
СКД передача данных из одного набора в качестве параметра для другого набора. | ☑ | ||
---|---|---|---|---|
0
Vladislava-smile
20.07.15
✎
12:37
|
1-ый набор:
ВЫБРАТЬ ПродажиОбороты.КоличествоОборот, ПродажиОбороты.Номенклатура КАК Номенклатура, ПродажиОбороты.Период КАК ПериодПродажи ИЗ РегистрНакопления.Продажи.Обороты(&НачалоПериодаПродажи, &КонецПериодаПродажи, Месяц, ) КАК ПродажиОбороты 2-ой набор: ВЫБРАТЬ ПродажиОбороты.Номенклатура КАК Номенклатура, ПродажиОбороты.КоличествоОборот КАК СуммаПродаж, ПродажиОбороты.Период КАК ПериодСуммаПродаж, &НачалоПериодаПродажиСумма, &КонецПериодаПродажиСумма ИЗ РегистрНакопления.Продажи.Обороты(&НачалоПериодаПродажиСумма, &КонецПериодаПродажиСумма, Месяц, ) КАК ПродажиОбороты СГРУППИРОВАТЬ ПО ПродажиОбороты.Номенклатура, ПродажиОбороты.КоличествоОборот, ПродажиОбороты.Период Связи: https://dropmefiles.com/rmyVq Параметры: https://dropmefiles.com/YkPGn Ошибка: {Форма.ФормаОтчета.Форма(332)}: Ошибка при вызове метода контекста (Вывести) ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); по причине: Ошибка вывода результата по причине: Ошибка при выводе результата по причине: Ошибка получения данных по причине: Ошибка создания набора данных "НаборДанных3" по причине: Ошибка при исполнении запроса набора данных по причине: {(8, 2)}: Ошибка обработки представления "РегистрНакопления.Продажи.Обороты:Несоответствие типов (Параметр номер ""1"")" <<?>>РегистрНакопления.Продажи.Обороты(&НачалоПериодаПродажиСумма, &КонецПериодаПродажиСумма, Месяц, ) КАК ПродажиОбороты Что не так? |
|||
1
eklmn
гуру
20.07.15
✎
12:39
|
зачем еще ветку завела?
|
|||
2
Vladislava-smile
20.07.15
✎
12:45
|
(1) - ну тут проблема другая нарисовалась, не стоило, да?
Буду иметь в виду |
|||
3
eklmn
гуру
20.07.15
✎
12:45
|
(2) да вроде все таже проблема, отчет то один ))
|
|||
4
Vladislava-smile
20.07.15
✎
12:48
|
(3) ну тоже прав, просто у меня уже крыша едет, хоть убей не могу понять как эта дрянь работает, везде дата стоит, почему тип несоответствует??? Почитала про эту ошибку - название параметров отличается от стандартных, период сделан ограниченным.
|
|||
5
Vladislava-smile
20.07.15
✎
12:57
|
РегистрНакопления.Продажи.Обороты({(&НачалоПериодаПродажиСумма)}, {(&КонецПериодаПродажиСумма}), Месяц, ) КАК ПродажиОбороты
Не ругается, но процесс заполнения отчета не идет ((( Висьнет. |
|||
6
eklmn
гуру
20.07.15
✎
13:00
|
(5) потому что нельзя в скд баловаться датами
|
|||
7
Vladislava-smile
20.07.15
✎
13:05
|
(6) точно, просто я уже методом тыка делаю. ну не знаю я как сделать чтобы по дате на конец месяца в наборе 2 выполнялся набор 3 по параметрам начало - период, конец - период + 3 месяца. И примеров подобных нигде не могу найти по связям в СКД.
|
|||
8
DCKiller
20.07.15
✎
13:08
|
М-да...
|
|||
9
Vladislava-smile
20.07.15
✎
13:10
|
(8) ну что М-да... ? ))) Ну не делала ничего раньше подобного ((
|
|||
10
MiniMuk
20.07.15
✎
13:10
|
А может тебе просто задать свои параметры дата начала дата конца и от них задать параметры наборов данных?
|
|||
11
DCKiller
20.07.15
✎
13:13
|
(9) Я, если честно, вообще не понимаю, зачем там 2 набора данных? Если все в одном запросе прекрасно уместить можно.
|
|||
12
Vladislava-smile
20.07.15
✎
13:14
|
(10) - так они программно должны меняться. Так как они не статичны.
|
|||
13
MiniMuk
20.07.15
✎
13:14
|
||||
14
Vladislava-smile
20.07.15
✎
13:15
|
(9) можно, но там я застряла на запросе. Так как Оборотов не было на некоторые периоды, то суммирование не идет по некоторым колонкам
|
|||
15
MiniMuk
20.07.15
✎
13:15
|
(12) задаю параметр период через свой параметр дата конца, ну заодно там его немного шаманю
|
|||
16
Vladislava-smile
20.07.15
✎
13:16
|
(13) Это что? Файл удален
|
|||
17
DCKiller
20.07.15
✎
13:16
|
(14) Какое суммирование? По каким колонкам?
|
|||
18
Vladislava-smile
20.07.15
✎
13:20
|
ну вот был запрос
ВЫБРАТЬ ПродажиОбороты.Номенклатура КАК Номенклатура, ПродажиОбороты.Период КАК ПериодПродажиСумма, ВЫБОР КОГДА ПродажиСумма.Период >= ДОБАВИТЬКДАТЕ(ПродажиОбороты.Период, МЕСЯЦ, -&Разница + 1) И ПродажиСумма.Период <= ПродажиОбороты.Период ТОГДА СУММА(ПродажиСумма.КоличествоОборот) КОНЕЦ КАК СуммаПродажи, ДОБАВИТЬКДАТЕ(ПродажиОбороты.Период, МЕСЯЦ, -&Разница + 1) КАК ДатаНачалаПродСРазницей, ПродажиСумма.Период КАК ПериодВложЗапрос ИЗ РегистрНакопления.Продажи.Обороты(&НачалоПериодаОстаток, &КонецПериодаОстаток, Месяц, ) КАК ПродажиОбороты ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПродажиОбороты.КоличествоОборот КАК КоличествоОборот, ПродажиОбороты.Номенклатура КАК Номенклатура, ПродажиОбороты.Период КАК Период ИЗ РегистрНакопления.Продажи.Обороты(&НачалоПериодаПродажи, &КонецПериодаПродажи, Месяц, ) КАК ПродажиОбороты) КАК ПродажиСумма ПО ПродажиОбороты.Номенклатура = ПродажиСумма.Номенклатура ГДЕ ПродажиОбороты.Номенклатура = &Ном СГРУППИРОВАТЬ ПО ПродажиОбороты.Номенклатура, ПродажиОбороты.Период, ПродажиСумма.Период Только так придумала, но некорректно работает. |
|||
19
MiniMuk
20.07.15
✎
13:21
|
||||
20
DCKiller
20.07.15
✎
13:24
|
(18) А почему соединение именно внутреннее?
|
|||
21
Vladislava-smile
20.07.15
✎
13:26
|
(19) файл вижу, но не подойдет так как повторюсь, эти параметры не статичны.
|
|||
22
MiniMuk
20.07.15
✎
13:27
|
(21) ну так конечный параметр "дата конца" задает пользователь". а параметр период исходя из этого параметра высчитывается
|
|||
23
MiniMuk
20.07.15
✎
13:28
|
(21) а что там с параметрами которые должны программно менятся?
|
|||
24
Vladislava-smile
20.07.15
✎
13:34
|
(21) Короче смотри У нас есть Продажи за период &НачалоПериодаПродажи и &КонецПериодаПродажи. Также указывается количество месяцев пользователем для расчета суммы продаж.
Надо получить пример: Продажи на конец апреля, мая, июня, июля, где на апрель - сумма продаж за янв, фев, март, апр, на май - сумма продаж за фев, март, апр, май, на июнь - март, апр, май, июнь, на июль - апр, май, июнь, июль |
|||
25
Vladislava-smile
20.07.15
✎
13:35
|
(20) а какое ставить?
|
|||
26
Vladislava-smile
20.07.15
✎
13:36
|
Левое?
|
|||
27
Vladislava-smile
20.07.15
✎
13:38
|
Все равно не верно (
|
|||
28
DCKiller
20.07.15
✎
13:43
|
(24) "Продажи на конец" - что под этим подразумевается? Конечный остаток или оборот?
|
|||
29
Vladislava-smile
20.07.15
✎
13:44
|
(28) Оборот
|
|||
30
Vladislava-smile
20.07.15
✎
13:46
|
У нас уже 9, выгоняют с работы ((. Но народ, тема не закрыта ни фига, послезавтра сдача, если не сделаю - каюк ...
|
|||
31
eklmn
гуру
20.07.15
✎
13:57
|
Зимакова, выложи уже отчет куда-нибудь "пощупать", а то как то непонятно всё
|
|||
32
DCKiller
20.07.15
✎
13:58
|
(29) Слава б-гу :)
В-общем, смотри как сделай: ВЫБРАТЬ ПродажиОбороты.КоличествоОборот, ПродажиОбороты.Номенклатура КАК Номенклатура, ПродажиОбороты.Период КАК ПериодПродажи ПОМЕСТИТЬ ВТ_ПродажиОбороты ИЗ РегистрНакопления.Продажи.Обороты(&НачалоПериодаПродажи, &КонецПериодаПродажи, Месяц, ) КАК ПродажиОбороты ; ВЫБРАТЬ ПродажиОбороты.Номенклатура КАК Номенклатура, ПродажиОбороты.КоличествоОборот КАК СуммаПродаж, ПродажиОбороты.Период КАК ПериодСуммаПродаж ПОМЕСТИТЬ ВТ_ПродажиОбороты2 ИЗ РегистрНакопления.Продажи.Обороты(&НачалоПериодаПродажиСумма, &КонецПериодаПродажи, Месяц, ) КАК ПродажиОбороты2 СГРУППИРОВАТЬ ПО ПродажиОбороты.Номенклатура, ПродажиОбороты.КоличествоОборот, ПродажиОбороты.Период ; ВЫБРАТЬ ВТ_ПродажиОбороты.*, ВТ_ПродажиОбороты2.СуммаПродаж ИЗ ВТ_ПродажиОбороты КАК ВТ_ПродажиОбороты ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПродажиОбороты2 КАК ВТ_ПродажиОбороты2 ПО ВТ_ПродажиОбороты.Номенклатура = ВТ_ПродажиОбороты2.Номенклатура И ВТ_ПродажиОбороты.ПериодПродажи <= ВТ_ПродажиОбороты2.ПериодСуммаПродаж |
|||
33
Vladislava-smile
20.07.15
✎
14:27
|
(32) слава богу, слава богу ... ))) ну если проблема у меня ))). Спасибо, завтра попробую и отпишуусь )
|
|||
34
Vladislava-smile
20.07.15
✎
14:28
|
(31) о-па ))) а откуда фамилию знаешь?)) Не кж то учились вместе?) Колись, ты кто?))
|
|||
35
eklmn
гуру
20.07.15
✎
14:30
|
в скрине засветилась ))
|
|||
36
Vladislava-smile
20.07.15
✎
14:32
|
Ааа, эх, а я то думала знакомые люди тут торчат ))). Завтра обязательно сктну сам отчет.
|
|||
37
Vladislava-smile
21.07.15
✎
02:06
|
(32) - не верно считает (, И я не много не поняла параметр &НачалоПериодаПродажиСумма - он же должен меняться ... А не задаваться перед выполнением СКД
|
|||
38
Vladislava-smile
21.07.15
✎
02:07
|
Отчет - https://dropmefiles.com/M0HAK
|
|||
39
DCKiller
21.07.15
✎
06:06
|
(37) Ничего там не должно меняться.
Последний запрос вот так переделай ВЫБРАТЬ ВТ_ПродажиОбороты.*, ВТ_ПродажиОбороты2.СуммаПродаж ИЗ ВТ_ПродажиОбороты КАК ВТ_ПродажиОбороты ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПродажиОбороты2 КАК ВТ_ПродажиОбороты2 ПО ВТ_ПродажиОбороты.Номенклатура = ВТ_ПродажиОбороты2.Номенклатура И ВТ_ПродажиОбороты.ПериодПродажи МЕЖДУ ДОБАВИТЬКДАТЕ(ВТ_ПродажиОбороты2.ПериодСуммаПродаж, МЕСЯЦ, &КолМесяцев) И ВТ_ПродажиОбороты2.ПериодСуммаПродаж |
|||
40
DCKiller
21.07.15
✎
06:11
|
+(39) т.е. -&КолМесяцев
|
|||
41
Vladislava-smile
21.07.15
✎
06:57
|
(39) и (40) - вопрос - &НачалоПериодаПродажиСумма мы откуда берем? Ведь она должна меняться,
то есть если нам нужна сумма на конец мая за 3 месяца до, то &НачалоПериодаПродажиСумма должна быть 01.03.2015, сумма на конец июня за 3 месяца до, то &НачалоПериодаПродажиСумма должна быть 01.04.2015. И у тебя указана периодичность в конечном запросе - все поля участвующие в продаже, а надо только те, для которых идет расчет "на конец" |
|||
42
Vladislava-smile
21.07.15
✎
07:15
|
Мне нужно делать вроде подзапроса в запросе - как народ говорил на других форумах типа коррелирующих. Но Запросы так не умеют в 1с. Такая возможность есть в СКД при разных наборах данных.
Вот так : https://dropmefiles.com/7HJw3 Ошибка: {Форма.ФормаОтчета.Форма(332)}: Ошибка при вызове метода контекста (Вывести) ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); по причине: Ошибка вывода результата по причине: Ошибка при выводе результата по причине: Ошибка получения данных по причине: Ошибка создания набора данных "НаборДанных3" по причине: Ошибка при исполнении запроса набора данных по причине: {(7, 2)}: Ошибка обработки представления "РегистрНакопления.Продажи.Обороты:Несоответствие типов (Параметр номер ""1"")" <<?>>РегистрНакопления.Продажи.Обороты(&НачалоПериодаПродажиСумма, &КонецПериодаПродажиСумма, Период, ) КАК ПродажиОбороты |
|||
43
DCKiller
21.07.15
✎
07:29
|
(41) Да блин....
У тебя период, за который нужно извлечь данные для второго случая уже известен - перечитай свой же пост (24), только вдумчивей. Если у тебя на конец апреля должна быть сумма продаж за период с января по апрель, то &НачалоПериодаПродажиСумма у тебя будет равно январю. Поняла? А дальше запрос с разбивкой по периодам (месяц), и делаешь как в (39)-(40) >> все поля участвующие в продаже, а надо только те, для которых идет расчет "на конец" Какие поля тебе надо извлечь из запроса, это ты уже сама решай. Я тебе просто привел пример. |
|||
44
sapphire
21.07.15
✎
08:05
|
(24) тупейшая задача
|
|||
45
Vladislava-smile
21.07.15
✎
08:06
|
Блин, да не пашет она
ВЫБРАТЬ ПродажиОбороты.КоличествоОборот, ПродажиОбороты.Номенклатура КАК Номенклатура, ПродажиОбороты.Период КАК ПериодПродажи ПОМЕСТИТЬ ВТ_ПродажиОбороты ИЗ РегистрНакопления.Продажи.Обороты(&НачалоПериодаПродажи, &КонецПериодаПродажи, Месяц, ) КАК ПродажиОбороты СГРУППИРОВАТЬ ПО ПродажиОбороты.Номенклатура, ПродажиОбороты.Период, ПродажиОбороты.КоличествоОборот ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПродажиОбороты2.Номенклатура КАК Номенклатура, ПродажиОбороты2.КоличествоОборот КАК СуммаПродаж, ПродажиОбороты2.Период КАК ПериодСуммаПродаж ПОМЕСТИТЬ ВТ_ПродажиОбороты2 ИЗ РегистрНакопления.Продажи.Обороты(&НачалоПериодаОстаток, &КонецПериодаПродажи, Месяц, ) КАК ПродажиОбороты2 СГРУППИРОВАТЬ ПО ПродажиОбороты2.Номенклатура, ПродажиОбороты2.КоличествоОборот, ПродажиОбороты2.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_ПродажиОбороты.КоличествоОборот КАК СуммаПродаж, ВТ_ПродажиОбороты.Номенклатура, ВТ_ПродажиОбороты2.ПериодСуммаПродаж ИЗ ВТ_ПродажиОбороты КАК ВТ_ПродажиОбороты ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПродажиОбороты2 КАК ВТ_ПродажиОбороты2 ПО ВТ_ПродажиОбороты.Номенклатура = ВТ_ПродажиОбороты2.Номенклатура И (ВТ_ПродажиОбороты.ПериодПродажи МЕЖДУ ДОБАВИТЬКДАТЕ(ВТ_ПродажиОбороты2.ПериодСуммаПродаж, МЕСЯЦ, -&Разность + 1) И КОНЕЦПЕРИОДА(ВТ_ПродажиОбороты2.ПериодСуммаПродаж, МЕСЯЦ)) СГРУППИРОВАТЬ ПО ВТ_ПродажиОбороты.Номенклатура, ВТ_ПродажиОбороты2.ПериодСуммаПродаж, ВТ_ПродажиОбороты.КоличествоОборот рез - https://dropmefiles.com/97E18 |
|||
46
Vladislava-smile
21.07.15
✎
08:07
|
(44) - Тупейшая ... я точно также могу сказать, а пользователю НАДО (. Лучше бы посоветовал что-нибудь.
|
|||
47
sapphire
21.07.15
✎
08:10
|
(45) тупит и нервничать не надо.
Не используйте таблицы оборотов. Используйте физическую таблицу рн продажи |
|||
48
sapphire
21.07.15
✎
08:14
|
(46) напиши одним запросом, без виртуальных таблиц, там всё просто
|
|||
49
Vladislava-smile
21.07.15
✎
08:19
|
(48) Но как там крутиться с периодами? Через выбор когда ... и по условиям? Так что ли?
|
|||
50
sapphire
21.07.15
✎
08:37
|
(49) нет, как раз начните с периодов.
Вам нужно получить N дат, которые обозначают периоды в отчете. Даже если в эти периоды не было оборотов. Как получить периоды ищете в кз на этом форуме. Далее, получите таблицу вида период минус н месяцев,период Получите обороты номенклатуры по месяцам за период минус 2н месяцев по период. Соедините периоды с уникальными номенклатурами. К результату объединения левым соединением рассчитанные ранее обороты с условием по номенклатуре и период продаж между период объединения минус Нмесяцев и период объединения, итоги сумма количество сумма сумм по период объединения, номенклатура. Вернее группировка и агрегирующие функции. Всё |
|||
51
Vladislava-smile
21.07.15
✎
09:48
|
Нашла пример - подогнала под себя. Обороты даже если не было движения
не пашет ВЫБРАТЬ НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ) КАК ДатаТаблица ПОМЕСТИТЬ ТаблицаДат ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь ГДЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериодаОстаток И &КонецПериодаОстаток СГРУППИРОВАТЬ ПО НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПродажиОбороты.Период КАК ПериодПродажОборот, ПродажиОбороты.Номенклатура, ПродажиОбороты.КоличествоОборот КАК ПродажиОборот ПОМЕСТИТЬ ПродажиОборотНеВсе ИЗ РегистрНакопления.Продажи.Обороты(&НачалоПериодаОстаток, &КонецПериодаОстаток, Месяц, ) КАК ПродажиОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ МИНИМУМ(ПродажиОборотНеВсе.ПериодПродажОборот) КАК Период, ТаблицаДат.ДатаТаблица КАК Дата ПОМЕСТИТЬ ВТВложенныйЗапрос ИЗ ТаблицаДат КАК ТаблицаДат ЛЕВОЕ СОЕДИНЕНИЕ ПродажиОборотНеВсе КАК ПродажиОборотНеВсе ПО ТаблицаДат.ДатаТаблица <= ПродажиОборотНеВсе.ПериодПродажОборот СГРУППИРОВАТЬ ПО ТаблицаДат.ДатаТаблица ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТВложенныйЗапрос.Дата КАК Дата, ПродажиОборотНеВсе.Номенклатура, ЕСТЬNULL(ПродажиОборотНеВсе.ПродажиОборот, 0) КАК НачальныйОстаток ПОМЕСТИТЬ ВТОстаткиПоДням ИЗ ВТВложенныйЗапрос КАК ВТВложенныйЗапрос ЛЕВОЕ СОЕДИНЕНИЕ ПродажиОборотНеВсе КАК ПродажиОборотНеВсе ПО ВТВложенныйЗапрос.Период = ПродажиОборотНеВсе.ПериодПродажОборот |
|||
52
Vladislava-smile
21.07.15
✎
10:20
|
Так, обороты получила
ВЫБРАТЬ ПродажиОбороты.Период, ПродажиОбороты.Номенклатура, СУММА(ПродажиОбороты.КоличествоОборот) КАК ПродажиКоличество ПОМЕСТИТЬ ВТ_Обороты ИЗ РегистрНакопления.Продажи.Обороты(&НачалоПериодаОстаток, &КонецПериодаОстаток, Месяц, ) КАК ПродажиОбороты СГРУППИРОВАТЬ ПО ПродажиОбороты.Период, ПродажиОбороты.Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ периоды.период, ВТ_Обороты.Номенклатура ПОМЕСТИТЬ втПериоды ИЗ (ВЫБРАТЬ РАЗЛИЧНЫЕ НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ) КАК период ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь ГДЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериодаОстаток И &КонецПериодаОстаток) КАК периоды, (ВЫБРАТЬ РАЗЛИЧНЫЕ ВТ_Обороты.Номенклатура КАК Номенклатура ИЗ ВТ_Обороты КАК ВТ_Обороты) КАК ВТ_Обороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ втПериоды.период КАК Период, втПериоды.Номенклатура КАК Номенклатура, ЕСТЬNULL(ВТ_Обороты.ПродажиКоличество, 0) КАК ПродажиКоличество ИЗ втПериоды КАК втПериоды ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Обороты КАК ВТ_Обороты ПО (ВТ_Обороты.Период = втПериоды.период) И (ВТ_Обороты.Номенклатура = втПериоды.Номенклатура) ГДЕ втПериоды.Номенклатура = &Ном СГРУППИРОВАТЬ ПО втПериоды.период, втПериоды.Номенклатура, ВТ_Обороты.ПродажиКоличество УПОРЯДОЧИТЬ ПО Номенклатура, Период АВТОУПОРЯДОЧИВАНИЕ |
|||
53
sapphire
21.07.15
✎
10:36
|
(51) (52) А если календарь не заполнен?
|
|||
54
sapphire
21.07.15
✎
10:39
|
(24) Правильно ли я понимаю, что есть 2 параметра дата последнего периода & количество месяцев суммирования продаж N
|
|||
55
Peltzer
21.07.15
✎
10:41
|
Давно бы уже нарисовала, скормив в скд свою самописную таблицу.
|
|||
56
Vladislava-smile
21.07.15
✎
11:23
|
(53) - заполнен
|
|||
57
Vladislava-smile
21.07.15
✎
11:24
|
(55) Это первый такой заморочный отчет в СКД и времени нету (
|
|||
58
Vladislava-smile
21.07.15
✎
11:28
|
(54) - Параметры:
НачалоПериодаОстаток КонецПериодаОстаток В них Определяется на конец каких месяцев должна считаться сумма оборотов из предыдущих НачалоПериодаПродажи КонецПериодаПродажи В них весь период для расчета суммирования оборотов то есть НачалоПериодаОстаток - &кол-во месяцев по КонецПериодаОстаток И Разность - кол-во месяцев для сдвига |
|||
59
sapphire
21.07.15
✎
11:33
|
(57) Отчет проще некуда
|
|||
60
sapphire
21.07.15
✎
11:45
|
SELECT
0 Ч INTO Единицы UNION ALL SELECT 1 Ч UNION ALL SELECT 2 Ч UNION ALL SELECT 3 Ч UNION ALL SELECT 4 Ч UNION ALL SELECT 5 Ч UNION ALL SELECT 6 Ч UNION ALL SELECT 7 Ч UNION ALL SELECT 8 Ч UNION ALL SELECT 9 Ч ; SELECT 1000*ISNULL(Тысячи.Ч,0)+100*ISNULL(Сотни.Ч,0)+10*ISNULL(Десятки.Ч,0)+Единицы.Ч Ч INTO Итератор FROM Единицы LEFT JOIN Единицы Десятки ON 10<=&N LEFT JOIN Единицы Сотни ON 100<=&N LEFT JOIN Единицы Тысячи ON 1000<=&N WHERE Единицы.Ч<=&N-1 AND (1000*ISNULL(Тысячи.Ч,0)+100*ISNULL(Сотни.Ч,0)+10*ISNULL(Десятки.Ч,0)+Единицы.Ч)<=&N-1 ; SELECT DATEADD(BeginOfPeriod(&Дата,Month),Month,0-Итератор.Ч) Период ,DATEADD(BeginOfPeriod(&Дата,Month),Month,0-Итератор.Ч-&N+1) ДатаНачалаИнтервалаПродаж ,EndOfPeriod(DATEADD(BeginOfPeriod(&Дата,Month),Month,0-Итератор.Ч),Month) ДатаОкончанияИнтервалаПродаж INTO Периоды FROM Итератор ; SELECT DISTINCT РН.Номенклатура INTO НоменклатураПродаж FROM РегистрНакопления.Продажи РН WHERE РН.Период BETWEEN DATEADD(BeginOfPeriod(&Дата,Month),Month,0-2*(&N-1)) AND EndOfPeriod(&Дата,Month) ; SELECT Периоды.Период ,Периоды.ДатаНачалаИнтервалаПродаж ,Периоды.ДатаОкончанияИнтервалаПродаж ,НоменклатураПродаж.Номенклатура INTO НоменклатураПродажПериоды FROM Периоды,НоменклатураПродаж INDEX BY Периоды.ДатаНачалаИнтервалаПродаж ,Периоды.ДатаОкончанияИнтервалаПродаж ,НоменклатураПродаж.Номенклатура ; SELECT НоменклатураПродажПериоды.Период ,НоменклатураПродажПериоды.Номенклатура ,SUM(ISNULL(РН.Количество,0)) ПродажиКоличество FROM НоменклатураПродажПериоды LEFT JOIN РегистрНакопления.Продажи РН ON РН.Период BETWEEN НоменклатураПродажПериоды.ДатаНачалаИнтервалаПродаж AND НоменклатураПродажПериоды.ДатаОкончанияИнтервалаПродаж AND РН.Номенклатура=НоменклатураПродажПериоды.Номенклатура GROUP BY НоменклатураПродажПериоды.Период ,НоменклатураПродажПериоды.Номенклатура |
|||
61
sapphire
21.07.15
✎
11:47
|
(58) Если чо, стучи в скайп
|
|||
62
Vladislava-smile
21.07.15
✎
11:58
|
(60) - Блин, фантастика какая-то ...
&Дата как я поняла - это &НачалоПериодаОстаток в моем случае, а как к этому параметру прибавлять месяц, пока не дойдем до Концапериодаостаток? |
|||
63
Vladislava-smile
21.07.15
✎
12:05
|
Ааа, сейчас вроде все понятно стало... Афигеть ...
|
|||
64
sapphire
21.07.15
✎
12:06
|
(62) Наоборот, это любая дата из последнего месяца, например, для (24) любое число июля.
Ну посмотри же в табличке Периоды Там же просто все :( |
|||
65
sapphire
21.07.15
✎
12:06
|
для (24) N=4 и дата - любая дата июля
|
|||
66
sapphire
21.07.15
✎
12:07
|
Всё что до выборки номенклатуры работает в любой конфигурации платформы 8.1 и выше.
|
|||
67
Vladislava-smile
21.07.15
✎
12:20
|
Блин, спасибо огромное, мне еще расти и расти до этого понимания ... Хотя сейчас поковырялась - немного понятнее стала что ты делаешь
|
|||
68
sapphire
21.07.15
✎
12:21
|
(67) :)
|
|||
69
sapphire
21.07.15
✎
12:28
|
(67) Там все очень просто.
Таблица "Единицы" нужна для того, что бы получить нужное количество записей, в данном случае, месяцев. Таблица Итератор выводит числа от 0 до N-1. Таблица Периоды выводит Период и диапазон для расчета продаж Таблица НоменклатурыПродаж нужна только в том случае, если для каждого периода набор номенклатур должен быть одинаков. Далее умножаем Номенклатуры на Периоды, получаем кучу записей номенклатуры с периодами, индексируем, хотя это и не обязательно, скорее даже в данном конкретном случае вредно. Ну и вычисляем продажи номенклатуры. |
|||
70
Vladislava-smile
21.07.15
✎
13:26
|
(69) - а тут проблемка небольшая нарисовалась ...
пример по результату приведу: https://dropmefiles.com/3fXvv |
|||
71
sapphire
21.07.15
✎
13:49
|
(70) Что это, Бэримор? (с)
Вы и правда думаете, что по снимку экрана я считаю всю логику Вашего отчета и данные? :) |
|||
72
sapphire
21.07.15
✎
13:53
|
(70) Хотя я предполагаю, что что-то не так соединено
|
|||
73
Vladislava-smile
21.07.15
✎
14:01
|
Ммм, ок, перепроверю соединения ), Бэримор??? )))
|
|||
74
Vladislava-smile
21.07.15
✎
14:06
|
Что интересно если берем вот такие данные - то все идеально ...((( https://dropmefiles.com/pmd6C
|
|||
75
sapphire
21.07.15
✎
14:58
|
(73) (74) Издеваешься?:)
|
|||
76
sapphire
21.07.15
✎
17:40
|
(74) Понятно, ты N берешь из последней оборачиваемости, коя потом будет красится красненьким.
Для твоих настроек из (24) N=4, а не 3, как на форме. Собственно, тогда вполне понятно откуда такой результат. Для N=3 по маю посчитает май, апрель, март (3 месяца), и продажа февраля не попадает. Зато мило светится в продаже апреля, как и должно быть в твоем случае при N=3. |
|||
77
Vladislava-smile
22.07.15
✎
04:28
|
Вот так идеально считает при любых случаях:
ВЫБРАТЬ ПродажиОбороты.Период, ПродажиОбороты.Номенклатура, СУММА(ПродажиОбороты.КоличествоОборот) КАК ПродажиКоличество ПОМЕСТИТЬ ВТ_Обороты ИЗ РегистрНакопления.Продажи.Обороты(&НачалоПериодаОстаток, &КонецПериодаОстаток, Месяц, ) КАК ПродажиОбороты СГРУППИРОВАТЬ ПО ПродажиОбороты.Период, ПродажиОбороты.Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ периоды.период, ВТ_Обороты.Номенклатура ПОМЕСТИТЬ втПериоды ИЗ (ВЫБРАТЬ РАЗЛИЧНЫЕ НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ) КАК период ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь ГДЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериодаОстаток И &КонецПериодаОстаток) КАК периоды, (ВЫБРАТЬ РАЗЛИЧНЫЕ ВТ_Обороты.Номенклатура КАК Номенклатура ИЗ ВТ_Обороты КАК ВТ_Обороты) КАК ВТ_Обороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ втПериоды.период КАК Период, втПериоды.Номенклатура КАК Номенклатура, ЕСТЬNULL(ВТ_Обороты.ПродажиКоличество, 0) КАК ПродажиКоличество ПОМЕСТИТЬ ПродажиСиБезОборотовОстаток ИЗ втПериоды КАК втПериоды ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Обороты КАК ВТ_Обороты ПО (ВТ_Обороты.Период = втПериоды.период) И (ВТ_Обороты.Номенклатура = втПериоды.Номенклатура) СГРУППИРОВАТЬ ПО втПериоды.период, втПериоды.Номенклатура, ВТ_Обороты.ПродажиКоличество ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПродажиСиБезОборотовОстаток.Период, ПродажиСиБезОборотовОстаток.Номенклатура, ПродажиСиБезОборотовОстаток.ПродажиКоличество ИЗ ПродажиСиБезОборотовОстаток КАК ПродажиСиБезОборотовОстаток ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПродажиОбороты.Период, ПродажиОбороты.Номенклатура, ПродажиОбороты.КоличествоОборот ПОМЕСТИТЬ ПродажиВсе ИЗ РегистрНакопления.Продажи.Обороты(&НачалоПериодаПродажи, &КонецПериодаПродажи, Месяц, ) КАК ПродажиОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПродажиСиБезОборотовОстаток.Период КАК ПериодОборот, ПродажиВсе.Номенклатура, ПродажиВсе.Период КАК ПериодВесь, ВЫБОР КОГДА ПродажиВсе.Период <= ПродажиСиБезОборотовОстаток.Период И ПродажиВсе.Период >= НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ПродажиСиБезОборотовОстаток.Период, МЕСЯЦ, -&Разность + 1), МЕСЯЦ) ТОГДА ПродажиВсе.КоличествоОборот КОНЕЦ КАК КоличествоПродажи, ПродажиВсе.КоличествоОборот, НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ПродажиСиБезОборотовОстаток.Период, МЕСЯЦ, -&Разность + 1), МЕСЯЦ) КАК НачалоПериодаДляПродажи ПОМЕСТИТЬ Готово ИЗ ПродажиСиБезОборотовОстаток КАК ПродажиСиБезОборотовОстаток, ПродажиВсе КАК ПродажиВсе СГРУППИРОВАТЬ ПО ПродажиВсе.Номенклатура, ПродажиСиБезОборотовОстаток.Период, ПродажиВсе.Период, ПродажиВсе.КоличествоОборот ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Готово.ПериодОборот КАК ПериодПродажиСумма, Готово.Номенклатура, Готово.КоличествоПродажи КАК КоличествоПродажиСумма ИЗ Готово КАК Готово СГРУППИРОВАТЬ ПО Готово.ПериодОборот, Готово.Номенклатура, Готово.КоличествоПродажи Спасибо всем за ответы ) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |