Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
Есть запрос, в нем получаем 3 строчки товар сумма а 33,33 а 33,33 а 33,33 Нужно каким-то образом добавить к любой из строчек 0,01. Чтобы сумма стала равна 100. Нужно каким-то образом отличить одну строчку от других - но как? Специально для примера выбрал 3 полностью одинаковых строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2011, 01:06 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
Программист 1с, это хочется прям в запросе делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2011, 09:26 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
покажи как получаешь в запросе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2011, 09:37 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
DmitriyZ, да. Получаю - стандартным запросом на печать в 11 торговле. РасходнаяНакладнаяТовары.Ссылка - запрос на печать сразу по нескольким документам. РасходнаяНакладнаяТовары.Номенклатура РасходнаяНакладнаяТовары.Количество РасходнаяНакладнаяТовары.Сумма Левое соединение с подчиненным документов в котором нет суммы, а количество разбито по характеристикам. Сумма 100 изначально стоит для товара А. По 33.33 я разбиваю, остаток 0.01 - тоже нахожу внутри запроса. А вот дальше... эти 0.01 не могу никуда приткнуть. (Один товар - естественно для упрощения, товаров несколько и документов несколько) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2011, 10:11 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
Программист 1сDmitriyZ, да. Получаю - стандартным запросом на печать в 11 торговле. РасходнаяНакладнаяТовары.Ссылка - запрос на печать сразу по нескольким документам. РасходнаяНакладнаяТовары.Номенклатура РасходнаяНакладнаяТовары.Количество РасходнаяНакладнаяТовары.Сумма Левое соединение с подчиненным документов в котором нет суммы, а количество разбито по характеристикам. Сумма 100 изначально стоит для товара А. По 33.33 я разбиваю, остаток 0.01 - тоже нахожу внутри запроса. А вот дальше... эти 0.01 не могу никуда приткнуть. (Один товар - естественно для упрощения, товаров несколько и документов несколько) ....далее - ОБЪЕДИНИТЬ ВСЕ где построить еще одну запись, в которой измерения - те же, что в любой из записей результата (например, в первой), а сумма есть разница между общим итогом (100) и итогом результата (99.99). И это все - в итоговый запрос, с группировкой по измерениям и суммированием, чтобы эта разница присоединилась куда нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2011, 10:25 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
pail, ты не понял. Я уже все сделал кроме раскидывания суммы 0.01. Изначально в этом первоначальном документе товар А - 3 штуки сумма 100. А в подчиненном 3 строки с количеством 1 штука. и к виду: а 33,33 а 33,33 а 33,33 уже привел. И разницу 0.01 нашел. Весь вопрос в том что ее нужно теперь добавить к одной из строк. Но ТОЛЬКО к одной. Текст запроса можно простейший товар сумма из &Табл(3 строчки с 33.33) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2011, 10:47 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
Программист 1с, вот что я имел в виду: Код: plaintext 1. 2. 3. 4. 5. 6. без дополнительного измерения (НомерСтроки) здесь не обойтись - чтобы явно сказать, куда именно разницу присоединять, если Номенклатура имеет одно значение во всех записях. "Куда-нибудь" не получится, сервер вольностей не понимает. Значение разницы 0.01 тоже откуда-то берется, но фантазировать не стал - написал так, заменить реальным источником проблем,думаю,не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2011, 11:08 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
Программист 1с, ....или Характеристики использовать в качестве измерения - раз уж они есть, и есть различные в подчиненном документе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2011, 11:19 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
pailПрограммист 1с, вот что я имел в виду: Код: plaintext 1. 2. 3. 4. 5. 6. без дополнительного измерения (НомерСтроки) здесь не обойтись - чтобы явно сказать, куда именно разницу присоединять, если Номенклатура имеет одно значение во всех записях. "Куда-нибудь" не получится, сервер вольностей не понимает. Значение разницы 0.01 тоже откуда-то берется, но фантазировать не стал - написал так, заменить реальным источником проблем,думаю,не будет.Ок - возьмем 2 товара а 33,33 а 33,33 а 33,33 б 33,33 б 33,33 б 33,33 Как здесь сделать? "Первые" уже пролетают. Характеристика - хм в принципе - да они разные. Тогда а 33,33 характеристика А1 а 33,33 характеристика А2 а 33,33 характеристика А3 б 33,33 характеристика Б1 б 33,33 характеристика Б2 б 33,33 характеристика Б3 Допустим возьмем Максимум (характеристика) - для каждого товара - это одна строка и потом можем уже прибавить к этой строке 0.01. В принципе может и получится - попробую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2011, 11:45 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
Спасибо pail за ценное замечание что характеристи разные. Кидаю пример запроса как распределить по сумму по характеристикам в запросе: товары количество суммаа 3 100б 13 149.99 По характеристикам Товар характеристика количествоа А1 1а А2 1а А3 1б Б1 2б Б2 5б Б3 6 Запрос Запрос=Новый Запрос; Запрос.Текст="ВЫБРАТЬ | ВложенныйЗапрос.Номенклатура, | ВложенныйЗапрос.Количество, | ВложенныйЗапрос.Сумма |ПОМЕСТИТЬ ТаблицаНоменклатура |ИЗ | (ВЫБРАТЬ | ""а"" КАК Номенклатура, | 3 КАК Количество, | 100 КАК Сумма | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | ""б"", | 13, | 149.99) КАК ВложенныйЗапрос |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВложенныйЗапрос.Номенклатура, | ВложенныйЗапрос.Количество, | ВложенныйЗапрос.Характеристика |ПОМЕСТИТЬ ТаблицаХарактеристик |ИЗ | (ВЫБРАТЬ | ""а"" КАК Номенклатура, | 1 КАК Количество, | ""А1"" КАК Характеристика | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | ""а"", | 1, | ""А2"" | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | ""а"", | 1, | ""А3"" | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | ""б"", | 2, | ""Б1"" | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | ""б"", | 5, | ""Б2"" | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | ""б"", | 6, | ""Б3"") КАК ВложенныйЗапрос |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТаблицаНоменклатура.Номенклатура, | ТаблицаХарактеристик.Характеристика, | ВЫБОР | КОГДА ЕСТЬNULL(ТаблицаХарактеристик.Количество, 0) = 0 | ТОГДА ТаблицаНоменклатура.Количество | ИНАЧЕ ТаблицаХарактеристик.Количество | КОНЕЦ КАК Количество, | ВЫБОР | КОГДА ЕСТЬNULL(ТаблицаХарактеристик.Количество, 0) = 0 | ТОГДА ТаблицаНоменклатура.Сумма | ИНАЧЕ ВЫРАЗИТЬ(ТаблицаНоменклатура.Сумма * (ТаблицаХарактеристик.Количество / ТаблицаНоменклатура.Количество) КАК ЧИСЛО(15, 2)) | КОНЕЦ КАК Сумма |ПОМЕСТИТЬ ТаблицаСРаспределеннойСуммойПоХарактеристикам |ИЗ | ТаблицаНоменклатура КАК ТаблицаНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаХарактеристик КАК ТаблицаХарактеристик | ПО ТаблицаНоменклатура.Номенклатура = ТаблицаХарактеристик.Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВложенныйЗапрос.Номенклатура, | СУММА(ВложенныйЗапрос.Сумма) КАК Сумма |ПОМЕСТИТЬ ТаблицаНераспределенныхОстатков |ИЗ | (ВЫБРАТЬ | ТаблицаНоменклатура.Номенклатура КАК Номенклатура, | ТаблицаНоменклатура.Сумма КАК Сумма | ИЗ | ТаблицаНоменклатура КАК ТаблицаНоменклатура | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | ТаблицаСРаспределеннойСуммойПоХарактеристикам.Номенклатура, | -ТаблицаСРаспределеннойСуммойПоХарактеристикам.Сумма | ИЗ | ТаблицаСРаспределеннойСуммойПоХарактеристикам КАК ТаблицаСРаспределеннойСуммойПоХарактеристикам) КАК ВложенныйЗапрос | |СГРУППИРОВАТЬ ПО | ВложенныйЗапрос.Номенклатура | |ИМЕЮЩИЕ | СУММА(ВложенныйЗапрос.Сумма) <> 0 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТаблицаХарактеристик.Номенклатура, | МАКСИМУМ(ТаблицаХарактеристик.Характеристика) КАК Характеристика |ПОМЕСТИТЬ ТаблицаХарактеристикВыбранаОднаМаксимальнаяХарактеристика |ИЗ | ТаблицаХарактеристик КАК ТаблицаХарактеристик | |СГРУППИРОВАТЬ ПО | ТаблицаХарактеристик.Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТаблицаСРаспределеннойСуммойПоХарактеристикам.Номенклатура, | ТаблицаСРаспределеннойСуммойПоХарактеристикам.Характеристика, | ТаблицаСРаспределеннойСуммойПоХарактеристикам.Количество, | ТаблицаСРаспределеннойСуммойПоХарактеристикам.Сумма + ВЫБОР | КОГДА ТаблицаХарактеристикВыбранаОднаМаксимальнаяХарактеристика.Характеристика ЕСТЬ NULL | ТОГДА 0 | ИНАЧЕ ЕСТЬNULL(ТаблицаНераспределенныхОстатков.Сумма, 0) | КОНЕЦ КАК Сумма |ИЗ | ТаблицаСРаспределеннойСуммойПоХарактеристикам КАК ТаблицаСРаспределеннойСуммойПоХарактеристикам | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаХарактеристикВыбранаОднаМаксимальнаяХарактеристика КАК ТаблицаХарактеристикВыбранаОднаМаксимальнаяХарактеристика | ПО ТаблицаСРаспределеннойСуммойПоХарактеристикам.Номенклатура = ТаблицаХарактеристикВыбранаОднаМаксимальнаяХарактеристика.Номенклатура | И ТаблицаСРаспределеннойСуммойПоХарактеристикам.Характеристика = ТаблицаХарактеристикВыбранаОднаМаксимальнаяХарактеристика.Характеристика | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаНераспределенныхОстатков КАК ТаблицаНераспределенныхОстатков | ПО ТаблицаСРаспределеннойСуммойПоХарактеристикам.Номенклатура = ТаблицаНераспределенныхОстатков.Номенклатура"; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2011, 12:26 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
а если делить сумму надо будет не на три кучки , а случай будет общий? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2011, 13:49 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
кроме того в общем случае остаток от деления может быть не равен единице а вообще проблема из-за того что все крутиться вокруг СКД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2011, 13:51 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
В данном примере количество "кусков" деления не играет роли. А все суммы правильно округляются до 15.2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2011, 14:00 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
Программист 1сВ данном примере количество "кусков" деления не играет роли. А все суммы правильно округляются до 15.2. как вариант отбирать последние строки и делать их равными сумма - все до него. теоретически можно запростом..но гемор будет)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2011, 16:11 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
ZerroПрограммист 1сВ данном примере количество "кусков" деления не играет роли. А все суммы правильно округляются до 15.2. как вариант отбирать последние строки и делать их равными сумма - все до него. теоретически можно запростом..но гемор будет))А как ты их отберешь - что у тебя будет идентификатором последней строки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2011, 16:59 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
Эту задачу проще решить не в запросе, а после, обработать результат выполнения запроса в коде. Разность суммы документа и суммы строк добавить к строке с максимальной суммой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2011, 17:09 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
HoBTIDЭту задачу проще решить не в запросе, а после, обработать результат выполнения запроса в коде. Разность суммы документа и суммы строк добавить к строке с максимальной суммой.Выполнять промежуточные операции с выборкой? А если они загружаются в регистр: Движения.РасходПоНакладнымПокупателю.Загрузить(Запрос.Выполнить().Выгрузить()); Или вместо этой строчки - десяток строчек с анализом выборки, добавлением построчно записей в регистр и тд. Производительность будет сильно уменьшаться. Я же пишу не для удобства программиста - да второй случай гораздо проще код смотреть, а для максимальной скорости проведения документа. Один моно запрос явно выигрывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2011, 17:57 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
Программист 1сВыполнять промежуточные операции с выборкой? А если они загружаются в регистр: Движения.РасходПоНакладнымПокупателю.Загрузить(Запрос.Выполнить().Выгрузить()); Или вместо этой строчки - десяток строчек с анализом выборки, добавлением построчно записей в регистр и тд. Производительность будет сильно уменьшаться. Я же пишу не для удобства программиста - да второй случай гораздо проще код смотреть, а для максимальной скорости проведения документа. Один моно запрос явно выигрывает. Один запрос выиграет, если получится хорошо (с точки зрения оптимизатора SQL) его написать, в данном случае, сомневаюсь, что это возможно. При построчной обработке ТЗ, в данном случае, не будет обращений к базе в цикле, поэтому замедление произойдет небольшое, по сравнению с записью движений регистра 1-5% С учетом невозможности оптимизации одним запросом весьма хороший вариант, как мне кажется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2011, 18:08 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
HoBTID, 1. С чего взято что нельзя оптимизировать одним запросом? Пример написан выше. Добавьте индексы. 2. А вы учли что метода заполнить нет для регистров накопления, и придется писать каждое поле отдельно? 3. Вы учил что sql и 1с сервер - это 2 разных машины? И логика реализованная на sql будет выполнятся на машине которая обычно гораздо менее загружена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2011, 18:47 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
Программист 1сСпасибо pail за ценное замечание что характеристи разные. Кидаю пример запроса как распределить по сумму по характеристикам в запросе: товары количество суммаа 3 100б 13 149.99 По характеристикам Товар характеристика количествоа А1 1а А2 1а А3 1б Б1 2б Б2 5б Б3 6 Программист 1с , а таких начальных условий не допускаешь? Товар характеристика количествоа А1 1а А3 1а А3 1б Б1 2б Б2 5б Б3 6 Лучше ИМХО использовать не характеристику, а НомерСтроки. Тем более если будет проведение по регистрам, там ведь в любом случае номер строки участвует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2011, 22:29 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
Программист 1сZerroпропущено... как вариант отбирать последние строки и делать их равными сумма - все до него. теоретически можно запростом..но гемор будет))А как ты их отберешь - что у тебя будет идентификатором последней строки? максимум)))))) куча запросов... но можно 1 узнать максимальные строки в каждом доке 2. отобрать эти строки 3 отобрать без этих строк 4 без этих которые -им суммы посчитать 5 с этими - вычесть из общих сумм эти (4) и все ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2011, 07:02 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
shurikvz, допускаю и такой вариант. Вот только зачем печатать 2 одинаковых строки? Если юзер их вбил - то скорее всего ошибся и не объединил в одну. Так что такая ситуация обрабатывается группировкой объединяющей обе строки. Думал над этим - но встерчаются ситуации в 1с когда сбита нумерация строк. При тестировании так и выдает. И все строчки например - номер строки=0. Встанет проблема - а здесь ее нет. Мы же разбиваем не по номерам строк, а по характеристикам. Если бы разбивали по номерам - то согласился бы с Вами. 2. Номера строк - 1с не даст сделать в регистре 2 строчки с одинаковыми номерами, всеравно будет сдвиг, поэтому в данном случае они бессмысленны с информационной точки зрения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2011, 11:32 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
ZerroПрограммист 1спропущено... А как ты их отберешь - что у тебя будет идентификатором последней строки? максимум)))))) куча запросов... но можно 1 узнать максимальные строки в каждом доке 2. отобрать эти строки 3 отобрать без этих строк 4 без этих которые -им суммы посчитать 5 с этими - вычесть из общих сумм эти (4) и всеУ меня порядок действий чуть другой - но можно и так. 1. Распределяем суммы по всем строчкам. 2. Находим остатки нераспределенных сумм. 3. Выбираем максимальную характеристику. 4. К максимальной характеристики добавляем отстаток нерапсределенной суммы. ps Не претендую на абсолютную истину - эти пункты можно тасовать в различных вариациях, может кто-то оттестирует и напишет алгоритм как нужно правильно писать с учетом планов запросов и тд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2011, 11:41 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
Программист 1сshurikvz, допускаю и такой вариант. Вот только зачем печатать 2 одинаковых строки? Если юзер их вбил - то скорее всего ошибся и не объединил в одну. Согласен, такая ситуация редко может встретиться, но как раз таки больше вероятность того, что если их так вбили, то на это есть причина (при стандартном подборе ведь они и так автоматически объединяются). И кроме того (УТ релиза 11.0.7.8 честно говоря пока даже не открывал, не знаю что и как туда добавили, поэтому скажу исходя из УТ 10.3), но характеристики различные это одно, а если вышеприведенные мной данные будут связаны с тем, что разные ГТД? Т.е. две строки, характеристики номенклатуры у них одинаковые, а вот ГТД-шки разные? Программист 1сДумал над этим - но встерчаются ситуации в 1с когда сбита нумерация строк. При тестировании так и выдает. И все строчки например - номер строки=0. Честно говоря с таким не сталкивался, но оспаривать не буду. Все возможно. Программист 1с2. Номера строк - 1с не даст сделать в регистре 2 строчки с одинаковыми номерами, всеравно будет сдвиг, поэтому в данном случае они бессмысленны с информационной точки зрения А нам не нужно две строчки с одинаковым номером. Это то же самое что МАКСИМУМ(ТаблицаХарактеристик.Характеристика), только тут соответственно будет МАКСИМУМ(ТаблицаХарактеристик.НомерСтроки) И кроме того, еще такая мысль, я вот смотрю на исходные данные, а почему вы исходите из того, что на товары с различной Характеристикой номенклатуры будет обязательно одинаковая цена? Это так и надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2011, 11:58 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
shurikvz, думаю надо пояснить саму задачу. Есть отдельно одна таблица номенклатура с суммами и вторая таблица номенклатура без сумм, но с характеристиками гтд или еще чем угодно. И необходимо сумму полностью разбросать по второй таблице. Данный пример сделан только по характеристикам, но его можно нарастить и по гтд тд - важен просто принцип. Что касается непропорционального разбития - то пожалуйста. Никто не запрещает в характеристике иметь некий коэффициент веса, и разбивать с учетом его. Мне важен был только принцип - дальше можна наращивать и изменять как угодно. (В моей задачи характеристики равноценны, если бы были не равноценны то было 2 отдельных строчки в первой таблицы с суммами. Конфигурация не 11 торговля. Из нее взято парочку модулей - все остальное мое.) ps Не претендую что максимум характеристика правильно. Но если 2 строки в которых одинаковые номера строк... Либо как вариант - у меня 1 документ с суммами, и куча документов присоединенных к нему без сумм но с характеристиками. Пусть даже нумерация правильная - легко найти вариант когда встретятся 2 разных характеристики, но у них будет номер строки одинаковый (Как пример в главном документе 1 товар, а подчиненных - два документа и в них под одной строчке с этим товаром но разными характеристиками. Любое действие с номером строки здесь будет ошибочным). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2011, 12:42 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
Проверил еще раз пример запроса, на следующих данных: товары количество суммаа 3 100б 13 149.99 По характеристикам Товар характеристика количествоа А1 1а А2 1а А3 1а А4 1б Б1 2б Б2 5б Б3 6 Результат получился: а А1 1 33.33а А2 1 33.33а А3 1 33.33а А4 1 0.01б Б1 2 23.08б Б2 5 57.69б Б3 6 69.22 ? Программист 1сps Не претендую что максимум характеристика правильно. Но если 2 строки в которых одинаковые номера строк... Либо как вариант - у меня 1 документ с суммами, и куча документов присоединенных к нему без сумм но с характеристиками. Пусть даже нумерация правильная - легко найти вариант когда встретятся 2 разных характеристики, но у них будет номер строки одинаковый (Как пример в главном документе 1 товар, а подчиненных - два документа и в них под одной строчке с этим товаром но разными характеристиками. Любое действие с номером строки здесь будет ошибочным). Если я правильно понял суть задачи, это что-то вроде распределения доп. расходов по количеству? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2011, 13:39 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
Вы первую таблицу не поправили? там вроде теперь товары количество сумма а 4 100 б 13 149.99 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2011, 13:53 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
sWinTyz , точно забыл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2011, 14:00 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
ВЫБРАТЬ ВложенныйЗапрос.Номенклатура, ВложенныйЗапрос.Количество, ВложенныйЗапрос.Сумма ПОМЕСТИТЬ ТаблицаНоменклатура ИЗ (ВЫБРАТЬ "а" КАК Номенклатура, 3 КАК Количество, 100 КАК Сумма ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "б", 13, 149.99) КАК ВложенныйЗапрос ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВложенныйЗапрос.Номенклатура, ВложенныйЗапрос.Количество, ВложенныйЗапрос.Характеристика ПОМЕСТИТЬ ТаблицаХарактеристик ИЗ (ВЫБРАТЬ "а" КАК Номенклатура, 1 КАК Количество, "А1" КАК Характеристика ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "а", 1, "А2" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "а", 1, "А3" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "б", 2, "Б1" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "б", 5, "Б2" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "б", 6, "Б3") КАК ВложенныйЗапрос ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаХарактеристик.Номенклатура, ТаблицаХарактеристик.Характеристика, ТаблицаХарактеристик.Количество КАК Количество, СУММА(ТаблицаХарактеристик1.Количество) КАК КоличествоНакопительно ПОМЕСТИТЬ Накопительная ИЗ ТаблицаХарактеристик КАК ТаблицаХарактеристик ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаХарактеристик КАК ТаблицаХарактеристик1 ПО ТаблицаХарактеристик.Номенклатура = ТаблицаХарактеристик1.Номенклатура И ТаблицаХарактеристик.Характеристика >= ТаблицаХарактеристик1.Характеристика СГРУППИРОВАТЬ ПО ТаблицаХарактеристик.Номенклатура, ТаблицаХарактеристик.Количество, ТаблицаХарактеристик.Характеристика ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Накопительная.Номенклатура, Накопительная.Характеристика, Накопительная.Количество, (ВЫРАЗИТЬ(ТаблицаНоменклатура.Сумма * Накопительная.КоличествоНакопительно / ТаблицаНоменклатура.Количество КАК ЧИСЛО(15, 2))) - (ВЫРАЗИТЬ(ТаблицаНоменклатура.Сумма * (Накопительная.КоличествоНакопительно - Накопительная.Количество) / ТаблицаНоменклатура.Количество КАК ЧИСЛО(15, 2))) КАК Сумма ИЗ Накопительная КАК Накопительная ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаНоменклатура КАК ТаблицаНоменклатура ПО Накопительная.Номенклатура = ТаблицаНоменклатура.Номенклатура ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2011, 14:28 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
shurikvzЕсли я правильно понял суть задачи, это что-то вроде распределения доп. расходов по количеству?Да. В принципе подойдет и для каких нибудь распределений расходов по счетам при закрытии месяца. А у меня как я уже сказал учет характеристик идет только количественный, поэтому и нужно иногда для печати делать суммовой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2011, 15:07 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
Программист 1сHoBTID, 1. С чего взято что нельзя оптимизировать одним запросом? Пример написан выше. Добавьте индексы. 2. А вы учли что метода заполнить нет для регистров накопления, и придется писать каждое поле отдельно? 3. Вы учил что sql и 1с сервер - это 2 разных машины? И логика реализованная на sql будет выполнятся на машине которая обычно гораздо менее загружена. Бессмысленно рассуждать о том, что я откуда взял, и что учел. Поскольку нет структуры таблиц и тестовых данных, разговор беспредметный. Могу ответить разве что по пункту 2. Есть процедура ЗаполнитьЗначенияСвойств(...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2011, 15:20 |
|
||
|
Запрос - распределение суммы
|
|||
|---|---|---|---|
|
#18+
HoBTID, 1 - согласен нужно смотреть. НО в моем запросе фактически также как и в запросе без распределения точно также 2 запроса к реальным таблицам, а вся остальная логика выполняется только с виртуальными таблицами. Или мы будем рассуждать что с виртуальными таблицами - "фиговенько" выполняется запрос? Не думаю. Во вторых на 2 разных компах 2 разных плана запроса - так что бессмысленно обсуждать равнение ауди и мерсов. Только 2 модели ауди еще можно было бы сравнить. 2. Не использую - очень медленно. Но согласен для простоты кода сойдет. 3. Вы не согласны что 1с сервер потребляет несравнимо больше ресурсов чем sql? Странно - можно хотябы один пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2011, 15:47 |
|
||
|
|

start [/forum/topic.php?all=1&fid=28&tid=1520849]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 362ms |

| 0 / 0 |
