Оптимизировать Функцию в 1с
1732
3
AKKRILL
sniper
Есть функция. В обработчике
Как ее оптимизировать?
// ВыбПоставщика - список значений.
Функция ПроверкаТранзита(Товар,КолТовараТранзита)
Док=СоздатьОбъект("Документ");
ТаблЗн=СоздатьОбъект("ТаблицаЗначений");
ТаблЗн.НоваяКолонка("Док");
ТаблЗн.НоваяКолонка("Товар");
Рег = СоздатьОбъект("Регистр.ОстаткиТоваров");
Рег.УстановитьФильтр(Товар);
Рег.ВыбратьДвижения(ДатаПрихода,ПолучитьДатуТА());
КолТовараТранзита = 0;
Пока Рег.ПолучитьДвижение()=1 Цикл
Если (Рег.ТекущийДокумент().Вид()="Приходная") Тогда
ТаблЗн.НоваяСтрока();
ТаблЗн.Док = Рег.ТекущийДокумент();
ТаблЗн.Товар = Товар;
Док.НайтиДокумент(Рег.ТекущийДокумент());
Кол = ВыбПоставщика.РазмерСписка();
Иной = 1;
Пока Иной < (Кол+1) цикл
Если сокрЛП(ВыбПоставщика.ПолучитьЗначение(Иной).Наименование) = сокрЛП(Док.Клиент.Наименование) Тогда
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() > 0 цикл
Если СокрЛП(Товар) = СокрЛП(Док.Товар) тогда
КолТовараТранзита=КолТовараТранзита + Док.Количество;
конецесли;
КонецЦикла;
КонецЕсли;
Иной = Иной + 1;
Конеццикла;
КонецЕсли;
КонецЦикла;
Возврат число(КолТовараТранзита);
КонецФункции
Как ее оптимизировать?
// ВыбПоставщика - список значений.
Функция ПроверкаТранзита(Товар,КолТовараТранзита)
Док=СоздатьОбъект("Документ");
ТаблЗн=СоздатьОбъект("ТаблицаЗначений");
ТаблЗн.НоваяКолонка("Док");
ТаблЗн.НоваяКолонка("Товар");
Рег = СоздатьОбъект("Регистр.ОстаткиТоваров");
Рег.УстановитьФильтр(Товар);
Рег.ВыбратьДвижения(ДатаПрихода,ПолучитьДатуТА());
КолТовараТранзита = 0;
Пока Рег.ПолучитьДвижение()=1 Цикл
Если (Рег.ТекущийДокумент().Вид()="Приходная") Тогда
ТаблЗн.НоваяСтрока();
ТаблЗн.Док = Рег.ТекущийДокумент();
ТаблЗн.Товар = Товар;
Док.НайтиДокумент(Рег.ТекущийДокумент());
Кол = ВыбПоставщика.РазмерСписка();
Иной = 1;
Пока Иной < (Кол+1) цикл
Если сокрЛП(ВыбПоставщика.ПолучитьЗначение(Иной).Наименование) = сокрЛП(Док.Клиент.Наименование) Тогда
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() > 0 цикл
Если СокрЛП(Товар) = СокрЛП(Док.Товар) тогда
КолТовараТранзита=КолТовараТранзита + Док.Количество;
конецесли;
КонецЦикла;
КонецЕсли;
Иной = Иной + 1;
Конеццикла;
КонецЕсли;
КонецЦикла;
Возврат число(КолТовараТранзита);
КонецФункции
сам уже придумал
не в доке количество брать а в регистре. цикла не будет.
может еще как?
не в доке количество брать а в регистре. цикла не будет.
может еще как?
1. Вместо цикла по списку значений использовать функцию Принадлежит() - для этого переделать состав списка вместо справочников - СокрЛП(наименованиями)
2. Не совсем понятен смысл Таблицы ТаблЗн - но возможно это какая то глобальность используемая в других процедурах.
2. Не совсем понятен смысл Таблицы ТаблЗн - но возможно это какая то глобальность используемая в других процедурах.
А запрос к регистру забабахать слабо?