Помогите с оптимизацией кода я доделал этот код под себя и хочу теперь оптимизировать. У кого есть идеи. Зарание спасибо. Только начал этим заниматься.
<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]
<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]
По теме из базы знаний
- Универсальный отчет (4.2.0.1)
- Универсальный отчет "[П]: Дебиторка & Кредиторка" [УТ, УПП, КА]
- [УТ11] Дебиторка Фифо, вариант с внедрением нового регистра накопления (для значительного ускорения формирования отчета)
- Пример создания кадрового отчета для ЗУП 3.1
- Highload-оптимизация 1С: теория и практика на примере консолидированной отчетности группы "Магнит" и розничной аптечной сети "Магнит"
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
...Для начала просто при вставке кода здесь пользоваться тегом code в квадратных скобочках.
... оптимизацию кода начать просто с оптимизации текста, самое первое:
Если ПустоеЗначение (Дн) = 1 Тогда
Предупреждение ("!!! Выберите дату начала !!!");
ВОЗВРАТ;
КОНЕЦЕСЛИ;
..
аналогично причесать фоигенно большую лестницу лишних если...
... оптимизацию кода начать просто с оптимизации текста, самое первое:
Если ПустоеЗначение (Дн) = 1 Тогда
Предупреждение ("!!! Выберите дату начала !!!");
ВОЗВРАТ;
КОНЕЦЕСЛИ;
..
аналогично причесать фоигенно большую лестницу лишних если...
2Shumi
Имхо ты не аккуратно относишься к понятию "оптимизация". Обязательным атрибутом оптимизации является ее критерий. Например, скорость (время) выполнения кода, его (кода) объем, простота и понятность алгоритма и кода и др.
Дык, какой критерий ты подразумеваешь в своем вопросе?
З.Ы. Если хочешь, что-б твой код хотябы прочитали, используй тег code, о чем писал Сhe Burashka.
Имхо ты не аккуратно относишься к понятию "оптимизация". Обязательным атрибутом оптимизации является ее критерий. Например, скорость (время) выполнения кода, его (кода) объем, простота и понятность алгоритма и кода и др.
Дык, какой критерий ты подразумеваешь в своем вопросе?
З.Ы. Если хочешь, что-б твой код хотябы прочитали, используй тег code, о чем писал Сhe Burashka.
Shumi Написал:
-------------------------------------------------------
> Меня интересует объем кода.
Хотя бы ненужные пустые строки убери - уже объем меньше станет ;)
Ну невозможно ж смотреть, косоглазие может развиться
-------------------------------------------------------
> Меня интересует объем кода.
Хотя бы ненужные пустые строки убери - уже объем меньше станет ;)
Ну невозможно ж смотреть, косоглазие может развиться
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот