Функция НомерПиктограммы() сплошной тормоз
19.06.2008
10:31
#1
"Бухгалтерия 7.7
Заметно притормаживает функция НомерПиктограммы()на выборе подчиненных документов (передвижение по Журналу Платежные Документы)
Функция НомерПиктограммы()
Перем НомПикт;
Если ТекущийДокумент.Выбран() = 1 Тогда
НомПикт = 2;
ДатаВыписки = """";
ПодчДок = СоздатьОбъект("Документ");
Если ПодчДок.ВыбратьПодчиненныеДокументы(ТекущийДокумент.ДатаДок,ТекущийДокумент.ДатаДок+15,ТекущийДокумент) = 1 Тогда
Пока ПодчДок.ПолучитьДокумент() = 1 Цикл
Если ПодчДок.Вид() = "Выписка" Тогда
НомПикт = 1;
ДатаВыписки = ПодчДок.ДатаДок;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Иначе
НомПикт = 0;
КонецЕсли;
Возврат НомПикт;
КонецФункции // НомерПиктограммы()
Что можно предпринять? Точнее на что направить усилия и где покопаться? На саму машинку и ее возможности? сервер? или все-таки 1с?"
Заметно притормаживает функция НомерПиктограммы()на выборе подчиненных документов (передвижение по Журналу Платежные Документы)
Функция НомерПиктограммы()
Перем НомПикт;
Если ТекущийДокумент.Выбран() = 1 Тогда
НомПикт = 2;
ДатаВыписки = """";
ПодчДок = СоздатьОбъект("Документ");
Если ПодчДок.ВыбратьПодчиненныеДокументы(ТекущийДокумент.ДатаДок,ТекущийДокумент.ДатаДок+15,ТекущийДокумент) = 1 Тогда
Пока ПодчДок.ПолучитьДокумент() = 1 Цикл
Если ПодчДок.Вид() = "Выписка" Тогда
НомПикт = 1;
ДатаВыписки = ПодчДок.ДатаДок;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Иначе
НомПикт = 0;
КонецЕсли;
Возврат НомПикт;
КонецФункции // НомерПиктограммы()
Что можно предпринять? Точнее на что направить усилия и где покопаться? На саму машинку и ее возможности? сервер? или все-таки 1с?"
24.06.2008
11:41
#2
Ну а что делать? Алгоритм в таком виде придумала 1С. Что можно сказать, глядя на него? Во первых, авторы заставили компьютер выделять память под переменную НомПикт, а так же ПодчДок при каждом вызове функции. Если бы этот кусок делал я, то сделал бы эти переменные действующими в рамках модуля формы журнала документов. С точки зрения "красивости" программирования это некорректно, так как остальным процедурам и функциям модуля они не нужны, но с точки зрения оптимизации быстродействия это нормальный прием и я выбрал бы его. Кстати, в VB есть такое понятие области видимости переменной, как Static, очень напрашивается к применению в данном случае, к сожалению, в 1С такое не реализовано (и в v8 тоже). Тут все переменные либо Private, либо Public.
Ну, и несомненно, основной тормоз в алгоритме - ПодчДок.ВыбратьПодчиненныеДокументы(...). Он нужен для того, чтобы по тем платежкам, на основании которых сделана выписка появлялся значок об этом свидетельствующий... Тут уж малой кровью ничего не поделаешь, наверное. Опять же... С точки зрения оптимизации быстродействия работы программы в ущерб "красивости" применяемых программных приемов я бы сделал так: в Платежном поручении сделал бы 2 скрытых реквизита шапки: ЕстьВыписки, ДатаПоследнейВыписки. Учитывая то, что платежное поручение - док, который никак не влияет на бух. итоги, легко можно реализовать при проведении выписки перезапись этих реквизитов в платежных поручениях, ссылки на которые имеет выписка. А в этой функции расчета нужной пиктограммы не мучать базу, а воспользоваться уже готовыми вычисленными значениями, которые хранятся в платежке. Соответственно, при отмене проведения выписок нужен алгоритм, который будет пересчитывать эти же значения в платежках. Но это все переделки базы! Если вы допускаете возможность этих изменений и для вас потом не составит труда обновлять конфигурацию, меняйте, делайте. Если же вы согласны пользоваться только типовой конфигурацией, ищите выход в обновлении оборудования, наверное.
Ну, и несомненно, основной тормоз в алгоритме - ПодчДок.ВыбратьПодчиненныеДокументы(...). Он нужен для того, чтобы по тем платежкам, на основании которых сделана выписка появлялся значок об этом свидетельствующий... Тут уж малой кровью ничего не поделаешь, наверное. Опять же... С точки зрения оптимизации быстродействия работы программы в ущерб "красивости" применяемых программных приемов я бы сделал так: в Платежном поручении сделал бы 2 скрытых реквизита шапки: ЕстьВыписки, ДатаПоследнейВыписки. Учитывая то, что платежное поручение - док, который никак не влияет на бух. итоги, легко можно реализовать при проведении выписки перезапись этих реквизитов в платежных поручениях, ссылки на которые имеет выписка. А в этой функции расчета нужной пиктограммы не мучать базу, а воспользоваться уже готовыми вычисленными значениями, которые хранятся в платежке. Соответственно, при отмене проведения выписок нужен алгоритм, который будет пересчитывать эти же значения в платежках. Но это все переделки базы! Если вы допускаете возможность этих изменений и для вас потом не составит труда обновлять конфигурацию, меняйте, делайте. Если же вы согласны пользоваться только типовой конфигурацией, ищите выход в обновлении оборудования, наверное.
Читают тему
(гостей: 1)