Основы менеджмента кода в 1С

Публикация № 57335

Разработка - Практика программирования

Продолжаем тему рефакторинга, начатую на примере "Глокой Куздры"
Итак, каковы основные принципы поддержания кода в рабочем состоянии?

Наверное, мало кто будет спорить с тем, что программа должна быть понятной не только компьютеру, но и человеку. С увеличением сложности и времени жизни проектов легкость понимания кода становится все более критичной. Действительно, программа, которая пишется множеством людей и может неоднократно изменяться, должна быть легко читаемой, иначе изменения и исправления ошибок могут привести к потере контроля над кодом и краху проекта. Возникает проблема менеджмента кода, т.е. поддержания кода в работоспособном и понятном состоянии. Каковы основные принципы такого менеджмента? Пойдем «от печки». Что такое язык программирования? Это прежде всего язык, т.е. система, когда совокупность символов (слово, предложение) отображает какой-то, пусть и виртуальный, но объект или действие над ним.

Нам повезло, мы программируем под 1С, где объекты и действия обозначаются словами русского языка. Это облегчает выполнения главного требования для понятной программы – самодокументируемости, т.е. названия должны соответствовать тому, что за ними стоит.

Основной принцип здесь таков – глядя на идентификатор процедуры или функции должно быть возможно сообразить, что она делает. Внимание! Главное не только и не столько «как она устроена» а «что делает»! Так же и с объектами – главное отразить их смысл в контексте решаемой программой задачи, а внутренние отношения и устройство уже вторичны. (не «МассивСтрок» а «СтруктураШапкиДокумента») Ведь придумывая имена-идентификаторы, мы «конструируем» язык, на котором нам потом описывать предметную область, описывать алгоритм решения задачи. И, когда идентификаторы подобраны правильно, решение задачи будет написано «почти по-русски» и не будет требовать каких-то дополнительных пояснений. Подробнее о стандартах именования 1С можно прочитать здесь, они вполне логичны.

Другое очень важное требование нормального языка – однозначность. Т.е. одним и тем же словом не должны называться разные сущности, и одинаковые сущности должны называться одинаково. Опускаясь с языковедческих высот на программистскую «землю» получим простейшие принципы:

  • При изменении действия процедуры или функции нужно менять и ее название. То же относится и к переменным с объектами. Да, это может быть затратным – но один раз аккуратно сделать поиск/замену проще, чем много-много раз обращаться к описанию, чтобы понять, почему, блин, делается совсем не то, что заявлено!
  • Нельзя использовать одну и ту же переменную для хранения разных сущностей.
  • Прежде чем завести новую переменную, новый объект или процедуру нужно всегда проверять, есть ли уже что-то похожее. Возможно, работать не придется и уже все сделано. Также возможно, что потребуется лишь незначительное изменение существующего кода.
  • Другое, очень важное требование языка – обозримость. Предложения в русском языке очень редко бывают длиной в страницу текста. Почему? Возможности человеческого внимания ограничены обычно магическими цифрами 7 и 3. Человек с нормальным вниманием (а мы совсем не сверхлюди, хоть и программисты с сертификатами) легко воспринимает 7 объектов или 3 их сочетания. Откуда такие цифры? Как вы понимаете, в двоичной системе сочетания 3 объектов как раз дадут 8 комбинаций, так что это, в общем-то, одна и та же цифра. «Оперативная память» человека имеет объем примерно равный 8 ячейкам памяти. Хочешь не хочешь, от этого приходится плясать. Программистский же вывод таков:

  • Блок кода длиннее 7-10 строчек должен оформляться в отдельную процедуру или функцию, с названием, которое описывает, что, собственно, этот блок делает.
  • Передавать в процедуру или функцию более трех параметров очень не рекомендуется. Даже три простейших булевских параметра это восемь их сочетаний, обработку которых необходимо предусмотреть! Возможно, стоит объединить несколько однотипных параметров в структуру или просто передать параметром объект, из которого они взяты. Также возможно стоит вовремя остановиться и перестать городить что-то большое и универсальное. Может быть, лучше разбить процедуру на две-три более мелких?
  • Если в операторе сравнения (Если … Тогда) используется больше трех условий или же они сложные, нужно сделать на их основе функцию или даже две-три (как положено, с «говорящими» именами) и использовать при сравнении результат их работы.
  • Понятно, что перечисленные рекомендации не догма, а лишь повод к размышлению. Можно нагородить и однострочный код так, что его невозможно будет понять. Главный принцип здесь таков – если код нельзя понять с первого взгляда, а особенно если захотелось написать комментарий, поясняющий его работу, значит, этот код требует изменения.

    Третье, менее формализуемое, но не менее важное свойство кода – стильность. Прежде чем изменять или дописывать чужой код, нужно в него вжиться. Понять, как он обычно манипулирует данными и объектами, как принято в нем делать определенные действия. И делать так же, в том же стиле. Понятно, что не стоит копировать ужасно написанный код, но с таким вообще сделать что-то хорошее трудно. Но если программа имеет хотя бы среднее качество, стоит перенять перед изменением даже ее стиль написания, наименований. Это позволит не отвлекаться потом на мешанину стилей тому, кто придет править код дальше (а возможно и самому через полгода).

    Когда же чаще всего вносятся все эти косметические правки в код? В самый светлый момент – когда все заработало! Тут, обычно, радостный программист бросает все «как есть» и убегает дальше. Но стоит потратить 5-15 минут на «уборку рабочего места», структурирование и причесывание получившегося результата, чтобы под результатом не стыдно было подписаться. Нужно еще обязательно отметить, что если код большой или при «причесывании» требуется изменять чужие и не до конца понятные строки, нужно действовать очень аккуратно. Маленькое изменение – тестирование – следующее маленькое изменение. Никогда не надо стирать и переписывать страницы кода, ни к чему хорошему это не приведет! Но при должном внимании и аккуратности задача поддержания изменяемого кода в рабочем состоянии вполне разрешима и даже не требует каких-то значительных затрат.
    Главное не давать себе лениться!

    Основные методы рефакторинга.

    Теперь можно поговорить более строго. Большинство из того, о чем говорилось выше, относится к недавно появившейся технологии программирования – рефакторингу. Рефакторингом кода называется его изменение с целью повышения логичности или понятности без изменения внешнего поведения программы. В модели программирования 1С возможны далеко не все его известные методы, но и оставшихся вполне хватит для того, чтобы сделать код ясным и четким.
    Итак, что у нас в арсенале?

  • Переименование. Думаю, здесь можно обойтись без примеров? Переименование просто устраняет несоответствие между названием и содержанием (действием).
  • Выделение процедуры/функции. Выделение блока кода с неявным смыслом в процедуру или функцию
    Было

    НомерКолонкиБазовый = СоответствиеТиповЦен.Получить(БазовыйТипЦен);
    Если  НЕ НомерКолонки = Неопределенно 
       И  НЕ  ЭлементыФормы.ТаблицаЦен.Колонки.Найти(\"Цена\" + НомерКолонки) = Неопределено Тогда
    {*******************************************}
    
    Стало
    Функция ЕстьКолонка(НомерКолонки)
      Возврат НЕ НомерКолонки = Неопределено
        И НЕ ЭлементыФормы.ТаблицаЦен.Колонки.Найти(\"Цена\" + НомерКолонки)=Неопределено;
    КонецФункции
    {*******************************************}
    НомерКолонкиБазовый = СоответствиеТиповЦен.Получить(БазовыйТипЦен);
    Если ЕстьКолонка(НомерКолонкиБазовый) Тогда
    {*******************************************}
    

  • Свертывание процедуры/функции. Обратное выделению процедуры/функции действие. Применяется, если текст процедуры в ходе изменения упростился настолько, что понятнее будет включить его напрямую в код, где вызывалась процедура.

    Было
    Процедура ОчиститьТаблицуОплат()
    	ТаблицаОплат.Очистить();
    КонецПроцедуры
    {*******************************}
    ОчиститьТаблицуОплат()
    {*******************************}
    
    Стало
    {*******************************}
    	ТаблицаОплат.Очистить();
    {*******************************}
    

  • Выделение структуры параметров процедуры Если в параметрах нескольких процедур используется один и тот же длинный набор параметров, очень полезно объединить параметры в структуры. Помимо компактности и логичности это даст возможность простого добавления еще одного параметра без переписывания заголовков множества процедур.

    Было
    Процедура ДвиженияПоРегистрамУпр(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоСкидкам,ТаблицаПоТоварамБезУслуг, Отказ, Заголовок) 
    {***************}
    
    Стало (помечтаем о нормальной процедуре проведения документа….)
    СтруктураДанныхДокумента = Новый Структура;
    СтруктураДанныхДокумента.Добавить(“СтруктураШапки”,СтруктураШапкиДокумента);
    СтруктураДанныхДокумента.Добавить(“ТаблицаПоТоварам”,ТаблицаПоТоварам);
    СтруктураДанныхДокумента.Добавить(“ТаблицаПоСкидкам”,ТаблицаПоСкидкам);
    СтруктураДанныхДокумента.Добавить(“ТаблицаПоТоварамБезУслуг”,ТаблицаПоТоварамБезУслуг);
    
    СтруктураПараметровПроведения = Новый Структура;
    СтруктураПараметровПроведения.Добавить(“Режим”,РежимПроведения);
    СтруктураПараметровПроведения.Добавить(“Отказ”,Отказ);
    СтруктураПараметровПроведения.Добавить(“ЗаголовокПриОшибке”,Заголовок);
    
    Процедура ДвиженияПоРегистрамУпр(СтруктураПараметровПроведения, СтруктураДанныхДокумента);
    
  • ……..Надеюсь, из всего вышесказанного уже понятны основные принципы? В основной книге по рефакторингу перечислены несколько десятков его методов, но лучше ведь не слепо копировать шаблоны, а немного думать и самому, тем более что контекст кодирования 1с значительно отличается от контекста обычных объектно-ориентированных языков. Самодокументируемость, однозначность, обозримость и стильность вполне обозримый набор принципов, позволяющих понять необходимость исправления кода программы и найти его путь. Только не забываем про главный принцип рефакторинга: за один шаг делается только одно изменение и его правильность подтверждается тестированием. Нам ведь хочется получить не только красивый и легко изменяемый в будущем код, но и сделать так, чтоб он продолжал работать правильно!
  • Специальные предложения

    Комментарии
    Избранное Подписка Сортировка: Древо развёрнутое
    Свернуть все
    1. MSensey 49 17.10.08 10:26 Сейчас в теме
    2. Душелов 3914 17.10.08 10:27 Сейчас в теме
    162. sgsoft 27.10.08 12:33 Сейчас в теме
    Несколько замечаний по поводу прочитанного.
    1) Каждая статья должна иметь ЦЕЛЬ - для чего все это пишет.
    Цитата(опуская "куздру - муздру" ) "Много говорилось о том, что названия процедур, функций и переменных должны быть «говорящими» должны соответствовать логике их использования"
    -и это есть цель статьи? Или цель поучить читающих правильному именованию переменных и процедур - для этого есть материалы самой фирмы 1С, или же цель - помочь начинающим струтуризировать свои подходы к созданию программ на 1С?

    2) Если цель -2, тогда нужно начинать с методов структурного программирования, которые и лежат в основе рефакторинга.
    а именно - ПРОЕКТИРОВАНИЕ ПРОГРАММ СВЕРХУ ВНИЗ. Я помню еще те времена, когда программы сначала оформлялись в виде блок-схем, так вот - Законченная блок-схема должна располагаться на 1-2 страницах. Расшифровка блока - также на 1(2) и т.д.
    Метод понятен.
    Поскольку от блок-схем ушли, то практически любую программу можно описать так
    //==============
    Процедура СделатьТоТо1(Парам1)
    СделатьСеТо1(новПарам1);
    ...
    СделатьСеТо1(новПарам1);
    КонецПроцедуры // СделатьТоТо1(Парам1)
    //---- основная программа
    СделатьТоТо1(Параметры1) ;
    СделатьТоТо2(Параметры2) ;

    Если ЧтоТО Тогда
    СделатьТоТо3(П3);
    Иначе
    СделатьТоТо4(П4);
    КонецЕсли;


    СделатьДействиеN(ПараметрыN);
    //---

    Далее развивать не имеет смысла, т.к. уже пересказан весь смысл данного выступления

    3) Хота про куздру (или как там ЕЁ) - занимательно, хотя бы потому, что с этой фразы давным-давно начинал преподаватель (на курсах по английскому языку на сдачу кандидатского минимума) свой рассказ про алгоритмы перевода научно-технических текстов.
    163. vkr 101 30.10.08 12:32 Сейчас в теме
    (162) п.(2) - ПОЛНОСТЬЮ согласен !!!
    В конце концов, любая программа (неважно - на 1С, на С, на Паскале или на ассемблере) ДОЛЖНА быть грамотно спроектирована, аккуратно написана и хорошо отлажена.
    А какими методами проектирования, написания и отладки пользуется аФФтар программы (или коллектив аФФтаров) - не сильно важно... :)
    Хотя, лично мне кажется, что в области современного "официального" 1С-программирования господствует принцип "срубания бабла". :(((
    Что, собственно, и дает основания для ведения подобных дискуссий, а также работу всем тут присутствующим... :)
    А по сути дела, могу в очередной раз посоветовать прочесть вечнозеленую книжку Фредерика Брукса "Мифический человеко-месяц"... :)
    3. MSensey 49 17.10.08 10:29 Сейчас в теме
    Это очередное самоутверждение или попытка поделиться знаниями?
    По-моему достаточно много книг в котрых давно написано более граммотно.
    4. Душелов 3914 17.10.08 10:31 Сейчас в теме
    (3) Написано, но 1С-чики их большей частью не читают, а тут с примерами на 8-ке. Пусть будет!
    6. MSensey 49 17.10.08 10:37 Сейчас в теме
    (4) плохо что не читают. Лучше читать то, чем это.
    5. keleg 322 17.10.08 10:32 Сейчас в теме
    (3) Мне не встречались статьи, в которых рефакторинг переносился на почву 1С (достаточно специфическую).
    Так что, увы, пока конкурентов нет. Если есть что-то "более грамотное" на эту тему - рад буду почитать.
    7. MSensey 49 17.10.08 10:37 Сейчас в теме
    (5) А разве примемы рефакторинга зависят от языка программирования?
    8. keleg 322 17.10.08 10:39 Сейчас в теме
    (7) да. Тот же Фаулинг базируется на ООП, которой в 1С нет в помине, соответственно, туча методов неприменимы.
    (6) Прочитают это, заинтересуются, будут читать и первоисточники.
    18. artbear 1180 17.10.08 15:02 Сейчас в теме
    (8) За незнание фамилии одного из ярых поборников и основоположников рефакторинга - Фаулера - минус :(
    А по статье Плюс, конечно :)
    Вещь полезная, но ИМХО как раз к языку не нужно сильно привязываться, большинство приемов рефакторинга достаточны универсальны для любого языка программирования.
    10. keleg 322 17.10.08 10:47 Сейчас в теме
    (3) А насчет самоутверждения... когда-то мне довелось написать программку, бывшую долгое время лучшей в своем классе (калькуляторы) в мире (все высшие награды всех мне известных софтверных архивов) NumLock Calculator, он же EldosAnyCalc
    Так что пересаживаться на 1C было очень интересно и познавательно. Правда в 7ке я бы жить нормально не смог :-) А вот 8ая платформа в своем роде шедевр, но это еще не все поняли :-)
    Kolunya; orefkov; artbear; PowerBoy; JohnyDeath; support; +6 Ответить
    14. JohnyDeath 297 17.10.08 12:38 Сейчас в теме
    (10) ты автор NumLock Calculator-а??
    Спасибо тебе огромное за него!!! До сих пор стоит и пользуюсь! Очень удобная штуковина!! В универе, помнится, даже что-то писал для него (вот что именно - не помню, но точно не шкурку).
    15. JohnyDeath 297 17.10.08 12:41 Сейчас в теме
    +(14) специально для Abadonna:
    В предложении "До сих пор стоит и пользуюсь!" я имел ввиду NumLock Calculator )))))))
    (сори за офф)
    Abadonna; +1 Ответить
    16. Abadonna 3857 17.10.08 12:52 Сейчас в теме
    17. CheBurator 17.10.08 13:34 Сейчас в теме
    (14) О!!! я тоже эту прогу юзал одно время, спасибо!
    19. artbear 1180 17.10.08 15:06 Сейчас в теме
    В (10) также поставил + - так что в целом положительная разница, т.е. моя оценка за статью.
    .
    Правда, за слова об отсутствии ООП хочется поставить небольшой минус.
    ООП нету в штатной 77 и 8, но для 77 все давно нами придумано и используется :) - ВК 1С++, лично я юзаю больше 6 лет.
    8 в этом плане очень ущербна :(
    194. orefkov 1990 30.08.16 16:25 Сейчас в теме
    (10) за NumLock Calculator огромное спасибо! Пользуюсь до сих пор.
    11. Abadonna 3857 17.10.08 10:50 Сейчас в теме
    (9) А чего воевать? Открываем ЖКК и на первой странице видим: "Встроенный язык (далее по тексту - язык) представляет собой предметно-ориентированный... "
    Они сами четко определяют язык как ПОП, а не ООП
    12. keleg 322 17.10.08 10:54 Сейчас в теме
    (9) ООП нет также и по принципам. Инкапсуляция ограничена (нельзя создавать свои объекты), наследования вообще нет, полиморфизма - тоже (а вот его очень хочется, чтоб можно было конфигурации на уровне методов, а не на уровне кусков кода подправлять).
    Ну и Нуралиев открыто заявлял, что "ооп нет и пока не планируется"

    13. coder1cv8 3475 17.10.08 12:06 Сейчас в теме
    Спасибо. Хорошая статья!
    20. Altair777 640 17.10.08 15:17 Сейчас в теме
    Ставлю плюсик, хотя не со всеми утверждениями согласен.
    Например, > Блок кода длиннее 7-10 строчек должен оформляться в отдельную процедуру или функцию
    Это, наоборот, может привести к трудночитаемости кода и, как следствие, к ошибкам.
    Я бы переформлировал бы.
    Блок кода, выполняющий более N-ого количества действий, должен оформляться в отдельную процедуру или функцию
    Serg_72; YauheniL; +2 Ответить
    21. JohnyDeath 297 17.10.08 15:33 Сейчас в теме
    (20) а тут я с тобой не соглашусь.
    По мне - автор статьи прав. Читаемость кода будет лучше, если он будет разбит на блоки по принципу "одна функция должна умещаться на одном экране" ((с) Малюгин Дмитрий)
    И не важно сколько раз она вызывается 1 или 101. Я, когда открываю глобальник ЗиКа, тихо ох*еваю. Вообще не представляю как там можно всё сопровождать...
    22. Altair777 640 17.10.08 15:40 Сейчас в теме
    (21) У меня 61 строка помещается :-)
    А вот посмотрите на этот кусок

    Код
    //---------------------------------------------------------------------------
    Процедура ПриНачалеРаботыСистемы()
    
       _СпрПользователи=СоздатьОбъект("Справочник.Пользователи");
       _СпрНаборыПрав=СоздатьОбъект("Справочник.КД_НаборыПрав");
    
       _СпрИдКон=СоздатьОбъект("Справочник.КД_ИдКон");
       _СпрДоступКон=СоздатьОбъект("Справочник.КД_ДоступКон");
    
       _СпрИдСпр=СоздатьОбъект("Справочник.КД_ИдСпр");
       _СпрДоступСпр=СоздатьОбъект("Справочник.КД_ДоступСпр");
       _СпрДоступСпрРекв=СоздатьОбъект("Справочник.КД_ДоступСпрРекв");
    
       _СпрИдДок=СоздатьОбъект("Справочник.КД_ИдДок");
       _СпрДоступДок=СоздатьОбъект("Справочник.КД_ДоступДок");
       _СпрДоступДокРекв=СоздатьОбъект("Справочник.КД_ДоступДокРекв");
    
       _СпрИдОтч=СоздатьОбъект("Справочник.КД_ИдОтч");
       _СпрДоступОтч=СоздатьОбъект("Справочник.КД_ДоступОтч");
    
       _СпрИдОбр=СоздатьОбъект("Справочник.КД_ИдОбр");
       _СпрДоступОбр=СоздатьОбъект("Справочник.КД_ДоступОбр");
    
       _СпрИдЖур=СоздатьОбъект("Справочник.КД_ИдЖур");
       _СпрДоступЖур=СоздатьОбъект("Справочник.КД_ДоступЖур");
       
       _СпрРоли=СоздатьОбъект("Справочник.КД_Роли");
    
       ОткрытьФорму("Обработка.КД_ЗаполнениеДоступа","НачалоРаботыСистемы");
    
       // установка текущего пользователя
       Если ПустоеЗначение(ИмяПользователя())=0 Тогда
          Если _СпрПользователи.НайтиПоКоду(ИмяПользователя())=0  Тогда
             _СпрПользователи.Новый();
             _СпрПользователи.Код=ИмяПользователя();
             _СпрПользователи.Наименование=ИмяПользователя();
             _СпрПользователи.Право=НазваниеНабораПрав();
             _СпрПользователи.Записать();
             _СпрПользователи.НайтиПоКоду(ИмяПользователя());
          Иначе
             _СпрПользователи.Наименование=ИмяПользователя();
             _СпрПользователи.Право=НазваниеНабораПрав();
             _СпрПользователи.Записать();
          КонецЕсли;
          _Пользователь=_СпрПользователи.ТекущийЭлемент();
          _ПользовательИмя=СокрЛП(ИмяПользователя());
          _Право=_СпрПользователи.Право;
       Иначе
          Предупреждение("Пользователь системы не определен!"
          +РазделительСтрок+"Продолжение работы невозможно.",10);
          СтатусВозврата(0);
          Возврат;
       КонецЕсли;
    
    КонецПроцедуры
    
    Показать полностью


    55 строк. Его нужно было на 6 процедур разбить? :D
    25. JohnyDeath 297 17.10.08 16:11 Сейчас в теме
    (22) я ж говорю: "если помещается - пусть будет". Не помещается - лучше разбить, но ес-но не всегда получается/хочется.
    Согласись, что ф-ию на 500 строк трудновато читать.
    28. Altair777 640 17.10.08 16:17 Сейчас в теме
    (25) А с чем Вы тогда не согласились в (21)???
    35. JohnyDeath 297 17.10.08 16:34 Сейчас в теме
    (28) я соглашался с тем, что
    Блок кода длиннее 7-10 строчек должен оформляться в отдельную процедуру или функцию
    правда с небольшой оговоркой: не 10 строчек, а экран или логически полное действо.

    С автором статьи я не согласен вот по этому поводу:
    Свертывание процедуры/функции. Обратное выделению процедуры/функции действие. Применяется, если текст процедуры в ходе изменения упростился настолько, что понятнее будет включить его напрямую в код, где вызывалась процедура.
    т.к. завтра надо будет не просто очистить таблицу оплат, а ещё и новую колонку добавить, то придётся по всему коду бегать....
    39. Altair777 640 17.10.08 16:38 Сейчас в теме
    (35) нет, в (21) ты не "соглашался" с автором статьи, а "не соглашался" со мной.
    Разницу этих в понятиях понимаешь?
    40. JohnyDeath 297 17.10.08 16:46 Сейчас в теме
    (39) Автор предлагал разбивать куски по "количеству строк", а ты по "количеству раз, который этот код используется".
    Разницу этих в понятиях понимаешь? (с)
    ;)
    43. Altair777 640 17.10.08 16:52 Сейчас в теме
    (40) да вы, батенька, читать не умеете
    > (39) Автор предлагал разбивать куски по "количеству строк", а ты по "количеству раз, который этот код используется".

    в (20) я написал
    Блок кода, выполняющий более N-ого количества действий, должен оформляться в отдельную процедуру или функцию
    44. JohnyDeath 297 17.10.08 16:58 Сейчас в теме
    46. Altair777 640 17.10.08 17:01 Сейчас в теме
    (44) "ой" не катит
    Извиняйся :-)
    А то обхаял меня и "ой"???
    49. JohnyDeath 297 17.10.08 17:03 Сейчас в теме
    (46) Да никто тебя не хаял. Значит написал непонятно, раз я не понял ;)))
    Извиняй!
    50. Altair777 640 17.10.08 17:07 Сейчас в теме
    (49) Извинения приняты

    Как говорил один профессор студентам - "Мы вам знания дали, но это не значит что вы их получили" :-)
    "Блок кода, выполняющий более N-ого количества действий, должен оформляться в отдельную процедуру или функцию"
    И где в этой фразе есть хоть одно слово "раз"?
    42. Altair777 640 17.10.08 16:50 Сейчас в теме
    (35) > А процедуры не нужно смотреть, чтоб понять, что они делают.
    Это должно описывать их название
    (36) > А зачем их все смотреть то? Ну есть они где то там, что то делают. Если из названия процедуры понятно что она делает, то зачем смотреть ей в код?

    А кто-нидудь может себе представить как разобраться в отчете, состоящем из 800 строк, разбитом на 100 процедур, из которых только 5 вызываются несколько раз?
    Тем более, если это не тобой написанный отчет и который нужно изменить?
    48. keleg 322 17.10.08 17:03 Сейчас в теме
    (42) У меня в калькуляторе было, если не ошибаюсь, 40000 строк. Ну как-то же я в них разбирался? :-)
    Это делается методом деления на слои. Например есть слой процедур которые собирают данные для отчета, есть те, кто их преобразовывает, есть те, кто выводит. Соответственно, главная процедура имеет три строчки - ПолучитьДанные(), ПреобразоватьДанные(), ВывестиДанные().
    Не нужно же смотреть на все 800 строк сразу? Я так вот точно не могу, я обычный человек :-)
    При правильном наименовании процедур и правильной передаче контекста и поиск ошибок, и добавление возможностей происходят легко.
    p.s.
    Язык 1С 7.7 устроен так, что оформление кода через функции часто невозможно. Увы, но это сильно ухудшает читаемость и ничего сделать с этим нельзя.
    52. Altair777 640 17.10.08 17:10 Сейчас в теме
    (48) Оъявлять переменные в цикле нельзя! Кажется... :-)
    Поэтому напишите мне свой кусок кода инициализации церез цикл, плиз
    55. keleg 322 17.10.08 17:17 Сейчас в теме
    (52) А добавлять элемент в список? :-)
    56. Altair777 640 17.10.08 17:23 Сейчас в теме
    (55)
    1) В цикле обхода справочника
    2) А зачем его добавлять? :-)
    просто обходить справочик, а не список значений
    179. DionX 99 25.11.08 04:06 Сейчас в теме
    (25)
    >>Согласись, что ф-ию на 500 строк трудновато читать
    фи! ты, брат, ни чо не понимаешь! :-D Открой Зик, написанную чуть ли не САМИМИ создателями САМОЙ 1С! К примеру, расчетную ведомость... Там только один из вариантов (!) формирования этой ведомости состовляет чуть более 1700 строк! А есть ещё второй вариант! И это всё одна процедура!!!!
    Меня на днях попросили сделать третий вариант, просто с другой группировкой (по категориям должностей), я, наивный, потирая руки от предвкушения лёгких денег открыл обработку и... молча сполз под стул. Пришлось писать третий вариант с нуля, и получился он у меня менее 150 строк вместе с тремя небольшими вспомогательными функциями!.. А ты говоришь "Согласись, что ф-ию на 500 строк трудновато читать" :-D
    З.Ы. Извините за некоторый офтоп, просто недавняя рана, накипело)))) Просьба статью с приложениями в пару книг по рефакторингу отправить Нургалиеву! :-D
    30. keleg 322 17.10.08 16:27 Сейчас в теме
    (22) Честно говоря - очень плохочитаемо.
    Как бы я сделал?
    1) все переменные с подчерком объединил бы в одну структуру, которую бы сделал в цикле по метаданным. Однако строчки три, точнее не скажу - 1с под рукой дома нету. Понятно, эту структуру бы возвращала функция. (список или таблицу - нужно подумать)
    2) То, что под Если и под Иначе бы тоже сделал процедурами

    Единственное, я 8ку знаю и люблю гораздо больше 7ки, потому не уверен, возможен ли в 7ке цикл по метаданным.
    33. Altair777 640 17.10.08 16:32 Сейчас в теме
    +32 Адресовано keleg по поводу (30)
    34. Vitek 17.10.08 16:33 Сейчас в теме
    (30)>возможен ли в 7ке цикл по метаданным.
    Возможен.
    37. Altair777 640 17.10.08 16:35 Сейчас в теме
    (34) Но здесь он не нужен. Я не объявляю глобально ВСЕ справочники
    41. keleg 322 17.10.08 16:50 Сейчас в теме
    (37) Тогда сразу встает вопрос - по какому принципу отбираются справочники автором кода? На этот вопрос долна ответить структура, их объединяющая.
    И логично в коде завести список этих справочников, и обозвать его чем-то типа "СписокСправочниковПоСкладам", по этому списку уже создать объекты для доступа к этим справочникам.
    45. Altair777 640 17.10.08 16:59 Сейчас в теме
    (41) > И логично в коде завести список этих справочников, и обозвать его чем-то типа "СписокСправочниковПоСкладам", по этому списку уже создать объекты для доступа к этим справочникам.

    Это однозначно было бы больше строк кода, чем при явном Создание Объекта + циклы ненужные

    Или для гибкости завести справочник, в котором бы хранились идентификаторы спровочников, которые должны инициализироваться ПриНачалеРаботыСистемы? :-)
    И вместо того, что бы смотреть код в Конфигураторе, надо было еще и Предпрятие открыть и там посмотреть КАКИЕ имегно справочники глобально объявляются?
    67. Altair777 640 18.10.08 01:15 Сейчас в теме
    Вопрос к keleg... Вы на 1С программировать умеете? :-)
    Вообще, и на v.7, в частности? Я имею в виду с достаточной квалификацией, разумеется
    в (30) Вы, например, пишите > потому не уверен, возможен ли в 7ке цикл по метаданным.
    Но это не мешает Вам обзывать язык, успешно выдержавший на рынке не один год, и еще пяток продержится.
    Между прочим, некоторые бухи еще в 6-ке работают :-)

    Пока Вы где-то нахватались сомнительных утверждений, типа - процедура должна быть не больше 10 строк и пытаетесь ввести это в догму.

    (60) > ЧеБурашка, нормальные среды программирования (и 1с8 в том числе) позволяют бегать от названий процедур к их реализации (F12 -Alt+-) и поэтому навигация здесь становится прозрачной и автоматической.
    в (61) Вам объяснили, что 7-ка это умеет. Значит, она нормальная среда программирования? :-)
    78. artbear 1180 20.10.08 08:37 Сейчас в теме
    (67) Altair777
    Зря наезжаешь на автора по поводу количества строка кода :(
    1. Все им сказанное насчет этого - это не догма, а некое правило, при соблюдении которого получаешь более простой и читабельный код.
    2. Весь смысл рефакторинга как раз в получении кода, который очень легко читать, понимать, изменять/сопровождать.
    Выделение неких смысловых кусков кода и оформление их на классы/методы/процедуры/функции с удобными и понятными названиями - одно из главных правил рефакторинга.
    Нет смысла заглядывать внутрь процедуры, если из названия и так понятно, что она(процедура) делает.
    Очень часто хороший код и не нуждается в комментариях, все понятно из названий идентификаторов :)
    3. Например, по твоему коду из ПриНачалеРаботыСистемы из (22) проще написать
    Код
    Процедура ПриНачалеРаботыСистемы()
      ИнициализацияСистемыКонтроляДоступа();
      Если УстановкаТекущегоПользователя() = 0 Тогда
         СтатусВозврата(0);
         Возврат;
      КонецЕсли;
    КонецПроцедуры
    Показать полностью

    В итоге тому, кто читает код этого метода, становится очень легко понять, что этот метод выполняет, без всяких лишних подробностей, только засоряющих экран.
    84. Altair777 640 20.10.08 10:13 Сейчас в теме
    (78) Да, я наезжаю на автора по поводу количества строк.
    Именно количества. В комменте 20 я предложил другое толкование. Вы его читали?
    Я использую разбиения кода на процедуры, но не отсчитывая по 10 строк, а разбивая по смыслу.

    П.С. А давайте сделаем небольшой подсчет.
    Дано 1000 строк кода
    Разбиваем его на 100 процедур.
    Получаем 1300 строк (Исходных 1000 + в каждой из 100 Процедур Процедура/КонецПроцедуры + 100 строк вызова процедур).
    А для вызова 100 процедур нужно написать еще 10 процедур - получаем 1320 строк (кажись, нигде не просчитался :-) ).
    На самом деле, это минимальные расчет. Может, кому-то захочется более смысловые процедурки писать по 5-7 строк
    Лично мне кажется, что такой арифметический подход к разбиению на процедуры отрицательно скажется на понимании и быстродействии.
    85. artbear 1180 20.10.08 10:51 Сейчас в теме
    (84) 1. Лично я при прочтении статьи автора и его ответов не увидел того, что это арифметический подход. ИМХО автор понимает/говорит, что подобное правило носит только рекомендательный характер, и главное, это смысловое содержание и удобство чтения кода.
    .
    2. (20) Конечно, читал. Этот пост и его резюме мне также не нравится :(
    Еще раз повторюсь - главное, это смысловое содержание и удобство чтения кода.
    .
    3. Сравни, плиз, свой код из (22) и мой рефакторинг этого кода из (78).
    Какой код легче прочесть и быстрее понять ? :)
    .
    Также прошу других участников высказаться по поводу этих 2-х вариантов одного кода :)
    .
    4. Не в обиду, но желательно тебе все-таки прочесть какую-нибудь книгу по рефакторингу. Рекомендую Фаулера "Рефакторинг" - это базовые знания по построению кода.
    Почитай, думаю, что многое станет проще и легче понять.
    DMSDeveloper; +1 Ответить
    86. Altair777 640 20.10.08 11:01 Сейчас в теме
    (85) по поводу п.3 согласен, это сырая заготовка, так что опрос проводить не стоит :-)

    по п.1 > Блок кода длиннее 7-10 строчек должен оформляться в отдельную процедуру или функцию, с названием, которое описывает, что, собственно, этот блок делает.
    Где-то там есть слово смысл?

    по п.2 А я разве спорил с этим? Наоборот :-)

    по п.4 Спасибо, обязательно. Как только будет время...
    24. Vitek 17.10.08 16:09 Сейчас в теме
    (21)А кто такой этот Малюгин Дмитрий?
    есть сомнения насчет его авторства указанной фразы :)

    На самом деле это один из принципов структурного программирования. Если я ничего не путаю это еще с Вирта пошло.
    26. JohnyDeath 297 17.10.08 16:13 Сейчас в теме
    (24) директор http://www.kint.ru/
    Может, конечно, и не он первый это сказал. Я этот принцип услышал от Константина (ака 33lab, noprogrammer).
    27. Altair777 640 17.10.08 16:15 Сейчас в теме
    Насчет того, что нужно структурировать код согласен на все 100%
    Но... надо же и чувство мерки иметь. Догм быть не должно.
    Отсчитал 10 строк - новая процедура, отсчитал 10 строк - новая процедура, отсчитал 10 строк - новая процедура... и т.д.?

    (21) to JohnyDeath. У вас во dсех процедарах и функциях не более 10 строк?
    Хотелось бы увидеть Ваш глобальный модуль, оформленный по этому принципу :-)
    29. Vitek 17.10.08 16:18 Сейчас в теме
    (27)Ты не понял...Это рекомендации, а не правила. Жестко выполнять их необязательно. Это как этика в обычной жизни, хороший стиль, воспитание.
    DMSDeveloper; +1 1 Ответить
    31. Altair777 640 17.10.08 16:27 Сейчас в теме
    (29) Слов нету... одни выражения
    > Это как этика в обычной жизни, хороший стиль, воспитание
    Тот, кто пишет в одной процедуре более 10 строк, - неэтичен и плохо воспитан?
    32. Altair777 640 17.10.08 16:31 Сейчас в теме
    (31) И сколько секунд у Вас ушло на то, что бы понять в чем суть этого куска кода? :-)
    А если бы всесто этого пришлось посмотреть от 3 до 5 процедур с циклами?
    36. Vitek 17.10.08 16:34 Сейчас в теме
    (32)>А если бы всесто этого пришлось посмотреть от 3 до 5 процедур с циклами?
    А зачем их все смотреть то? Ну есть они где то там, что то делают. Если из названия процедуры понятно что она делает, то зачем смотреть ей в код?
    JohnyDeath; +1 Ответить
    38. keleg 322 17.10.08 16:36 Сейчас в теме
    (32) Честно говоря - до конца не понял.
    А процедуры не нужно смотреть, чтоб понять, что они делают.
    Это должно описывать их название - Вы ж не лазите в толковый словарь, когда читаете текст?
    В этом-то и фокус.
    92. Altair777 640 20.10.08 12:13 Сейчас в теме
    +91 Мне самому неприятна эта разборка, но неиспирированный выпад Lomok в (29) и прямое оскорбление в (87) не смогла меня оставить равнодушным. Извините все, кроме Lomok.

    В (20) я просто предложил свое толкование. Это же коллективное творчество? Или все-таки догма? :-)
    Тогда к чему вообще возможность писать комментарии?
    134. Altair777 640 21.10.08 14:27 Сейчас в теме
    Насчет классиков... Лев Николаевич писал фразы на полстраницы, и ничего, в школе читали :-)

    > В хорошем коде
    А как понять достаточно ли хорош код? Особенно, если он чужой?
    Вот буквально сегодня натолкнулся в базе на новой работе
    Код
    Процедура Меню()
       Перем Зн;
       
       Меню = СоздатьОбъект("СписокЗначений");
       
       Меню.ДобавитьЗначение(1,"общий");
       Меню.ДобавитьЗначение(2,"общий с задолжностью");   
       Меню.ДобавитьЗначение(3,"по клиентам");   
       
       Если Меню.ВыбратьЗначение(Зн,,,,1) = 0 Тогда      
          Возврат;
       КонецЕсли;
       
       Если Зн = 1 Тогда
          ПланОплат(Зн);      //!!!!!!!!!!!!!!!
       ИначеЕсли Зн = 2 Тогда
          ПланОплат(Зн);      //!!!!!!!!!!!!!!!
       ИначеЕсли Зн = 3 Тогда
          ПланОплат(Зн);      //!!!!!!!!!!!!!!!
       КонецЕсли;
    КонецПроцедуры
    
    Показать полностью


    > насчет других можно будет уже вести более предметную полемику
    А чем моя полемика непредметна? Кое-кто из принципа накинулся на (20). Вопрос почему? Ответьте хоть кто-то
    Желательно, предметно :-)

    (133) > А тут тебе дают на одной страничке всё.
    Что всё? Такого же качества как и "Учебник по 1Сv77 от Казанского государственного университета"?
    http://infostart.ru/sites/587/
    По поводу некоторых аспектов качества я высказался в (114). Кажется, предметно :-)
    135. JohnyDeath 297 21.10.08 14:34 Сейчас в теме
    (134) ну ты ж книжки читать не хочешь, тогда на этой страничке для тебя всё.
    Мне кажется, что ты уже просто из принципа раздуваешь спор.
    136. artbear 1180 21.10.08 14:46 Сейчас в теме
    (134) Ну сам же понимаешь, что код не очень хорош :)
    Магические значения 1, 2, 3 наверняка используются и в методе ПланОплат.
    .
    Я бы исправил/отрефакторил его, наверное, так:
    1. Для каждой константы (1, 2, 3) заводим спец.переменные-константы с четким наименованием:
    Код
    чОбщий = 1;
    чОбщийСЗадолженностью = 2;
    чПоКлиентам = 3;
    Показать полностью

    2. Преобразую код - это только первое преобразование :)
    [/code]Процедура ВыбратьВариантПланаОплат_ЗдесьМожноВставитьНовоеНазваниеСтаройПроцедуры_ПланОплат() // поменяем название
    Перем лВариант;

    Меню = СоздатьОбъект("СписокЗначений");

    Меню.ДобавитьЗначение(чОбщий, "общий");
    Меню.ДобавитьЗначение(чОбщийСЗадолженностью, "общий с задолженностью");
    Меню.ДобавитьЗначение(чПоКлиентам, "по клиентам");

    Если Меню.ВыбратьЗначение(лВариант,,,,1) = 0 Тогда
    Возврат;
    КонецЕсли;

    ЭтоНазваниеЛучшеПоменятьДляБолееТочногоСмысл_Старый_ПланОпла­т(лВариант); // например, ВывестиПланОплатВПечатнуюФорму(лВариант)
    КонецПроцедуры[/code]
    .
    3. Блок кода по созданию меню и выбора из него лучше также вынести в отдельный метод-функцию ВыбратьПланОплат.
    .
    В итоге будет видно, что исходная процедура выродилась в две строки с вызовом 2-х разных методов. И если данный блок кода вызывается всего лишь один раз, его нужно перенести в место вызова, а процедуру удалить.
    .
    Вариантов множество :)
    137. artbear 1180 21.10.08 14:47 Сейчас в теме
    (136)
    Код
    Процедура ВыбратьВариантПланаОплат_ЗдесьМожноВставитьНовоеНазваниеСтаройПроцедуры_ПланОплат() // поменяем название
    Перем лВариант;
    
    Меню = СоздатьОбъект("СписокЗначений");
    
    Меню.ДобавитьЗначение(чОбщий, "общий");
    Меню.ДобавитьЗначение(чОбщийСЗадолженностью, "общий с задолженностью"); 
    Меню.ДобавитьЗначение(чПоКлиентам, "по клиентам"); 
    
    Если Меню.ВыбратьЗначение(лВариант,,,,1) = 0 Тогда 
    Возврат;
    КонецЕсли;
    
    ЭтоНазваниеЛучшеПоменятьДляБолееТочногоСмысл_Старый_ПланОплат(лВариант); // например, ВывестиПланОплатВПечатнуюФорму(лВариант)
    КонецПроцедуры
    Показать полностью

    .
    ЗЫ блин, как неудобно постить :(
    138. artbear 1180 21.10.08 14:51 Сейчас в теме
    (134) Цитата:
    >> > насчет других можно будет уже вести более предметную полемику
    >>А чем моя полемика непредметна?
    Зачем фразы вырываешь из контекста? :(
    Я специально написал обе фразы в одном предложении "После прочтения книг некоторые вопросы для тебе станут яснее, насчет других можно будет уже вести более предметную полемику."
    139. Altair777 640 21.10.08 15:18 Сейчас в теме
    (138) Извиняюсь, исключительно чтобы не перегружать комменты.
    А насчет выдергивания фраз... с моим (20) такое сотворили.... Чем он плох???
    Или будем от количества сстрок плясать все-таки?
    141. Altair777 640 21.10.08 15:28 Сейчас в теме
    (138) А чем моя полемика непредметна?
    142. artbear 1180 21.10.08 15:38 Сейчас в теме
    (141) А я не говорил, что она не предметна :)
    23. Altair777 640 17.10.08 15:43 Сейчас в теме
    +22 это я пишу свою собственную Систему Контроля Доступа К Объектам МетаДанных :-))
    47. Altair777 640 17.10.08 17:02 Сейчас в теме
    +45 а как вы предлагаете при этом подходе объявлять Глобальные переменные? :-)
    51. keleg 322 17.10.08 17:08 Сейчас в теме
    (47) а никак :-)
    Глобальные переменные -зло, и их можно объявлять только при существенных проблемах с производительностью.
    Недаром в последних редакциях 1с торговли (10.3.4 и выше) их изжили практически полностью.
    Однако, Вам уже пора читать первоисточники по рефакторингу, т.к. уже начали выходить за рамки статьи :-)))
    53. Altair777 640 17.10.08 17:12 Сейчас в теме
    54. keleg 322 17.10.08 17:15 Сейчас в теме
    Скажу по секрету - при жестком рефакторинге вообще переменные не используются :-) Даже локальные. Потому что в переменной может быть не то значение, которое ясно из ее названия, да и расширять код так легче получается. Но в 1с такое в чистом виде невозможно, поэтому я про это и не писал. Но в большинстве случаев все-таки возможно работать только через стек (через параметры функций)
    57. Lyekka 25 17.10.08 17:39 Сейчас в теме
    Мне ооочень.. ну ооочень интересно, открывал ли автор 1Совские стандарты разработки конфигураций. Не надо проходить мимо того, что написано до вас, господа.
    59. keleg 322 17.10.08 18:36 Сейчас в теме
    (57) Изучал и внимательно. По этим принципам и происходил часто отбор методов рефакторинга для этого текста.
    Потому как предлагаемое в 1С, например, свертывание длинных именований через точку в одну переменную прямо противоречит классическим принципам рефакторинга, (где все наоборот) и потому этот метод, чтобы не пугать сильно народ, в текст не вошел :-)
    58. CheBurator 17.10.08 18:20 Сейчас в теме
    > "одна функция должна умещаться на одном экране"
    ну и что?
    вполне допустима процедура на 500 строк, лишь бы смысловой блок был ясно определен... и вот он как раз бы - умещался на экране... и даже если он не умещается на экране - прозрачность связей и наименований позволяет легко ориентироваться....
    ..сильнее всего напрягают многоэтажные если....
    я например предпочитаю вместо

    Цикл
    Если Условие Тогда
    тралалаля длинное
    Иначе
    тпрутропурнгавов
    КонецЕсли;
    КонецЦикла
    ..
    юзать
    Цикл
    Если Условие Тогда
    тралалаля длинное
    ПРОДОЛЖИТЬ; //сразу ясно что смысловой блок - закончен, а не продолжается где-то в хвосте цикла
    КонецЕсли;

    //а тут пишу коомент типа
    //сюда попадаем если не нашли подходящей дельты
    тпрутропурнгавов
    КонецЦикла
    60. keleg 322 17.10.08 19:11 Сейчас в теме
    ЧеБурашка, нормальные среды программирования (и 1с8 в том числе) позволяют бегать от названий процедур к их реализации (F12 -Alt+-) и поэтому навигация здесь становится прозрачной и автоматической.
    Если ФункцияВыбора() тогда
    Процедура1()
    Иначе
    Процедура2()
    КонецЕсли

    Хочеться подробнее - жмешь F12/

    Наверное, следует все-таки в статье подчеркнуть особо, что то, что в ней говорится, применимо в основном к 1с8. С семеркой все в этом смысле плохо, у ней нет навигатора по методам, и, как совершенно уникальное явление, при работе со списками (в том числе с базами данных) не функции возвращают контекст
    Результат = объект.функцияПоиска()
    а контекст устанавливается процедурой поиска, что убивает нафиг на корню половину методов рефакторинга.

    Был когда-то у нас неплохой истребитель И-16. Был он в свое время весьма передовым, но отличался особой техникой пилотирования.
    Отличной от всех других истребителей, что в начале войны сыграло нехорошую штуку - И-16 в начале войны уже безнадежно устарел, а переучиваться на новые Як-3 и даже ЛаГГи и МиГи народу было долго и тяжело. Так вот произлошло с 1с7.7 - это неплохая среда, но она настолько вне мэйнстрима программирования, что начавшие программировать в 1с7 программисты потом очень тяжело переходят на другие языки и оказываются постепенно в изоляции.
    Меня убил когда-то такой, очень даже неглупый программер с большим опытом работы, который никогда не писал функций и не понимал, зачем они нужны.
    PeRom; DMSDeveloper; coder1cv8; +3 1 Ответить
    63. Abadonna 3857 18.10.08 00:40 Сейчас в теме
    (60)>что начавшие программировать в 1с7 программисты
    Все мои знакомые программисты на 7.7 не пытаются сейчас подняться от 7.7 к чему-то выше просто потому, что в свое время они снизошли до 1С до 1С с приличных языков. И в этом отношении для них 8-ка легче - привычнее программить
    64. Altair777 640 18.10.08 00:42 Сейчас в теме
    (60) > Так вот произлошло с 1с7.7 - это неплохая среда, но она настолько вне мэйнстрима программирования, что начавшие программировать в 1с7 программисты потом очень тяжело переходят на другие языки и оказываются постепенно в изоляции.

    ржунимагу!!!
    те восьмерочники, котрые есть сейчас они с неба упали уже готовыми программерами 1С v8 и на v.7 никогда не программировали? :-)
    82. Altair777 640 20.10.08 09:57 Сейчас в теме
    Для Lomok. Не понял, а чем Вам не понравился мой коммент 64?

    > 64. Altair777 18.10.2008
    >
    > (60) > Так вот произлошло с 1с7.7 - это неплохая среда, но она настолько вне мэйнстрима программирования, что начавшие программировать в 1с7 программисты потом очень тяжело переходят на другие языки и оказываются постепенно в изоляции.
    >
    > ржунимагу!!!
    > те восьмерочники, котрые есть сейчас они с неба упали уже готовыми программерами 1С v8 и на v.7 никогда не программировали? :-)
    > [-]: Lomok

    Объянитесь, плиз, по поводу минуса
    87. Vitek 20.10.08 11:02 Сейчас в теме
    (82)
    Я тоже не понял зачем ты мне минус поставил. Если хочешь хоть заминусуйся, мне пофигу на рейтинг. Минус тебе не за это, а за нежелание слушать и упирание рогами, тебе куча народу в этом треде одно и тоже объясняют, а ты все брыкаешься. Просто я дошел до этого поста и уже не выдержал.

    >те восьмерочники, котрые есть сейчас они с неба упали уже готовыми программерами 1С v8 и на v.7 никогда не программировали? :-)
    Да, а что? Представь себе, людям имевшим дело с "большими" средами для разработки, гораздо проще разобраться в восмере чем в семерке.
    coder1cv8; luns; +2 1 Ответить
    88. Altair777 640 20.10.08 11:38 Сейчас в теме
    (87) в (31) я задал вопрос про твой оскорбительный выпад в (29), на который ты не смог ничего ответить, и только после этого я минусанул. А ты просто отомстил, потому что соседний коммент Abbadonы ты плясанул, хотя там мысль примерно та же, что и в моем

    >тебе куча народу в этом треде одно и тоже объясняют
    разве? посмотри уточнение JohnyDeath в (35), Сhe Burashka в (58)

    >>те восьмерочники, котрые есть сейчас они с неба упали уже готовыми программерами 1С v8 и на v.7 никогда не программировали? :-)
    >Да, а что?
    И ни один из них никогда не работал в 7-ке?

    И кстати, по поводу рог... так как тебе самому "этика в обычной жизни, хороший стиль, воспитание" (см.29) не присуща...
    пнх
    89. Vitek 20.10.08 11:48 Сейчас в теме
    (88)>на который ты не смог ничего ответить
    Знаешь чел, во-первых это форум, я могу ответить через 10 тысяч лет, если тему не сдадут в архив. Во-вторых мне на самом деле по барабану, я тебе ничем не обязан.

    А если ты в (29) увидел оскорбление то извини...откуда ж мне знать что народ нынче такой нежный.

    Насчет коммента Abbadonы - я плюсую то что мне нравится, это не твое дело.

    Сраться с тобой по поводу того, кто что и как сказал, не собираюсь.

    >И ни один из них никогда не работал в 7-ке?
    А что, это обязательно?

    >И кстати, по поводу рог... так как тебе самому "этика в обычной жизни, хороший стиль, воспитание" (см.29) не присуща...
    Может и нет, а может и да. Не мне судить. Я такой какой есть, уж извините.

    >пнх
    А вот это говорит о твоем воспитании. Точнее о длинне аргумента.
    91. Altair777 640 20.10.08 12:03 Сейчас в теме
    (89) > А вот это говорит о твоем воспитании. Точнее о длинне аргумента.

    Просто пытаюсь говорить на одном языке. Опыт внедрения мне подсказывает, что с бухами нужно говорить на языке проводок, сальдо, etc., с производственниками - планов, объемов, сменных заданий и т.д. и т.п.
    И, кстати, и в мыслях не было меряться у кого аргмент длиннннннннннннее... Для тебя это идея фикс?
    94. Altair777 640 20.10.08 12:50 Сейчас в теме
    (89) >А что, это обязательно?
    Ну, конечно! :-)
    По словам keleg в (60) программисты 7-ки "потом очень тяжело переходят на другие языки и оказываются постепенно в изоляции"
    93. Abadonna 3857 20.10.08 12:43 Сейчас в теме
    (88)>потому что соседний коммент Abbadonы ты плясанул
    Ну честное слово, больше не буду коммментровать :))))))))
    Мужики, хватит ругаться!!!!!
    Altair777; +1 Ответить
    95. coder1cv8 3475 20.10.08 13:18 Сейчас в теме
    (82) Я "с неба упал" и чего? ) Никогда на 7.7 ничего не писал... )
    96. Altair777 640 20.10.08 14:00 Сейчас в теме
    (95) Это я знаю, читал Ваши посты :-)
    Это цепочка обсуждения началась в (60) очередным категорическим утверждением насчет негибкости мышления семерочников при переходе на другие языки. Своего рода клеймением, как мне показалось :-)
    Как и самих программистов, так и 1С версии 7, выпавшей из некого "мэйнстрима программирования".
    Пожалуйста, укажите ссылки на первоисточники с его стандартами и на доказательства несоответствия 7-ки им.
    97. coder1cv8 3475 20.10.08 14:06 Сейчас в теме
    (96) "Гибкость мышления" от человека зависит, конечно, а не от языка... )
    А спор что лучше/хуже бессмысленен, как и все "холивары"...
    98. Altair777 640 20.10.08 14:20 Сейчас в теме
    (97) вот-вот.. и я про это. Терпеть не могу когда навешивают ярлычки.
    Я просто высказал свое мнение, что умение работать в 1С 7 версии не делает программера хуже.
    100. Abadonna 3857 20.10.08 14:36 Сейчас в теме
    (98)>что умение работать в 1С 7 версии не делает
    Мое глубокое убеждение: можно не знать ни одного языка программирования, даже компьютер в глаза не видать никогда, но быть Программистом (есть алгоритмическое мышление и его некоторая нестандратность). А можно знать кучу языков, но при этом остаться простым шифровальщиком (ну не дал Бог!)
    hogik; vip; +2 Ответить
    102. AVARY 174 20.10.08 18:23 Сейчас в теме
    моя поправка к (100): не "шифровальщиком", а кодировщиком, кодером
    61. JohnyDeath 297 17.10.08 20:31 Сейчас в теме
    Наверное, следует все-таки в статье подчеркнуть особо, что то, что в ней говорится, применимо в основном к 1с8. С семеркой все в этом смысле плохо, у ней нет навигатора по методам, и, как совершенно уникальное
    Для конфигуратор 7.7 есть OpenConf и telepat ( http://infostart.ru/profile/1956/projects/1688/ ), которые делают работу в конф-ре НАМНОГО удобнее нежели в 8-ке. (даже таже работа со св-вами и методами объектов через ".") Навигация по методам ещё лучше чем! Например, там можно встать на наименование ф-ии в коде (точнее на её вызов), нажать ctrl+entr и тебя автоматом перекидывает на эту ф-ию! Вообще очень много прелестей нам подарил Саша Орефков (про телепат можно почитать тут: http://script-coding.info/Telepat.html ).
    Также для 7.7 есть проект 1с++ ( http://www.1cpp.ru/ ), который предоставляет нам ООП (и не только) для 1С!
    В общем не всё так плохо в 7-ке ;)
    62. CheBurator 18.10.08 00:30 Сейчас в теме
    > Так вот произлошло с 1с7.7 - это неплохая среда, но она настолько вне мэйнстрима программирования,
    имхо очередное заблуждение...
    цель 7.7 - быть не в мейнстриме программирования, а решать задачи юзеров, быстро и эффективно. В целом 7-ка с этим справляется.
    То, что сделано в 8-ке - по сравнению с 7-ой не настолько революционно, чтобы оправдывать НАСТОЛЬКО выросшие аппетиты к железу...
    ..у меня лично сложилось впечатление, что команда, писавшая клюшки, - куда-то "исчезла" и провести дальшейшее развите эволюционное клюшек - никто не смог... поэтому начали ваять "с нуля" 8-ку... имхо это еще подтверждается тем, что у 8-ки был весьма длительный срок старта... и только только сейчас снеговик выходит на такие позиции, когда в нем появляется что-то действительно новое, что с трудом можно было сделать в 7-ке...
    .. резюмируя: в деревне из 30 дворов вполне достаточно ездить на уазике, Камаз там - не нужен...
    65. Altair777 640 18.10.08 00:56 Сейчас в теме
    2 JohnyDeath, про чувство мерки я уже писал в этом блоге, но Вам это незнакомо
    Такая безапелляционность в своих суджениях, мяшко говоря, пугает.
    Тем более от человека, который не может прочитать не извратив фразу специально выделенную жирным шрифтом
    см. п. 20,21,25, 27,28,30 (в котом Вы, кстати, утверждаете что 7-ку знаете не очень, а в 61 хаете), 35,40,43-47,49,50
    70. JohnyDeath 297 18.10.08 13:53 Сейчас в теме
    (65) Altair777, оказывается ты тоже читать не умеешь! ;))))
    "опаньки" и заморские "сорри" тут не прокатят! Извиняйся. ;))))))))))))
    81. Altair777 640 20.10.08 09:49 Сейчас в теме
    (70) Я, конечно, дико извиняюсь :-)
    83. JohnyDeath 297 20.10.08 09:58 Сейчас в теме
    66. Altair777 640 18.10.08 00:58 Сейчас в теме
    +65 опаньки... вечер, усталость... сорри, п.60 не JohnyDeath написал
    Оставьте свое сообщение

    См. также

    Развитие 1С программиста Промо

    Практика программирования Личная эффективность Бесплатно (free)

    Делюсь своим опытом и видением развития 1С программиста.

    17.10.2018    18176    0    pashamak    62    

    Применение математических достижений в решении сложных задач бизнеса

    Математика и алгоритмы Бесплатно (free)

    Как правило, самые сложные задачи решаются с точки зрения математики очень легко. Но чтобы найти правильное решение, важно понять бизнес-цель, которую достигает эта задача. О практическом применении математических достижений для эффективного решения сложных задач бизнеса на конференции Infostart Event 2019 Inception рассказал Дмитрий Мишнов.

    25.05.2020    1541    0    Mishnov    16    

    JSON в запросах 1C#

    Практика программирования Бесплатно (free)

    Практические примеры работы с JSON непосредственно в языке запросов. Перенос курсов валют между УТ и БП. Требуется SQL Server 2016 и выше.

    24.04.2020    2446    0    zhichkin    2    

    Визионное программирование

    Практика программирования Бесплатно (free)

    Новый способ программирования и его практическая демонстрация.

    22.04.2020    3336    0    mkalimulin    60    

    Метод Кларка-Райта. Оптимальное планирование маршрутов грузоперевозок Промо

    Математика и алгоритмы Бесплатно (free)

    Одной из наиболее важных задач каждого предприятия, осуществляющего доставку грузов в крупных населенных пунктах, является сокращение издержек. Возможное решение данной проблемы заключается в сокращении пробега автотранспорта и, как следствие, уменьшении расхода ГСМ. Появляются такие вопросы ... - СКОЛЬКО НУЖНО МАШИН ДЛЯ РАЗВОЗКИ КОНКРЕТНОГО ОБЪЕМА ГРУЗА ПО АДРЕСАМ ДОСТАВКИ ? - КАК РАЗБИТЬ ТОЧКИ ДОСТАВКИ НА ОПТИМАЛЬНЫЕ ПО ПРОБЕГУ И ЗАГРУЗКЕ МАШИН МАРШРУТЫ ? ... В этой статье Вы найдете один из многих способов получить ответ на эти вопросы.

    10.02.2016    57468    0    mi1man    20    

    Принципы разработки

    Рефакторинг и качество кода Бесплатно (free)

    Доброго дня и хорошего кода, коллега.

    04.03.2020    2575    0    Правдин    27    

    Улучшение пооперационного планирования в 1С:ERP 2.4 внешними средствами

    Математика и алгоритмы Производительность и оптимизация (HighLoad) Бесплатно (free)

    Задача построения оптимального производственного расписания требует сравнения тысяч и десятков тысяч вариантов. Выполнять такие вычисления средствами платформы 1С Предприятие нецелесообразно. Как реализовать пооперационное планирование с использованием генетических алгоритмов и параллельных вычислений в докладе на конференции Infostart Event 2019 Inception рассказал генеральный директор компании «ИНТЕХ» Сергей Сафаров.

    02.03.2020    3653    0    ildarovich    7    

    Использование машинного обучения для решения инцидентов. Практическое применение

    Практика программирования Бесплатно (free)

    Продолжаю (и заканчиваю) тему с автоматическим решением инцидентов. Перейдем от теории к практике.

    25.02.2020    3143    0    Repich    9    

    Проставление большого количества галочек в активном окне винды Промо

    Практика программирования Сервисные утилиты Инструментарий разработчика Россия Бесплатно (free)

    Как проставить большое количество галочек подряд в любом окне винды

    07.11.2010    29982    0    Boris-Leleko    9    

    Использование машинного обучения для решения инцидентов

    Практика программирования Бесплатно (free)

    История о том, как я с помощью машинного обучения сокращал затраты на техподдержку.

    18.02.2020    4726    0    Repich    17    

    Качество кода: слабое связывание и высокая сопряженность (Low coupling and High Cohesion)

    Рефакторинг и качество кода Бесплатно (free)

    Поговорим о некоторых общепринятых подходах и принципах разработки кода.

    10.02.2020    6533    0    ivanov660    90    

    Часовой на страже логов

    Практика программирования Инструментарий разработчика Бесплатно (free)

    При поддержке решений, которые установлены у большого количества пользователей на различных системах, очень важно вовремя получать подробную информацию о возникших проблемах. О том, как собирать логи и анализировать полученные данные в трекере ошибок Sentry на конференции Infostart Event 2019 Inception рассказал Андрей Крапивин.

    13.01.2020    4797    0    Scorpion4eg    6    

    Алгоритм “хвост змеи для заполнения прямоугольной области”. Промо

    Практика программирования Бесплатно (free)

    При разработке http://infostart.ru/public/275582/ столкнулся с необходимостью распределить выделенные задания на прямоугольную область календаря. В результате родился алгоритм, который может пригодиться не только мне и не только в этой задаче.

    20.06.2014    26497    0    milkers    16    

    Как управлять качеством кода 1С, используя платформу SonarQube

    Рефакторинг и качество кода Инструментарий разработчика Бесплатно (free)

    При быстром росте функциональности проводить визуальный Code-Review для обнаружения некачественного кода проблематично. О том, как автоматизировать проверку качества кода 1С с помощью платформы SonarQube на конференции Infostart Event 2019 Inception рассказал ведущий разработчик компании «Командор» Олег Тымко.

    30.12.2019    6773    0    olegtymko    9    

    Приватный блокчейн и 1С популярно

    Практика программирования Блокчейн Бесплатно (free)

    Две предыдущие публикации на эту тему были сфокусированы преимущественно на технической стороне вопроса. Кроме того, их содержание оказалось понятным не каждому специалисту. В этой статье я постараюсь обяснить для всех и, что говорится, «на пальцах»: что такое приватный блокчейн, когда и зачем его следует применять и на что обратить внимание при использовании этой технологии в 1С.

    02.09.2019    4865    0    mkalimulin    140    

    Кодогенерация и метагенерация в 1С

    Практика программирования Инструментарий разработчика Бесплатно (free)

    В своем докладе на конференции INFOSTART EVENT 2018 EDUCATION Дмитрий Белозеров рассказал о разработке инструмента, позволяющего программно работать с метаданными 1С и писать скрипты для выполнения тех же действий, которые выполняет разработчик в конфигураторе –  с какими сложностями и нюансами пришлось столкнуться, и что получилось в итоге.

    26.08.2019    7712    0    kirovsbis    28    

    Предметно-ориентированное проектирование (3D) в 1С. Виртуальная машина. Промо

    Математика и алгоритмы Бесплатно (free)

    Проектирование программного обеспечения - это постоянная битва за простоту.

    03.06.2014    39215    0    Evgen.Ponomarenko    88    

    Как завести у себя в команде код-ревью. Отвечаем на вопросы

    Рефакторинг и качество кода Бесплатно (free)

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

    17.07.2019    8082    0    ivanov660    29    

    Интеграция сценарного тестирования в процесс разработки

    Практика программирования Инструментарий разработчика Бесплатно (free)

    Разработчик системы «Тестер» Дмитрий Решитко в своем докладе на конференции INFOSTART EVENT 2018 EDUCATION показывает, что процесс тестирования можно очень плотно интегрировать в процесс разработки, что внедрение тестирования – это возможность развития программиста как такового, позволяющая ему упорядочивать ход мыслей и оставаться «в фокусе». Навыки построения процесса кодирования на стыке с тестированием сокращают время на концентрацию, освобождают от страха перед изменениями и улучшают память разработчика.

    08.07.2019    8042    0    grumagargler    7    

    Управляй качеством кода 1С с помощью SonarQube

    Практика программирования Россия Бесплатно (free)

    Управляй техническом долгом проектов 1С с помощью SonarQube. В статье рассматривается пример применения SonarQube при разработке.

    07.07.2019    32732    0    olegtymko    229    

    Вывод текста в окно сообщений (Теперь и для 8.2 !!!) Промо

    Практика программирования Россия Бесплатно (free)

    Позволяет вывести любой текст набранный с клавиатуры в окно сообщений. Теперь работает для любых конфигураций 1с предприятие!!!

    29.05.2009    39087    0    Ёпрст    208    

    Выдержки из книги Чистый код

    Математика и алгоритмы Бесплатно (free)

    Недавно я прочитал книгу "Чистый код" Роберта Мартина (Robert Cecil Martin). В ней описываются принципы организации и форматирование исходного кода программы так, чтобы в дальнейшем было легко поддерживать такой код. Эта книга является библией для многих программистов, но вот в среде программистов 1С, к сожалению, не очень распространено чтение подобной фундаментальной литературы. Книга более 400 страниц и так много порой лениво читать, да и времени всегда не хватает. По этому я решил выделить в виде цитирования по разделам самые важные моменты. А также снабдил текст своими примерами кода.

    16.05.2019    8954    0    FreeArcher    105    

    О времени и 1С

    Практика программирования Разработка Бесплатно (free)

    Основы и особенности работы со временем в 1С. Как избавиться от боли при работе в разных часовых поясах. Что такое момент времени. И другое.

    01.04.2019    28712    0    YPermitin    60    

    Внутреннее качество разработки конфигураций 1С Промо

    Практика программирования Математика и алгоритмы Бесплатно (free)

    Пиши с верой в то, что твой читатель - это маньяк с дробовиком, знающий твой домашний адрес. Размышления на тему внутреннего качества кода при разработке/доработках конфигураций 1С.

    21.06.2013    36982    0    ig1082    50    

    Пример создания bridge (http api - tcp) для ККТ "Касса №1" ("К1-Ф")

    Практика программирования ККМ Кассовые операции Кассовые операции Разработка Россия Бесплатно (free)

    Пример создания bridge (http api - tcp) для ККТ "Касса №1" ("К1-Ф"). Данная статья будет полезна интеграторам, программистам, тем кто работает (интегрирует, разрабатывает) различное ТО либо железки. Версия и релиз технологической платформы не имеет значения.

    17.03.2019    5527    0    dmarenin    0    

    Быстрее чем INSERT! BULK-операции и примеры использования

    Производительность и оптимизация (HighLoad) Практика программирования Внешние источники данных Перенос данных из 1C8 в 1C8 Разработка Бесплатно (free)

    Microsoft SQL Server поддерживает так называемые BULK-операции, используемые для быстрого изменения больших объемов данных в базе. В статье пойдет речь о практических примерах их использования. Все примеры сделаны в контексте платформы 1С (а как иначе).

    09.03.2019    19818    0    YPermitin    40    

    Как писать понятные коммиты

    Практика программирования Разработка Россия Бесплатно (free)

    Как писать сообщения коммитов так, чтобы потом не было мучительно больно.

    06.03.2019    11530    0    Scorpion4eg    35    

    Горячие символы или новое это хорошо забытое старое. Промо

    Практика программирования Бесплатно (free)

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

    07.06.2013    25686    0    vasiliy_b    70    

    Что такое алгоритм?

    Математика и алгоритмы Бесплатно (free)

    Как ответить на этот вопрос и не попасть пальцем в небо.

    25.02.2019    6730    0    mkalimulin    274    

    Подготовка ребёнка к ЕГЭ по информатике. Часть шестнадцатая

    Практика программирования Разработка Бесплатно (free)

    Поиск выигрышной стратегии, завершающая статья.

    22.02.2019    4841    0    vasilev2015    0    

    Обратная связь от наших пользователей. Кнопка "Обратная связь" Промо

    Практика программирования Бесплатно (free)

    Хотите помочь пользователю написать Вам все, что он думает о вашей разработке? Вы точно не боитесь этого и идете навстречу пожеланиям людей? Тогда не поленитесь и добавьте небольшую кнопку в Вашу разработку - это кнопка "Обратная связь". Это поможет пользователю прямо из вашей обработки или конфигурации отпарвить Вам письмо, написать комментарий на инфостарте или открыть страницу с вашей разарботкой. При этом пользователю не надо будет вспоминать, где же он нашел эту разработку!

    10.12.2012    20431    0    www2000    8    

    Подготовка ребёнка к ЕГЭ по информатике. Часть тринадцатая

    Практика программирования Разработка Бесплатно (free)

    Исправление ошибок в программе, часть вторая.

    20.02.2019    5064    0    vasilev2015    3    

    Алгоритм ведения дебиторской задолженности(Часть 1) Промо

    Математика и алгоритмы Дебиторская и кредиторская задолженность Дебиторская и кредиторская задолженность БУ Бесплатно (free)

    Алгоритм построения дебеторской задолженности с привязкой отгрузки и оплат

    29.11.2012    19594    0    anterehin    15    

    Вредные советы (загрузка из таблиц Excel) Промо

    Практика программирования Загрузка и выгрузка в Excel Россия Бесплатно (free)

    Программисты просят вас предоставить данные в xls для загрузки? Обязательно почитайте и проверьте все ли пункты присутствуют в вашем файле.... Иначе загрузка будет скучной и не интересной для них.

    01.04.2012    25445    0    opx    23    

    Подготовка ребёнка к ЕГЭ по информатике. Часть восьмая

    Практика программирования Разработка Бесплатно (free)

    Шифрование и дешифрование информации. Закон Фано

    05.02.2019    4777    0    vasilev2015    1    

    Лицензии на программное обеспечение: что, как и для чего Промо

    Математика и алгоритмы Россия Бесплатно (free)

    Обзор и краткий сравнительный анализ основных видов лицензий на программное обеспечение (ПО). Специалисты и знатоки вопроса не найдут здесь ничего нового. Тем же, кто не владеет информацией, возможно, что-то здесь окажется полезным.

    17.07.2012    153118    0    Alraune    36    

    Расширяем свой багаж

    Практика программирования Разработка Бесплатно (free)

    Алгоритм решения возможной нетиповой задачи на собеседовании.

    29.01.2019    5496    0    scientes    15    

    Криптовалюты, а также иные взгляды на природу денег в терминах 1С

    Математика и алгоритмы Бесплатно (free)

    Это отчасти полемическая статья. Я задумал написать ее как ответ на другую хорошую статью о криптовалютах. Хотелось поспорить с некоторыми утверждениями автора, а ещё больше с некоторыми комментариями. А чтобы текст был более понятным для местной аудитории, я решил использовать, где только возможно, терминологию и практику 1С.

    28.01.2019    5645    0    mkalimulin    89    

    Подготовка ребёнка* к ЕГЭ по информатике. Часть пятая

    Практика программирования Разработка Бесплатно (free)

    Маршрутизация. Протокол IPv4 для ЕГЭ.

    27.01.2019    5002    0    vasilev2015    5    

    Подготовка ребёнка* к ЕГЭ по информатике. Часть четвертая

    Практика программирования Разработка Бесплатно (free)

    Решение систем логических уравнений повышенного уровня сложности.

    25.01.2019    5192    0    vasilev2015    0    

    Как писать код? Технологии древних цивилизаций, или все новое - это хорошо забытое старое

    Математика и алгоритмы Бесплатно (free)

    Все современные технологии - это развитие и доведение до ума (или маразма) древних идей. За последнее время не придумали ничего нового - все, что мы видим, было придумано тысячи лет назад. Не является исключением и программирование, которое в сути своей является переводом с языка условностей технического задания или заявки пользователя в формализованный и абсолютно точный язык математической логики. А логику придумали (по крайней мере первыми опубликовались в ведущих научных журналах) еще древние греки.

    23.01.2019    10994    0    starik-2005    43    

    Подготовка ребенка* к ЕГЭ по информатике. Часть третья

    Практика программирования Разработка Бесплатно (free)

    Алгоритмы рекурсии, логические задачи. Подготовка к ЕГЭ.

    22.01.2019    6613    0    vasilev2015    0