|
оптимизация поиска по структуре | ☑ | ||
---|---|---|---|---|
0
hohol
27.02.13
✎
17:40
|
Есть место в УПП в документе РСВ ВыборкаПоЗатратамНаВыпуск.НайтиСледующий(СтруктураПоиска) на это тратится 85% времени проведения документа. Кто как забарывал тормоза по поиску в структуре?
|
|||
1
hohol
27.02.13
✎
17:44
|
отчего зависит скорость, понятно что от количества строк в структуре. Может еще от чего? Ну и смысл там перебираются затраты и ищутся в таблице продукции. Почему они это одним запросом в скуле не сделали? скуль наверное побыстрей найдет и сопоставит.
|
|||
2
SherifSP
27.02.13
✎
17:45
|
(1) А что такое скуль?)
|
|||
3
hohol
27.02.13
✎
17:45
|
(2) заведи отдельную ветку, это долгий разговор.
|
|||
4
SherifSP
27.02.13
✎
17:47
|
(3) Так по ходу разговора ветка будит апатся))
|
|||
5
GANR
27.02.13
✎
17:49
|
Я как-то вместо Выборка задействовал ТаблицаЗначений и добавил ТаблицаЗначений.Индексы - ускорилось.
|
|||
6
hhhh
27.02.13
✎
17:49
|
(3) поиск ведь не в структуре, а в выборке. Ты выбирай выражения.
|
|||
7
hohol
27.02.13
✎
17:50
|
(6) спасибо что поправил, действительно поиск в выборке по структуре. Это я скозноязычил.
|
|||
8
GANR
27.02.13
✎
17:52
|
(7) попробуй (5)
ТаблицаЗначений.Индексы (ValueTable.Indexes) ТаблицаЗначений (ValueTable) Индексы (Indexes) Использование: Только чтение. Описание: Тип: ИндексыКоллекции. Содержит коллекцию индексов таблицы значений. Доступность: Сервер, толстый клиент, внешнее соединение. |
|||
9
hohol
27.02.13
✎
17:52
|
(5) Вариант наверное. А насколько ускорилось?
|
|||
10
GANR
27.02.13
✎
17:53
|
(9) В несколько раз точно.
|
|||
11
hohol
27.02.13
✎
17:53
|
А кто нибудь переписывал два запроса по затратам и по продукции в один? Вот думаю решится на данный подвиг или ну его нах.
|
|||
12
GANR
27.02.13
✎
17:54
|
(9) От количества записей в результате запроса зависит.
|
|||
13
hohol
27.02.13
✎
17:54
|
(10) поняно. Пошел переписывать на таблицу значений.
|
|||
14
GANR
27.02.13
✎
17:55
|
(13) Погодь. Если есть возможность (11) - так она лучше (5).
|
|||
15
GANR
27.02.13
✎
17:56
|
(11) Для временных таблиц в запросе, кстати, индексы тоже можно сделать, а потом при соединении использовать.
|
|||
16
hohol
27.02.13
✎
17:58
|
(14) да сначала меньшей кровью обойдусь наверное. Раньше вообще 30 минут закрывался. Так бухи, нам надо разделить конечную продукцию на модули! -Может не надо? -Надо! Нам надо наделать полуфабрикатов. - может не надо? - надо! Вот и пц приплыли выпуск 3 часа закрывается, если хотя бы станет час, то уже нормально.
|
|||
17
hohol
27.02.13
✎
18:53
|
в общем переписал, запустил по небольшой организации вроде быстрее, причем на много. Вот весь код, кому надо
ВыборкаПоЗатратамНаВыпуск = РезультатЗапросаПоЗатратамНаВыпуск.Выгрузить(); ВыборкаПоЗатратамНаВыпуск.Индексы.Добавить("Подразделение,НоменклатурнаяГруппа,СтатьяЗатрат,Затрата,СчетУчета"); СтрокиЗЗатратНаВыпуск = ВыборкаПоЗатратамНаВыпуск.НайтиСтроки(СтруктураПоиска); Для Каждого СтрокаТчПродукция Из СтрокиЗЗатратНаВыпуск Цикл Если СтрокаТчПродукция.ЗатратаВстречногоВыпуска И Не СтрокаТчПродукция.ВстречныйВыпуск Тогда Продолжить; ИначеЕсли Не СтрокаТчПродукция.ЗатратаВстречногоВыпуска И СтрокаТчПродукция.ВстречныйВыпуск Тогда Продолжить; ИначеЕсли СтрокаТчПродукция.ЗатратаВстречногоВыпуска И Не РасчетЗатратВстречногоВыпуска Тогда Продолжить; КонецЕсли; // Пропускаем записи по которым нет выпуска продукции. Если Не СтрокаТчПродукция.ЕстьВыпускПродукции Тогда Продолжить; КонецЕсли; ВсегоЗатратыНаВыпуск = ВсегоЗатратыНаВыпуск + СтрокаТчПродукция.Стоимость; Если СтруктураШапкиДокумента.ОтражатьВНалоговомУчете Тогда ВсегоЗатратыНаВыпускПостояннаяРазница = ВсегоЗатратыНаВыпускПостояннаяРазница + СтрокаТчПродукция.ПостояннаяРазница; ВсегоЗатратыНаВыпускВременнаяРазница = ВсегоЗатратыНаВыпускВременнаяРазница + СтрокаТчПродукция.ВременнаяРазница; КонецЕсли; СуммаЗатрат = 0; СуммаЗатратПостояннаяРазница = 0; СуммаЗатратВременнаяРазница = 0; КоличествоИзНЗП = 0; СуммаИзНЗП = 0; ПостояннаяРазницаИзНЗП = 0; ВременнаяРазницаИзНЗП = 0; // Если производится списание затрат на продукцию, исключаемую из базы распределения, // стоимость такой продукции не корректируем. Если СтрокаТчПродукция.ЕстьИсключаемаяНоменклатура И (РасчетКосвенныхЗатрат ИЛИ РасчетЗатратВстречногоВыпуска) Тогда КоличествоНЗП = КоличествоНЗП - СтрокаТчПродукция.Количество; СуммаНЗП = СуммаНЗП - СтрокаТчПродукция.Стоимость; ОбщаяСуммаНЗП = ОбщаяСуммаНЗП - СтрокаТчПродукция.Стоимость; Если СтруктураШапкиДокумента.ОтражатьВНалоговомУчете Тогда ВременнаяРазницаНЗП = ВременнаяРазницаНЗП - СтрокаТчПродукция.ВременнаяРазница; ПостояннаяРазницаНЗП = ПостояннаяРазницаНЗП - СтрокаТчПродукция.ПостояннаяРазница; ОбщаяСуммаНЗП = ОбщаяСуммаНЗП - СтрокаТчПродукция.ВременнаяРазница - СтрокаТчПродукция.ПостояннаяРазница; КонецЕсли; Продолжить; КонецЕсли; Если СтрокаТчПродукция.КодОперации = Перечисления.КодыОперацийЗатратыНаВыпускПродукции.ОприходованиеНЗП И Не РасчетЗатратВстречногоВыпуска Тогда КоличествоНЗП = КоличествоНЗП - СтрокаТчПродукция.Количество; СуммаНЗП = СуммаНЗП - СтрокаТчПродукция.Стоимость; ОбщаяСуммаНЗП = ОбщаяСуммаНЗП - СтрокаТчПродукция.Стоимость; Если СтруктураШапкиДокумента.ОтражатьВНалоговомУчете Тогда ВременнаяРазницаНЗП = ВременнаяРазницаНЗП - СтрокаТчПродукция.ВременнаяРазница; ПостояннаяРазницаНЗП = ПостояннаяРазницаНЗП - СтрокаТчПродукция.ПостояннаяРазница; ОбщаяСуммаНЗП = ОбщаяСуммаНЗП - СтрокаТчПродукция.ВременнаяРазница - СтрокаТчПродукция.ПостояннаяРазница; КонецЕсли; КонецЕсли; Если ВыборкаПоЗатратам.ВидЗатрат = Перечисления.ВидыЗатрат.Материальные Тогда РассчитатьСуммыСписанияИКорректировкиМатериальныхЗатрат( СтруктураШапкиДокумента, СтрокаТчПродукция, КодыОперацийФиксСтоимость, КоличествоНЗП, СуммаНЗП, ПостояннаяРазницаНЗП, ВременнаяРазницаНЗП, ОбщаяСуммаНЗП, КоличествоЗатратНаВыпуск, РасчетКосвенныхЗатрат, РасчетЗатратВстречногоВыпуска, СуммаЗатрат, СуммаЗатратПостояннаяРазница, СуммаЗатратВременнаяРазница, КоличествоИзНЗП, СуммаИзНЗП, ПостояннаяРазницаИзНЗП, ВременнаяРазницаИзНЗП ); // Расчет сумм списания для нематериальных затрат. ИначеЕсли Не РасчетКосвенныхЗатрат Тогда РассчитатьСуммыСписанияНематериальныхЗатрат( СтруктураШапкиДокумента, СтрокаТчПродукция, СуммаНЗП, ПостояннаяРазницаНЗП, ВременнаяРазницаНЗП, ОбщаяСуммаНЗП, СуммаЗатратНаВыпуск, РасчетЗатратВстречногоВыпуска, СуммаЗатрат, СуммаЗатратПостояннаяРазница, СуммаЗатратВременнаяРазница, СуммаИзНЗП, ПостояннаяРазницаИзНЗП, ВременнаяРазницаИзНЗП ); КонецЕсли; Если Не РасчетЗатратВстречногоВыпуска И СтрокаТчПродукция.ЗатратаВстречногоВыпуска Тогда СуммаЗатрат = 0; КонецЕсли; СписатьКоличествоИзНЗП = СписатьКоличествоИзНЗП + КоличествоИзНЗП; СписатьСуммаИзНЗП = СписатьСуммаИзНЗП + СуммаИзНЗП; СписатьПостояннаяРазницаИзНЗП = СписатьПостояннаяРазницаИзНЗП + ПостояннаяРазницаИзНЗП; СписатьВременнаяРазницаИзНЗП = СписатьВременнаяРазницаИзНЗП + ВременнаяРазницаИзНЗП; ХарактерЗатрат = Перечисления.ХарактерЗатрат.ПроизводственныеРасходы; // Формирование движений по регистру "Затраты на выпуск". СформироватьДвиженияПоРегиструЗатратыНаВыпускПродукцииПрямыеЗатраты( СтруктураШапкиДокумента, ВыборкаПоЗатратам, СтрокаТчПродукция, Ложь, // РаспределениеЗатратПоБазе, РасчетКосвенныхЗатрат, // КосвенныеЗатраты, РасчетЗатратВстречногоВыпуска, // ЗатратыВстречногоВыпуска, 0, // Количество СуммаЗатрат, СуммаЗатратПостояннаяРазница, СуммаЗатратВременнаяРазница, НаборЗаписейЗатратыНаВыпуск ); // Формирование движений по регистру бухгалтерии. Если Не СтруктураШапкиДокумента.ОтражатьВУправленческомУчете И ВыборкаПоЗатратам.СтатусМатериальныхЗатрат <> Перечисления.СтатусыМатериальныхЗатратНаПроизводство.ПринятыеВПереработку И (СтрокаТчПродукция.НоменклатурнаяГруппа <> СтрокаТчПродукция.НоменклатурнаяГруппаНЗП ИЛИ СтрокаТчПродукция.Подразделение <> СтрокаТчПродукция.ПодразделениеНЗП И ЗначениеЗаполнено(СтрокаТчПродукция.ПодразделениеНЗП)) Тогда СформироватьДвиженияПоРегиструБухгалтерииРаспределениеЗатрат( СтруктураШапкиДокумента, СтруктураШапкиДокумента.ВидОтраженияВУчете, ВыборкаПоЗатратам, СтрокаТчПродукция, ВыборкаПоЗатратам.СтатьяЗатрат, Перечисления.ХарактерЗатрат.ПроизводственныеРасходы, СуммаИзНЗП, ПостояннаяРазницаИзНЗП, ВременнаяРазницаИзНЗП, РегистрБухгалтерииНаборЗаписей ); КонецЕсли; КонецЦикла; |
|||
18
hohol
27.02.13
✎
18:55
|
вставлять в 6752 строку модуля расчета себестоимости для партионного учета
|
|||
19
GANR
27.02.13
✎
18:59
|
(17) Индексы дают себя знать когда данных много и при этом поиск происходит в разы чаще модификации.
|
|||
20
hohol
27.02.13
✎
19:00
|
тока я еще не все проверил. Надо будет сейчас на мега организации запустить. есть замер ДО, ПОСЛЕ Потом выложу.
|
|||
21
GANR
27.02.13
✎
19:01
|
ждем
|
|||
22
hohol
28.02.13
✎
16:10
|
Значит так замеры
ОбщийМодуль.ПроцедурыРасчетаСебестоимостиВыпуска.Модуль Пока ВыборкаПоЗатратамНаВыпуск.НайтиСледующий(СтруктураПоиска) Цикл 23 270,604008секунд, занимает 89,97% после ОбщийМодуль.ПроцедурыРасчетаСебестоимостиВыпуска.Модуль СтрокиЗЗатратНаВыпуск=ВыборкаПоЗатратамНаВыпуск.НайтиСтроки(СтруктураПоиска); работает 1 899,765115секунд, занимает 34,37% |
|||
23
hohol
28.02.13
✎
16:11
|
однако...
только в (17) все неправильно там я сделал, надо по другому. |
|||
24
hohol
28.02.13
✎
16:12
|
вот вся процедура
Процедура РаспределитьЗатратыИзНезавершенногоПроизводстваНаВыпускПродукции( СтруктураШапкиДокумента, РезультатЗапросаПоНезавершенномуПроизводству, РезультатЗапросаПоЗатратамНаВыпуск, НомерПередела, РасчетКосвенныхЗатрат, РасчетЗатратВстречногоВыпуска, НаборЗаписейНезавершенноеПроизводство, НаборЗаписейЗатратыНаВыпуск, РегистрБухгалтерииНаборЗаписей ) КодыОперацийФиксСтоимость = Новый Соответствие; КодыОперацийФиксСтоимость.Вставить(Перечисления.КодыОперацийЗатратыНаВыпускПродукции.ВозвратМатериаловИзПроизводстваФикс, Истина); КодыОперацийФиксСтоимость.Вставить(Перечисления.КодыОперацийЗатратыНаВыпускПродукции.СписаниеНЗПФикс, Истина); КодыОперацийФиксСтоимость.Вставить(Перечисления.КодыОперацийЗатратыНаВыпускПродукции.КорректировкаНЗПФикс, Истина); ПостроительЗапроса = ПолучитьПостроительЗапросаПоЗатратамНаВыпуск( СтруктураШапкиДокумента, РезультатЗапросаПоЗатратамНаВыпуск ); //ПостроительЗапроса.Выполнить(); //РезультатЗапросаПоЗатратамНаВыпуск = ПостроительЗапроса.Результат; ВыборкаПоЗатратамНаВыпуск = РезультатЗапросаПоЗатратамНаВыпуск.Выгрузить(); ВыборкаПоЗатратамНаВыпуск.Индексы.Добавить("Подразделение,НоменклатурнаяГруппа,СтатьяЗатрат,Затрата,СчетУчета"); ВыборкаПоЗатратам = РезультатЗапросаПоНезавершенномуПроизводству.Выбрать(); Пока ВыборкаПоЗатратам.Следующий() Цикл КоличествоЗатратНаВыпуск = ВыборкаПоЗатратам.Количество; СуммаЗатратНаВыпуск = ВыборкаПоЗатратам.Стоимость; Если СтруктураШапкиДокумента.ОтражатьВНалоговомУчете Тогда СуммаЗатратНаВыпуск = СуммаЗатратНаВыпуск + ВыборкаПоЗатратам.ПостояннаяРазница + ВыборкаПоЗатратам.ВременнаяРазница; КонецЕсли; КоличествоНЗП = ВыборкаПоЗатратам.КоличествоОстаток; СуммаНЗП = ВыборкаПоЗатратам.СтоимостьОстаток; Если СтруктураШапкиДокумента.ОтражатьВНалоговомУчете Тогда ПостояннаяРазницаНЗП = ВыборкаПоЗатратам.ПостояннаяРазницаОстаток; ВременнаяРазницаНЗП = ВыборкаПоЗатратам.ВременнаяРазницаОстаток; Иначе ПостояннаяРазницаНЗП = 0; ВременнаяРазницаНЗП = 0; КонецЕсли; ОбщаяСуммаНЗП = СуммаНЗП + ПостояннаяРазницаНЗП + ВременнаяРазницаНЗП; //// Отберем строки затрат на выпуск. //УстановленНовыйОтбор = ПроверитьИУстановитьОтборПостроителяЗапросаПоЗатратамНаВыпуск( // СтруктураШапкиДокумента, // ВыборкаПоЗатратам, // ПостроительЗапроса // ); //Если УстановленНовыйОтбор Тогда // ПостроительЗапроса.Выполнить(); //КонецЕсли; //РезультатЗапросаПоЗатратамНаВыпуск = ПостроительЗапроса.Результат; // Выберем выпуск продукции с направлениями списания. СтруктураПоиска = ПолучитьСтруктуруПоискаСтрокЗатратНаВыпуск( СтруктураШапкиДокумента, ВыборкаПоЗатратам ); СписатьКоличествоИзНЗП = 0; СписатьСуммаИзНЗП = 0; СписатьПостояннаяРазницаИзНЗП = 0; СписатьВременнаяРазницаИзНЗП = 0; ВсегоЗатратыНаВыпуск = 0; ВсегоЗатратыНаВыпускПостояннаяРазница = 0; ВсегоЗатратыНаВыпускВременнаяРазница = 0; //ВыборкаПоЗатратамНаВыпуск = РезультатЗапросаПоЗатратамНаВыпуск.Выгрузить(); //ВыборкаПоЗатратамНаВыпуск.Индексы.Добавить("Подразделение,НоменклатурнаяГруппа,СтатьяЗатрат,Затрата,СчетУчета"); СтрокиЗЗатратНаВыпуск = ВыборкаПоЗатратамНаВыпуск.НайтиСтроки(СтруктураПоиска); Для Каждого СтрокаТчПродукция Из СтрокиЗЗатратНаВыпуск Цикл Если СтрокаТчПродукция.ЗатратаВстречногоВыпуска И Не СтрокаТчПродукция.ВстречныйВыпуск Тогда Продолжить; ИначеЕсли Не СтрокаТчПродукция.ЗатратаВстречногоВыпуска И СтрокаТчПродукция.ВстречныйВыпуск Тогда Продолжить; ИначеЕсли СтрокаТчПродукция.ЗатратаВстречногоВыпуска И Не РасчетЗатратВстречногоВыпуска Тогда Продолжить; КонецЕсли; // Пропускаем записи по которым нет выпуска продукции. Если Не СтрокаТчПродукция.ЕстьВыпускПродукции Тогда Продолжить; КонецЕсли; ВсегоЗатратыНаВыпуск = ВсегоЗатратыНаВыпуск + СтрокаТчПродукция.Стоимость; Если СтруктураШапкиДокумента.ОтражатьВНалоговомУчете Тогда ВсегоЗатратыНаВыпускПостояннаяРазница = ВсегоЗатратыНаВыпускПостояннаяРазница + СтрокаТчПродукция.ПостояннаяРазница; ВсегоЗатратыНаВыпускВременнаяРазница = ВсегоЗатратыНаВыпускВременнаяРазница + СтрокаТчПродукция.ВременнаяРазница; КонецЕсли; СуммаЗатрат = 0; СуммаЗатратПостояннаяРазница = 0; СуммаЗатратВременнаяРазница = 0; КоличествоИзНЗП = 0; СуммаИзНЗП = 0; ПостояннаяРазницаИзНЗП = 0; ВременнаяРазницаИзНЗП = 0; // Если производится списание затрат на продукцию, исключаемую из базы распределения, // стоимость такой продукции не корректируем. Если СтрокаТчПродукция.ЕстьИсключаемаяНоменклатура И (РасчетКосвенныхЗатрат ИЛИ РасчетЗатратВстречногоВыпуска) Тогда КоличествоНЗП = КоличествоНЗП - СтрокаТчПродукция.Количество; СуммаНЗП = СуммаНЗП - СтрокаТчПродукция.Стоимость; ОбщаяСуммаНЗП = ОбщаяСуммаНЗП - СтрокаТчПродукция.Стоимость; Если СтруктураШапкиДокумента.ОтражатьВНалоговомУчете Тогда ВременнаяРазницаНЗП = ВременнаяРазницаНЗП - СтрокаТчПродукция.ВременнаяРазница; ПостояннаяРазницаНЗП = ПостояннаяРазницаНЗП - СтрокаТчПродукция.ПостояннаяРазница; ОбщаяСуммаНЗП = ОбщаяСуммаНЗП - СтрокаТчПродукция.ВременнаяРазница - СтрокаТчПродукция.ПостояннаяРазница; КонецЕсли; Продолжить; КонецЕсли; Если СтрокаТчПродукция.КодОперации = Перечисления.КодыОперацийЗатратыНаВыпускПродукции.ОприходованиеНЗП И Не РасчетЗатратВстречногоВыпуска Тогда КоличествоНЗП = КоличествоНЗП - СтрокаТчПродукция.Количество; СуммаНЗП = СуммаНЗП - СтрокаТчПродукция.Стоимость; ОбщаяСуммаНЗП = ОбщаяСуммаНЗП - СтрокаТчПродукция.Стоимость; Если СтруктураШапкиДокумента.ОтражатьВНалоговомУчете Тогда ВременнаяРазницаНЗП = ВременнаяРазницаНЗП - СтрокаТчПродукция.ВременнаяРазница; ПостояннаяРазницаНЗП = ПостояннаяРазницаНЗП - СтрокаТчПродукция.ПостояннаяРазница; ОбщаяСуммаНЗП = ОбщаяСуммаНЗП - СтрокаТчПродукция.ВременнаяРазница - СтрокаТчПродукция.ПостояннаяРазница; КонецЕсли; КонецЕсли; Если ВыборкаПоЗатратам.ВидЗатрат = Перечисления.ВидыЗатрат.Материальные Тогда РассчитатьСуммыСписанияИКорректировкиМатериальныхЗатрат( СтруктураШапкиДокумента, СтрокаТчПродукция, КодыОперацийФиксСтоимость, КоличествоНЗП, СуммаНЗП, ПостояннаяРазницаНЗП, ВременнаяРазницаНЗП, ОбщаяСуммаНЗП, КоличествоЗатратНаВыпуск, РасчетКосвенныхЗатрат, РасчетЗатратВстречногоВыпуска, СуммаЗатрат, СуммаЗатратПостояннаяРазница, СуммаЗатратВременнаяРазница, КоличествоИзНЗП, СуммаИзНЗП, ПостояннаяРазницаИзНЗП, ВременнаяРазницаИзНЗП ); // Расчет сумм списания для нематериальных затрат. ИначеЕсли Не РасчетКосвенныхЗатрат Тогда РассчитатьСуммыСписанияНематериальныхЗатрат( СтруктураШапкиДокумента, СтрокаТчПродукция, СуммаНЗП, ПостояннаяРазницаНЗП, ВременнаяРазницаНЗП, ОбщаяСуммаНЗП, СуммаЗатратНаВыпуск, РасчетЗатратВстречногоВыпуска, СуммаЗатрат, СуммаЗатратПостояннаяРазница, СуммаЗатратВременнаяРазница, СуммаИзНЗП, ПостояннаяРазницаИзНЗП, ВременнаяРазницаИзНЗП ); КонецЕсли; Если Не РасчетЗатратВстречногоВыпуска И СтрокаТчПродукция.ЗатратаВстречногоВыпуска Тогда СуммаЗатрат = 0; КонецЕсли; СписатьКоличествоИзНЗП = СписатьКоличествоИзНЗП + КоличествоИзНЗП; СписатьСуммаИзНЗП = СписатьСуммаИзНЗП + СуммаИзНЗП; СписатьПостояннаяРазницаИзНЗП = СписатьПостояннаяРазницаИзНЗП + ПостояннаяРазницаИзНЗП; СписатьВременнаяРазницаИзНЗП = СписатьВременнаяРазницаИзНЗП + ВременнаяРазницаИзНЗП; ХарактерЗатрат = Перечисления.ХарактерЗатрат.ПроизводственныеРасходы; // Формирование движений по регистру "Затраты на выпуск". СформироватьДвиженияПоРегиструЗатратыНаВыпускПродукцииПрямыеЗатраты( СтруктураШапкиДокумента, ВыборкаПоЗатратам, СтрокаТчПродукция, Ложь, // РаспределениеЗатратПоБазе, РасчетКосвенныхЗатрат, // КосвенныеЗатраты, РасчетЗатратВстречногоВыпуска, // ЗатратыВстречногоВыпуска, 0, // Количество СуммаЗатрат, СуммаЗатратПостояннаяРазница, СуммаЗатратВременнаяРазница, НаборЗаписейЗатратыНаВыпуск ); // Формирование движений по регистру бухгалтерии. Если Не СтруктураШапкиДокумента.ОтражатьВУправленческомУчете И ВыборкаПоЗатратам.СтатусМатериальныхЗатрат <> Перечисления.СтатусыМатериальныхЗатратНаПроизводство.ПринятыеВПереработку И (СтрокаТчПродукция.НоменклатурнаяГруппа <> СтрокаТчПродукция.НоменклатурнаяГруппаНЗП ИЛИ СтрокаТчПродукция.Подразделение <> СтрокаТчПродукция.ПодразделениеНЗП И ЗначениеЗаполнено(СтрокаТчПродукция.ПодразделениеНЗП)) Тогда СформироватьДвиженияПоРегиструБухгалтерииРаспределениеЗатрат( СтруктураШапкиДокумента, СтруктураШапкиДокумента.ВидОтраженияВУчете, ВыборкаПоЗатратам, СтрокаТчПродукция, ВыборкаПоЗатратам.СтатьяЗатрат, Перечисления.ХарактерЗатрат.ПроизводственныеРасходы, СуммаИзНЗП, ПостояннаяРазницаИзНЗП, ВременнаяРазницаИзНЗП, РегистрБухгалтерииНаборЗаписей ); КонецЕсли; КонецЦикла; Если РасчетЗатратВстречногоВыпуска И СтруктураШапкиДокумента.ИтерационныйРасчетЗатратВстречногоВыпуска И ВыборкаПоЗатратам.ВстречныйВыпуск Тогда Если ВыборкаПоЗатратам.КоличествоРасход <> 0 Тогда СписатьКоличествоИзНЗП = 0; СписатьСуммаИзНЗП = СписатьСуммаИзНЗП - ВсегоЗатратыНаВыпуск; Если СтруктураШапкиДокумента.ОтражатьВНалоговомУчете Тогда СписатьПостояннаяРазницаИзНЗП = СписатьПостояннаяРазницаИзНЗП - ВсегоЗатратыНаВыпускПостояннаяРазница; СписатьВременнаяРазницаИзНЗП = СписатьВременнаяРазницаИзНЗП - ВсегоЗатратыНаВыпускВременнаяРазница; КонецЕсли; КонецЕсли; КонецЕсли; // Формирование движений по регистру "Незавершенное производство". СформироватьДвиженияПоРегиструНезавершенноеПроизводствоРаспределениеЗатрат( СтруктураШапкиДокумента, ВыборкаПоЗатратам, ВыборкаПоЗатратам.СтатьяЗатрат, Неопределено, // ХарактерЗатрат, ВыборкаПоЗатратам.Затрата, ВыборкаПоЗатратам.ХарактеристикаЗатраты, ВыборкаПоЗатратам.СерияЗатраты, НомерПередела, СписатьКоличествоИзНЗП, СписатьСуммаИзНЗП, СписатьПостояннаяРазницаИзНЗП, СписатьВременнаяРазницаИзНЗП, ВидДвиженияНакопления.Расход, НаборЗаписейНезавершенноеПроизводство ); КонецЦикла; КонецПроцедуры // РаспределитьЗатратыИзНезавершенногоПроизводстваНаВыпускПродукции() |
|||
25
hohol
28.02.13
✎
16:12
|
А если наверное и два запроса в один переписать, так оно наверное еще лучше будет.
|
|||
26
hohol
28.02.13
✎
16:13
|
+(24) только я правильность проведения не проверял, ну проде все закрывает.
|
|||
27
hohol
28.02.13
✎
16:15
|
+(22) Итого получилось в 12 раз быстрее. Странно, они там в 1С вообще, что ли на упп 1.3 забили? 2.0 пишут.
|
|||
28
hohol
28.02.13
✎
16:20
|
В общем Ганееву Руслану спасибо за идею, итого отвечу себе сам в 0, чтобы увеличить скорость поиска по структуре, надо ей не пользоваться. Прям бэк ту 7.7, выгрузили запрос в ТаблицуЗначений и там ковыряемся. Учитывая что семерошный язык раза в 2 быстрее, то время выполнения можно еще на два поделить. В общем восьмерка - красивая игрушка, до серьезных систем ей еще как до Киева раком, за красоту надо платить скоростью вот и пожалуйста.
|
|||
29
H A D G E H O G s
28.02.13
✎
16:21
|
(28) Возвращайтесь на 7.7.
Там сурово, нордично и быстро. |
|||
31
hohol
28.02.13
✎
16:29
|
(29) На самом деле, тут у меня не такое уж и большое производство, ну выпускается до 1000изделий, состоящих ну может из 100 всяких материалов каждое. И оно уже тухнет. А если бы 1000000 изделий выпускалось? А если каждое из 100 000 деталей? Думаю п-ц этому флагману сразу наступит, самый главный программист на заводе застрелится, остальных растерзают пользователи.
|
|||
32
GANR
28.02.13
✎
17:19
|
>Прям бэк ту 7.7 (28)
Чтобы не было таких бэков не должно быть ошибок на этапе проектирования конфигураций у фирмы 1С. Вот сделали-бы в 1 запрос изначально - все бы было хорошо. Увы, ошибки перманентны при таких разработках. |
|||
33
hohol
28.02.13
✎
17:20
|
(32) полюбому какой то гад на форуме себе в один запрос сделал и не делится.
|
|||
34
hohol
28.02.13
✎
17:22
|
А H A D G E H O G s вместо того, чтобы сообщения тереть, лучше бы заголовок исправил, на оптимизаци поиска по ВЫБОРКЕ. И упп в заголовк добавить надо, я специально не добавлял, чтобы Шухер не приходил. Не хотелось ветке матерится просто на людей.
|
|||
35
Reset
28.02.13
✎
17:25
|
Нашел неоптимальность в чужой конфигурации и сделал вывод, что 8ка гамно :) Логика
|
|||
36
ДенисЧ
28.02.13
✎
17:41
|
(35) так она и есть это самое :-)
Вне зависимости от конфигурации |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |