|
Производительность остатки по табличной части УТ 11 | ☑ | ||
---|---|---|---|---|
0
Hans
08.01.12
✎
12:10
|
в УТ 10.3 и со времен семерки был такой функционал: пользователь в заказе выделяет строку в документе - в надписи на форме пишется текущий остаток. нигде это не тормозило. на управляемых формах - тормозит. больше всего времени занимает насколько я понял вызов из процедуры которая &наКлиенте процедуры которая &наСервере. Причем сама процедура &насервере работает не так медленно как ее вызов.
Так же не понял куда засовывать процедуры показа остатков? ПриПолученнииДанных нет в управляемом приложении. |
|||
1
H A D G E H O G s
08.01.12
✎
12:36
|
&НаСервереБезКонтекста
А всех посмотреть можно? |
|||
2
Hans
08.01.12
✎
12:38
|
(1)>>А всех посмотреть можно?
не понял.... |
|||
3
H A D G E H O G s
08.01.12
✎
12:40
|
(2) Код покажи.
|
|||
4
Hans
08.01.12
✎
12:44
|
(3) чего именно? активизации строки и вызова серверной процедуры которая вычисляет остатки?
остатки в самой табличной части пока не реализовал, будет почти то же самое что и при активизации строки, только пока не знаю в какое событие засунуть. |
|||
5
Lamer1C
08.01.12
✎
12:45
|
(0) как в 10.3 такой функционал увидеть - куда жать?
|
|||
6
H A D G E H O G s
08.01.12
✎
12:46
|
(4) И не найдешь. Надо произвольным запросом в динамическом списке реализовыввать.
|
|||
7
H A D G E H O G s
08.01.12
✎
12:46
|
(4)
чего именно? активизации строки и вызова серверной процедуры которая вычисляет остатки? да, именно ее. |
|||
8
Hans
08.01.12
✎
12:48
|
(5) такого функционала нет в типовой 10.3 все дописано.
|
|||
9
Lamer1C
08.01.12
✎
12:49
|
(8) а я ж испугался. нахрен я дописывал тогда, думаю..
|
|||
10
Hans
08.01.12
✎
12:51
|
(9) в семерке помоему информационная надпись при выделении строки была типовая =)
|
|||
11
Hans
08.01.12
✎
12:54
|
(7)вот что я написал
форма &НаКлиенте Процедура ТоварыПриАктивизацииСтроки(Элемент) // Вставить содержимое обработчика. ТекущиеДанные = Элемент.ТекущиеДанные; Если НЕ ТекущиеДанные.Номенклатура.Пустая() Тогда СформироватьНадписьОстаткаТОваров(Объект.Организация, Объект.Склад, ТекущиеДанные.Номенклатура, ТекущиеДанные.Характеристика) Иначе ОстатокТОвара = ""; КонецЕсли; КонецПроцедуры &НаСервере Функция СформироватьНадписьОстаткаТОваров(Организация, Склад, Номенклатура, Характеристика) Склады = Новый Массив; Если Склад.Пустая() Тогда Склады = Дополнительно.ПолучитьМассивСкладов(); Иначе Склады.Добавить(Склад); КонецЕсли; СтруктураОстатков = Дополнительно.ПолучитьОстаткиТовара(Организация, Склады, Номенклатура, Характеристика, ТекущаяДата()); ИнфНадпись = "" + Номенклатура; Если СтруктураОстатков.Свободно <= 0 ТОгда ИнфНадпись = ИнфНадпись + "(нет в наличии)"; Иначе ИнфНадпись = ИнфНадпись + " (ост. орг. " + СтруктураОстатков.ВНаличииПоОрганизации + " " + Номенклатура.ЕдиницаИзмерения + " , "; ИнфНадпись = ИнфНадпись + "своб. ост " + СтруктураОстатков.Свободно + " " + Номенклатура.ЕдиницаИзмерения + ")"; КонецЕсли; ОстатокТОвара = ИнфНадпись; КонецФункции //_ общий модуль //====================Процедуры работы с товарными запасами==================== &НаСервере Функция ПолучитьТекстЗапросаОстаткиНоменклатуры() //запрос с графиком тормозит //ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ // | График.Номенклатура КАК Номенклатура, // | График.Характеристика КАК Характеристика, // | График.Склад КАК Склад, // | -МИНИМУМ(График.КоличествоКонечныйОстаток) КАК Количество // |ПОМЕСТИТЬ ВтРезервыПоГрафику // |ИЗ // | РегистрНакопления.ГрафикДвиженияТоваров.ОстаткиИОбороты( // | {(КОНЕЦПЕРИОДА(&ТекущаяДата, ДЕНЬ)) КАК Поле2}, // | , // | День, // | ДвиженияИГраницыПериода, // | Склад В (&Склады) // | И Номенклатура = &Номенклатура // | И Характеристика = &ХарактеристикаНоменклатуры {(Номенклатура).* КАК Номенклатура, (Склад).* КАК Склад, (Характеристика).* КАК Характеристика}) КАК График // | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкаКонтроляОстатков КАК НастройкаХарактеристика // | ПО График.Склад = НастройкаХарактеристика.Склад // | И График.Номенклатура = НастройкаХарактеристика.Номенклатура // | И График.Характеристика = НастройкаХарактеристика.Характеристика // | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкаКонтроляОстатков КАК НастройкаНоменклатура // | ПО График.Склад = НастройкаНоменклатура.Склад // | И График.Номенклатура = НастройкаНоменклатура.Номенклатура // | И (НастройкаНоменклатура.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) // | И (НастройкаХарактеристика.Склад ЕСТЬ NULL ) // | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкаКонтроляОстатков КАК НастройкаСклад // | ПО График.Склад = НастройкаСклад.Склад // | И (НастройкаСклад.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) // | И (НастройкаСклад.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) // | И (НастройкаХарактеристика.Склад ЕСТЬ NULL ) // | И (НастройкаНоменклатура.Склад ЕСТЬ NULL ) // |ГДЕ // | ВЫБОР // | КОГДА ЕСТЬNULL(НастройкаХарактеристика.ВариантКонтроля, ЕСТЬNULL(НастройкаНоменклатура.ВариантКонтроля, НастройкаСклад.ВариантКонтроля)) = ЗНАЧЕНИЕ(Перечисление.ВариантыКонтроля.ОстаткиСУчетомГрафика) // | ТОГДА ВЫБОР // | КОГДА НЕ НастройкаХарактеристика.ВариантКонтроля ЕСТЬ NULL // | ТОГДА ВЫБОР // | КОГДА НастройкаХарактеристика.ГраницаГрафикаДоступности >= &ТекущаяДата // | ТОГДА График.Период <= НастройкаХарактеристика.ГраницаГрафикаДоступности // | КОГДА НастройкаХарактеристика.СрокПоставки > 0 // | ТОГДА График.Период <= ДОБАВИТЬКДАТЕ(&ТекущаяДата, ДЕНЬ, НастройкаХарактеристика.СрокПоставки) // | ИНАЧЕ ЛОЖЬ // | КОНЕЦ // | КОГДА НЕ НастройкаНоменклатура.ВариантКонтроля ЕСТЬ NULL // | ТОГДА ВЫБОР // | КОГДА НастройкаНоменклатура.ГраницаГрафикаДоступности >= &ТекущаяДата // | ТОГДА График.Период <= НастройкаНоменклатура.ГраницаГрафикаДоступности // | КОГДА НастройкаНоменклатура.СрокПоставки > 0 // | ТОГДА График.Период <= ДОБАВИТЬКДАТЕ(&ТекущаяДата, ДЕНЬ, НастройкаНоменклатура.СрокПоставки) // | ИНАЧЕ ЛОЖЬ // | КОНЕЦ // | ИНАЧЕ ВЫБОР // | КОГДА НастройкаСклад.ГраницаГрафикаДоступности >= &ТекущаяДата // | ТОГДА График.Период <= НастройкаСклад.ГраницаГрафикаДоступности // | КОГДА НастройкаСклад.СрокПоставки > 0 // | ТОГДА График.Период <= ДОБАВИТЬКДАТЕ(&ТекущаяДата, ДЕНЬ, НастройкаСклад.СрокПоставки) // | ИНАЧЕ ЛОЖЬ // | КОНЕЦ // | КОНЕЦ // | ИНАЧЕ ЛОЖЬ // | КОНЕЦ // | И График.КоличествоКонечныйОстаток < 0 // | // |СГРУППИРОВАТЬ ПО // | График.Номенклатура, // | График.Характеристика, // | График.Склад // | // |ИНДЕКСИРОВАТЬ ПО // | Номенклатура, // | Характеристика, // | Склад // |; // | // |//////////////////////////////////////////////////////////////////////////////// // |ВЫБРАТЬ РАЗРЕШЕННЫЕ // | ВложенныйЗапрос.Номенклатура, // | ВложенныйЗапрос.Характеристика, // | ВложенныйЗапрос.Склад, // | СУММА(ВложенныйЗапрос.ВНаличии) КАК ВНаличии, // | СУММА(ВложенныйЗапрос.Резерв) КАК Резерв, // | СУММА(ВложенныйЗапрос.Свободно) КАК Свободно, // | СУММА(ВложенныйЗапрос.ВНаличииПоОрганизации) КАК ВНаличииПоОрганизации // |ИЗ // | (ВЫБРАТЬ // | СвободныеОстатки.Номенклатура КАК Номенклатура, // | СвободныеОстатки.Характеристика КАК Характеристика, // | СвободныеОстатки.Склад КАК Склад, // | СвободныеОстатки.ВНаличииОстаток КАК ВНаличии, // | ВЫБОР // | КОГДА ЕСТЬNULL(НастройкаХарактеристика.ВариантКонтроля, ЕСТЬNULL(НастройкаНоменклатура.ВариантКонтроля, НастройкаСклад.ВариантКонтроля)) = ЗНАЧЕНИЕ(Перечисление.ВариантыКонтроля.ОстаткиСУчетомРезерва) // | ТОГДА СвободныеОстатки.ВРезервеОстаток // | КОГДА ЕСТЬNULL(НастройкаХарактеристика.ВариантКонтроля, ЕСТЬNULL(НастройкаНоменклатура.ВариантКонтроля, НастройкаСклад.ВариантКонтроля)) = ЗНАЧЕНИЕ(Перечисление.ВариантыКонтроля.ОстаткиСУчетомГрафика) // | ТОГДА ЕСТЬNULL(РезервыПоГрафику.Количество, 0) // | ИНАЧЕ 0 // | КОНЕЦ КАК Резерв, // | СвободныеОстатки.ВНаличииОстаток - ВЫБОР // | КОГДА ЕСТЬNULL(НастройкаХарактеристика.ВариантКонтроля, ЕСТЬNULL(НастройкаНоменклатура.ВариантКонтроля, НастройкаСклад.ВариантКонтроля)) = ЗНАЧЕНИЕ(Перечисление.ВариантыКонтроля.ОстаткиСУчетомРезерва) // | ТОГДА СвободныеОстатки.ВРезервеОстаток // | КОГДА ЕСТЬNULL(НастройкаХарактеристика.ВариантКонтроля, ЕСТЬNULL(НастройкаНоменклатура.ВариантКонтроля, НастройкаСклад.ВариантКонтроля)) = ЗНАЧЕНИЕ(Перечисление.ВариантыКонтроля.ОстаткиСУчетомГрафика) // | ТОГДА ЕСТЬNULL(РезервыПоГрафику.Количество, 0) // | ИНАЧЕ 0 // | КОНЕЦ КАК Свободно, // | 0 КАК ВНаличииПоОрганизации // | ИЗ // | РегистрНакопления.СвободныеОстатки.Остатки( // | &ТекущаяДата, // | Номенклатура = &Номенклатура // | И Характеристика = &ХарактеристикаНоменклатуры // | И Склад В (&Склады) {(Номенклатура).* КАК Номенклатура, (Характеристика).* КАК Характеристика, (Склад).* КАК Склад}) КАК СвободныеОстатки // | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкаКонтроляОстатков КАК НастройкаХарактеристика // | ПО СвободныеОстатки.Склад = НастройкаХарактеристика.Склад // | И СвободныеОстатки.Номенклатура = НастройкаХарактеристика.Номенклатура // | И СвободныеОстатки.Характеристика = НастройкаХарактеристика.Характеристика // | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкаКонтроляОстатков КАК НастройкаНоменклатура // | ПО СвободныеОстатки.Склад = НастройкаНоменклатура.Склад // | И СвободныеОстатки.Номенклатура = НастройкаНоменклатура.Номенклатура // | И (НастройкаНоменклатура.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) // | И (НастройкаХарактеристика.Склад ЕСТЬ NULL ) // | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкаКонтроляОстатков КАК НастройкаСклад // | ПО СвободныеОстатки.Склад = НастройкаСклад.Склад // | И (НастройкаСклад.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) // | И (НастройкаСклад.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) // | И (НастройкаХарактеристика.Склад ЕСТЬ NULL ) // | И (НастройкаНоменклатура.Склад ЕСТЬ NULL ) // | ЛЕВОЕ СОЕДИНЕНИЕ ВтРезервыПоГрафику КАК РезервыПоГрафику // | ПО СвободныеОстатки.Номенклатура = РезервыПоГрафику.Номенклатура // | И СвободныеОстатки.Характеристика = РезервыПоГрафику.Характеристика // | И СвободныеОстатки.Склад = РезервыПоГрафику.Склад // | И (ЕСТЬNULL(НастройкаХарактеристика.ВариантКонтроля, ЕСТЬNULL(НастройкаНоменклатура.ВариантКонтроля, НастройкаСклад.ВариантКонтроля)) = ЗНАЧЕНИЕ(Перечисление.ВариантыКонтроля.ОстаткиСУчетомГрафика)) // | ГДЕ // | (СвободныеОстатки.ВНаличииОстаток <> 0 // | ИЛИ ВЫБОР // | КОГДА ЕСТЬNULL(НастройкаХарактеристика.ВариантКонтроля, ЕСТЬNULL(НастройкаНоменклатура.ВариантКонтроля, НастройкаСклад.ВариантКонтроля)) = ЗНАЧЕНИЕ(Перечисление.ВариантыКонтроля.ОстаткиСУчетомРезерва) // | ТОГДА СвободныеОстатки.ВРезервеОстаток // | КОГДА ЕСТЬNULL(НастройкаХарактеристика.ВариантКонтроля, ЕСТЬNULL(НастройкаНоменклатура.ВариантКонтроля, НастройкаСклад.ВариантКонтроля)) = ЗНАЧЕНИЕ(Перечисление.ВариантыКонтроля.ОстаткиСУчетомГрафика) // | ТОГДА ЕСТЬNULL(РезервыПоГрафику.Количество, 0) // | ИНАЧЕ 0 // | КОНЕЦ <> 0) // | // | ОБЪЕДИНИТЬ ВСЕ // | // | ВЫБРАТЬ // | ТоварыОрганизацийОстатки.Номенклатура, // | ТоварыОрганизацийОстатки.Характеристика, // | ТоварыОрганизацийОстатки.Склад, // | 0, // | 0, // | 0, // | ТоварыОрганизацийОстатки.КоличествоОстаток // | ИЗ // | РегистрНакопления.ТоварыОрганизаций.Остатки( // | &ТекущаяДата, // | Номенклатура = &Номенклатура // | И Характеристика = &ХарактеристикаНоменклатуры // | И Склад В (&Склады) // | И Организация = &Организация) КАК ТоварыОрганизацийОстатки) КАК ВложенныйЗапрос // | // |СГРУППИРОВАТЬ ПО // | ВложенныйЗапрос.Склад, // | ВложенныйЗапрос.Номенклатура, // | ВложенныйЗапрос.Характеристика"; ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВложенныйЗапрос.Номенклатура, | ВложенныйЗапрос.Характеристика, | ВложенныйЗапрос.Склад, | СУММА(ВложенныйЗапрос.ВНаличии) КАК ВНаличии, | СУММА(ВложенныйЗапрос.Резерв) КАК Резерв, | СУММА(ВложенныйЗапрос.Свободно) КАК Свободно, | СУММА(ВложенныйЗапрос.ВНаличииПоОрганизации) КАК ВНаличииПоОрганизации |ИЗ | (ВЫБРАТЬ | СвободныеОстатки.Номенклатура КАК Номенклатура, | СвободныеОстатки.Характеристика КАК Характеристика, | СвободныеОстатки.Склад КАК Склад, | СвободныеОстатки.ВНаличииОстаток КАК ВНаличии, | NULL КАК Резерв, | СвободныеОстатки.ВНаличииОстаток - СвободныеОстатки.ВРезервеОстаток КАК Свободно, | СвободныеОстатки.ВРезервеОстаток КАК ВНаличииПоОрганизации | ИЗ | РегистрНакопления.СвободныеОстатки.Остатки( | &ТекущаяДата, | Номенклатура = &Номенклатура | И Характеристика = &ХарактеристикаНоменклатуры | И Склад В (&Склады) {(Номенклатура).* КАК Номенклатура, (Характеристика).* КАК Характеристика, (Склад).* КАК Склад}) КАК СвободныеОстатки | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | ТоварыОрганизацийОстатки.Номенклатура, | ТоварыОрганизацийОстатки.Характеристика, | ТоварыОрганизацийОстатки.Склад, | 0, | 0, | 0, | ТоварыОрганизацийОстатки.КоличествоОстаток | ИЗ | РегистрНакопления.ТоварыОрганизаций.Остатки( | &ТекущаяДата, | Номенклатура = &Номенклатура | И Характеристика = &ХарактеристикаНоменклатуры | И Склад В (&Склады) | И Организация = &Организация) КАК ТоварыОрганизацийОстатки) КАК ВложенныйЗапрос | |СГРУППИРОВАТЬ ПО | ВложенныйЗапрос.Склад, | ВложенныйЗапрос.Номенклатура, | ВложенныйЗапрос.Характеристика"; Возврат ТекстЗапроса; КонецФункции &НаСервере Функция ПолучитьОстаткиТовара(Организация, Склады, Номенклатура, ХарактеристикаНОменклатуры, Период) Экспорт Запрос = Новый Запрос; Запрос.Текст = ПолучитьТекстЗапросаОстаткиНоменклатуры(); Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("Склады", Склады); Запрос.УстановитьПараметр("Номенклатура", Номенклатура); Запрос.Установитьпараметр("ХарактеристикаНоменклатуры", ХарактеристикаНОменклатуры); Запрос.УстановитьПараметр("текущаяДата", Период); Остатки = Новый Структура; Остатки.Вставить("Организация", Организация); Остатки.Вставить("Склады", Склады); Остатки.Вставить("Номенклатура", Номенклатура); Остатки.Вставить("ХарактеристикаНоменклатуры", ХарактеристикаНоменклатуры); Остатки.Вставить("ВНаличии",0); Остатки.Вставить("Резерв", 0); Остатки.Вставить("Свободно", 0); Остатки.Вставить("ВНаличииПоОрганизации", 0); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Остатки.ВНаличии = Выборка.ВНаличии; Остатки.Резерв = Выборка.Резерв; Остатки.Свободно = Выборка.Свободно; Остатки.ВНаличииПоОрганизации = Выборка.ВНаличииПоОрганизации; КонецЕсли; Возврат Остатки; КонецФункции &наСервере Функция ПолучитьМассивСкладов() Экспорт Склады = Новый Массив; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Склады.Ссылка КАК Склад |ИЗ | Справочник.Склады КАК Склады |ГДЕ | Склады.ЭтоГруппа = ЛОЖЬ"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Склады.Добавить(Выборка.Склад); КонецЦикла; Возврат Склады; КонецФункции //----------------------------------------------------------------------------- |
|||
12
Reaper_1c
08.01.12
✎
13:02
|
Что за кошмар? Зачем контекстный вызов сервера? Зачем в тексте запроса одновременно и прямые условия и конструкции построителя? Нафига сложение резерва с остатком по организации, которое завышает остатки?
|
|||
13
Hans
08.01.12
✎
13:07
|
(12)пока с контекстным и неконтекстным вызовом сервера не знаком. условия построителя остались из отчета, изначально запрос выдирал из отчета "анализ доступности товаров на складе". Остатки по складу не складываются с остатками по организации, идут отдельно.
|
|||
14
Азат
08.01.12
✎
13:19
|
(11) нафига ты сюда полмегабайта коментов запостил
|
|||
15
Hans
08.01.12
✎
13:24
|
(14) сначала думал это запрос тормозит, я его упростил. Оказалось не он. Этот закомментированный запрос может кому нибудь пригодится.
|
|||
16
Reaper_1c
08.01.12
✎
13:25
|
Да ну? А поле "ВНаличииПоОрганизации"?
|
|||
17
Hans
08.01.12
✎
13:28
|
(16) в структуре отдельно остаток по организации, отдельно остаток по складу, отдельно свободный остаток по складу.
|
|||
18
Reaper_1c
08.01.12
✎
13:33
|
(17) А в запросе? Сам то посмотри как оно считается.
|
|||
19
Hans
08.01.12
✎
13:40
|
(18) да что то напутал... спасибо.
|
|||
20
Hans
08.01.12
✎
14:57
|
(1) ура работает, спасибо!
|
|||
21
H A D G E H O G s
08.01.12
✎
15:21
|
(20) А че за канал - конфигурация - ПО, что такие мелочи тормозят то?
|
|||
22
Hans
08.01.12
✎
16:40
|
(21) незнаю почему тормозит, база дэмо, комп вроде нормальный. Сейчас уже после &НаСервереБезКонтекста не тормозит, все норм.
|
|||
23
Hans
08.01.12
✎
18:58
|
(6) помоему динамический список для остатков в табличной части документов не подойдет. Насколько я прочитал надо все прописывать в нескольких обработчиках.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |