|
|
|
Пропорциональное распределение внутри запроса. Возможно? | ☑ | ||
|---|---|---|---|---|
|
0
Trance_1C
19.11.09
✎
07:15
|
допустим запрос состоит из пакета запросов, 1 запрос в пакете получает таблицу со строками:
Документ Сумма ДокументИсточник Распределено док1 100 0 док4 50 0 второй запрос в пакете получает таблицу: Документ СуммаДляРаспределения док2 500 На выходе запроса нужно получить таблицу Документ Сумма ДокументИсточник Распределено док1 100 док2 333,33 док4 50 док2 166,67 Это возможно? |
|||
|
1
Trance_1C
19.11.09
✎
07:17
|
За последнее время, столько раз слышал на этом форуме - "Такое невозможно в 1С"
надеюсь на этот раз это не так :) |
|||
|
2
Trance_1C
19.11.09
✎
07:21
|
а?
|
|||
|
3
Азат
19.11.09
✎
07:23
|
а если во втором запросе будет несколько строк, тогда как?
|
|||
|
4
Trance_1C
19.11.09
✎
07:29
|
(3) да неважно как, можно тоже распределить на каждую строку 1 таблицы, а можно поставить одной суммой без распределения, меня интересует сам факт такой возможности?!
|
|||
|
5
Азат
19.11.09
✎
07:30
|
коэффициенты получить да, а про распределение я так и не понял...
|
|||
|
6
Defender aka LINN
19.11.09
✎
07:33
|
(4) Не знаю, как остальные, а я не возражаю. Правда, как в (0) не выйдет, будет 333,33 и 166,66
|
|||
|
7
Trance_1C
19.11.09
✎
07:48
|
(5) Ок опишу условия более подробно...
1 таблица получит документы на суммы которых по фифо нужно распределить суммы других документов из 2 таблицы, при этом распределенная сумма не должна превышать сумму док1 или док4. Если суммы документов из 2 таблицы уже превышают необходимые для распределения суммы док1 и док4 то такая сумма просто ставится в значение "распределено" без распределения. 1 таблица: Документ Сумма ДокументИсточник Распределено док1 300 0 док4 50 0 док7 300 0 2 таблица: Документ СуммаДляРаспределения док2 150 док3 200 док6 400 3 таблица на выходе: Документ Сумма ДокументИсточник Распределено док1 300 док2 150 док1 300 док3 150 док2 50 док3 50 док7 300 док6 300 "" 0 док6 100 |
|||
|
8
Trance_1C
19.11.09
✎
07:50
|
Вот так 3 таблица будет правильней
3 таблица на выходе: Документ Сумма ДокументИсточник Распределено док1 300 док2 150 док1 300 док3 150 док4 50 док3 50 док7 300 док6 300 "" 0 док6 100 |
|||
|
9
Trance_1C
19.11.09
✎
07:51
|
(6) Все будет ОК, Выразить() нас спасет...
|
|||
|
10
Trance_1C
19.11.09
✎
07:53
|
(5) Коэффициенты в нужном месте и есть суть задачи...
|
|||
|
11
Trance_1C
19.11.09
✎
07:58
|
Другими словами есть таблица получателей распределений и таблица источников, проблема в том что суммы самых ранних документов из таблицы 2 должны распределиться на самые ранние доки из таблицы 1, и я не представляю как это выполнить в запросе...
|
|||
|
12
Trance_1C
19.11.09
✎
08:00
|
Короче невозможно... ладно закрывайте ветку, опять невозможно, уже начинаю привыкать... :(
|
|||
|
13
los_hooliganos
19.11.09
✎
08:01
|
можно.
|
|||
|
14
los_hooliganos
19.11.09
✎
08:04
|
ты все это хочешь в одном запросе?
|
|||
|
15
Trance_1C
19.11.09
✎
08:04
|
Ну конечно! :)
|
|||
|
16
Азат
19.11.09
✎
08:05
|
(15) а смысл?
|
|||
|
17
Trance_1C
19.11.09
✎
08:06
|
Писать сложные отчеты с выборками несовместимых таблиц без обработки в коде...
|
|||
|
18
Trance_1C
19.11.09
✎
08:07
|
(16) +(17) да и вообще получать выборки без дальнейшего циклического распределения, я в своей УПП знаю с 10 мест где я это заменил бы на выборку запросом.
|
|||
|
19
los_hooliganos
19.11.09
✎
08:10
|
(18) ох блин это такой мегахитрющий запрос будет.
придеться лепить таблицу остатков по докам распределения. и из нее еще грамотный отбор. |
|||
|
20
Trance_1C
19.11.09
✎
08:11
|
Мне совершенно не ясно как например в запросе можно узнать что док3 уже был источником распределения для док1 на сумму 150....
(19) это будет точно хитрющий запрос, и я таких еще нигде не встречал, а очень хотелось бы увидеть :) |
|||
|
21
los_hooliganos
19.11.09
✎
08:13
|
(20) начнем с того что раз связи док распр и док источник нет, у тебя должен быть full join где-то.
|
|||
|
22
Trance_1C
19.11.09
✎
08:16
|
full join по верхним измерениям, Организация контрагент договор...
можно попробовать реализовать вышеописанный пример в этом простом запросе: |
|||
|
23
los_hooliganos
19.11.09
✎
08:16
|
еще можно вариации на тему
select top (select count(*)) |
|||
|
24
los_hooliganos
19.11.09
✎
08:17
|
тк реальную структуру не вижу сложно в голове конструировать запрос))
|
|||
|
25
Trance_1C
19.11.09
✎
08:19
|
сейчас испеку реальную структуру, момент...
|
|||
|
26
KAO111
19.11.09
✎
08:19
|
||||
|
27
ivanpoklad
19.11.09
✎
08:35
|
допустим запрос состоит из пакета запросов, 1 запрос в пакете получает таблицу со строками:
Документ Сумма ДокументИсточник Распределено док1 100 0 док4 50 0 второй запрос в пакете получает таблицу: Документ СуммаДляРаспределения док2 500 На выходе запроса нужно получить таблицу Документ Сумма ДокументИсточник Распределено док1 100 док2 333,33 док4 50 док2 166,67 Это возможно? Как то так может? ВЫБРАТЬ Документы.Документ, Документы.СуммаДокумента, Распределитель.ДокРаспред, ИтогПоДокументам1.ИтогПоДокументам / ИтогрРаспределения.ИтогРаспред * Документы.СуммаДокумента КАК Среднее ИЗ (ВЫБРАТЬ Документ.СуммаДокумента КАК СуммаДокумента, Документ.Документ КАК Документ ИЗ Документ КАК Документ) КАК Документы, (ВЫБРАТЬ СУММА(ВсеДокументы.СуммаДокумента) КАК ИтогПоДокументам ИЗ ВсеДокументы КАК ВсеДокументы) КАК ИтогПоДокументам1, (ВЫБРАТЬ ДокументРаспределения.ДокРаспред КАК ДокРаспред, ДокументРаспределения.СуммаДокРаспред КАК СуммаДокРаспред ИЗ ДокументРаспределения КАК ДокументРаспределения) КАК Распределитель, (ВЫБРАТЬ СУММА(ИтогРаспред.ИтогРаспред) КАК ИтогРаспред ИЗ ИтогРаспред КАК ИтогРаспред) КАК ИтогрРаспределения |
|||
|
28
mooo
19.11.09
✎
08:36
|
Примерный запрос - расчитывает долю суммы по позиции от общей суммы, распределение сумм делается примерно также.
|
|||
|
29
Trance_1C
19.11.09
✎
09:24
|
(27)(28) спасибо за примеры, пропорционально распределить одну сумму по другим, действительно можно узнав долю в итоге, а как быть когда часть распределяемой суммы уже использована для распределения по предыдущей строке... например док3 распределяется на док1 и док4 его суммы хватило для распределения на два документа
|
|||
|
30
Trance_1C
19.11.09
✎
09:24
|
Документ Сумма ДокументИсточник Распределено
док1 300 док2 150 док1 300 док3 150 док4 50 док3 50 док7 300 док6 300 "" 0 док6 100 |
|||
|
31
Trance_1C
19.11.09
✎
09:47
|
Вот реальный запрос в котором хотелось бы увидеть в действии такое распределение
суть в том чтобы увидеть показатели "Стоимость" И "Себестоимость" документов продаж, пропорционально суммам документов оплат. |
|||
|
32
Trance_1C
19.11.09
✎
09:47
|
Функция ПолучитьРезультатЗапроса_Запрос1()
//Текст сформирован автоматически обработкой Универсальная консоль отчетов 2.6.7 Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Взаиморасчеты.Организация, | Взаиморасчеты.Контрагент, | Взаиморасчеты.ДоговорКонтрагента, | Взаиморасчеты.Регистратор КАК ДокументПродажи, | ЕСТЬNULL(Вал.Себестоимость, 0) КАК Себестоимость, | ЕСТЬNULL(Вал.Стоимость, 0) КАК Стоимость, | ЕСТЬNULL(Взаиморасчеты.СуммаУпрОборот, 0) КАК СуммаУпр, | Взаиморасчеты.ПериодСекунда КАК ПериодДокаПродажи |ПОМЕСТИТЬ ТаблицаПолучательРаспределения |ИЗ | РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты( | &НачалоПериода, | &КонецПериода, | Авто, | Организация = &Организация | И Контрагент = &Контрагент) КАК Взаиморасчеты | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ВложенныйЗапрос.Организация КАК Организация, | ВложенныйЗапрос.Подразделение КАК Подразделение, | ВложенныйЗапрос.Контрагент КАК Контрагент, | ВложенныйЗапрос.ДоговорКонтрагента КАК ДоговорКонтрагента, | ВложенныйЗапрос.Регистратор КАК Регистратор, | ВложенныйЗапрос.Себестоимость КАК Себестоимость, | ВложенныйЗапрос.Стоимость КАК Стоимость | ИЗ | (ВЫБРАТЬ | БезГруппировки.Организация КАК Организация, | БезГруппировки.Подразделение КАК Подразделение, | БезГруппировки.Контрагент КАК Контрагент, | БезГруппировки.ДоговорКонтрагента КАК ДоговорКонтрагента, | БезГруппировки.Регистратор КАК Регистратор, | СУММА(БезГруппировки.Себестоимость) КАК Себестоимость, | СУММА(БезГруппировки.Стоимость) КАК Стоимость | ИЗ | (ВЫБРАТЬ | ПродажиОбороты.Организация КАК Организация, | ВЫБОР | КОГДА ПродажиОбороты.Подразделение ССЫЛКА Справочник.Подразделения | ТОГДА ПродажиОбороты.Подразделение | ИНАЧЕ СоответствиеПодразделений.Подразделение | КОНЕЦ КАК Подразделение, | ПродажиОбороты.Контрагент КАК Контрагент, | ПродажиОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента, | ПродажиОбороты.ЗаказПокупателя КАК Сделка, | ПродажиОбороты.Регистратор КАК Регистратор, | ПродажиОбороты.Номенклатура КАК Номенклатура, | ПродажиОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | ЕСТЬNULL(ТаблицаРегистраПродажиСебестоимость.СтоимостьОборот, 0) КАК Себестоимость, | ПродажиОбороты.СтоимостьОборот КАК Стоимость, | ПродажиОбороты.КоличествоОборот КАК КоличествоОборот | ИЗ | РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК ПродажиОбороты | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ВЫБОР | КОГДА ПродажиСебестоимость.ДокументДвижения <> НЕОПРЕДЕЛЕНО | ТОГДА ПродажиСебестоимость.ДокументДвижения | ИНАЧЕ ПродажиСебестоимость.Регистратор | КОНЕЦ КАК Регистратор, | ПродажиСебестоимость.Номенклатура КАК Номенклатура, | ПродажиСебестоимость.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | ПродажиСебестоимость.ЗаказПокупателя КАК ЗаказПокупателя, | СУММА(ПродажиСебестоимость.Стоимость) КАК СтоимостьОборот | ИЗ | РегистрНакопления.ПродажиСебестоимость КАК ПродажиСебестоимость | ГДЕ | ПродажиСебестоимость.Период МЕЖДУ &НачалоПериода И &КонецПериода | | СГРУППИРОВАТЬ ПО | ВЫБОР | КОГДА ПродажиСебестоимость.ДокументДвижения <> НЕОПРЕДЕЛЕНО | ТОГДА ПродажиСебестоимость.ДокументДвижения | ИНАЧЕ ПродажиСебестоимость.Регистратор | КОНЕЦ, | ПродажиСебестоимость.Номенклатура, | ПродажиСебестоимость.ХарактеристикаНоменклатуры, | ПродажиСебестоимость.ЗаказПокупателя) КАК ТаблицаРегистраПродажиСебестоимость | ПО (ТаблицаРегистраПродажиСебестоимость.Регистратор = ПродажиОбороты.Регистратор) | И (ТаблицаРегистраПродажиСебестоимость.Номенклатура = ПродажиОбороты.Номенклатура) | И (ТаблицаРегистраПродажиСебестоимость.ХарактеристикаНоменклатуры = ПродажиОбороты.ХарактеристикаНоменклатуры) | И (ТаблицаРегистраПродажиСебестоимость.ЗаказПокупателя = ПродажиОбороты.ЗаказПокупателя) | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствиеПодразделенийИПодразделенийОрганизаций КАК СоответствиеПодразделений | ПО (СоответствиеПодразделений.ПодразделениеОрганизации = ПродажиОбороты.Подразделение)) КАК БезГруппировки | | СГРУППИРОВАТЬ ПО | БезГруппировки.Организация, | БезГруппировки.Подразделение, | БезГруппировки.Контрагент, | БезГруппировки.ДоговорКонтрагента, | БезГруппировки.Регистратор) КАК ВложенныйЗапрос) КАК Вал | ПО (Вал.Организация = Взаиморасчеты.Организация) | И (Вал.Подразделение = Взаиморасчеты.Подразделение) | И (Вал.Контрагент = Взаиморасчеты.Контрагент) | И (Вал.ДоговорКонтрагента = Взаиморасчеты.ДоговорКонтрагента) | И (Вал.Регистратор = Взаиморасчеты.Регистратор) |ГДЕ | Взаиморасчеты.СуммаУпрОборот > 0 | И Вал.Стоимость > 0 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Взаиморасчеты.Организация, | Взаиморасчеты.Контрагент, | Взаиморасчеты.ДоговорКонтрагента, | Взаиморасчеты.Регистратор КАК ДокументОплаты, | ЕСТЬNULL(ДДС.СуммаДДС, 0) КАК СммаДДС, | ЕСТЬNULL(Взаиморасчеты.СуммаУпрОборот, 0) КАК СуммаУпр, | Взаиморасчеты.ПериодСекунда КАК ПериодДокаОплаты |ПОМЕСТИТЬ ТаблицаИсточникРаспределения |ИЗ | РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты( | &НачалоПериода, | &КонецПериода, | Авто, | Организация = &Организация | И Контрагент = &Контрагент) КАК Взаиморасчеты | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ДенежныеСредстваОбороты.Регистратор КАК Регистратор, | ДенежныеСредстваОбороты.СуммаОборот КАК СуммаДДС | ИЗ | РегистрНакопления.ДенежныеСредстваКПолучению.Обороты( | &НачалоПериода, | &КонецПериода, | Авто, | СтатьяДвиженияДенежныхСредств В | (ВЫБРАТЬ | СтатьиДвиженияДенежныхСредств.Ссылка | ИЗ | Справочник.СтатьиДвиженияДенежныхСредств КАК СтатьиДвиженияДенежныхСредств | ГДЕ | СтатьиДвиженияДенежныхСредств.Наименование = ""Расчеты с покупателями"")) КАК ДенежныеСредстваКПолучениюОбороты | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ДенежныеСредства.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК ДенежныеСредстваОбороты | ПО (ДенежныеСредстваОбороты.Регистратор = ДенежныеСредстваКПолучениюОбороты.Регистратор)) КАК ДДС | ПО (ДДС.Регистратор = Взаиморасчеты.Регистратор) |ГДЕ | Взаиморасчеты.СуммаУпрОборот < 0 | И ДДС.СуммаДДС > 0 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТаблицаПолучательРаспределения.Организация, | ТаблицаПолучательРаспределения.Контрагент, | ТаблицаПолучательРаспределения.ДоговорКонтрагента, | ТаблицаПолучательРаспределения.ПериодДокаПродажи КАК ПериодДокаПродажи, | ТаблицаПолучательРаспределения.ДокументПродажи КАК ДокументПродажи, | ТаблицаПолучательРаспределения.Себестоимость, | ТаблицаПолучательРаспределения.Стоимость, | NULL КАК ПериодДокаОплаты, | НЕОПРЕДЕЛЕНО КАК ДокументОплаты, | 0 КАК СммаДДС, | 0 КАК СуммаУпр, | 0 КАК СебестоимостьРаспределено, | 0 КАК СтоимостьРаспределено |ИЗ | ТаблицаПолучательРаспределения КАК ТаблицаПолучательРаспределения | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ТаблицаИсточникРаспределения.Организация, | ТаблицаИсточникРаспределения.Контрагент, | ТаблицаИсточникРаспределения.ДоговорКонтрагента, | NULL, | НЕОПРЕДЕЛЕНО, | 0, | 0, | ТаблицаИсточникРаспределения.ПериодДокаОплаты, | ТаблицаИсточникРаспределения.ДокументОплаты, | ТаблицаИсточникРаспределения.СммаДДС, | ТаблицаИсточникРаспределения.СуммаУпр, | 0, | 0 |ИЗ | ТаблицаИсточникРаспределения КАК ТаблицаИсточникРаспределения | |УПОРЯДОЧИТЬ ПО | ПериодДокаПродажи УБЫВ, | ПериодДокаОплаты"; //Параметры запроса Запрос.УстановитьПараметр("КонецПериода",КонецПериода);// Дата Запрос.УстановитьПараметр("Контрагент",);// Справочник ссылка: Контрагенты Запрос.УстановитьПараметр("НачалоПериода",НачалоПериода);// Дата Запрос.УстановитьПараметр("Организация",);// Справочник ссылка: Организации Результат = Запрос.Выполнить(); Возврат Результат; КонецФункции //ПолучитьРезультатЗапроса_Запрос1 |
|||
|
33
Trance_1C
19.11.09
✎
11:10
|
Вот.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |