| 
    
        
     
     | 
    
    
  | 
v7: Тормозит справочник в ЗиК | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        matizov    
     31.10.12 
            ✎
    11:44 
 | 
         
        Здравствуйте!
  
        С недавних пор начал тормозить справочник "сотрудники" в 1С ЗиК 7.7. Базы с 2008 года. SQL. С чем это может быть связано?  | 
|||
| 
    1
    
        Ёпрст    
     гуру 
    31.10.12 
            ✎
    11:45 
 | 
         
        с периодикой     
         | 
|||
| 
    2
    
        matizov    
     31.10.12 
            ✎
    11:46 
 | 
         
        с какой периодикой?     
         | 
|||
| 
    3
    
        Ёпрст    
     гуру 
    31.10.12 
            ✎
    11:47 
 | 
         
        которая отображается в форме списка справочника.     
         | 
|||
| 
    4
    
        matizov    
     31.10.12 
            ✎
    11:48 
 | 
         
        и как это исправить?     
         | 
|||
| 
    5
    
        Ёпрст    
     гуру 
    31.10.12 
            ✎
    11:49 
 | 
         
        убери колонку состояние, заместо неё - текст на форму с формулой Состояние, чтоб показ был только у текущего сотрудника.
  
        Будет летать  | 
|||
| 
    6
    
        Ёпрст    
     гуру 
    31.10.12 
            ✎
    11:50 
 | 
         
        ну или, кешируй периодику перед открытием формы списка справочника..     
         | 
|||
| 
    7
    
        matizov    
     31.10.12 
            ✎
    11:57 
 | 
         
        ок. попробую.     
         | 
|||
| 
    8
    
        matizov    
     31.10.12 
            ✎
    12:17 
 | 
         
        может скажешь где найти информацию про кэширование?     
         | 
|||
| 
    9
    
        Ёпрст    
     гуру 
    31.10.12 
            ✎
    12:20 
 | 
         
        А че там знать то ?
  
        Скидываешь в табличку все значения, потом в формуле списка справочника читаешь с этой таблички.  | 
|||
| 
    10
    
        Gucci76    
     31.10.12 
            ✎
    12:53 
 | 
         
        А еще лучше в ДБФ формат переводи базу и терминальный режим.
  
        Плюс парочку манипуляций в конфигураторе и ваще все будет летать (раз в 10 быстрее, чем сейчас) ))))  | 
|||
| 
    11
    
        matizov    
     31.10.12 
            ✎
    13:20 
 | 
         
        Кэширование не помогло. на DBF работает хорошо, а на SQL нет. так же тормозит.     
         | 
|||
| 
    12
    
        Ёпрст    
     гуру 
    31.10.12 
            ✎
    13:24 
 | 
         
        (11) высчисляемые колонки то выкинул с формы списка справочника ?     
         | 
|||
| 
    13
    
        matizov    
     31.10.12 
            ✎
    13:45 
 | 
         
        Я в эту функцию закинул кэширование. а состояние сотрудника и так идет как текст с формулой.     
         | 
|||
| 
    14
    
        Bizon2005    
     31.10.12 
            ✎
    13:47 
 | 
||||
| 
    15
    
        Ёпрст    
     гуру 
    31.10.12 
            ✎
    13:48 
 | 
         
        (13) покажи код тогда, что сделал     
         | 
|||
| 
    16
    
        Ёпрст    
     гуру 
    31.10.12 
            ✎
    13:48 
 | 
         
        (14) выкинь регистрацию со своего сайта - люди мот и потянутся     
         | 
|||
| 
    17
    
        matizov    
     31.10.12 
            ✎
    13:50 
 | 
         
        //+маер
  
        стр = 0; Если глКэшПечатныхФорм.НайтиЗначение(ТекущийЭлемент(),стр,"Сотрудник") = 1 Тогда Для Ном = 1 По глКэшПечатныхФорм.КоличествоСтрок() Цикл глКэшПечатныхФорм.ПолучитьСтрокуПоНомеру(Ном); Если (ТекущийЭлемент() = глКэшПечатныхФорм.Сотрудник) Тогда Значение = глКэшПечатныхФорм.СостояниеФизлица; Возврат Значение; КонецЕсли; КонецЦикла; Иначе //-маер Если (ПустоеЗначение(ТекущийЭлемент())=1)или(ЭтоГруппа()=1) Тогда Возврат "" КонецЕсли; ДатаПриема = Дата(0); ДатаУвольнения = Дата(0); ДатаАктуальности = ИспользоватьДату(); Периодический.ИспользоватьОбъект("СостояниеФизлица",ТекущийЭлемент()); СостояниеФЗ = Периодический.ЗначениеНаДату(ДатаАктуальности); Если ПустоеЗначение(СостояниеФЗ)=0 Тогда Если Периодический.НайтиЗначение(ДатаАктуальности,-1)=1 Тогда ДатаПриема = Периодический.ДатаЗнач КонецЕсли; Если Периодический.НайтиЗначение(ДатаАктуальности+1,1)=1 Тогда ДатаУвольнения = Периодический.ДатаЗнач-1 КонецЕсли; Если ТекущийЭлемент().ОсновнойЭлемент<>ТекущийЭлемент() Тогда ОписаниеСостояния = "Внутреннее совместительство"; Если СостояниеФЗ=Перечисление.СостояниеФизлица.ВременноНеРаботает Тогда ОписаниеСостояния = "Внутреннее совмест-во, временно не работает"; ИначеЕсли СостояниеФЗ=Перечисление.СостояниеФизлица.ВременноНеРаботаетВоеннослужащий Тогда ОписаниеСостояния = "Внутреннее совмест-во, военнослужащий, временно не работает"; КонецЕсли; ИначеЕсли СостояниеФЗ=Перечисление.СостояниеФизлица.СотрудникОсновной Тогда ОписаниеСостояния = "Штатный сотрудник"; ИначеЕсли СостояниеФЗ=Перечисление.СостояниеФизлица.СотрудникНеосновной Тогда ОписаниеСостояния = "Внешний совместитель"; ИначеЕсли СостояниеФЗ=Перечисление.СостояниеФизлица.Госслужащий Тогда Если Константа.ЕстьМуниципальныеСлужащие = 1 Тогда ОписаниеСостояния = "Муниципальный служащий"; Иначе ОписаниеСостояния = "Государственный служащий"; КонецЕсли; ИначеЕсли СостояниеФЗ=Перечисление.СостояниеФизлица.ВременноНеРаботает Тогда ОписаниеСостояния = "Временно не работает"; ИначеЕсли СостояниеФЗ=Перечисление.СостояниеФизлица.ВременноНеРаботаетВоеннослужащий Тогда ОписаниеСостояния = "Военнослужащий временно не работает"; Иначе ОписаниеСостояния = "Военнослужащий"; КонецЕсли; //+маер //Возврат ОписаниеСостояния+" с "+ДатаПриема+?(ПустоеЗначение(ДатаУвольнения)=1,""," по "+ДатаУвольнения) Значение = ОписаниеСостояния+" с "+ДатаПриема+?(ПустоеЗначение(ДатаУвольнения)=1,""," по "+ДатаУвольнения); глКэшПечатныхФорм.НоваяСтрока(); глКэшПечатныхФорм.Сотрудник = ТекущийЭлемент(); глКэшПечатныхФорм.СостояниеФизлица = Значение; Возврат Значение; //-маер Иначе Периодический.ОбратныйПорядок(); Периодический.ВыбратьЗначения(,ДатаАктуальности); Пока Периодический.ПолучитьЗначение()=1 Цикл Если ПустоеЗначение(Периодический.Значение)=1 Тогда //+маер Если глВидРасчетаДействует(ОсновнойЭлемент,,ДатаАктуальности,ДатаАктуальности)=1 Тогда Значение = "Физическое лицо, получающее доход на предприятии (договорник)"; глКэшПечатныхФорм.НоваяСтрока(); глКэшПечатныхФорм.Сотрудник = ТекущийЭлемент(); глКэшПечатныхФорм.СостояниеФизлица = Значение; Возврат Значение; Иначе Значение = "Сотрудник уволен "+(Периодический.ДатаЗнач-1); глКэшПечатныхФорм.НоваяСтрока(); глКэшПечатныхФорм.Сотрудник = ТекущийЭлемент(); глКэшПечатныхФорм.СостояниеФизлица = Значение; Возврат Значение; КонецЕсли; //Возврат "Сотрудник уволен "+(Периодический.ДатаЗнач-1) //-маер КонецЕсли; КонецЦикла; КонецЕсли; Если ОсновнойЭлемент=ТекущийЭлемент() Тогда Если глВидРасчетаДействует(ОсновнойЭлемент,,ДатаАктуальности,ДатаАктуальности)=1 Тогда //+маер Значение = "Физическое лицо, получающее доход на предприятии (договорник)"; глКэшПечатныхФорм.НоваяСтрока(); глКэшПечатныхФорм.Сотрудник = ТекущийЭлемент(); глКэшПечатныхФорм.СостояниеФизлица = Значение; Возврат Значение; //-маер Иначе //+маер Значение = "Физическое лицо"; глКэшПечатныхФорм.НоваяСтрока(); глКэшПечатныхФорм.Сотрудник = ТекущийЭлемент(); глКэшПечатныхФорм.СостояниеФизлица = Значение; Возврат Значение; //-маер КонецЕсли; Иначе //+маер Значение = "Не принят на внутреннее совместительство"; глКэшПечатныхФорм.НоваяСтрока(); глКэшПечатныхФорм.Сотрудник = ТекущийЭлемент(); глКэшПечатныхФорм.СостояниеФизлица = Значение; Возврат Значение; //-маер КонецЕсли; КонецЕсли; //-маер  | 
|||
| 
    18
    
        matizov    
     31.10.12 
            ✎
    13:51 
 | 
         
        глКэшПечатныхФорм = СоздатьОбъект("ТаблицаЗначений");
  
        глКэшПечатныхФорм.НоваяКолонка("Сотрудник","Справочник.Сотрудники"); глКэшПечатныхФорм.НоваяКолонка("СостояниеФизлица","Строка");  | 
|||
| 
    19
    
        matizov    
     31.10.12 
            ✎
    13:51 
 | 
         
        Перем глКэшПечатныхФорм; //маер     
         | 
|||
| 
    20
    
        Ёпрст    
     гуру 
    31.10.12 
            ✎
    13:53 
 | 
         
        (17) Это же полный п..ц     
         | 
|||
| 
    21
    
        matizov    
     31.10.12 
            ✎
    13:54 
 | 
         
        почему?     
         | 
|||
| 
    22
    
        Ёпрст    
     гуру 
    31.10.12 
            ✎
    13:57 
 | 
         
        (21) 
  
        А не видно разве ? стр = 0; Если глКэшПечатныхФорм.НайтиЗначение(ТекущийЭлемент(),стр,"Сотрудник") = 1 Тогда Возврат глКэшПечатныхФорм.ПолучитьЗначение(стр,"СостояниеФизлица"); Иначе  | 
|||
| 
    23
    
        Ёпрст    
     гуру 
    31.10.12 
            ✎
    13:57 
 | 
         
        стр = 0;
  
        Если глКэшПечатныхФорм.НайтиЗначение(ТекущийЭлемент(),стр,"Сотрудник") = 1 Тогда Возврат глКэшПечатныхФорм.ПолучитьЗначение(стр,"СостояниеФизлица"); КонецЕсли;  | 
|||
| 
    24
    
        matizov    
     31.10.12 
            ✎
    13:59 
 | 
         
        http://infostart.ru/public/64424/
  
        Взял отсюда.  | 
|||
| 
    25
    
        Ёпрст    
     гуру 
    31.10.12 
            ✎
    14:03 
 | 
         
        (24) чего ты оттуда взял ?
  
        %))  | 
|||
| 
    26
    
        Gucci76    
     31.10.12 
            ✎
    14:04 
 | 
         
        Лучше через список значение     
         | 
|||
| 
    27
    
        matizov    
     31.10.12 
            ✎
    14:05 
 | 
         
        Если глКэшПечатныхФорм.НайтиЗначение(ВидОбъекта,стр,"ВидДокумента") = 1 Тогда
  
        Для Ном = 1 По глКэшПечатныхФорм.КоличествоСтрок() Цикл глКэшПечатныхФорм.ПолучитьСтрокуПоНомеру(Ном); Если (ВидОбъекта = глКэшПечатныхФорм.ВидДокумента) И (глКэшПечатныхФорм.Название <> "") Тогда ТаблицаПечФорм.НоваяСтрока(); ТаблицаПечФорм.Название = глКэшПечатныхФорм.Название; ТаблицаПечФорм.Кнопка = глКэшПечатныхФорм.Кнопка; ТаблицаПечФорм.Файл = глКэшПечатныхФорм.Файл; ТаблицаПечФорм.ФайлОписания = глКэшПечатныхФорм.ФайлОписания; КонецЕсли; КонецЦикла; Иначе  | 
|||
| 
    28
    
        Ёпрст    
     гуру 
    31.10.12 
            ✎
    14:08 
 | 
         
        (27) да уж..     
         | 
|||
| 
    29
    
        matizov    
     31.10.12 
            ✎
    14:09 
 | 
         
        смысл остается тот же. попробую сейчас снова.     
         | 
|||
| 
    30
    
        Ёпрст    
     гуру 
    31.10.12 
            ✎
    14:10 
 | 
         
        (29) см. (23).
  
        И не бери гамно код откуда не поподя.  | 
|||
| 
    31
    
        dedmoroz777    
     31.10.12 
            ✎
    14:12 
 | 
         
        (29) смысл в том, что в глобальнике в ПриНачалеРаботыСистемы, заполнять таблицу значений данными. В форме справочника доставать из этой таблицы путём (23)     
         | 
|||
| 
    32
    
        IvaneS    
     31.10.12 
            ✎
    16:06 
 | 
         
        А если поменяет рабочую дату, то нужно пересмотреть весь кеш... :) Сколько сотров то в базе?     
         | 
|||
| 
    33
    
        IvaneS    
     31.10.12 
            ✎
    16:09 
 | 
         
        Наверно юзают базу через локалку, а там изменилась пропускная способность. (Вариант?)     
         | 
|||
| 
    34
    
        Bizon2005    
     01.11.12 
            ✎
    12:04 
 | 
         
        похожая тема, напиши если разобрался
  
        http://ask.8c1.ru/questions/31/тормозит-справочник-сотрудников-в-зик  | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |