Оптимизация кода отчета

1. Shumi 24.01.08 17:30 Сейчас в теме
Помогите с оптимизацией кода я доделал этот код под себя и хочу теперь оптимизировать. У кого есть идеи. Зарание спасибо. Только начал этим заниматься.

<Code>
Процедура Сформировать()

Если ПустоеЗначение (Дн) = 1 Тогда
Предупреждение ("!!! Выберите дату начала !!!");
Иначе

Если Сч = 1 Тогда

Тб = СоздатьОбъект("ТаблицаЗначений");
Тб.НоваяКолонка("Докум");
Тб.НоваяКолонка("Дебет","Число");
Тб.НоваяКолонка("Кредит","Число");
Тб.НоваяКолонка("ДокумДата");
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("По 361 счету");
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ИспользоватьПланСчетов(ОсновнойПланСчетов());
Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты,Контр, 1);
Ит.ВыполнитьЗапрос(Дн,Дк , "361",,, 2,"Операция", "С");
Таб.ВывестиСекцию("Шапка");
Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
Ит.ВыбратьСубконто(ВидыСубконто.Контрагенты);

Пока Ит.ПолучитьСубконто(ВидыСубконто.Контрагенты) = 1 Цикл

Если Крд = 1 Тогда

Если Ит.СКК() > 0 Тогда

// Таб.ВывестиСекцию("Субконто1");
Ит.выбратьПериоды();

Пока Ит.ПолучитьПериод()=1 Цикл

Тб.НоваяСтрока();
Тб.Докум = Ит.Операция.Документ.ТекущийДокумент();
Тб.ДокумДата = Ит.Операция.Документ.ДатаДок;
Тб.Кредит = Ит.СКК(Ит.Операция.Документ);

КонецЦикла;

Тб.Сортировать("ДокумДата-",1);
Тб.ВыбратьСтроки();
ТекСтр = 1;
Пр = 0;

Пока Тб.ПолучитьСтроку() = 1 Цикл

Если Тб.Кредит = 0 Тогда

Пр = 1;
Попытка
Тб.ПолучитьСтрокуПоНомеру(ТекСтр - 1);
Исключение
КонецПопытки;
Прервать;

КонецЕсли;

ТекСтр = ТекСтр + 1;

КонецЦикла;

Если (ТекСтр = 1) ИЛИ (Пр = 0) Тогда

Если (Пр = 0) И (ТекСтр > 1) Тогда

Тб.Сортировать("ДокумДата+",1);

КонецЕсли;

Тб.ВыбратьСтроки();
Тб.ПолучитьСтрокуПоНомеру(1);

КонецЕсли;

Таб.ВывестиСекцию("Субконто2");
Тб.Очистить();
Тб.НоваяКолонка("Докум");
Тб.НоваяКолонка("Дебет");
Тб.НоваяКолонка("Кредит");
Тб.НоваяКолонка("ДокумДата");

КонецЕсли;

КонецЕсли;


Если Дбк = 1 Тогда

Если Ит.СКД() > 0 Тогда

// Таб.ВывестиСекцию("Субконто3");
Ит.выбратьПериоды();

Пока Ит.ПолучитьПериод()=1 Цикл

Тб.НоваяСтрока();
Тб.Докум = Ит.Операция.Документ.ТекущийДокумент();
Тб.ДокумДата = Ит.Операция.Документ.ДатаДок;
Тб.Дебет = Ит.СКД(Ит.Операция.Документ);

КонецЦикла;

Тб.Сортировать("ДокумДата-",1);
Тб.ВыбратьСтроки();
ТекСтр = 1;
Пр = 0;

Пока Тб.ПолучитьСтроку() = 1 Цикл

Если Тб.Дебет = 0 Тогда

Пр = 1;
Попытка
Тб.ПолучитьСтрокуПоНомеру(ТекСтр - 1);
Исключение
КонецПопытки;
Прервать;

КонецЕсли;

ТекСтр = ТекСтр + 1;

КонецЦикла;

Если (ТекСтр = 1) ИЛИ (Пр = 0) Тогда

Если (Пр = 0) И (ТекСтр > 1) Тогда

Тб.Сортировать("ДокумДата+",1);

КонецЕсли;

Тб.ВыбратьСтроки();
Тб.ПолучитьСтрокуПоНомеру(1);

КонецЕсли;

Таб.ВывестиСекцию("Субконто4");
Тб.Очистить();
Тб.НоваяКолонка("Докум");
Тб.НоваяКолонка("Дебет");
Тб.НоваяКолонка("Кредит");
Тб.НоваяКолонка("ДокумДата");

КонецЕсли;

КонецЕсли;

КонецЦикла;

Таб.ТолькоПросмотр(1);
Таб.Показать("По 361 счету","");

КонецЕсли;

// Ит.СКД()#Ч014.2.,

Если Сч2 = 1 Тогда

Тб = СоздатьОбъект("ТаблицаЗначений");
Тб.НоваяКолонка("Докум");
Тб.НоваяКолонка("Дебет","Число");
Тб.НоваяКолонка("Кредит","Число");
Тб.НоваяКолонка("ДокумДата");
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("По 631 счету");
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ИспользоватьПланСчетов(ОсновнойПланСчетов());
Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты,Контр, 1);
ТипОтборов = СоздатьОбъект("СписокЗначений");
ТипОтборов.ДобавитьЗначение("Дбт","Дебиторская");
ТипОтборов.ДобавитьЗначение("Крд","Кредиторская");
Ит.ВыполнитьЗапрос(Дн,Дк , "631",,, 2,"Операция", "С");
Таб.ВывестиСекцию("Шапка");
Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
Ит.ВыбратьСубконто(ВидыСубконто.Контрагенты);

Пока Ит.ПолучитьСубконто(ВидыСубконто.Контрагенты) = 1 Цикл

Если Крд = 1 Тогда

Если Ит.СКК() > 0 Тогда

// Таб.ВывестиСекцию("Субконто1");
Ит.выбратьПериоды();

Пока Ит.ПолучитьПериод()=1 Цикл

Тб.НоваяСтрока();
Тб.Докум = Ит.Операция.Документ.ТекущийДокумент();
Тб.ДокумДата = Ит.Операция.Документ.ДатаДок;
Тб.Кредит = Ит.СКК(Ит.Операция.Документ);

КонецЦикла;

Тб.Сортировать("ДокумДата-",1);
Тб.ВыбратьСтроки();
ТекСтр = 1;
Пр = 0;

Пока Тб.ПолучитьСтроку() = 1 Цикл

Если Тб.Кредит = 0 Тогда

Пр = 1;
Попытка
Тб.ПолучитьСтрокуПоНомеру(ТекСтр - 1);
Исключение
КонецПопытки;
Прервать;

КонецЕсли;

ТекСтр = ТекСтр + 1;

КонецЦикла;

Если (ТекСтр = 1) ИЛИ (Пр = 0) Тогда

Если (Пр = 0) И (ТекСтр > 1) Тогда

Тб.Сортировать("ДокумДата+",1);

КонецЕсли;

Тб.ВыбратьСтроки();
Тб.ПолучитьСтрокуПоНомеру(1);

КонецЕсли;

Таб.ВывестиСекцию("Субконто2");
Тб.Очистить();
Тб.НоваяКолонка("Докум");
Тб.НоваяКолонка("Дебет");
Тб.НоваяКолонка("Кредит");
Тб.НоваяКолонка("ДокумДата");

КонецЕсли;

КонецЕсли;

Если Дбк = 1 Тогда

Если Ит.СКД() > 0 Тогда

// Таб.ВывестиСекцию("Субконто3");
Ит.выбратьПериоды();

Пока Ит.ПолучитьПериод()=1 Цикл

Тб.НоваяСтрока();
Тб.Докум = Ит.Операция.Документ.ТекущийДокумент();
Тб.ДокумДата = Ит.Операция.Документ.ДатаДок;
Тб.Дебет = Ит.СКД(Ит.Операция.Документ);

КонецЦикла;

Тб.Сортировать("ДокумДата-",1);
Тб.ВыбратьСтроки();
ТекСтр = 1;
Пр = 0;

Пока Тб.ПолучитьСтроку() = 1 Цикл

Если Тб.Дебет = 0 Тогда

Пр = 1;
Попытка
Тб.ПолучитьСтрокуПоНомеру(ТекСтр - 1);
Исключение
КонецПопытки;
Прервать;

КонецЕсли;

ТекСтр = ТекСтр + 1;

КонецЦикла;

Если (ТекСтр = 1) ИЛИ (Пр = 0) Тогда

Если (Пр = 0) И (ТекСтр > 1) Тогда

Тб.Сортировать("ДокумДата+",1);

КонецЕсли;

Тб.ВыбратьСтроки();
Тб.ПолучитьСтрокуПоНомеру(1);

КонецЕсли;

Таб.ВывестиСекцию("Субконто4");
Тб.Очистить();
Тб.НоваяКолонка("Докум");
Тб.НоваяКолонка("Дебет");
Тб.НоваяКолонка("Кредит");
Тб.НоваяКолонка("ДокумДата");

КонецЕсли;

КонецЕсли;

КонецЦикла;

Таб.ТолькоПросмотр(1);
Таб.Показать("По 631 счету","");

КонецЕсли;

КонецЕсли;

КонецПроцедуры
[/1C-CODE]
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. magics 24.01.08 17:55 Сейчас в теме
Офигеть... ;) А это что за букавки?
3. АЛьФ 24.01.08 20:06 Сейчас в теме
А что именно у тебя вызывает затруднение? Берешь отладчик, включаешь замер производительности и переписываешь места, в которых идет наибольшая потеря времени.
4. CheBurator 3122 25.01.08 00:13 Сейчас в теме
...Для начала просто при вставке кода здесь пользоваться тегом code в квадратных скобочках.
... оптимизацию кода начать просто с оптимизации текста, самое первое:
Если ПустоеЗначение (Дн) = 1 Тогда
Предупреждение ("!!! Выберите дату начала !!!");
ВОЗВРАТ;
КОНЕЦЕСЛИ;
..
аналогично причесать фоигенно большую лестницу лишних если...
5. Shumi 25.01.08 10:18 Сейчас в теме
А детально можешь помочь. Для меня там нет ничего лишнего и все работает логично. Можешь скинуть ссылки на литературу где можно прочитать про оптимизацию кода.
6. poppy 25.01.08 12:11 Сейчас в теме
2Shumi

Имхо ты не аккуратно относишься к понятию "оптимизация". Обязательным атрибутом оптимизации является ее критерий. Например, скорость (время) выполнения кода, его (кода) объем, простота и понятность алгоритма и кода и др.

Дык, какой критерий ты подразумеваешь в своем вопросе?

З.Ы. Если хочешь, что-б твой код хотябы прочитали, используй тег code, о чем писал Сhe Burashka.
7. Shumi 25.01.08 15:10 Сейчас в теме
Меня интересует объем кода.
8. Abadonna 3960 25.01.08 16:06 Сейчас в теме
Shumi Написал:
-------------------------------------------------------
> Меня интересует объем кода.

Хотя бы ненужные пустые строки убери - уже объем меньше станет ;)
Ну невозможно ж смотреть, косоглазие может развиться
9. Shumi 25.01.08 18:09 Сейчас в теме
Все спасибо уже еуменьшил в 4 раза путем откидывания ненижных Если и оптимизации алгоритма. Спасибо разобрался в принципе оптимизации.
10. CheBurator 3122 26.01.08 12:51 Сейчас в теме
Вот везет людям... за пару дней разобрался в принципе оптимизации... тут акакдемики от программирования с этим уже в общем случае не могут лет 30 разобраться...
11. das 232 30.03.08 06:01 Сейчас в теме
Если мне память не изменяет - У Абадонны есть обработка по оптимизации кода во внешних обработках. + копирование.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот