|
Вопрос по оптимизации кода и запроса | ☑ | ||
---|---|---|---|---|
0
asder117
30.07.20
✎
22:38
|
Коллеги доброго времени суток. пытаюсь получить цену номенклатуры с учетом доп расходов. имею на борту УПП последний релиз. Следующий код долго отрабатывает. Думаю долго отрабатывает второй запрос. Кто что может посоветовать? Спасибо
[Code] Функция ПолучитьСебестоимостьПоПоследнемуПриходу(Номенклатура, Количество) ////Получим последний приход Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ЗакупкиОбороты.Номенклатура КАК Номенклатура, | МАКСИМУМ(ЗакупкиОбороты.Регистратор) КАК Регистратор, | ЗакупкиОбороты.КоличествоОборот КАК Количество, | ЗакупкиОбороты.СтоимостьОборот КАК Стоимость |ИЗ | РегистрНакопления.Закупки.Обороты(, , Регистратор, Номенклатура = &Номенклатура) КАК ЗакупкиОбороты |ГДЕ | ЗакупкиОбороты.КоличествоОборот > 0 | И НЕ ЗакупкиОбороты.Регистратор.Образец | |СГРУППИРОВАТЬ ПО | ЗакупкиОбороты.Номенклатура, | ЗакупкиОбороты.КоличествоОборот, | ЗакупкиОбороты.СтоимостьОборот | |УПОРЯДОЧИТЬ ПО | Номенклатура, | Регистратор УБЫВ |АВТОУПОРЯДОЧИВАНИЕ"; Запрос.УстановитьПараметр("Номенклатура", Номенклатура); //Номенклатура РезультатЗапросаДок = Запрос.Выполнить().Выбрать(); если РезультатЗапросаДок.Следующий() тогда ЦенаПоступления = РезультатЗапросаДок.Стоимость/РезультатЗапросаДок.Количество; //ЦенаПоступления =0; ЗапросДоп = новый Запрос; ЗапросДоп.УстановитьПараметр("ТаблицаНоменклатуры", Номенклатура); МассивСчетов = Новый Массив; МассивСчетов.Добавить(ПланыСчетов.Хозрасчетный.Материалы); //МассивСчетов.Добавить(ПланыСчетов.Хозрасчетный.Товары); ЗапросДоп.УстановитьПараметр("Счет", МассивСчетов); ЗапросДоп.УстановитьПараметр("ДокументОснование", РезультатЗапросаДок.Регистратор); ЗапросДоп.УстановитьПараметр("ДатаНач", Новый Граница(НачалоМесяца(РезультатЗапросаДок.Регистратор.Дата),ВидГраницы.Включая)); ЗапросДоп.УстановитьПараметр("ДатаКон", Новый Граница(КонецМесяца(РезультатЗапросаДок.Регистратор.Дата),ВидГраницы.Включая)); ЗапросДоп.Текст = " |ВЫБРАТЬ | ПоступлениеТоваровУслугТовары.Номенклатура, | ХозрасчетныйДвиженияССубконто.Сумма / ЕСТЬNULL(ПоступлениеТоваровУслугТовары.Количество, 1) КАК Цена |ИЗ | Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеДопРасходов.Товары КАК ПоступлениеДопРасходовТовары | ПО ПоступлениеТоваровУслугТовары.Номенклатура = ПоступлениеДопРасходовТовары.Номенклатура | И ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеДопРасходовТовары.ДокументПартии | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(&ДатаНач,&ДатаКон, СчетДт В ИЕРАРХИИ (&Счет)) КАК ХозрасчетныйДвиженияССубконто | ПО ПоступлениеТоваровУслугТовары.Номенклатура = ХозрасчетныйДвиженияССубконто.СубконтоДт1 |ГДЕ | ПоступлениеТоваровУслугТовары.Ссылка = &ДокументОснование | И ПоступлениеТоваровУслугТовары.Номенклатура = &ТаблицаНоменклатуры | И ХозрасчетныйДвиженияССубконто.Регистратор = ПоступлениеДопРасходовТовары.Ссылка | |СГРУППИРОВАТЬ ПО | ПоступлениеТоваровУслугТовары.Номенклатура, | ХозрасчетныйДвиженияССубконто.Сумма / ЕСТЬNULL(ПоступлениеТоваровУслугТовары.Количество, 1)"; Выборка = ЗапросДоп.Выполнить().Выбрать(); если Выборка.Следующий() тогда СебестоимостьПриход1 = ЦенаПоступления + Выборка.Цена; СебестоимостьПриход = СебестоимостьПриход1*Количество; иначе СебестоимостьПриход = ЦенаПоступления*Количество; КонецЕсли; иначе СебестоимостьПриход = 0; КонецЕсли; Возврат СебестоимостьПриход; КонецФункции // ПолучитьСебестоимостьПоПоследнемуПриходу() [/Code] |
|||
1
H A D G E H O G s
30.07.20
✎
22:53
|
| И НЕ ЗакупкиОбороты.Регистратор.Образец
Точно во всех регистраторах есть реквизит Образец ? |
|||
2
H A D G E H O G s
30.07.20
✎
22:54
|
2 запрос раздербань по ВременнымТаблицам
|
|||
3
asder117
30.07.20
✎
23:00
|
(1) Да есть. Его специально заводили. (2) Попробую конечно, до этого с временными таблицами пробовал и тоже долго было
|
|||
4
H A D G E H O G s
30.07.20
✎
23:05
|
(3) Это намек на то, что .Образец возможно нужно оформить через ВЫРАЗИТЬ()
|
|||
5
asder117
30.07.20
✎
23:19
|
(4) Я это понимаю и знаю..
|
|||
6
asder117
30.07.20
✎
23:21
|
(2) разде6рбнил на вт
ЗапросДоп.Текст = "ВЫБРАТЬ | ПоступлениеТоваровУслугТовары.Номенклатура, | ПоступлениеТоваровУслугТовары.Количество |ПОМЕСТИТЬ ВТДопРасходы |ИЗ | Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеДопРасходов.Товары КАК ПоступлениеДопРасходовТовары | ПО ПоступлениеТоваровУслугТовары.Номенклатура = ПоступлениеДопРасходовТовары.Номенклатура | И ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеДопРасходовТовары.ДокументПартии |ГДЕ | ПоступлениеТоваровУслугТовары.Ссылка = &ДокументОснование | И ПоступлениеТоваровУслугТовары.Номенклатура = &ТаблицаНоменклатуры | |СГРУППИРОВАТЬ ПО | ПоступлениеТоваровУслугТовары.Номенклатура, | ПоступлениеТоваровУслугТовары.Количество |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ХозрасчетныйДвиженияССубконто.Сумма / ЕСТЬNULL(ВТДопРасходы.Количество, 1) КАК Цена, | ВТДопРасходы.Номенклатура |ИЗ | ВТДопРасходы КАК ВТДопРасходы | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК ХозрасчетныйДвиженияССубконто | ПО ВТДопРасходы.Номенклатура = ХозрасчетныйДвиженияССубконто.СубконтоДт1 | |СГРУППИРОВАТЬ ПО | ХозрасчетныйДвиженияССубконто.Сумма / ЕСТЬNULL(ВТДопРасходы.Количество, 1), | ВТДопРасходы.Номенклатура"; Работает долго...Доки тоже разбить чтоли?.первый запрос секунду делает |
|||
7
Ёпрст
30.07.20
✎
23:22
|
сгруппировать по цена..зачет, и естьнулл там не нужен
|
|||
8
Ёпрст
30.07.20
✎
23:24
|
код конечно огонь, особенно
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК ХозрасчетныйДвиженияССубконто | ПО ВТДопРасходы.Номенклатура = ХозрасчетныйДвиженияССубконто.СубконтоДт1 ... |
|||
9
asder117
30.07.20
✎
23:25
|
(7) естьнулл для проверки, чтобы не было деления на 0; Ну в принципе убрать можно
|
|||
10
Ёпрст
30.07.20
✎
23:25
|
ну и шедевр, это получать
ХозрасчетныйДвиженияССубконто.Сумма / ЕСТЬNULL(ВТДопРасходы.Количество, 1) КАК Цена, и еще группировать по этому. |
|||
11
Ёпрст
30.07.20
✎
23:26
|
(9) Если количество нулевое, твой есть нулл не поможет, будет деление на ноль. А null там по-определению не будет, никогда
|
|||
12
asder117
30.07.20
✎
23:26
|
(8) Да понял я...Изначально нее мой код был обработка на инфостате..я из нее свое делаю
|
|||
13
Ёпрст
30.07.20
✎
23:27
|
А так, ты хоть понимаешь, что пишешь вот этм кодом, в (8) ?
|
|||
14
asder117
30.07.20
✎
23:27
|
(11) Убрал
|
|||
15
H A D G E H O G s
30.07.20
✎
23:27
|
(6) На 3 ВТ, для каждой ТЧ.
А потом эти 3 ВТ соединяй |
|||
16
asder117
30.07.20
✎
23:28
|
(13) В движениях найти движения по данной номенклатуре..
|
|||
17
Ёпрст
30.07.20
✎
23:28
|
Ты берешь...ВСЕ движения регистра бухгалтерии с этой номенклатурой и ВСЁ это добро иннером присоединяешь, оно тебе точно надо ?
|
|||
18
H A D G E H O G s
30.07.20
✎
23:29
|
(17) Исходно у него было
| И ХозрасчетныйДвиженияССубконто.Регистратор = ПоступлениеДопРасходовТовары.Ссылка где-то потерял |
|||
19
asder117
30.07.20
✎
23:30
|
(17) РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(&ДатаНач,&ДатаКон, СчетДт В ИЕРАРХИИ (&Счет)) И это потерял блин
|
|||
20
Ёпрст
30.07.20
✎
23:32
|
(19) ну и зачем они тебе нужны за целый месяц ?
|
|||
21
Ёпрст
30.07.20
✎
23:33
|
Ты типа таким образом "усредненную" себестоимость получить хочешь ?
|
|||
22
Ёпрст
30.07.20
✎
23:34
|
Только це же бред (не Пит).. Сумма от одних проводок от разных доков, а количество ты всегда пихаешь с одного документа
|
|||
23
Ёпрст
30.07.20
✎
23:34
|
Чего этим кодом добиваешься - загадка :)
|
|||
24
asder117
30.07.20
✎
23:35
|
(20) УПП рауз. расчет себестоимости идет в конце месяца
(22) Именно по последнему приходу |
|||
25
asder117
30.07.20
✎
23:41
|
(21) Себестоимсоть продукции по ценам последнего прихода с учетом доп расходов
|
|||
26
Ёпрст
30.07.20
✎
23:41
|
(21) ну так и бери движения последнего прихода, а не за период.
|
|||
27
Ёпрст
30.07.20
✎
23:44
|
и движения дока допрасходов
|
|||
28
asder117
30.07.20
✎
23:45
|
(26) документ поступление доп расходов не увеличивает цену номенклатуры и если сделать запрос по ценам срез последних цена будет ниже чем должна быть. (26) Сумм нет (27) Так я и пытаюсь это получить))
|
|||
29
Ёпрст
30.07.20
✎
23:47
|
(28) какая в жпо цена ?.. оперируй суммой всегда.
|
|||
30
Ёпрст
30.07.20
✎
23:49
|
у тя есть приход и доп расход, который или уменьшает себестоимость или увеличивает её, дык тебе чтоб получить её нужно взять сумму прихода сложить с суммойдопрасходов и потом всё это добро поделить на количество из прихода.. узнаешь свою "цену себестоимости"..
а не все проводки за месяц с этой номенклатурой |
|||
31
Ёпрст
30.07.20
✎
23:53
|
+ непонятно, зачем это с регистра бухгалтерии тащить, есть же учетЗатрат, хотя, хз, как вы там 41 ведёте, до номенклатуры , или свёрнуто по сумме..хз
|
|||
32
asder117
30.07.20
✎
23:53
|
(30) т.е. получается запрос из 2-х доков и все..одно плохо автоматически не распределяется а точное количество и сумму из проводок только видно правильно
|
|||
33
asder117
30.07.20
✎
23:53
|
(31) Они у меня на 10
|
|||
34
asder117
30.07.20
✎
23:54
|
(31) Учет затрат тоже от начала до конца месяца брать надо
|
|||
35
Ёпрст
30.07.20
✎
23:55
|
(34) зачем ?
|
|||
36
asder117
30.07.20
✎
23:55
|
(35) Стоимости не будет
|
|||
37
Ёпрст
30.07.20
✎
23:56
|
ты ж с последнего хочешь брать, так и бери с последнего.
Если за месяц, то тогда нужно брать всю сумму за месяц и делить на всё количество за месяц, будешь иметь усредненную за месяц. |
|||
38
Ёпрст
30.07.20
✎
23:56
|
(36) куда она денентся то? )
|
|||
39
Ёпрст
30.07.20
✎
23:59
|
Ты определись, че надо - или усреденную за месяц, или с последнего прихода + доп расходы по этому приходу.
|
|||
40
asder117
31.07.20
✎
00:00
|
(39) с последнего прихода + доп расходы по этому приходу.
|
|||
41
Ёпрст
31.07.20
✎
00:04
|
(40) ну, тогда и бери движения с последнего прихода и движения с доп расхода, складывай суммы и дели на количество из этого прихода, получишь "цену себестоимости" усё.
|
|||
42
Ёпрст
31.07.20
✎
00:05
|
в запросах будет условие не на период, а на регистратор и номенклатуру
|
|||
43
asder117
31.07.20
✎
00:06
|
(41) Делаю (42) понял
|
|||
44
RomanYS
31.07.20
✎
00:13
|
(0) Запрос в цикле да ещё к таблице ДвиженияССубконто?
Переписать на один запрос. Лучше ДвиженияССубконто заменить на РН (РАУЗ или партий), или хотя бы таблицу оборотов РБ с обязательным заданием параметра Субконто |
|||
45
asder117
31.07.20
✎
00:16
|
(44) Там нет цикла вроде. Регистр РАУЗ я тоже о нем подумал
|
|||
46
Ёпрст
31.07.20
✎
00:26
|
(45) как это нет ?
сама функция ПолучитьСебестоимостьПоПоследнемуПриходу не в цикле разве ? ;) |
|||
47
RomanYS
31.07.20
✎
00:38
|
(45) А сорян, "первые 1" не заметил. Про ДвиженияССубконто всё в силе, самая тормозная из всех таблиц.
|
|||
48
asder117
31.07.20
✎
00:44
|
(47) Переделываю
|
|||
49
unregistered
31.07.20
✎
01:12
|
РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто - одна из самых громоздких и тяжелых таблиц.
Если обязательно нужны данные из регистра бухгалтерии и критично время работы запроса, то правильнее самому написать запрос с внутренним соединением двух таблиц - Хозрасчетный и Хозрасчетный.Субконто (с отбором по полю Вид - вид субконто и ВидДвижения - Дебет), соединяя их по Период, Регистратор и НомерСтроки. |
|||
50
xXeNoNx
31.07.20
✎
06:59
|
(5) это нас чтоль проверяешь? Если знаешь почему сам не оптимизировал
|
|||
51
xXeNoNx
31.07.20
✎
07:05
|
РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто
В иерархии, да еще и соединенная через соединение |
|||
52
Simod
31.07.20
✎
10:14
|
(1) В УПП в РН "Закупки" есть поле "Документ закупки", в котором для доп.расходов находится документ поступления. Для получения цены последней поставки со всеми доп.раходами, думаю, этого достаточно.
|
|||
53
karabas11
31.07.20
✎
10:30
|
Когда вижу ДвиженияССубконто хочется плакать... Сначала убивать, потом плакать...
|
|||
54
asder117
31.07.20
✎
15:18
|
(53) Блин брал запрос из обработки с инфостат сейчас сижу и в душе выговариваю
|
|||
55
RomanYS
31.07.20
✎
15:24
|
(53)(54) У этой таблицы есть один большой плюс, её структура совпадает с набором регистра бухгалтерии и работает код
Движения.Хозрасчетный.Загрузить(РезультатЗапроса.Выгрузить()); Других плюсов нет. Ну и использовать её для каких-то аналитических целей - это ппц. |
|||
56
asder117
31.07.20
✎
15:26
|
(52) т.е. туда садиться уже с доп.расходом?
|
|||
57
asder117
31.07.20
✎
15:57
|
(52) Что самое интересное заметил. документ доп расходов делает записи в РС Цены номенклатуры но в каком-то случае увеличивает цену, а в каком-то нет..
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |