Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
13 Дек 2017, 02:57
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Какую литерату почитать по оптимизации кода?  (Прочитано 1649 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Рексарыч

  • *
  • Сообщений: 10
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-12-19
  • Сайт: 
Привет, друзья.

Код получается писать уже, но выполняется он продолжительное время, хотя и стараюсь делать (по возможности) линейные пробежки, т.е. время (примерно) равно n.

Пример отрывка кода:

	ГодМесяцДень=Дата(2015,02,01,0,0,0);

//берём объект из РС
Карта = новый запрос("
    |Выбрать //первые 50
| *
|Из
| Справочник.РесурсныеСпецификации");

Карта = Карта.Выполнить().Выбрать();

//пробегаемся по всем обектам РС
Пока Карта.Следующий() Цикл

Если НЕ Карта.Ссылка.ЭтоГруппа Тогда

Строка=Карта.Ссылка.ПолучитьОбъект();

сообщить("РС = " + Строка.Наименование);

//Заполняем Дату
Сообщить("1 = " + Строка.НачалоДействия);
Строка.НачалоДействия=ГодМесяцДень;
Сообщить("2 = " + Строка.НачалоДействия);

Строка.Записать();

КонецЕсли;

КонецЦикла;

Как видите - код рабочий, но явно не оптимизированный. Если кто знает нужную мне литература, то подскажите пожалуйста.


Оффлайн MuI_I_Ika

  • Гончаров Михаил
  • Администратор
  • *****
  • Сообщений: 6557
  • РЕПУТАЦИЯ: 775
  • КПД: 12%
  • Регистрация: 2012-08-15
    • Skype: MuI_I_Ika
  • Сайт: 
  • Профессия: Программист 1С
Начните с любой книжки по 1С. Там полно оптимизированного кода. Радченко например.

Оффлайн LexaK

  • *****
  • Сообщений: 1267
  • РЕПУТАЦИЯ: 347
  • КПД: 27%
  • Регистрация: 2012-05-16
  • Сайт: 
  • Профессия: Программист 1С
на диске ИТС есть хороший раздел по оптимальному программированию, оптимальному составлению запросов.
конкретных учебников которые бы разжевали как оптимально, а как не оптимально программировать не встречал,
просто анализируйте те примеры которые есть в учебниках, авторы придерживаются какой-то оптимизации.

Небольшой разбор вашего кода

1. Не надо запрашивать все поля (по звездочке), получайте только те данные которые вам нужны для отчета/обработке
в вашем примере это поля
Ссылка, Наименование, ЭтоГруппа, НачалоДействия

2. Сразу же в запросе установите отбор по нужным условиям
|...
|Из
|    Справочник.РесурсныеСпецификации Спр
|Где
|    Не Спр.ЭтоГруппа
|//и   Спр.НачалоДействия <> ДатаВремя(2015,2,1)
|и   Спр.НачалоДействия <> &ГодМесяцДень
|...


ИЛИ как вариант (конечно хуже 1.)
2. в переменной Карта уже есть поле ЭтоГруппа, анализируйте его, когда вы через Ссылка.ЭтоГруппа обращаетесь к нему, происходит повторная загрука всего элемента справочника в память с сервера.
правильно (было бы) Если НЕ Карта.ЭтоГруппа Тогда

3. так как у вас уже могут быть элементы у которых НачалоДействия  = ГодМесяцДень, усложните условие что бы не изменять элементы у которых даты совпадают

Если Карта.ЭтоГруппа или Карта.НачалоДействия  = ГодМесяцДень Тогда
Продолжить;
КоенцЕсли;


вот как бы выглядела ваша программа в оптимизированом виде

    //берём объект из РС
    лкЗапрос = Новый Запрос;
    лкЗапрос.Текст = "
        |Выбрать //первые 50
        |    Ссылка
        |//    Наименование, так как все равно будет получать объект, то эти поля можно не получать в запросе
        |//    НачалоДействия
        |Из
        |    Справочник.РесурсныеСпецификации Спр
        |Где
        |    Не Спр.ЭтоГруппа
        |и   Спр.НачалоДействия <> &ГодМесяцДень //универсальнее использовать параметр
        |//и    Не Спр.ПометкаУдаления //!!! надо анализировать пометку удаления?
        |";
    ГодМесяцДень=Дата(2015,2,1);
    лкЗапрос.УстановитьПараметр("ГодМесяцДень",ГодМесяцДень);
   
    лкРезультат = лкЗапрос.Выполнить().Выбрать();
   
    //пробегаемся по всем обектам РС
    лкСчетчик = 0;
    Пока лкРезультат.Следующий() Цикл

        //если длинный цикл, полезно вставлять эту процедуру для прерывания обработки
        ОбработкаПрерыванияПользователя();

        //с помощью процедуры Состояние полезно выводить, хотя бы счетчик количества обработанных зписей, можно выодить % и т.д.
        лкСчетчик = лкСчетчик + 1;
        Состояние("Обработано: " + лкСчетчик );

        лкКарта = лкРезультат.Ссылка.ПолучитьОбъект();
        сообщить("РС = " + лкКарта.Наименование);           
        Сообщить("1 = " + лкКарта.НачалоДействия);
        лкКарта .НачалоДействия=ГодМесяцДень;
        Попытка
            //иногда при записи могут возникать ошибки
            лкКарта.Записать();
            Сообщить("2 = " + лкКарта.НачалоДействия);
        Исключение
    лкОшибка = ОписаниеОшибки();
        Сообщить(лкОшибка);
        КонецПопытки;
               
    КонецЦикла;


примерно так, могут быть опечатки, протестируйте
Помогло? - Нажми СПАСИБО!!!
                       :)

Оффлайн Рексарыч

  • *
  • Сообщений: 10
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-12-19
  • Сайт: 
MuI_I_Ika, спасибо за наводку по учебнику.

LexaK, премного благодарен. Не ожидал такого подробного анализа моего кода :zebzdr:. Приятно удивлён.

Оффлайн vitasw

  • *****
  • Сообщений: 2575
  • РЕПУТАЦИЯ: 311
  • КПД: 12%
  • Регистрация: 2015-02-10
  • Сайт: 
  • Профессия: Программист 1С
на диске ИТС есть хороший раздел по оптимальному...

Позволю себе чуть-чуть оптимизировать оптимизированное.
ИЛИ как вариант (конечно хуже 1.)
согласен, поэтому предлагаю использовать в(&Параметр)

Всякие операторы: Состояние(), Сообщить() - нужно относится очень осторожно. С точки зрения платформы - это довольно затратные операции.

Оффлайн LexaK

  • *****
  • Сообщений: 1267
  • РЕПУТАЦИЯ: 347
  • КПД: 27%
  • Регистрация: 2012-05-16
  • Сайт: 
  • Профессия: Программист 1С
vitasw, как это использовать? вернее зачем?
Цитировать
согласен, поэтому предлагаю использовать в(&Параметр)

автору надо поменять дату, достаточно по <> (не равно) выбрать только нужные элементы справочника и изменить только их.

Рексарыч,
Если ответ помог, не забываем давить кнопку спасибо? B)
Помогло? - Нажми СПАСИБО!!!
                       :)

Оффлайн vitasw

  • *****
  • Сообщений: 2575
  • РЕПУТАЦИЯ: 311
  • КПД: 12%
  • Регистрация: 2015-02-10
  • Сайт: 
  • Профессия: Программист 1С
Моя оптимизация без привязки к исходной задаче. В общем случае "или" хорошо заменяется на "в"

Оффлайн LexaK

  • *****
  • Сообщений: 1267
  • РЕПУТАЦИЯ: 347
  • КПД: 27%
  • Регистрация: 2012-05-16
  • Сайт: 
  • Профессия: Программист 1С
Моя оптимизация без привязки к исходной задаче. В общем случае "или" хорошо заменяется на "в"

а где вы ИЛИ увидели? в запросе стоит И !
    |...
    |Где
    |    Не Спр.ЭтоГруппа
    |И   Спр.НачалоДействия <> &ГодМесяцДень //универсальнее использовать параметр
    |...
Помогло? - Нажми СПАСИБО!!!
                       :)

Оффлайн vitasw

  • *****
  • Сообщений: 2575
  • РЕПУТАЦИЯ: 311
  • КПД: 12%
  • Регистрация: 2015-02-10
  • Сайт: 
  • Профессия: Программист 1С
Все, ОК, не заморачивайтесь, нет там никаких "или", вы все насоветовали правильно.


Теги:
 

Не формируется штрих код.Пишет ошибочный штрих код в тексте кода и подставляет стандартный штрих код.Подскажите как сформировать штрих код состоящий из букв и цифр?

Автор ZSSРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 671
Последний ответ 31 Янв 2017, 14:02
от Kironten
УПП. Ставлю останов в отладчике, при выполнении кода игнорируется останов

Автор ktu78Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 6
Просмотров: 1273
Последний ответ 06 Июл 2016, 09:45
от Luzer1C
Печать штрих кодов на форму печати выводятся 3 штрих кода на принтер выходит только 2.

Автор ZSSРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 505
Последний ответ 15 Май 2017, 08:59
от ZSS
Как изменить длину кода и длину порядка в плане счетов. БП (базовая) ред.3.0

Автор АлексеевнаРаздел Пользователям "1С - Предприятие 8"

Ответов: 1
Просмотров: 2316
Последний ответ 20 Ноя 2013, 12:01
от LordWizard
Формирование Штрих-Кода в программе "Управление небольшой фирмой"

Автор IgorVartaРаздел Закрытые темы

Ответов: 0
Просмотров: 4923
Последний ответ 10 Апр 2011, 23:46
от IgorVarta

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
171 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
51 Сообщений
alex0402
49 Сообщений
andron81_81
38 Сообщений
AIFrame
37 Сообщений
MuI_I_Ika MuI_I_Ika
33 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 240
  • Точка Скрытых: 0
  • Точка Пользователей: 1
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal