Имя: Пароль:
1C
1C 7.7
v7: Тормозят константы
,
0 alexexe
 
15.08.13
02:22
Конфигурация нетиповая (переделанная торговля)

Проблема:
Конфа тормозит в местах, где идет обращение к константам

В частности, страшно медленно работает это место:

спрОсновнаяФирма = ПолучитьПустоеЗначение("Справочник.Фирмы");
Если Константа.НастройкиПоУмолчанию.Выбран() = 1 Тогда
спрОсновнаяФирма = Константа.НастройкиПоУмолчанию.ОсновнаяФирма;
КонецЕсли;

Железо новое, объем базы тоже не влияет (есть аналогичные с базы с таким же размером, которые работают вполне нормально)

Загрузка/Выгрузка данных производилась, на производительность никак не повлияло

Может кто сталкивался или есть какие идеи?
1 leshikkam
 
15.08.13
02:47
Сделай глобальную переменную и считывай в ПриНачалеРаботыСистемы
2 Aleksey
 
15.08.13
02:58
Функция глКонстанта(Имя) Экспорт
    Значение = глКэшКонстант.Получить(Имя);
    Если ПустоеЗначение(Значение) = 1 Тогда
        Значение = Константа.ПолучитьАтрибут(Имя);
        глКэшКонстант.Установить(Имя,Значение);
    КонецЕсли;
    Возврат Значение;
КонецФункции

Настройки = глКонстанта("НастройкиПоУмолчанию");
3 Aleksey
 
15.08.13
02:59
ну и соответственно в начале
Перем глКэшКонстант Экспорт; // Список значений констант

и в конце
глКэшКонстант=СоздатьОбъект("СписокЗначений");
4 Aleksey
 
15.08.13
03:02
И да существует мнения что .Выбран() некошэрно использовать (идет обращения к БД), более кошэрный вариант

Если ПустоеЗначение(Константа.НастройкиПоУмолчанию)=0 тогда

или Если ПустоеЗначение(глКонстанта("НастройкиПоУмолчанию"))=0 тогда
5 ildary
 
15.08.13
03:03
Причиной торможения может быть большое число значений периодических реквизитов, которые хранятся в том же файле. Проверяется любым dbf просмотрщиком.
6 Туц
 
15.08.13
07:20
(0) +1 к (5)
Фраза "Железо новое, объем базы тоже не влияет (есть аналогичные с базы с таким же размером, которые работают вполне нормально)"
дилетантская.
Раз конфа переписанная, то можете дописать хранение настроек в отдельный справочник.
7 Zerg80
 
15.08.13
07:25
(5) + 1, надо считывать при запуске 1С
8 Рэйв
 
15.08.13
07:29
(0)Достаточно оставить одну строку.

спрОсновнаяФирма = Константа.НастройкиПоУмолчанию.ОсновнаяФирма;

Зачем тебе эти проверки и получение пустого значения? Если константа незаполнена то и итак пустое будет
9 Рэйв
 
15.08.13
07:30
Если у тебя весь код такой, то неудивительно что тормозит:-)
10 ЧеловекДуши
 
15.08.13
07:31
(0) Избавься от этих констант.
Накрути лучше какой-либо справочник и назови его "Константы".
Так же, проанализируй периодические реквизиты и по возможности вынеси самые часто изменяемые, либо в регистр, либо в еще один справочник :)
11 Aleksey
 
15.08.13
10:46
(8) А если тип константы - справочник, или неопределено?
12 Барбариска
 
15.08.13
11:04
(10) еще и справочник накрутить... потом будет "проще взорвать, чем отремонтировать" ))

Просто константы один раз при начале работы системы в глобальные переменные. Ну и для "полной корректности защиты от дурака" - переопределение переменных при записи константы и запрет на их изменение в разделенном режиме ))
13 Chum
 
15.08.13
11:07
(1) +100500

глОсновнаяФирма
глОсновнаяВалюта или глРуб
глГБ
глГД
глФД
и т.д.

Обращение к константам обычно тупит, особенно, когда они периодические.
14 ЧеловекДуши
 
15.08.13
11:08
(12) Ремонтировать что?
У него походу туда пишутся какие либо периодические реквизиты, типо "Цена", "Затраты"
И судя по тормозам, пишутся они очень часто и много раз :)