Вход | Регистрация

1С:Предприятие ::

Метки:

1c 7,7 & sql

Я
   va_van
 
13.02.04 - 21:03
Всем hi. Есть такая проблема - стоит sql сервер 2000, 1с 7,7, машина на двух ксеонах, райд 10, 4 гиг памяти.
1с при выполнении отчетов жутко тормозит и на 100% грузит клиентскую машину, сервер при этом загружается на максимум 3 процента. Подскажите где можно почитать про оптимизацию кода под sql, а то такое ощущения что кроме как хранением таблиц сервак больше ничем не занят, а вся обработка делается 1с. И програмер наш не прошибаемый, говорит так и надо. Заранее спасибо.
 
 
   Львенок
 
1 - 13.02.04 - 21:31
(0) Это не ощущение. Это факт. Общих решений вроде бы нет. Кое что вроде есть в компоненте ТЗапрос. Поищи.
___
Искренне Ваш, Львенок.
   va_van
 
2 - 16.02.04 - 11:04
Спасибо за информацию. Установил я ТЗапрос, и возникла другая проблема. SQL начал вешаться. Сам я в 1с не силен, подскажите пожалуйста, что тут не так в этом запросе.
Процедура ПоТоварам()
    Если ПоТоварам=1 ТОгда
        ПоПоставщикам=0;
    Иначе
        ПоПоставщикам=1;
        КонецЕсли;
КонецПроцедуры     
    Процедура ПоПоставщикам()
    Если ПоПоставщикам=1 ТОгда
        ПоТоварам=0;
    Иначе
        ПоТоварам=1;
        КонецЕсли;
КонецПроцедуры    
//*******************************************

// Процедура генерации запроса Сформировать.
//

Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
   //Создание объекта типа Запрос

    Запрос = СоздатьОбъект("ТЗапрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)

    |Период с ДатаНачала по ДатаНачала;
       |Товар = Справочник.ЦеныПоПоставщикам.Владелец;
    |Поставщик = Справочник.ЦеныПоПоставщикам.Поставщик;
    |Валюта = Справочник.ЦеныПоПоставщикам.Валюта;
    |Цена = Справочник.ЦеныПоПоставщикам.Цена;
    |Единица = Справочник.ЦеныПоПоставщикам.Единица;
//    |Группировка Товар;

//    |Группировка Поставщик;
    |//}}ЗАПРОС

    ; 
    
    
    Если ПоПоставщикам=1 тогда
                ТекстЗапроса=ТекстЗапроса+"Группировка Поставщик;
    |Группировка Товар;"
    КонецЕсли;
    Если ПоТоварам=1 Тогда
        ТекстЗапроса=ТекстЗапроса+"Группировка Товар;
    |Группировка Поставщик;"
КонецЕсли;
     
Если ПустаяСтрока(ВыбТовар)=0 Тогда
    ТекстЗапроса=ТекстЗапроса+"Условие (Товар в ВыбТовар);";
КонецЕсли;  
Если ПустаяСтрока(ВыбПоставщик)=0 Тогда
     ТекстЗапроса=ТекстЗапроса+"Условие (Поставщик в ВыбПоставщик);";
    КонецЕсли;
   // Если ошибка в запросе, то выход из процедуры

    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда 
        
        Возврат;
    КонецЕсли;
    
    
   // Подготовка к заполнению выходных форм данными запроса

    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
   // Заполнение полей "Заголовок" 

        Таб.ВывестиСекцию("Шапка");
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); 

    Если ПоТоварам=1 Тогда
    Пока Запрос.Группировка("Товар") = 1 Цикл
    Если Запрос.Товар.ЭтоГруппа()<>1 Тогда
        
 Таб.ПолучитьАтрибут("ГрТовар");
    Пока Запрос.Группировка("Поставщик") = 1 Цикл
    Если Запрос.Поставщик.ЭтоГруппа()<>1 Тогда
    Таб.ПолучитьАтрибут("Товар"); 
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;    
Иначе
Пока Запрос.Группировка("Поставщик") = 1 Цикл
Если Запрос.Поставщик.ЭтоГруппа()<>1 Тогда
            
     Таб.ПолучитьАтрибут("ГрПоставщик");
Пока Запрос.Группировка("Товар") = 1 Цикл
Если Запрос.Товар.ЭтоГруппа()<>1 Тогда
Таб.ПолучитьАтрибут("Поставщик");
КонецЕсли;
КонецЦикла;
КонецЕсли;    
КонецЦикла;    
КонецЕсли;        
     
   // Вывод заполненной формы

    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
КонецПроцедуры


ПоТоварам=1;

ДатаНачала=РабочаяДата();

Спасибо.
   Черт
 
3 - 16.02.04 - 11:11
Может здесь найдешь
http://thebeautiful.narod.ru/
   va_van
 
4 - 16.02.04 - 13:29
Ничего похожего я там не нашел :(
   mike
 
5 - 16.02.04 - 15:05
попробую помочь :

1 не понятна конструкция :
Таб = СоздатьОбъект("Таблица")
и далее :
Таб.ПолучитьАтрибут("ГрПоставщик");
т.е в синтасис-помошнике такого нет
стандартно используют :

таб.ВывестиСекцию("Поставщик");

2 в запросе :

Группировка товар без групп ;

или

Группировка поставшик без групп ;

тогда цикл сильно упросится, можно исключить проверки на группу .
Кажется, что исключении лишних проверок цикл будет работать существенно быстрее  
3 Рекомендую использовать функцию которая мне очень сильно помогает :
//----------------------------

 Процедура ДобавитьУсловие(ТекстЗапр,ВыбПерем,ПеремЗапр,ТекстВыбПерем)
    знак="";
    Если ПустоеЗначение(ВыбПерем)=0 тогда 
        Если ТипЗначенияСтр(ВыбПерем)="Справочник" Тогда
            Если ВыбПерем.ЭтоГруппа()=1 Тогда
                знак =  " в ";
            Иначе 
                   знак =  " = ";
            КонецЕсли;
        ИначеЕсли ТипЗначенияСтр(ВыбПерем)="СписокЗначений" Тогда
            знак =  " в ";
        КонецЕсли;
    КонецЕсли;
    Если Знак <>"" Тогда
        ТекстЗапр= ТекстЗапр+ "Условие("+ПеремЗапр+ знак+ ТекстВыбПерем + ");";    
    КонецЕсли;
КонецПроцедуры       
//---------------------------
тогда  добавление условия будет выглядеть примерно так :

ДобавитьУсловие(ТекстЗапроса,СписТов,"Номенклатура","СписТов");
   va_van
 
6 - 17.02.04 - 06:00
Спасибо mike. Буду пробовать.
   AlexMan
7 - 17.02.04 - 11:02
(1) А чего за компанента "ТЗапрос" и где ее можно намыть???
   mike
 
8 - 17.02.04 - 18:22
а бог его знает , первый раз слышу про ТЗапрос
   romix
 
9 - 17.02.04 - 20:23
(2) Знаете что В КОРНЕ НЕПРАВИЛЬНО?
В такой ситуации 1С велит юзать регистры.
На справочниках имхо далеко не уедешь...
Тогда будет летать.
   mike
 
10 - 18.02.04 - 17:42
(9) не правда, какая ей разница, регистры это или перебор справочника, все равно она с таблицами работает. Другое дело, что справочник может быть громоздким и считать много приходится
так уж сложилось у van_van что цены загнали в справочник и структрура у него тажелая  
кстати ,van_van каr  дела ?
 
 


Список тем форума
Рекламное место пустует   Рекламное место пустует
AdBlock убивает бесплатный контент. 1Сергей
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует