|
|
|
СправочникСписок тормоза при ИерархическийПросмотр=Ложь | ☑ | ||
|---|---|---|---|---|
|
0
zladenuw
13.12.12
✎
15:09
|
Пользователь меняют данную настройку. 1с подвисает. смотрю на процесс. сжирает почти 2 гб.
В процедуре при выводе строки идет обращение к регистру остатков Само дольше вот тут по процентном соотношение. как можно оптимизировать Фильтр = Новый Структура(); Фильтр.Вставить("Товар", ЗЧ); Если Склад.Пустая() = 0 Тогда Фильтр.Вставить("Склад", Склад) ; КонецЕсли; ТабОст = РегЗЧ.Остатки ( , Фильтр, "Товар", "Кво") ; Ост = ?(ТабОст.Количество() =0,0, ТабОст[0].Кво); ОформлениеСтроки.Ячейки.Ост.ОтображатьТекст = Истина; ОформлениеСтроки.Ячейки.Ост.Текст = ""+ Ост; Если Ост = 0 Тогда ОформлениеСтроки.ЦветФона = Новый Цвет(255,238,237); КонецЕсли; |
|||
|
1
zladenuw
13.12.12
✎
16:29
|
Перенес в процедуру ПриПолученииДанных.
Но сильного эффекта нету. Как исправить ситуацию ? И чем все таки отличается ПриПолученииДанных и ПриВыводеСтроки |
|||
|
2
zladenuw
13.12.12
✎
16:35
|
пробовал запросом, еще дольше.
|
|||
|
3
H A D G E H O G s
модератор
13.12.12
✎
16:43
|
(1) Давай, показывай своего друга.
|
|||
|
4
zladenuw
13.12.12
✎
16:44
|
Процедура СправочникСписокПриПолученииДанных(Элемент, ОформленияСтрок)
ДанныеСтроки = ОформленияСтрок[0].ДанныеСтроки; ОформлениеСтроки = ОформленияСтрок[0]; Если ДанныеСтроки.ЭтоГруппа = 1 Тогда//ИЛИ НЕ ЭлементыФормы.СправочникСписок.ИерархическийПросмотр Тогда Возврат; КонецЕсли; //// ЗЧ = ДанныеСтроки.Ссылка; ОформлСтрЯчейки = ОформленияСтрок[0].Ячейки; // // Если ДанныеСтроки.ВидЗч = Перечисления.ВидЗЧ.Услуга Тогда ОформлСтрЯчейки.Ост.ОтображатьТекст = Истина; ОформлСтрЯчейки.Резерв.ОтображатьТекст = Истина; ОформлСтрЯчейки.Резерв.Текст = "-"; ОформлСтрЯчейки.Ост.Текст = "-"; ОформлениеСтроки.ЦветТекста = Новый Цвет(255,20,150); Возврат; КонецЕсли; Если Фл_Цена = 1 Тогда ОформлСтрЯчейки.Цена.Текст = обЦенаСтр(ЗЧ, ТипЦены); ОформлСтрЯчейки.Цена.ОтображатьТекст = Истина; КонецЕсли; //------------------------------------------------------------------------ Если Фл_Остатки = 1 Тогда Фильтр = Новый Структура(); Фильтр.Вставить("Товар", ЗЧ); Если Склад.Пустая() = 0 Тогда Фильтр.Вставить("Склад", Склад) ; КонецЕсли; ТабОст = РегЗЧ.Остатки (ТекущаяДата() , Фильтр, "Товар", "Кво") ; //Ост = ПолучитьТекОстЗЧ(ТекущаяДата(),Фильтр); Ост = ?(ТабОст.Количество() =0,0, ТабОст[0].Кво); ОформлСтрЯчейки.Ост.ОтображатьТекст = Истина; ОформлСтрЯчейки.Ост.Текст = ""+ Ост; Если Ост = 0 Тогда ОформлениеСтроки.ЦветФона = Новый Цвет(255,238,237); КонецЕсли; КонецЕсли; //------------------------------------------------------------------------ Если Фл_Резерв = 1 Тогда Фильтр = Новый Структура() ; Фильтр.Вставить("Товар", ЗЧ); ТабРез = РегРез.Остатки (, Фильтр, "Товар", "Кво") ; Рез = ?(ТабРез.Количество() =0,0, ТабРез[0].Кво); ОформлСтрЯчейки.Резерв.ОтображатьТекст = Истина; ОформлСтрЯчейки.Резерв.Текст = ""+ Рез; КонецЕсли; Если Фл_Заказано = 1 Тогда Фильтр = Новый Структура() ; Фильтр.Вставить("Товар", ЗЧ); ТабЗак = РегЗак.Остатки (, Фильтр, "Товар", "Кво") ; Зак = ?(ТабЗак.Количество() =0,0, ТабЗак[0].Кво); ОформлСтрЯчейки.Заказано.ОтображатьТекст = Истина; ОформлСтрЯчейки.Заказано.Текст = ""+ Зак; КонецЕсли; //---------------------------------------------------------- Если Фл_Идентификатор = 1 Тогда Ид = ""; Если ЗЧ.ТипЗЧ.Пустая() = 0 Тогда Ид = СтрЗаменить(СОКРЛП(ЗЧ.ТипЗЧ.ПолныйКод()),"/","."); Иначе Ид = "х.х.х"; КонецЕсли; Если ДанныеСтроки.Родитель.ПроизводительГруппа.Пустая() = 0 Тогда Ид = Ид + "." + СОКРЛП(ДанныеСтроки.Родитель.ПроизводительГруппа.Код); Иначе Ид = Ид + ".х" КонецЕсли; Если Зч.ГруппаНаценки.Пустая() = 0 Тогда Ид = Ид + "." + СОКРЛП(Зч.ГруппаНаценки.Код); Иначе Ид = Ид + ".х" КонецЕсли; Если Зч.ГруппаСкидки.Пустая() = 0 Тогда Ид = Ид + "." + СОКРЛП(Зч.ГруппаСкидки.Код); Иначе Ид = Ид + ".х" КонецЕсли; ОформлСтрЯчейки.Идентификатор.ОтображатьТекст = Истина; ОформлСтрЯчейки.Идентификатор.Текст = ""+ Ид; КонецЕсли; КонецПроцедуры |
|||
|
5
zladenuw
13.12.12
✎
16:46
|
через терминал еще нормально. пробовал локально. сожрало все свободное место на диске С и вылетела ошибкой, что нету места :)
|
|||
|
6
H A D G E H O G s
13.12.12
✎
16:48
|
Стена, ядъ.
|
|||
|
7
H A D G E H O G s
13.12.12
✎
16:48
|
Ересь какая-то.
|
|||
|
8
zladenuw
13.12.12
✎
16:50
|
творение не мое. переписываю. такого кода там валом. ошушение что конвертнули базу с 7 на 8.
|
|||
|
9
H A D G E H O G s
13.12.12
✎
16:50
|
В книге знаний есть пример, но где сейчас та книга знаний...
|
|||
|
10
zladenuw
13.12.12
✎
16:52
|
(9) а хоть примерно куда копать ?
|
|||
|
11
H A D G E H O G s
13.12.12
✎
16:53
|
(10) Обойти 1 раз все ОформленийСтрок, получить массивноменклатур и его то в запрос по остаткам запихивать.
|
|||
|
12
H A D G E H O G s
13.12.12
✎
16:53
|
И 2 раз обойти ОформленияСтрок и по результатам запроса вытащить остаток.
|
|||
|
13
zladenuw
13.12.12
✎
16:54
|
(11,12) понял. спасибо
|
|||
|
14
H A D G E H O G s
13.12.12
✎
16:56
|
ВыводитДанныеСертификатов=ЭлементыФормы.СправочникСписок.Колонки.НомерИДатаСертификата.Видимость;
ВыводитДанныеОстатков=ЭлементыФормы.СправочникСписок.Колонки.СвободныйОстаток.Видимость и РежимОстатков<>0; Если НЕ ВыводитДанныеСертификатов и НЕ ВыводитДанныеОстатков Тогда Возврат; КонецЕсли; СписокСерий=Новый СписокЗначений; Для Каждого ЭлементОформления ИЗ ОформленияСтрок Цикл СписокСерий.Добавить(ЭлементОформления.ДанныеСтроки.Ссылка); КонецЦикла; ВыборкаПоСертификатамПуста=НЕ ВыводитДанныеСертификатов; Если ВыводитДанныеСертификатов Тогда ЗапросПоСертификатам.УстановитьПараметр("СписокСерий",СписокСерий); ВыборкаПоСертификатам=ЗапросПоСертификатам.Выполнить().Выбрать(); ВыборкаПоСертификатамПуста=ВыборкаПоСертификатам.Количество()=0; КонецЕсли; ВыборкаПоОстаткамПуста=НЕ ВыводитДанныеОстатков; Если ВыводитДанныеОстатков Тогда ЗапросПоОстаткам.УстановитьПараметр("СписокСерий",СписокСерий); ВыборкаПоОстаткам=ЗапросПоОстаткам.Выполнить().Выбрать(); ВыборкаПоОстаткамПуста=ВыборкаПоОстаткам.Количество()=0; КонецЕсли; Если ВыборкаПоОстаткамПуста и ВыборкаПоСертификатамПуста Тогда Возврат; КонецЕсли; Для Каждого ЭлементОформления ИЗ ОформленияСтрок Цикл Если ВыборкаПоСертификатамПуста=Ложь Тогда ВыборкаПоСертификатам.Сбросить(); Если ВыборкаПоСертификатам.НайтиСледующий(ЭлементОформления.ДанныеСтроки.Ссылка,"СерияНоменклатуры") Тогда ЭлементОформления.Ячейки.НомерИДатаСертификата.УстановитьТекст(ВыборкаПоСертификатам.НомерСертификата + " от " + ВыборкаПоСертификатам.ДатаСертификата); Иначе ЭлементОформления.Ячейки.НомерИДатаСертификата.УстановитьТекст(""); КонецЕсли; КонецЕсли; Если ВыборкаПоОстаткамПуста=Ложь Тогда ВыборкаПоОстаткам.Сбросить(); Если ВыборкаПоОстаткам.НайтиСледующий(ЭлементОформления.ДанныеСтроки.Ссылка,"СерияНоменклатуры") Тогда ЭлементОформления.Ячейки.СвободныйОстаток.УстановитьТекст(ВыборкаПоОстаткам.СвободныйОстаток); Иначе ЭлементОформления.Ячейки.СвободныйОстаток.УстановитьТекст("0"); КонецЕсли; КонецЕсли; КонецЦикла; |
|||
|
15
H A D G E H O G s
13.12.12
✎
16:57
|
и сам запрос
ЗапросПоОстаткам=Новый Запрос; ЗапросПоОстаткам.Текст= "ВЫБРАТЬ РАЗРЕШЕННЫЕ | СвободныеОстаткиОстатки.СерияНоменклатуры, | СвободныеОстаткиОстатки.КоличествоОстаток КАК СвободныйОстаток |ИЗ | РегистрНакопления.СвободныеОстатки.Остатки( | &Дата, | Номенклатура = &Номенклатура | И ВЫБОР | КОГДА &СкладПуст = ИСТИНА | ТОГДА ИСТИНА | ИНАЧЕ Склад = &Склад | КОНЕЦ | И СерияНоменклатуры В (&СписокСерий)) КАК СвободныеОстаткиОстатки"; |
|||
|
16
zladenuw
15.12.12
✎
23:38
|
Тормоза все ровно остались. запускал локально раз 10. 2 раза вылетело что не хватает памяти. в чем может быть причина.
Так же выделяется дополнительная память, а и иногда нет. сам процесс 1с сьедал до 2 гб. сейчас же не больше 200 мб. субд и сервер(Постгрес) на линуксе. |
|||
|
17
mistеr
16.12.12
✎
03:14
|
>при выводе строки идет обращение к регистру остатков
Это 5. |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |