Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Войти | Зарегистрироваться )



История благодарностей участнику topitop ::: Спасибо сказали: 5 раз
Дата поста: В теме: За сообщение: Спасибо сказали:
08.09.17, 13:22 Замедление производительности клиент-сервеного варианта
Проблема того же разряда, тоже в УТП Украина (1.2.42.2) .
Столкнулся с проблемой медленного проведения документа списания товаров, в бух учете почему то ведется партионный учет, зачем и почему уже другая история .... (сам не знаю, но ОЧЕНЬ НАДО БУХАМ!!! )))))) )

Суть проблемы в том что на серверном варианте УправлениеЗапасамиПартионныйУчет.ТорговаяНаценкаАТТ(ДокументСсылка, Склады, Номенклатура, НалоговоеНазначение)
отрабатывает критично долго.

В стандарте используется запрос:
Код
Запрос.Текст = 
    "ВЫБРАТЬ
    |    ХозрасчетныйОстаткиИОборотыТН.НалоговоеНазначение КАК НалоговоеНазначение,
    |    ХозрасчетныйОстаткиИОборотыТН.Субконто1 КАК Номенклатура,
    |    ХозрасчетныйОстаткиИОборотыТН.Субконто2 КАК Склад,
    |"+?(РазделятьПоПартиям, "
    |    ХозрасчетныйОстаткиИОборотыТН.Субконто3 КАК Партия,", "
    |    &ПустаяПартия КАК Партия,")+ "
    |"+?(ВестиУчетПоДопРазрезамРегл, "
    |    ХозрасчетныйОстаткиИОборотыТН.Субконто"+НомерСубконтоНоменклатурнойПозиции+" КАК НоменклатурнаяПозиция,", "
    |    &ПустаяНоменклатурнаяПозиция КАК НоменклатурнаяПозиция,") + "
    |    СУММА(
    |    ВЫБОР КОГДА ХозрасчетныйОстаткиИОборотыТН.СуммаНачальныйОстатокКт ЕСТЬ NULL ТОГДА 0 ИНАЧЕ ХозрасчетныйОстаткиИОборотыТН.СуммаНачальныйОстатокКт КОНЕЦ +
    |    ВЫБОР КОГДА ХозрасчетныйОстаткиИОборотыТН.СуммаОборотКт ЕСТЬ NULL ТОГДА 0 ИНАЧЕ ХозрасчетныйОстаткиИОборотыТН.СуммаОборотКт КОНЕЦ
    |    ) КАК ТН,
    |    СУММА(
    |    ВЫБОР КОГДА ХозрасчетныйОстаткиИОборотыПС.СуммаНачальныйОстатокДт ЕСТЬ NULL ТОГДА 0 ИНАЧЕ ХозрасчетныйОстаткиИОборотыПС.СуммаНачальныйОстатокДт КОНЕЦ +
    |    ВЫБОР КОГДА ХозрасчетныйОстаткиИОборотыПС.СуммаОборотДт ЕСТЬ NULL ТОГДА 0 ИНАЧЕ ХозрасчетныйОстаткиИОборотыПС.СуммаОборотДт КОНЕЦ
    |) КАК ПС,
    |    СУММА(
    |    ВЫБОР КОГДА ХозрасчетныйОстаткиИОборотыТН.СуммаНУНачальныйОстатокКт ЕСТЬ NULL ТОГДА 0 ИНАЧЕ ХозрасчетныйОстаткиИОборотыТН.СуммаНУНачальныйОстатокКт КОНЕЦ +
    |    ВЫБОР КОГДА ХозрасчетныйОстаткиИОборотыТН.СуммаНУОборотКт ЕСТЬ NULL ТОГДА 0 ИНАЧЕ ХозрасчетныйОстаткиИОборотыТН.СуммаНУОборотКт КОНЕЦ
    |    ) КАК ТН_НУ,
    |    СУММА(
    |    ВЫБОР КОГДА ХозрасчетныйОстаткиИОборотыПС.СуммаНУНачальныйОстатокДт ЕСТЬ NULL ТОГДА 0 ИНАЧЕ ХозрасчетныйОстаткиИОборотыПС.СуммаНУНачальныйОстатокДт КОНЕЦ +
    |    ВЫБОР КОГДА ХозрасчетныйОстаткиИОборотыПС.СуммаНУОборотДт ЕСТЬ NULL ТОГДА 0 ИНАЧЕ ХозрасчетныйОстаткиИОборотыПС.СуммаНУОборотДт КОНЕЦ
    |    ) КАК ПС_НУ
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНач,&ДатаКон, , ,Счет = &СчетТН, &ВидыСубконто, НалоговоеНазначение В (&НалоговоеНазначение) И Организация = &Организация И Субконто1 В (&Номенклатура) И Субконто2 В (&Склады)) КАК ХозрасчетныйОстаткиИОборотыТН
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНач,&ДатаКон, , ,Счет = &СчетПС, &ВидыСубконто, НалоговоеНазначение В (&НалоговоеНазначение) И Организация = &Организация И Субконто1 В (&Номенклатура) И Субконто2 В (&Склады)) КАК ХозрасчетныйОстаткиИОборотыПС
    |        ПО ХозрасчетныйОстаткиИОборотыТН.НалоговоеНазначение = ХозрасчетныйОстаткиИОборотыПС.НалоговоеНазначение
    |            И ХозрасчетныйОстаткиИОборотыТН.Субконто1 = ХозрасчетныйОстаткиИОборотыПС.Субконто1
    |            И ХозрасчетныйОстаткиИОборотыТН.Субконто2 = ХозрасчетныйОстаткиИОборотыПС.Субконто2"+?(РазделятьПоПартиям,"
    |            И ХозрасчетныйОстаткиИОборотыТН.Субконто3 = ХозрасчетныйОстаткиИОборотыПС.Субконто3","")+?(ВестиУчетПоДопРазрезамРегл,"
    |            И ХозрасчетныйОстаткиИОборотыТН.Субконто"+НомерСубконтоНоменклатурнойПозиции+" = ХозрасчетныйОстаткиИОборотыПС.Субконто"+НомерСубконтоНоменклатурнойПозиции,"")+"
    |
    |СГРУППИРОВАТЬ ПО
    |    ХозрасчетныйОстаткиИОборотыТН.НалоговоеНазначение,
    |    ХозрасчетныйОстаткиИОборотыТН.Субконто1,
    |    ХозрасчетныйОстаткиИОборотыТН.Субконто2"+?(РазделятьПоПартиям, ",
    |    ХозрасчетныйОстаткиИОборотыТН.Субконто3", "")+?(ВестиУчетПоДопРазрезамРегл, ",
    |    ХозрасчетныйОстаткиИОборотыТН.Субконто"+НомерСубконтоНоменклатурнойПозиции, "")+"
    |";


Мною оптимизирован данные запрос в вид:

Код
Запрос.Текст =  "ВЫБРАТЬ
     |    ХозрасчетныйОстаткиИОборотыТН.НалоговоеНазначение КАК НалоговоеНазначение,
     |    ХозрасчетныйОстаткиИОборотыТН.Субконто1 КАК Номенклатура,
     |    ХозрасчетныйОстаткиИОборотыТН.Субконто2 КАК Склад,
     |    ХозрасчетныйОстаткиИОборотыТН.Субконто3 КАК Партия,
     |    &ПустаяНоменклатурнаяПозиция КАК НоменклатурнаяПозиция,
     |    СУММА(ВЫБОР
     |            КОГДА ХозрасчетныйОстаткиИОборотыТН.Счет = &СчетТН
     |                ТОГДА ВЫБОР
     |                        КОГДА ХозрасчетныйОстаткиИОборотыТН.СуммаНачальныйОстатокКт ЕСТЬ NULL
     |                            ТОГДА 0
     |                        ИНАЧЕ ХозрасчетныйОстаткиИОборотыТН.СуммаНачальныйОстатокКт
     |                    КОНЕЦ + ВЫБОР
     |                        КОГДА ХозрасчетныйОстаткиИОборотыТН.СуммаОборотКт ЕСТЬ NULL
     |                            ТОГДА 0
     |                        ИНАЧЕ ХозрасчетныйОстаткиИОборотыТН.СуммаОборотКт
     |                    КОНЕЦ
     |            ИНАЧЕ 0
     |        КОНЕЦ) КАК ТН,
     |    СУММА(ВЫБОР
     |            КОГДА ХозрасчетныйОстаткиИОборотыТН.Счет = &СчетТН
     |                ТОГДА ВЫБОР
     |                        КОГДА ХозрасчетныйОстаткиИОборотыТН.СуммаНУНачальныйОстатокКт ЕСТЬ NULL
     |                            ТОГДА 0
     |                        ИНАЧЕ ХозрасчетныйОстаткиИОборотыТН.СуммаНУНачальныйОстатокКт
     |                    КОНЕЦ + ВЫБОР
     |                        КОГДА ХозрасчетныйОстаткиИОборотыТН.СуммаНУОборотКт ЕСТЬ NULL
     |                            ТОГДА 0
     |                        ИНАЧЕ ХозрасчетныйОстаткиИОборотыТН.СуммаНУОборотКт
     |                    КОНЕЦ
     |            ИНАЧЕ 0
     |        КОНЕЦ) КАК ТН_НУ,
     |    СУММА(ВЫБОР
     |            КОГДА ХозрасчетныйОстаткиИОборотыТН.Счет = &СчетПС
     |                ТОГДА ВЫБОР
     |                        КОГДА ХозрасчетныйОстаткиИОборотыТН.СуммаНачальныйОстатокДт ЕСТЬ NULL
     |                            ТОГДА 0
     |                        ИНАЧЕ ХозрасчетныйОстаткиИОборотыТН.СуммаНачальныйОстатокДт
     |                    КОНЕЦ + ВЫБОР
     |                        КОГДА ХозрасчетныйОстаткиИОборотыТН.СуммаОборотДт ЕСТЬ NULL
     |                            ТОГДА 0
     |                        ИНАЧЕ ХозрасчетныйОстаткиИОборотыТН.СуммаОборотДт
     |                    КОНЕЦ
     |            ИНАЧЕ 0
     |        КОНЕЦ) КАК ПС,
     |    СУММА(ВЫБОР
     |            КОГДА ХозрасчетныйОстаткиИОборотыТН.Счет = &СчетПС
     |                ТОГДА ВЫБОР
     |                        КОГДА ХозрасчетныйОстаткиИОборотыТН.СуммаНУНачальныйОстатокДт ЕСТЬ NULL
     |                            ТОГДА 0
     |                        ИНАЧЕ ХозрасчетныйОстаткиИОборотыТН.СуммаНУНачальныйОстатокДт
     |                    КОНЕЦ + ВЫБОР
     |                        КОГДА ХозрасчетныйОстаткиИОборотыТН.СуммаНУОборотДт ЕСТЬ NULL
     |                            ТОГДА 0
     |                        ИНАЧЕ ХозрасчетныйОстаткиИОборотыТН.СуммаНУОборотДт
     |                    КОНЕЦ
     |            ИНАЧЕ 0
     |        КОНЕЦ) КАК ПС_НУ
     |ИЗ
     |    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
     |            &ДатаНач,
     |            &ДатаКон,
     |            ,
     |            ,
     |            Счет = &СчетТН
     |                ИЛИ Счет = &СчетПС,
     |            &ВидыСубконто,
     |            НалоговоеНазначение В (&НалоговоеНазначение)
     |                И Организация = &Организация
     |                И Субконто1 В (&Номенклатура)
     |                И Субконто2 В (&Склады)) КАК ХозрасчетныйОстаткиИОборотыТН
     |
     |СГРУППИРОВАТЬ ПО
     |    ХозрасчетныйОстаткиИОборотыТН.НалоговоеНазначение,
     |    ХозрасчетныйОстаткиИОборотыТН.Субконто1,
     |    ХозрасчетныйОстаткиИОборотыТН.Субконто2,
     |    ХозрасчетныйОстаткиИОборотыТН.Субконто3";


Запрос не приводил в аналогичный вид стандарту потому как лень, в моем конкретном случае данного решения вполне хватает...
Скорость отработки запроса уменьшилась на 30-40 %, при замерах производительности с учетом правок запроса управленческого изложенного выше
удалось добиться ускорения проведения документа в 4 раза, данное значение получено в сравнении производительности до и после, почему именно в 4 раза вышло сложно сказать,
замеры проводились на рабочей базе и в зависимости от текущих нагрузок могут отличаться ...

Так же было замечено что если в параметры запроса массивы передать без дублей это также влияет в положительную cторону, в обработке проведения документа СписаниеТоваров
в процедуре ДвиженияПоРегистрамРегл() было переделано так:

Код
Если НЕ Склад.ВидСклада = Перечисления.ВидыСкладов.Оптовый Тогда
        
        Если АТТ Тогда
            
            //Спишем торговую наценку
            
            //Свернем дубли для более быстрого выполнения запроса
            ТаблицаПоТоварамКопия = ТаблицаПоТоварам.Скопировать();
            ТаблицаПоТоварамКопия.Свернуть("Номенклатура,НалоговоеНазначение");
            МассивНоменклатуры =  ТаблицаПоТоварамКопия.ВыгрузитьКолонку("Номенклатура");
            ТаблицаПоТоварамКопия.Свернуть("НалоговоеНазначение");
            МассивНалоговыхНазначений =  ТаблицаПоТоварамКопия.ВыгрузитьКолонку("НалоговоеНазначение");
            
            
            ТаблицаНаценок = УправлениеЗапасамиПартионныйУчет.ТорговаяНаценкаАТТ(Ссылка, Склад, МассивНоменклатуры, МассивНалоговыхНазначений);
alider, Vofka,
06.02.15, 16:16 Странно отрабатывает условие периода даты документа в запросе
Попробуйте так
"ВЫБРАТЬ
    |    ЧекККМ.Продавец КАК Продавец,
    |    СУММА(ЧекККМ.СуммаДокумента) КАК СуммаДокумента,
    |    ЧекККМ.Ссылка
    |ИЗ
    |    Документ.ЧекККМ КАК ЧекККМ
    |ГДЕ
    |    ЧекККМ.Дата >= НачалоПериода(&НачДата,День)
    |    И ЧекККМ.Дата <= КонецПериода(&КонДата,День)
    |
    |СГРУППИРОВАТЬ ПО
    |    ЧекККМ.Продавец,
    |    ЧекККМ.Ссылка
    |
    |УПОРЯДОЧИТЬ ПО
    |    Продавец
    |ИТОГИ ПО
    |    ОБЩИЕ";
kalyamov,
05.02.14, 15:00 Вывод нумерации колонок и строк в СКД
Недавно столкнулся с такой задачей:
Заказчик потребовал создать отчет но что бы в нем были пронумерованы все колонки и строки этого отчета.
Как я понял им нужно это для того что бы отчет можно было сложить в печатном виде по этим номерам (отчет выходит довольно большая простыня).
Поскольку в СКД стандартных методов было не обнаружено мной задача была решена таким образом.
ТабДок = ЭлементыФормы.Результат;

КоличествоСтрокШапки = ТабДок.ФиксацияСверху+1;
КоличествоКолонок = ТабДок.ШиринаТаблицы;
ИсходнаяОбласть = ТабДок.Область(КоличествоСтрокШапки,,КоличествоСтрокШапки);
ОбластьПриемник = ТабДок.Область(КоличествоСтрокШапки+1,,КоличествоСтрокШапки+1);

ТабДок.ВставитьОбласть(ИсходнаяОбласть,ОбластьПриемник,ТипСмещенияТабличногоДокумента.ПоГоризонтали);

Для Ном = 1 По КоличествоКолонок Цикл
ТекОбласть = ТабДок.Область(КоличествоСтрокШапки,Ном);
ТекОбласть.Разъединить();
ТекОбласть.Текст = ""+Ном;
ТекОбласть.ЦветФона = ЦветаСтиля.ЦветФонаШапкиОтчета;
Шрифт = Новый Шрифт("Arial",10,Ложь,Ложь,Ложь,Ложь);
ТекОбласть.Шрифт = Шрифт;
ТекОбласть.ЦветТекста = Новый Цвет;
ТекОбласть.ЦветРамки = ЦветаСтиля.ЦветЛинииОтчета;
Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная,1);
ТекОбласть.Обвести(Линия, Линия, Линия, Линия);
ТекОбласть.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
ТекОбласть.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
КонецЦикла;

ТабДок.ФиксацияСверху = ТабДок.ФиксацияСверху+1;



РазмерШапки = ТабДок.ФиксацияСверху;
ОблатьИсточник = ТабДок.Область("C1");
ОблатьПриемник = ТабДок.Область("C2");
ТабДок.ВставитьОбласть(ОблатьИсточник,ОблатьПриемник,ТипСмещенияТабличногоДокумента.ПоГоризонтали);
ТабДок.ФиксацияСлева = ТабДок.ФиксацияСлева +1;

            НомерСтроки = 0;
            Пока Истина Цикл
            НомерСтроки = НомерСтроки + 1;
            ИмяСтроки     = ТабДок.Область("R"+НомерСтроки+"C1").Текст;
            ОблатьНомераСтроки = ТабДок.Область("R"+НомерСтроки+"C1");                
            ОблатьНомераСтроки.Текст = "";
            ОблатьНомераСтроки.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
            ОблатьНомераСтроки.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
            ОблатьНомераСтроки.ШиринаКолонки = 5;
            
            Если НомерСтроки> РазмерШапки Тогда
                
                Если ПустаяСтрока(ИмяСтроки) Тогда
                    Прервать;
                КонецЕсли;

                    Номер = НомерСтроки - РазмерШапки;
                    ОблатьНомераСтроки.Текст =""+ Строка(Номер);
                    ОблатьНомераСтроки.ЦветФона = ЦветаСтиля.ЦветФонаШапкиОтчета;
                    Шрифт = Новый Шрифт("Arial",10,Ложь,Ложь,Ложь,Ложь);
                    ОблатьНомераСтроки.Шрифт = Шрифт;
                    ОблатьНомераСтроки.ЦветТекста = Новый Цвет;
                    ОблатьНомераСтроки.ЦветРамки = ЦветаСтиля.ЦветЛинииОтчета;
                    Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная,1);
                    ОблатьНомераСтроки.Обвести(Линия, Линия, Линия, Линия);
                КонецЕсли;

        КонецЦикла;
        
        
        
ОблатьИсточник = ТабДок.Область("C1");    
КолКолонок = ТабДок.ШиринаТаблицы +1;
ОблатьПриемник = ТабДок.Область("C"+КолКолонок);         
ТабДок.ВставитьОбласть(ОблатьИсточник,ОблатьПриемник,ТипСмещенияТабличногоДокумента.ПоГоризонтали);    

НомерСтроки= НомерСтроки;
ТабДок.ВставитьОбласть(ИсходнаяОбласть,ТабДок.Область("R"+НомерСтроки), ТипСмещенияТабличногоДокумента.ПоГоризонтали);


Вот что вышло smile.gif
Vofka, Егор Динин,

RSS Текстовая версия Сейчас: 29.03.24, 1:27
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!