Управление качеством кода

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

Разработка - Математика и алгоритмы

SonarQube BSL АПК acc качество cci

133
О SonarQube, АПК, EDT. Какие преимущества дает их использование. Для каких команд подходит.

Зачем управлять качеством кода.

    Уровни стандартов

    Почему стоит соблюдать стандарты.

        Стандарт это ответ на решенную проблему

        Экономия мыслетоплива

        Удешевление рабочей силы

        Унификация стиля

        Приоритизация

        Сопровождаемость

        Ускорение разработки

    Как проверять качество

        Самоконтроль

        Двойное чтение кода

        Тесты

        Автоматические проверки

    Как статические анализаторы кода улучшают жизнь.

Кому стоит управлять качеством.

Советы по отслеживанию качества

        Проверяются только модули со снятыми замками

        Важно не решить все проблемы, а не вносить новые

        Правило бойскаута

        Нужно четко разделять - это ошибка, тех.долг или ложное срабатывание

        Решить все проблемы не получится

Примеры проверок

    Синтаксическая конструкция вида "Если...Тогда...ИначеЕсли..." должна содержать ветвь "Иначе"

    ТекущаяДата()

    Превышена длина строки

    Орфография

    Отсутствует комментарий к экспортной процедуре (функции)

    В модуле должны быть определены стандартные области

    Установлено право "Интерактивное удаление"

    Использование устаревшей процедуры

    Недопустимый вызов служебной процедуры или функции другой подсистемы

Выводы

 

Это дополнение (продолжение) к статье Олега “Управляй качеством кода 1С с помощью SonarQube”. Как управлять качеством так же писал Никита “Управление техническим долгом - Концепция Continuous Inspection”.

Зачем управлять качеством кода.

В этом разделе попробую продать идею, что правильно писать код - правильно. И как это - правильно.

Нужно как-то измерить внутреннее качество кода.

 

Внутреннее, потому что конечный пользователь этого качества не видит. Это первая холиварная часть - зачем что-то улучшать, что не видит пользователь?

Качество. А что такое качество кода? Каждый разработчик понимает под этим что-то свое. Это вторая холиварная часть. Особенно когда речь заходит о затратах на поддержание этого качества.

Измерить. Если хотим этим управлять, это нужно мерить. И тут тоже без холивара не обходится. Одним кажется важной одна метрика, другим наоборот.

 

Сплошные холивары.

 

Единственный работающий подход для разрубания холиваров - зафиксировать вариант законодательно. Кто соблюдает законы - те молодцы, кто не соблюдает - получает штраф и начинает соблюдать.

 

Законы при разработке в 1С это "Система стандартов и методик разработки конфигураций для платформы 1С:Предприятие 8"

 

Негласные правила в определении качества: Когда программист смотрит на такой код - вырывается “Ах, что же это такое???”, только матерно. Сокращенно ЧБ. Если код постоянно вызывает ЧБ, то тут нужен стандарт, чтобы так больше не писали. Этот подход используется при добавлении диагностик в https://github.com/1c-syntax/bsl-language-server/issues

 

Уровни стандартов

 

  • Промышленные стандарты (из других языков). На них наткнетесь в интернетах и в книгах. Люто рекомендую прочитать Совершенный код и Чистый код
  • Стандарты 1С https://its.1c.ru/db/v8std. Доступ открыт и бесплатен.
  • Внутренние стандарты Компании. Сюда обычно входят правила префиксации. Правила доработки конфигурации на поддержке для упрощения обновления. Правила идентификации изменений - от любимых // Здесь был Уася по задаче 000666 до правила текста оформления коммита.
  • Личное. Я это называю почерком, когда автора кода легко определить по стилю, но при этом негатива это не вызывает. У меня это “дышащий стиль” с кучей пробелов и отступов, правилами именования, похожими на венгерскую нотацию и другими шаблонами.

 

Чем выше уровень, тем ближе к разработчику. Но если уровни конфликтуют между собой - нужно быть уверенным на 146% в целесообразности. Нужно четко понимать что стоит за нижестоящим стандартом и почему переопределен.

 

Пример хорошего переопределения - префиксация имен у объектов при доработке конфигурации на поддержке. Стандарт 1С запрещает спец. префиксы. Но префиксы помогают при определении принадлежности объекта.

 

Пример плохого переопределения - идентификаторы изменений прям в коде с сохранением старого кода.

 

Почему стоит соблюдать стандарты.

Стандарт это ответ на решенную проблему

Многие стандарты написаны после того, как было потрачено много человекочасов на решение проблемы. Эти правила - превентивные меры по борьбе с ошибками. Придерживаться стандарта стоит минуты, ошибка из-за нарушенного стандарта может превратится в недели потраченного времени. Не писать код, который приводит к ошибке - это и есть качество.

Все стандарты по запросам появились после анализа долгих запросов. Причем долгими в проде.

Экономия мыслетоплива

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

Удешевление рабочей силы

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

Унификация стиля

Соблюдение стандартов приводит код к единому стилю. А у единого стиля есть одна особенность - разработчик перестает различать где его код, а где коллеги. Разработчик одинаково хорошо начинает разбираться и в своем и в чужом коде. А это приводит к резкому уменьшению желания переписать все с нуля. Меньше энергии тратится на негатив, больше на креатив.

Приоритизация

Что разработчик берет в работу в первую очередь? Важное или срочное? Разработчик берет в первую очередь понятное! (ц) Максим Дорофеев.

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

Сопровождаемость

Качественный код проще поддерживать и дорабатывать. Чем хуже написан код, тем сложнее найти ошибку или доработать под новые требования. А желание переписать все с нуля возрастает. И наоборот, в качественном коде ошибки становятся очевидными. Можно даже сказать, что при качественной разработке потраченное время переносится с сопровождения на создание по выгодному курсу - качественный код на этапе создания тратит дополнительные минуты, экономя часы и дни поддержки.

Ускорение разработки

Предыдущие пункты складываются в этот. Писать качественно и по стандартам серьезно ускоряет разработку - за счет уменьшения времени на отладку, уменьшения времени на прилетевшие ошибки, на разбирательство в чужом коде, на разбирательство в своем коде…

 

Абстрактный придуманный пример в работе двух команд. Быстрой - которые фигачат код, игнорируя тех. долг, и качественной - у которой качество превыше всего.

 

 

 

Быстрая команда

Качественная команда

Неделя

Задач

Комментарий

Задач

Комментарий

1

20

Ура! Новый проект. Фигачим.

2

Настраиваем окружение, разворачиваем инфраструктуру.

2

20

Все еще фигачим.

2

Продолжаем настраивать, обучаем использованию инструментария

3

18

После выката на прод кое-что отвалилось. Правили.

10

Начали что-то делать. Идет с трудом. Пишем тесты.

4

16

Очередное обновление и очередные проблемы в проде.

15

В проде были проблемы. Писали тесты, чтоб больше не повторилось.

5

15

Один разработчик на дежурстве постоянно мониторит и правит ошибки на проде.

18

Фигачим, вроде втянулись.

6

10

На этот раз прод упал очень сильно. Чинили 2 дня всей командой.

20

Успеваем решить все запланированные задачи и начали писать подробную документацию. Хотя нет, вон статья интересная про сбор ТЖ в ELK, надо попробовать у нас.

7

12

Делать задачи все сложнее. Уже мало кто помнит и понимает почему сделано так.

20

 

8

9

Уволился один из разработчиков.

22

Двоих застукали за опенсорсом в рабочее время, надо с ними что-то сделать.

9

7

Нашли замену. Тратим больше времени на объяснение, чем на разработку.

23

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

10

5

Неделя чистоты. Нового ничего старались не делать - только чинили ошибки.

24

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

11

10

Много замечаний по выполненным задачам

20

Поймали критические ошибки до выкатки в прод. Поправили. Вроде все хорошо.

12

4

Опять упал прод.

25

Выполнили все задачи за 3 дня. Получили разрешение на разработку внутренних проектов.

13

0

Настолько все фигово, что нужно переписать все с нуля. При попытке реализовать новую задачу что-то обязательно отваливается из старого.

20

Скууучно. Статью написать может про управление качеством?

 

 

На этом абстрактном примере, где топлю за “качественную” команду и критикую “быструю” заметны интересные вещи:

 

  • Хоть “качественная” команда и сделала больше уже на 9 неделю - за первые 9 недель они сделали существенно меньше. В реальности этот срок зависит от множества факторов и может быть как 4 недели, так и 4 года. Ускорение при качественной разработке - игра в долгую.
  • Первые 2 недели “качественная” команда раскачивалась и вообще не выдавала задач. Время на раскачку в реальности так же может сильно отличаться. Если процессы известны, инструментарий знаком, команда уже сработана - на раскачку может уйти и 1 день. А если команда это видит в первый раз - тут может и месяца не хватит. Не каждый бизнес готов ждать подготовки к старту проекта больше месяца.
  • Если у вас не больше 100 задач, какую команду выберите? А у какой команды ФОТ выше?
  • Регрессионная спираль смерти - когда невозможно делать новый функционал, т.к. все силы уходят на правку ошибок в существующем, и каждое исправление привносит новые ошибки - это не миф. Я это видел.
  • То, что команда делает больше задач за неделю, чем на проекте с нуля - тоже чистая правда - при настроенной инфраструктуре, хорошем покрытии тестами и проверках не сложно изменить даже ядро системы. А чаще выходит, что новые хотелки решаются 3мя строчками кода.

 

Будем считать, что следование стандартам прямо влияет на качество кода. И следовать стандартам это правильно.

Как проверять качество

Самоконтроль

Учим стандарты, держим открытой вкладку со стандартами, мониторим изменения. Стараемся писать хорошо сразу, используем шаблоны.При написании кода мы так и поступаем. Вопрос только в том - насколько помним стандарты и сколько держим в голове.

Двойное чтение кода

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

Под двойным чтением подразумеваются и парное программирование, и проверка старшим разработчиком, и код-ревью, и аудит различной степени внешности и другие способы, когда код смотрят как минимум 2 пары глаз.

Тесты

При разработке с использованием тестов код сам собой меняется. Становится “тестопригодным” и это благополучно сказывается на качестве.

Тесты и нужны для проверки качества решения.

Автоматические проверки

1С:Автоматизированная проверка конфигурации. Умеет проверять на соответствие кучу стандартов, но делает это долго, а результаты смотреть не удобно

1С:EDT. Встроенная проверка ищет потенциальные ошибки без привязки к стандартам. Проверяет типы, использование переменных и методов. Но воспользоваться этой проверкой можно только в EDT.

Платный плагин для SonarQube. Из плюсов - может почти все. Из минусов - стоит денег.

Опенсорсный плагин для SonarQube. А точнее BSL-LS, который умеет отдавать найденные предупреждения в SonarQube, VSC. Проверок пока немного, но он быстрый и быстроразвиваемый. (Да-да, и эта статья преследует цель привлечь побольше народу к участию в разработке - кодом, идеями, популяризацией)

 

За счет наработок разной степени костыльности результаты проверок АПК, EDT и BSL-LS можно получить в одном едином, красивом и специально предназначенном для этого месте - в SonarQube.

Как статические анализаторы кода улучшают жизнь.

То, что находят - показывают. Нет человеческого фактора с “просмотрел”. При самостоятельном аудите, код-ревью, парном программировании просто пропустить ошибку. Робот не пропустит.

Ловят неочевидные ошибки. Некоторые ошибки поймать почти невозможно. Очепятки, смешивание латиницы и кириллицы, неиспользуемый экспортный метод. Иногда даже смотришь на предупреждение и думаешь “Мдааа, похоже анализатор сломался. Ловит ошибки там, где их нет”. А потом присмотришься, и понимаешь, что это реально ошибка.

Ловят такие нарушения стандартов, которые программист еще не знает. Незнание стандартов не освобождает от ответственности. Стандарты могли изменится, могли появится новые. Помнить актуальную версию невозможно. Робот может.

Беспристрастность. Находит нарушение - показывает. Никаких излишних придирок или снисхождения.

Экономия времени. Не нужно тратить время на поиск этих замечаний. Или перед код-ревью прогнать код анализатором и не тратить время на разбор пойманных ошибок. Или в случае ПР автор сам увидит ошибки и предупреждения и поправит, а не дождется, когда на них укажут другие разработчики.

 

Писать код хорошо - хорошо, а статистические анализаторы упрощают и улучшают этот процесс. Бери и делай!

 

Но есть нюанс. Это не бесплатно. Нужно потратить время на изучение стандартов, на развертывание инструментов, на поддержку и обновление, на изучение инструментов. Это точно окупится?

Кому стоит управлять качеством.

 

Алистэр Коуберн в статье “Каждому проекту своя методология“ привел матрицу сложности проекта.

По вертикали - критичность проекта. Что можно потерять в случае ошибок. Пользователи потеряют в комфорте (Comfort - C), немного денег (Discretionary money - D), много денег (Essential money) или жизнь (Life - L).

По горизонтали - размер команды. Больше людей - больше сложных связей.

Каждый переход проекта вправо или вверх - это резкое усложнение и удорожание проекта и более серьезные процессы и методологии для выполнения.

 

 

Жизнь (L)

L3

L10

L30

L80

L150

L300

L600

Много денег (E)

E3

E10

E30

E80

E150

E300

E600

Немного денег (D)

D3

D10

D30

D80

D150

D300

D600

Комфорта (C)

C3

C10

C30

C80

C150

C300

C600

 

1-4

6-20

20-40

50-100

100-200

200-500

500+

 

Если у вас простой зеленый проект C3 - управление качеством кода не нужно. Будет только мешать и тратить время. Сюда относятся учебные проекты, проекты-игры, вспомогательные инструменты для команды, типа багтрекера.

Желтые проекты D3 и C10 - управлять качеством не помешает, но профит будет минимальный. Проводите двойное чтение кода, гонять анализаторы, экспериментировать с тестами. Это обычно внутренние базы компании - думаю сюда входят 80% фикси.

Оранжевые проекты- разработка небольших коробочных продуктов, автоматизация средних предприятий. Управлять качеством уже рекомендуется. Затраты на это окупаются. Без автоматизированных инструментов можно прожить, но это уже вопрос эффективности команды. Здесь уже стоит разворачивать то, что называют “Промышленными стандартами разработки 1С” - тесты, покрытия, сонар, пайплайны, девопс, гиты.

Красные проекты - разработка больших коробочных продуктов, автоматизация крупных предприятий. Здесь нужны полноценные и серьёзные процессы. Без управление качеством тут нельзя. Обязательные автоматические контроли, тесты, покрытие близкое к 100%, код прочитан дважды, в том числе безопасниками. Тут все серьезно.

Адовые проекты - не уверен, что такие есть на 1С. Если у вас такой проект - напишите как вы там вообще живете.

Советы по отслеживанию качества

Проверяются только модули со снятыми замками

Если замок стоит - это не наша проблема. Если снят - наша. В любом случае на эти ошибки повлиять не можем. На замках бывают не только конфигурации вендора, но и наша же конфигурация при "разветвленной разработке". Когда разрабатываю новую подсистему - в основной конфигурации создаю поставку, новую создаю на ее основе - там все на замках. Снимаю с замков только те объекты, которые правлю - и вижу ошибки только по ним.

Важно не решить все проблемы, а не вносить новые

После первоначального анализа впадаешь в уныние - сотни тыщ ошибок, человекогода на исправление. Правишь, правишь - а прогресс и незаметен. Многие в этот момент бросают автоматические проверки. А нужно лишь проверять новый код и не трогать старый. То же с тестами. Нужно не писать тесты на весь функционал, который и так работает. А писать нужно на новый, который еще не обкатан в проде.

Правило бойскаута

Отдельно выделю - Оставляйте код чище, чем застали. Сделайте чуточку лучше тот код, который трогаете при кодировании текущей задачи.

Нужно четко разделять - это ошибка, тех.долг или ложное срабатывание

Часто тех.долг хочется отметить пропуском. Ошибка в коде остается со всеми негативными свойствами. Но теперь найти ее становится еще сложнее.

Решить все проблемы не получится

Смиритесь. В проекте будет тех. долг. Если же упретесь и выведите в 0, то или маленький проект, либо потратили слишком много драгоценного времени на перфекционизм.

 

Примеры проверок

Некоторые из них выстрелили. Причем в ногу и больно.

Синтаксическая конструкция вида "Если...Тогда...ИначеЕсли..." должна содержать ветвь "Иначе"

Первое мнение о проверке - это перебор. Если нет ветки иначе, значит она не нужна и потоки правильно разносятся по ИначеЕсли. Но в какой-то момент психанул и везде, где в Иначе не должно заходить, расставил ВызватьИсключение “Мы тут не должны были оказаться”. И отвалились тесты. Оказалось что во многих местах, где был уверен, т.к. тщательно разрабатывал и тестировал, со временем что-то поменялось и появились скрытые ошибки.

ТекущаяДата()

Сравнительно недавно появился стандарт на запрет использование метода ТекущаяДата() , а может и давно и я о нем не знал. Впервые о запрете узнал, когда это подсветил сонар (через импорт из АПК). Еще подумал “за 10 лет кодинга ни разу не выстрелило в ногу, фигня, а не стандарт”.

А потом случился гейзен-баг. На моей машине, на контуре разработки, на контуре тестирования работало, а на стейдже нет. Было много перекидываний ответственности, был мат и оскорбления, были потрачены человекодни на поиск причины. В итоге нашли, что дело в часовом поясе (Денис, привет). И нужно было всего лишь не использовать ТекущаяДата().

Превышена длина строки

В стандарте указано, что не рекомендуется превышать 120 символов в строке. На проектах, что проверял на качество - это лидирующая по количеству срабатываний проверка. Каждый переопределяет допустимое количество символов под себя. Кто-то выставляет 180, кто-то 200. Я предпочитаю 140.

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

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

Орфография

Если ошибки орфографии встречаются в пользовательском интерфейсе - пользователь сразу считает программу косячной, даже если внутри ошибок нет. Это даже хуже ошибки рантайма.

Ошибки орфографии в коде не так заметны, но приводят к созданию дублирующегося метода или переменной. На форме есть реквизит Номенклатура, а в коде написал Номенкатура = ПолучитьНужнуюПозицию(). И код будет считаться валидным, и будет работать. Но неправильно.

А еще мы огребли от “Палета”и “Паллета”. Однозначно правильного варианта написания нет, как подсказывает гугл. Но в коде путаница приводила к реальным ошибкам. Решили, что раз проверка орфографии ругается на “Палета” и не ругается, на “Паллета”, то правильно так, как не ругается. Соответственно на остальные места будет подсветка. Добавлять в исключения запретили.

Отсутствует комментарий к экспортной процедуре (функции)

К ошибкам это не приводит. Но вот новый инструментарий улучшает качество анализа за счет таких комментариев. EDT умеет определять тип по описанию и выполнять проверки исходя из этого типа. А автогенерилки АПИ умеют собирать документацию по этим комментариям.

Ну и момент документирования тут есть. Все любят хорошую документацию. Писать ее, правда, никто не любит.

В модуле должны быть определены стандартные области

Также к ошибкам не приводит. Но повышает удобство разработки. Не нужно думать где размещать те или иные методы. Уже все придумано. При поиске нужного события - так же понятно где искать.

С развитием кодогенерации стандартные области будут еще более полезны.

Установлено право "Интерактивное удаление"

У вас когда-нибудь бывала ситуация, что кто-нибудь из властьимущих (у кого есть полные права в базе) непосредственно удалял объект из базы и потом там что-то ломалось. Я наверно каждый год трачу несколько дней на расследование таких ошибок и каждый раз это сводится к поиску - какая же роль дала право на удаление.

Использование устаревшей процедуры

Легко пропустить, что любимую процедуру в БСП или в другой библиотеке пометили устаревшей. Пометка устаревшей означает, что в одном из следующих релизов ее удалят. Если заранее не исправить эти места - после обновления можно сильно удивиться.

Недопустимый вызов служебной процедуры или функции другой подсистемы

А это уже об использовании приватных методов. Если публичные методы сперва делают устаревшими, чтобы было время на исправление. То приватные методы могут изменится в любой момент. Ну нет в 1С возможности сделать приватный метод на подсистему. Используете чужие приватные методы? Рискуете, что что-то отвалится в неожиданный момент.

Выводы

  • Определитесь, нужно ли качество на проекте. Точнее качество то точно нужно, но готовы ли за него заплатить временем или деньгами? “Технология очень быстрого результата” (она же фигакфигак и в продакшен, не путать с “Технологией Быстрого Результата”) не так уж и плоха.
  • Правильнее на управление качеством (Continuous Code Inspection если по заумному) смотреть как на инструмент. Инструмент применяется под конкретные задачи, процессы, методологии.
  • С течением времени порог на управление качеством будет снижаться. Верю, что наступит время, когда это будет обязательным инструментов при разработке с низкой ценой использования.
  • Даже если нет нужных проектов, или там это очень сложно развернуть - инвестирование в знания окупятся. При смене платформы, проекта, работы.
  •  

-----------------------------------

 

Как реально управлять качеством на реальных проектах в реале расскажет Олег на INFOSTART EVENT 2019.

 

 

133

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. Evil Beaver 6351 22.07.19 11:26 Сейчас в теме
Охрененно! Аффтар, пешы есчо, хорошо же получается!
theelectric; pbabincev; tsmult; PowerBoy; pavlov_dv; gubanoff; Winstoncuk; Labotamy; zeegin; olegtymko; Stepa86; +11 Ответить
2. mrXoxot 2213 22.07.19 11:34 Сейчас в теме
Очень здорово!
Пусть все получиться!
pbabincev; vlad.frost; Labotamy; +3 Ответить
3. artbear 1158 22.07.19 11:56 Сейчас в теме
(0) >Все любят хорошую документация

Опечатка.
4. artbear 1158 22.07.19 12:16 Сейчас в теме
(0) Отличная статья. Радует, что все больше разработчиков/команд обращают внимание на качество своей работы - статический анализ кода, автоматические тесты, CI, DevOps и вот это вот все.
pbabincev; pavlov_dv; YPermitin; +3 Ответить
5. artbear 1158 22.07.19 12:24 Сейчас в теме
Проверяются только модули со снятыми замками.
Если замок стоит - это не наша проблема.


Вот тут на самом деле непросто.
Да, такое решение упрощает жизнь, скорость анализа, количество замечаний и т.п.

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

Команде проекта нужно решить, нужно ли все-таки учитывать такие модули или нет.

Для сложных систем для наших клиентов я советую следующее:
- учитывать модули на замке, а не отбрасывать
- анализировать только новые замечания с уровнем (критичные, блокирующие, важные) - как в статье в соседней рекомендации и написано.
- вдруг все-таки вендор серьезно ошибся, ведь и такое бывает.
Светлый ум; Redokov; nvv1970; Winstoncuk; zeegin; +5 Ответить
6. Scorpion4eg 255 22.07.19 14:43 Сейчас в теме
Жаль что никто кроме EDT напрямую с внешними обработками не работает.
АПК от слова совсем. Sonar более менее пережевывает... А ведь во внешних печатных формах можно столько всего на плохокодить.
7. olegtymko 396 22.07.19 14:45 Сейчас в теме
(6) Паковать обработки / отчеты в cf/cfe и прогонять в EDT, АПК и заливать все в SonarQube. Тогда весь плохокод будет на лицо.
Scorpion4eg; +1 Ответить
9. artbear 1158 22.07.19 15:51 Сейчас в теме
(7) Костыль ИМХО. но ради качества на что не пойдешь :)
Scorpion4eg; +1 Ответить
8. artbear 1158 22.07.19 15:50 Сейчас в теме
(6) Почему "никто" ? наш платный плагин для SonarQube (от Пули) прекрасно работает.

и в VSC можно немедленно получать результаты, если кодируешь код в VSC.

давно проверяю инструмент Ванесса-АДД, построенный как раз на внешних обработках.
10. theshadowco 90 22.07.19 16:20 Сейчас в теме
(8) токо в формате edt увы работает неахти
Жолтокнижниг; Labotamy; +2 Ответить
11. Scorpion4eg 255 22.07.19 16:42 Сейчас в теме
(8) Не спорю, классно работает! Но когда мы его тестировали была проблема с "Возможно неиспользуемая процедура" для обработчиков элементов формы. Решили уже?
12. Fox-trot 106 22.07.19 17:33 Сейчас в теме
(11) достаточно добавить операнд "Экспорт", хотя костыль конечно
13. artbear 1158 22.07.19 17:51 Сейчас в теме
(11) Да, эта проблема решена в конце прошлого года или начале этого
Scorpion4eg; +1 Ответить
14. vlad.frost 186 22.07.19 23:49 Сейчас в теме
Правило бойскаута
Отдельно выделю - Оставляйте код чище, чем застали. Сделайте чуточку лучше тот код, который трогаете при кодировании текущей задачи.


SonarQube, кстати, позволяет этому правилу следовать с чуть меньшими рисками:
во-первых, можно заранее, перед выполнением задачи, посмотреть, какие есть в коде нарушения стандартов;
во-вторых, после всех правок убедиться, что все нарушения-таки исправлены.
artbear; Stepa86; +2 Ответить
15. user614660_dajigin 23.07.19 06:47 Сейчас в теме
Все таки есть сомнения по поводу "Иначе". Очень много конструкций таких типов:

Если КакойТоПризнак = ПервоеЗначение Тогда
ВыполнитьДополнительныеДействия1;
ИначеЕсли КакойТоПризнак = ВтороеЗначение Тогда
ВыполнитьДополнительныеДействия2;
КонецЕсли;

...Продолжаем выполнение по плану: действия, которые должны выполняться для ПервоеЗначение, ВтороеЗначение и все последующие....

Что в этом случае? Пустой "Иначе" делать? Какой в нем смысл? Исключения выкидывать нельзя, т.к. "непопадание" в условия это не ошибка.
16. Labotamy 23.07.19 06:52 Сейчас в теме
(15)В этих случаях диагностика ничего вам не скажет. Диагностика срабатывает на Если ИначеЕсли без Иначе.
17. user614660_dajigin 23.07.19 06:53 Сейчас в теме
Уже понял косяк)) Исправил вопрос))
18. Labotamy 23.07.19 06:58 Сейчас в теме
(17)Посмотрите комментарии к статье Олега. Там весёлый холиварчик на эту тему вышел.
olegtymko; Stepa86; +2 Ответить
19. user614660_dajigin 23.07.19 07:07 Сейчас в теме
20. artbear 1158 23.07.19 12:05 Сейчас в теме
(15) Да, эта диагностика холиварна и дает много срабатываний.

Есть важный принцип статического анализа - количество ложных срабатываний должно быть минимальным или их вообще не должно быть.

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

Поэтому мы для своего платного плагина (от Пули) все еще думаем над необходимостью введения этого правила.

Создавать правило, которое, скорее всего, чаще будет отключено, не хочется.
21. olegtymko 396 24.07.19 03:17 Сейчас в теме
(20) Опять же это очень холиварная тема.
На стадии разработки эта проверка очень много нервов и жизней может спасти. Но и в проде поможет отловить определенную массу косяков.
К примеру:
Дан какой-нибудь произвольный обмен с партнером через FTP в их кастомном формате. В коде есть условие, которое определяет что делать с документом
ДД = Новый ДвоичныеДанные(); // какие-то двоичные данные
ВидФайла = "ARRAIV"; // вид файла, который прочитали из именя файла

Если ВидФайла = "PICK" Тогда
	ЗагрузитьКакРасходнуюНакладную(ДД);
ИначеЕсли ВидФайла = "ORDER" Тогда
	ЗагрузитьКакЗаказ(ДД);
ИначеЕсли Видфайла = "STOCK" Тогда
	ЗагрузитьКакРеестрОстатков(ДД);
КонецЕсли;
Показать


Если не сообщить о виде файла, что он не поддерживается, то проблема может жить очень долго и никто об этом не узнает. В этом случае можно код допилить так:
Если ВидФайла = "PICK" Тогда
	ЗагрузитьКакРасходнуюНакладную(ДД);
ИначеЕсли ВидФайла = "ORDER" Тогда
	ЗагрузитьКакЗаказ(ДД);
ИначеЕсли Видфайла = "STOCK" Тогда
	ЗагрузитьКакРеестрОстатков(ДД);
Иначе
	// или исключение (при условии что выше по уровню стоит попытка и отлавливает все исключения)
	ВызватьИсключение(СтрШаблон("Вид файла %1 не поддерживается"));
	// или соообщение в какой нибудь лог
	Логирование.Ошибка("Обмен.СамыйЛучшийПарнер", СтрШаблон("Вид файла %1 не поддерживается"));
КонецЕсли;
Показать


Да, ложные срабатывания бывают. Когда в алгоритме понятно, что если условия не выполнились то и делать ничего не надо. Но есть способ отключить проверку в определенном блоке кода.
24. Scorpion4eg 255 03.11.19 14:25 Сейчас в теме
(20) Никогда не понимал почему холиварная. Для себя давно завел правило: не знаешь что писать в иначе, пишу ВызватьИсключение "Неожиданный вариант".
Исключение - обработка оповещения в формах
Labotamy; +1 Ответить
22. kalimehtar 20 29.07.19 08:12 Сейчас в теме
(15)
Пустой "Иначе" делать? Какой в нем смысл?


Смысл в том, что ты явно указал любому читающему, что ветка Иначе пропущена не случайно. Также как в проверках Си "while (c = getchar()) " считается ошибкой, а "while ((c = getchar()))" нормальный код. Вторая пара скобок указывает, что присваивание там осознанно, а не перепутали со сравнением "==".
23. Tavalik 2116 29.07.19 16:36 Сейчас в теме
Оставьте свое сообщение

См. также

Стабильность превыше всего 56

Статья Программист Нет файла v8 Бесплатно (free) Рефакторинг и качество кода

Странная заметка о поддержании стабильности в условиях интенсивного изменения конфигурации.

07.11.2019    2798    YPermitin    34       

Оценка скорости кода. Сложность алгоритма 9

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Рефакторинг и качество кода

Эта тема одной из первых всплывает на собеседовании программистов языков вроде Java и C, но она почти неизвестна в "мире 1С". Поговорим о вычислительной сложности алгоритмов.

07.10.2019    1642    m-rv    10       

"Хочу универсально!" [Часть 1] 65

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Математика и алгоритмы Практика программирования Разработка

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

02.09.2019    4771    SeiOkami    35       

Иерархия без "В ИЕРАРХИИ" 115

Статья Программист Нет файла v8 Бесплатно (free) Математика и алгоритмы

Говорится о том, как эффективно представлять иерархию в СУБД, как получать и использовать эти представления при решении задач в запросной технике. Уточняются и дополняются запросы из статьи "Уровни, глубина, прародители, циклы и аналоги запросом" [https://infostart.ru/public/160707/].

22.08.2019    4810    ildarovich    16       

EnterpriseData – часть 3. Загрузка данных, идентификация объектов 60

Статья Программист Нет файла v8 v8::УФ 1cv8.cf ОС Бесплатно (free) Практика программирования Математика и алгоритмы Перенос данных из 1C8 в 1C8 Разработка

Основные этапы загрузки данных через EnterpriseData. Идентификация объектов загружаемых полностью и по ссылке. Приведены схемы процессов загрузки данных. Описание основных операций и обработчиков. Перечень процедур БСП, используемых при загрузке данных, структура «КомпонентыОбмена».

22.08.2019    4100    ids79    7       

Обработчики событий при записи объектов. Зачем и что за чем? 200

Статья Программист Нет файла v8 Бесплатно (free) Математика и алгоритмы

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта.... Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

25.07.2019    12453    4    AlbinaAAA    23       

Как проводятся документы в типовых конфигурациях от 1С 137

Статья Программист Нет файла v8::ОУ ERP2 УТ11 Россия УУ Windows Бесплатно (free) Математика и алгоритмы Практика программирования Разработка

В свое время, когда только начинал шаги в 1С и изучал, как проводятся документы в конфигурациях на платформе 1С по книге "Разработка управляемого интерфейса" (Хрусталева Е.Ю.), и там были представлены примеры совсем далекие от того, как сейчас проводятся документы в современных конфигурациях от 1С.

24.07.2019    15906    skv_79    32       

FizzBuzz на 1С. Чем короче, тем веселее. Варианты принимаются... 8

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Математика и алгоритмы Разработка

Мне было скучно, я не мог себя заставить написать ничего полезного. И читал статью на Хабре. Потом я читал комментарии, а потом... нет я не ушел смотреть котиков на ютюбе. Я решил сделать несколько решений задачки FizzBuzz на 1С, с целью "чем короче, тем лучше". Прошу сильно не пинать, это просто развлечение для вечера.

24.07.2019    2834    vandalsvq    16       

Что делает "В ИЕРАРХИИ" в запросе? 87

Статья Программист Нет файла v8 Бесплатно (free) Математика и алгоритмы

Описание действий платформы 1С при использовании конструкции "В ИЕРАРХИИ" в запросах.

16.07.2019    7602    YPermitin    29       

По следам код-ревью 101

Статья Программист Стажер Нет файла v8 Бесплатно (free) Рефакторинг и качество кода

Приведу примеры с картинками и небольшим пояснением по вопросам, связанным с код-ревью (обзором кода).

09.07.2019    7465    ivanov660    110       

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

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

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

07.07.2019    18194    olegtymko    196       

Создание отчетов с помощью СКД - основные понятия и элементы 208

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования Математика и алгоритмы

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    20453    ids79    17       

Реализуем Стек, Очередь и Приоритетную очередь в 1С 52

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) Практика программирования Математика и алгоритмы Разработка

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

24.06.2019    7732    RonX01    63       

Организация хранения промежуточных данных 3

Статья Программист Нет файла v8 Бесплатно (free) Математика и алгоритмы

Организация хранения промежуточных данных в процедуре сверки.

29.05.2019    1932    scientes    1       

Вычисление 200 тысяч знаков числа pi 73

Статья Программист Нет файла v8 Россия Бесплатно (free) Математика и алгоритмы

В статье рассматриваются возможности платформы выполнять сверхточные вычисления без использования сложных алгоритмов и внешних компонент на примере вычисления числа pi.

28.05.2019    3912    Oleg_nsk    93       

Регистры накопления. Виртуальные таблицы. Часть №1: Обороты 84

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Математика и алгоритмы Разработка

Описание работы платформы 1С:Предприятие 8.2 с виртуальной таблицей "Обороты" регистров накопления.

20.05.2019    10802    YPermitin    5       

Даем названия переменным: как префиксы экономят наше время 10

Статья Программист Стажер Внешняя обработка (ert,epf) v8 Бесплатно (free) Практика программирования Математика и алгоритмы Разработка

Понятные названия переменных экономят время и силы разработчика : в начале, когда мы даём названия переменным, в процессе развития разработки, когда мы "на лету" понимаем назначение той или иной переменной, в конце, когда мы передаём разработку на поддержку других программистов, сами переходя к новым разработкам

06.05.2019    3180    Designer1C    69       

Заметки по SQL: Срез последних - аналог запроса 15

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) Практика программирования Математика и алгоритмы

В статье описывается создание среза последних данных средствами классического языка запросов. Причем метод построения запроса был разработан еще во времена, когда автор работал с СУБД Oracle 9i и программировал на PL SQL. Основная идея заключается преобразовании запроса с подзапросом, в запрос без подзапроса (в примерах описывается преобразование до двух вложенных подзапросов). Запросы тестировались на реальных базах данных. Платформа - 1С:Предприятие 8.3 (8.3.10.2561).

15.01.2019    6269    IVC_goal    5       

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С 127

Статья Программист Нет файла v8 v8::blocking 1cv8.cf Бесплатно (free) Математика и алгоритмы Практика программирования

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    22073    ids79    40       

Что такое рефакторинг и в чем его цели 48

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Рефакторинг и качество кода

Что такое рефакторинг, и в каких случаях им стоит заниматься? Евгений Шумилов дает ответы на эти вопросы, а также рассказывает о признаках хорошего и плохого кода. Кроме того, в статье приведены основные проблемы рефакторинга и способы их решения.

30.10.2018    6050    eu_genij    34       

Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C 147

Статья Программист Нет файла v8 Россия Бесплатно (free) Математика и алгоритмы Практика программирования

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

23.08.2018    22634    Rain88    42       

Теорема номер тринадцать 15

Статья Программист Нет файла v8 Бесплатно (free) Математика и алгоритмы

Использование математических методов для языка запросов.

15.03.2018    9304    vasilev2015    24       

Введение в CI для 1С 87

Статья Программист Нет файла v8 Россия Бесплатно (free) Математика и алгоритмы

Значение роли тестирования при разработке ПО трудно переоценить, его применение позволяет повысить надёжность продукта и улучшить качество кода. Для продуктов для платформы 1С:Предприятие существует ряд инструментов для проведения тестирования, в том числе и от самого вендора. Но, также появились открытые инструменты, реализующие мировые практики проведения тестирования (проверки продукта), поддерживаемые сообществом. В этой статье описаны базовые принципы, которые необходимо понимать перед началом применения этих инструментов.

21.11.2017    19265    real_MaxA    22       

Как работает серверный вызов в 1С 458

Статья Программист Нет файла v8::УФ Бесплатно (free) Математика и алгоритмы

Клиент-серверная архитектура заложена в платформе изначально — со времен «1С:Предприятие 8.0». Однако при разработке на 8.0 и 8.1 о разделении кода на клиентскую и серверную часть можно было не заботиться, поскольку на клиенте (на толстом клиенте) был доступен тот же функционал, что и на сервере. Всё изменилось с выходом платформы «1С:Предприятие 8.2», когда появился тонкий клиент. Теперь на клиенте доступен один функционал, на сервере — другой. Клиент и сервер «общаются» между собой с помощью серверного вызова. Конечно, это усложнило процесс разработки, но с другой стороны – можно создавать более оптимальные (быстрые) решения, поскольку все сложные задачи выполняются на сервере.

18.11.2017    44079    pahich    75       

#Область ВНЕШНИЕ_ВЫЗОВЫ или MVC в 1С, библиотечность и упрощение интеграции кода 43

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Математика и алгоритмы Универсальные функции

Зачастую почти любой модуль в 1С содержит от одного до несметного множества вызовов других модулей. Как с этим бороться, чтобы было проще куда-то что-то переносить - в этом посте.

12.10.2017    14763    for_sale    58       

Групповая разработка конфигураций в крупном холдинге 68

Статья Программист Нет файла v8 Бесплатно (free) Математика и алгоритмы

О чем мы сегодня поговорим? • О становлении и развитии групповой разработки конфигураций 1С в крупном холдинге с использованием хранилища конфигураций. • Обсудим практически все аспекты использования хранилища в командной разработке. • Я расскажу про те методы и идеи, которые мы пробовали использовать, какие используем до сих пор, от каких отказались и почему.

15.08.2017    17482    stas_ganiev    15       

Управление техническим долгом - Концепция Continuous Inspection 94

Статья no Нет файла Бесплатно (free) Управление проектом Практика программирования

Сегодня я вам хочу рассказать про тему «Управление техническим долгом» – что это такое, как с этим бороться и почему с этим надо бороться.

30.06.2017    15470    nixel    16       

Автоматизация процесса 1С-разработки 91

Статья Программист Нет файла v8 Бесплатно (free) Математика и алгоритмы

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

07.06.2017    22985    ekaruk    9       

Пишем игру Минер. Обработка событий ActiveX в 1С 29

Статья Программист Нет файла v8 Россия Windows Бесплатно (free) Практика программирования Математика и алгоритмы

Пример демонстрирует обработку событий генерируемых компонентой ActiveX в 1С.

29.05.2017    12697    user621724_Dimav1979    11       

Как я доступ на kb.1c.ru получал 91

Статья Программист Нет файла v8 Россия Бесплатно (free) Решение задач на 1С:Специалист Математика и алгоритмы

kb.1c - база знаний по технологическим вопросам крупных внедрений и не только. В этой базе знаний собираются методики и решения технологических проблем эксплуатации 1с, check-list'ы и инструкции по настройке ПО на серверах. Какие-то из размещенных статей дублируются на ИТС. Когда я искал пути получения доступа к нему я столкнулся с проблемой: мало кто доподлинно знает как получить доступ к нему, не работая у франчайзи 1с. Я опишу путь, который прошёл я, как физическое лицо.

01.05.2017    22474    ikekoval    33       

Улучшение стандарта "Структура модуля" 6

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) Математика и алгоритмы

Описывается структура областей модулей, которую я использую при разработке на своих проектах. Обсуждаются недостатки стандарта 1С "Структура модуля". Предложен улучшенный подход к работе со структурой модуля.

26.03.2017    12280    o.nikolaev    23       

"Распределение в запросе" или "избавляемся от перебора" 185

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) Математика и алгоритмы Универсальные функции

Хороший перебор - это отсутствие перебора. Рассмотрим пример замены полного перебора запросом.

16.12.2016    28529    alexandersh    48       

Планы обмена. Квитировать или гарантировать? 24

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Математика и алгоритмы

Планы обмена предлагают использовать две стратегии удаления обработанных изменений: квитирование и гарантированная доставка сообщений. Как сделать правильный выбор?

12.12.2016    14517    zhichkin    9       

Некоторые принципы оптимизации запросов 1С (+SQL) 115

Статья Программист Нет файла v8 Бесплатно (free) Математика и алгоритмы

Разработка нового функционала часто связана с созданием новых таблиц в базе и написанием запросов. Собственно, размышляя о запросах, мы и формируем в голове содержание таблиц, индексы и количество таблиц и индексов. Заранее можно уверенно рассуждать о том, какая нужна архитектура, если задачу удалось понять. На этом этапе важно привлекать свой опыт. Что же делать, если его нет? Как рассуждать о запросах и формате хранения?

17.11.2016    8854    ture    40       

Использование git для доработки типовых конфигураций 1С 230

Статья Программист Нет файла v8 Беларусь Украина Россия Бесплатно (free) Математика и алгоритмы

Рассмотрены способы доработок типовой конфигурации 1C для различных изменений, и на картинках продемонстрирован подход к разработке с использованием git и частично с тестами.

11.10.2016    188210    pumbaE    31       

Оптимизация запросов 1С:Предприятие – от теории к практике 115

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Математика и алгоритмы

Я давно отметил достаточно серьезный интерес сообщества к вопросам оптимизации и повышения производительности высоконагруженных систем. Общаясь с различными специалистами, обслуживающими малые и большие предприятия (торговые и производственные), я пришел к выводу, что вопросы повышения производительности интересны почти всем, вне зависимости от того, какую конфигурацию они обслуживают – большую или маленькую, измененную или без значительных изменений. В связи с этим я пришел к выводу, что стоит посвятить данный материал вопросам оптимизации запросов, поскольку именно запросы являются основным инструментом извлечения данных из системы.

07.10.2016    31949    bpc222    20       

Регистры сведений 1С. Как это устроено. 724

Статья Программист Нет файла v8 Бесплатно (free) Математика и алгоритмы

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

05.08.2016    150569    Sergey.Noskov    154       

Переводим расширения на 8.3.8. Памятка. 79

Статья Программист Нет файла v8 Россия Бесплатно (free) Практика программирования Математика и алгоритмы

Типовые конфигурации переходят на новую платформу 8.3.8 без режима совместимости. А значит нужно переделывать расширения под эти условия. В статье небольшая памятка о переводе расширения на 8.3.8

29.07.2016    39593    mrXoxot    12       

Опыт практического применения методики BDD на 1С. Написание сценариев 121

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Математика и алгоритмы

Эта статья открывает цикл публикаций, в которых я хочу поделиться опытом использования методики BDD при разработке на 1С. В этой статье речь пойдёт о написании сценариев.

03.07.2016    20295    oleynik.dv    132       

Заметки про запросы. Последовательность. 110

Статья Программист Нет файла v8 Windows Бесплатно (free) Математика и алгоритмы Практика программирования

Рассуждения, основанные на контрпримерах. Определяем последовательность операций с помощью одной только консоли запросов. Версия 2.

27.05.2016    29538    vasilev2015    31       

Оптимизация планирования доставки грузов. Алгоритм кластеризации k-means (метод K-средних). 26

Статья Программист Нет файла v8 УТ10 УПП1 Windows Бесплатно (free) Математика и алгоритмы

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

10 стартмани

09.02.2016    26481    mi1man    4       

Контур.EDI изнутри, или история командной разработки тиражного продукта на 1С 174

Статья Программист Нет файла v8 Россия УУ Windows Оптовая торговля Бесплатно (free) Интеграция Практика программирования Математика и алгоритмы

“Система - больше, чем просто совокупность ее элементов”; “Несколько разработчиков - это еще не команда разработки”. Расскажу, как мы прочувствовали эти очевидные утверждения на своей шкуре.

17.11.2015    35974    skif47    88       

Порядок записи движений регистров при проведении документа 95

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Математика и алгоритмы

Когда-то была программа 1С седьмой версии, и все программисты знали: если нужно проанализировать и/или исправить движения документа - смотри модуль документа, процедура ОбработкаПроведения(). В 1С 8 все гораздо сложнее. Кроме модуля проведения есть еще подписки на события, а также движения документа может "создавать" не сам документ. Эта статья о том, как происходит проведение и в какой момент записываются движения документа по регистрам.

13.11.2015    80225    triton_tver    8       

.NET(C#) для 1С. Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия 51

Статья Программист Нет файла v7.7 v8 Windows Бесплатно (free) Разработка внешних компонент Математика и алгоритмы

Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия, а так же генерация модулей на C# и 1С для подключения к событиям. Использование DynamicMethod и ILGenerator. Представлены примеры для использовании событий System.IO.FileSystemWatcher (Ожидает уведомления файловой системы об изменениях и инициирует события при изменениях каталога или файла в каталоге.) и SerialPort (обработка сканера штрих кода подключенного к COM порту). Обертка позволяет использовать классы .Net только на языке 1С. Реализация 1C Messenger описанного здесь http://infostart.ru/public/434771/

12.11.2015    42123    Serginio    35       

Три способа получить дерево элементов иерархического справочника 51

Статья Программист Нет файла v8 Бесплатно (free) Математика и алгоритмы

Рассматривается применимость и недостатки следующих способов получения дерева 1) Запрос с использованием итогов по иерархии 2) Формирование дерева обходом выборки с упорядочиванием по иерархии 3) Формирование иерархии по списку элементов транзитивным замыканием

11.11.2015    62908    32ops    9