Правила программирования и автоматизации

21.02.18

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

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

1

Вы пишете код для человека, не для программы или компьютера. Делайте код понятным, чтобы человек, который будет разбираться в нём через полгода или год или два, мог легко это сделать. Возможно, этим человеком будете Вы, только через год Вы уже не вспомните, что там где подразумевалось "по умолчанию"

2

Помните, что телепатов нет. Ещё раз. Телепатов нет. Код, а равно и интерфейс пользователя, должны быть понятными и не должны содержать умолчаний, понятных только Вам.

3

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

4

Процедуры и функции должны быть как пуля — небольшими и быстропонимаемыми. Вернее, процедуры и функции могут быть большими, а иногда и очень большими, но только в том случае, если они остаются безопасными (пункт 5), то есть название процедуры отражает суть её действия, не больше и не меньше.

// добавление подписантов в файл PDF (последней страницей) из таблицы подписантов в 1С, 
// а также добавление нумерации страниц
Процедура ПолучитьФайлСНумерациейИПодписями(НакопленныеДанные) 
	
	ОпределитьВозможностьСклейкиСПодписями(НакопленныеДанные);
	Если НакопленныеДанные.МожноСклеить = Истина Тогда
		ПолучитьИзначальныйФайл(НакопленныеДанные);
		ПодготовитьСредствоРаботыСPDF(НакопленныеДанные);
		СгенерироватьФайлСлужебнойИнформации(НакопленныеДанные);
		ПолучитьИнтересующиеДанныеИзФайлаСлужебнойИнформации(НакопленныеДанные);
		СоздатьPDFСНумерацией(НакопленныеДанные);
		СоздатьPDFСПодписями(НакопленныеДанные);
		СклеитьФайлы(НакопленныеДанные);
		УдалитьВременныеФайлы(НакопленныеДанные);
	КонецЕсли;
	
КонецПроцедуры

 

5

Процедуры и функции должны быть безопасными, то есть — а) их название должно отражать суть б) они не должны делать то, что от них не ожидается исходя из названия

6

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

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

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

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

7

Реализация очень сильно зависит от постановки задачи.

Можно поставить задачу "отправлять бухгалтеру на почту уведомления о поступлении РКО с видом Подотчёт", а можно поставить задачу "Реализовать универсальный механиз рассылки уведомлений по триггерам". А ещё можно поставить задачу "Найти на Инфостарте универсальный механиз рассылки уведомлений по триггерам".

8

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

9

Если схожая задача возникает 3 раза, значит, она возникнет ещё 300 раз, и пора подумать о создании универсального механизма

10

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

11

При разработке пользовательского интерфейса не надо мельчить. Вам доступны полные страницы! Если одновременно показываемых пользователю элементов слишком много, значит, разработка идёт неправильно.

12

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

12А

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

12Б

Любой неправильный ввод документа или справочника с откладыванием данных "в мозгу" (типа "потом поправлю") недопустим. Лучше вообще не ввести документ, даже если это приходная накладная на миллион долларов, чем ввести его неправильно. Любой неправильный ввод данных в систему повышает её энтропию и уменьшает доверие к системе, лишая верхних уровней возможностей, для которых АС и предназначена.

13

При проектировании следует чётко и ясно определять уровни взаимосвязи объектов — один к одному, один ко многим, много к одному, много ко многим, и исходя из этого сразу планировать правильную логику. Например, если в чеке для видов оплат сразу спроектировать таблицу "оплаты", всё становится на свои места. Можно платить частично наличными, частично картами, частично яндекс.деньгами. Или наоборот — заранее заложить при проектировании, что вид оплаты должен быть один и только один, а если видов оплаты несколько — оформлять несколько чеков. Оба подхода имеют право на жизнь и свои плюсы и минусы.

программирование разработка

См. также

Метод Дугласа-Пойкера для эффективного хранения метрик

Математика и алгоритмы Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    1890    stopa85    12    

34

Алгоритм симплекс-метода для решения задачи раскроя

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

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    4695    user1959478    50    

34

Регулярные выражения на 1С

Математика и алгоритмы Инструментарий разработчика Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

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

1 стартмани

09.06.2023    7701    4    SpaceOfMyHead    17    

56

Мини-обзор разных решений задач

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.

03.04.2023    3119    RustIG    6    

25

Модель распределения суммы по базе

Математика и алгоритмы Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    7955    7    kalyaka    11    

44

Изменения формата файлов конфигурации (CF) в 8.3.16

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Дополнение по формату файлов конфигурации (*.cf) в версии 8.3.16.

16.12.2021    4570    fishca    13    

37

Интересная задача на Yandex cup 2021

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

Мое решение задачи на Yandex cup 2021 (frontend). Лабиринт. JavaScript.

12.10.2021    8962    John_d    73    

46
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
78. Dzenn 874 26.02.18 10:37 Сейчас в теме
(76) И явное сравнение, и неявное сравнение имеют одинаковое право на существование. Вопрос личных предпочтений, но как по мне — явное всё-таки "явнее".
79. TODD22 18 26.02.18 10:39 Сейчас в теме
(78)
явное всё-таки "явнее"

Но таки противоречит рекомендациям 1С.
81. Dzenn 874 26.02.18 10:44 Сейчас в теме
(79) Каким? Ссылку, пожалуйста. Я наоборот вижу, что явных сравнений в типовых стало больше. В запросах чаще появляются сравнения вида " И Объект.ПометкаУдаления = Ложь"
84. TODD22 18 26.02.18 10:45 Сейчас в теме
(81)
Каким?

На ИТС методические рекомендации по написанию кода не читали?
87. Dzenn 874 26.02.18 10:53 Сейчас в теме
(84) это всё равно, что на Библию ссылаться. Конкретную ссылку, пожалуйста.
88. TODD22 18 26.02.18 10:57 Сейчас в теме
(87)
это всё равно, что на Библию ссылаться. Конкретную ссылку, пожалуйста.

Может всё же стоит почитать? Там не много. В печатном виде 150 листов вроде выходит.
4. Логические выражения и логические значения (например, результат функции, возвращающей логическое значение, переменные типа Булево и пр.) не следует проверять путем сравнения с литералами Истина и Ложь.
Правильно:

Если ЭтоНовый() Тогда

Неправильно:

Если ЭтоНовый() = Истина Тогда


https://its.1c.ru/db/v8std#content:2149184090:hdoc
sergathome; uri1978; herfis; +3 Ответить
91. Dzenn 874 26.02.18 11:06 Сейчас в теме
(88) век живи век учись, спасибо за ссылку
85. TODD22 18 26.02.18 10:45 Сейчас в теме
(81)
В запросах чаще

Для того что бы говорить "чаще" надо привести хотя бы статистику как было раньше и как стало сейчас. А то может на оборот стало реже, а проверить не можем.
100. sergathome 4 27.02.18 12:10 Сейчас в теме
(81) Объект может неожиданно оказаться не инициализирован, только и всего. Саныч выше всё правильно описал.
83. herfis 498 26.02.18 10:44 Сейчас в теме
(78) А как по мне - масло маслянное получается. Одна из прелестей типа булево - как раз возможность использования более емких и читабельных выражений, не использовать которую - архипреступно :)
72. Samarkan63 25.02.18 20:56 Сейчас в теме
А мне понравилось. Доступно! Спасибо
86. buganov 200 26.02.18 10:50 Сейчас в теме
8
Информация не должна дублироваться. Информация не должна дублироваться. Информация не должна дублироваться. Если Вам нужен какой-то необычный срез данных, лучше использовать временные таблицы или сложные запросы, чем дублировать информацию в новый регистр или справочник.

Очень спорный тезис. Если требуется создать высоконагруженную систему с огромным количеством обрабатываемых данных, то, Ваш сложный запрос просто напросто знатно уронит производительность не более. Для +- среднячков да, возможно, но, опять же с прогнозом.
Легко представить ситуацию, когда нужны в один и тот же момент и оперативные данные и история. И, чтоб работало еще быстро.
89. Dzenn 874 26.02.18 10:58 Сейчас в теме
(86) по поводу сложных срезов и вопросов производительности, нашёл ссылку

https://its.1c.ru/db/v8std#content:-2145782989:hdoc:_top:%D1%83%D1%81%D0%BB%D0%BE%D0%B2%D0%B8%D0%B5

выдержка из неё:

1.2. Если записей в таблице много и выполнить указанные выше требования невозможно, то можно попробовать:

преобразовать условия (см. п. 3, п. 4);
добавить в таблицу заранее вычисляемые индексированные поля, которые заполняются при записи в нее и используются вместо сложного условия;
если указанные выше рекомендации не помогли, то следует пересмотреть архитектуру решения так, чтобы можно было выполнить эти условия.
2. Оператор ИЛИ


То есть можно избавиться от многих сложных запросов и проблем с производительностью, добавляя дополнительные специфические реквизиты, и я с этим согласен. И не надо будет ничего дублировать.
94. buganov 200 26.02.18 12:09 Сейчас в теме
(89) добавление реквизита влечет реструктуризацию, т.е. неработоспособность базы на несколько часов. 1Сников за такие шишки за яички подвесят
95. Dzenn 874 26.02.18 12:25 Сейчас в теме
(94) Если решение обосновано, в том числе и производственной необходимостью — вряд ли будут какие-то санкции. Да и честно говоря не представляю себе, какого объёма должна быть база, чтобы добавление реквизита с последующей индексацией длилось несколько часов. 1000 гигабайт? Какая-то страховая организация?
123. KAV2 156 10.05.18 06:51 Сейчас в теме
(86) +1 Денормализация данных (избыточное хранение) это один из эффективных способов оптимизации производительности. Пример денормализации - запись данных из документов в регистры, так то если подумать, зачием дублировать данные? Ведь в документе они уже есть...
99. Bazil 557 27.02.18 11:30 Сейчас в теме
Первое правило программирования и автоматизации - никому не говори про правила программирования и автоматизации!
107. vakham 21 28.02.18 10:07 Сейчас в теме
В статье не увидел того, с чем столкнулся в оборонном НИИ. Там получилось как... Грубо говоря, я написал одну строчку кода и одну проверку (типа деления на ноль). А потом моя начальница посмотрела и сказала вставить ещё три проверки.
Больше нигде, никогда, ни в одном коде, ни в одной конторе я никогда не видел полной и безотказной проверки на любые возможные ошибки. "Советская школа" будет посильнее новомодных, господа-товарищи.
109. Dzenn 874 28.02.18 10:09 Сейчас в теме
(107) это не школа, это опыт
112. TODD22 18 28.02.18 10:21 Сейчас в теме
(109)
это не школа, это опыт

Про это и в книжках пишут. Только их же читать надо.
113. herfis 498 28.02.18 10:41 Сейчас в теме
(109) Это настолько банальный опыт, граничащий с банальным здравым смыслом, что давным-давно кристаллизован в разных книжках по программированию. И про проверку входящих параметров и про граничные условия и про методики написания тестов и т.д. и т.п. Глупо думать, что вот личный опыт программирования - он какой-то уникальный. Личный опыт программирования - это просто осознание банальных истин через собственную жопу. Истин, давным-давно осознанных людьми поумнее себя любимого и описанных в куче книг. Это просто вечная песня про то, что почти никто не способен учиться на чужом опыте, потому что это требует осознанных усилий. И если получается учиться на своем - то это уже за счастье.
117. vakham 21 28.02.18 18:03 Сейчас в теме
(113) Возвращаясь к НИИ... помницца, первая ошибка, с которой я столкнулся в типовой бухии - отсутствие этой самой проверки на ошибку. Хотя казалось бы 1С старая и опытная контора... А как лажала на 7-ке, так и продолжает гавнакодить на 8-ке.
118. Dzenn 874 28.02.18 18:08 Сейчас в теме
(117) В типовых конфигурациях 1С самый прекрасный код, который только может быть. Программы делятся на два типа — те, которые ругают, и те, которыми не пользуются.
119. herfis 498 28.02.18 18:20 Сейчас в теме
(117) На скриптовых языках просто вообще особо не принято заморачиваться. Главное их оружие - лаконичность и выразительность, на него и упор. Быстро наляпать, быстро упасть, быстро поправить. Плюс стоимость дополнительных проверок на них заметно выше. Хотя внешний API в серьезных библиотеках все-таки принято реализовывать более канонично.
111. TODD22 18 28.02.18 10:20 Сейчас в теме
(107)
Больше нигде, никогда, ни в одном коде, ни в одной конторе я никогда не видел полной и безотказной проверки на любые возможные ошибки.

Полная проверка на безотказность должна определяться требованиями к системе, а не "конторами".
128. gybson 11.11.23 10:45 Сейчас в теме
(107) Будет, когда все проверки допишет и проверит. Т.е. никогда =)
122. Артано 762 10.05.18 04:41 Сейчас в теме
"Единственный способ создать что-то сложное хорошо — увеличивать уровни абстракции"
Вспоминается старый программистский анекдот:
Любая проблема кроме одного исключения решается добавлением еще одного уровня абстракции. Проблема исключение - слишком больше количество уровней абстракции.

А вообще спасибо автору, что заставил меня расшевелиться, и начать публиковать свои учебные материалы
126. Lancelot-2M 115 29.08.19 18:41 Сейчас в теме
8 пункт крайне спорен, ну крайне.. до полного отрицания
127. Dzenn 874 29.08.19 18:45 Сейчас в теме
(126) обсуждали это в комментариях. Есть дублирование, а есть денормализация
Оставьте свое сообщение