|   |   | 
| 
 | Вопрос по оптимизации кода и запроса | ☑ | ||
|---|---|---|---|---|
| 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) Что самое интересное заметил. документ доп расходов делает записи в РС Цены номенклатуры но в каком-то случае увеличивает цену, а в каком-то нет..     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |