Имя: Пароль:
1C
1С v8
Короткие процедуры и функции
,
0 Конструктор1С
 
20.01.19
13:16
Авторы нижеперечисленных книг утверждают, что методы (процедуры и функции) по-возможности должны быть небольшими, а их название должно быть четким и точным, раскрывающим суть метода.

М.Фаулер, "Рефакторинг. Улучшение проекта существующего кода"
https://www.ozon.ru/context/detail/id/141508653/

С.Макконел, "Совершенный код"
https://www.ozon.ru/context/detail/id/138437220/

Р.Мартин, "Чистый код: создание, анализ и рефакторинг"
https://www.ozon.ru/context/detail/id/28336354/

А вы как считаете?
252 ДенисЧ
 
22.01.19
21:05
(251) А как же излишняя беготня по vTable или я несколько позабыл уже внутренности?
253 ADirks
 
22.01.19
21:08
(252) Ну да, слегка приврал. Три обращения к памяти требуется.
254 Кирпич
 
22.01.19
21:12
(252) Прекращайте про виртуальные функции. Давайте про 1с.
255 Волшебник
 
22.01.19
21:14
(254) Хорошо, что в 1С есть ООП, наследование и полиморфизм с виртуальными методами.
256 ADirks
 
22.01.19
21:15
(254) Ты же начал? Расскажи нам, где там чо?
257 Кирпич
 
22.01.19
21:17
(256) Книжку почитай
258 Кирпич
 
22.01.19
21:18
(255) Хорошо
259 ADirks
 
22.01.19
21:24
(257) Нет у меня книжек. В n-словах можешь рассказать, в каком месте в 1С виртуальные методы? И почему это тормоза?
Про кривые ручки мне понятно, можно не объяснять.
260 Кирпич
 
22.01.19
21:24
А вообще, при нынешнем развитии текстовых редакторов, можно писать длиннючие макаронины и особо не париться. В процедуры и функции выделять только то, что повторно используется.
В 1С есть #Область  #КонецОбласти
Пользуйтесь и не парьтесь.
261 Кирпич
 
22.01.19
21:25
(259) Я не говорил, что в 1с есть виртуальные методы. Хотя внутри есть конечно же. Раз 1с тормозит - значит точно есть :)
262 ADirks
 
22.01.19
21:32
(261) А ты не предполагаешь, что есть гораздо более существенные причины для торможения, да хотя бы что-то вроде того же
   врег(сокрлп(св.свойство))

С этим никакие виртуальные методы и рядом не валялись.
263 Кирпич
 
22.01.19
21:35
(262) и какая причина торможения "врег(сокрлп(св.свойство))"?
264 ADirks
 
22.01.19
21:41
(263) Если эту фигню 20 раз выполнить в рамках одного метода, то какая-то, хотя и не шибко большая. Уж точно больше, чем виртуальные вызовы.
Или к примеру сериализация всего и вся при передаче с клиента на сервер и обратно. Тоже скорости не добавляет. Опять же, на порядки больше виртуальных вызовов.
265 v77
 
22.01.19
21:47
(264) чо ты паришься. в 1с нет виртуальных методов.
266 ADirks
 
22.01.19
21:52
(265) Патамушта В ИНТЕРНЕТЕ КТО-ТО НЕ ПРАВ!!!!
267 dmpl
 
22.01.19
22:03
(249) Это значит, что вот так вот напренебрегали.
268 Сияющий в темноте
 
22.01.19
22:09
В 1с есть виртуальные методы

новый описание оповещения - создание,
а там,где надо вызывается выполнение.

точнее,это указатели на функцию

строго говоря,виртуальный метод,это определить в двух справочниках экспортную функцию, ВиртуальныйМетод, а потом ее вызвать через ЭтоСправочник.ВиртуальныйМетод

проблема 1с в том,что связывание делается по именам,а не по номеру в таблице виртуальных функций.
269 Integrator
 
23.01.19
02:43
Экономить на вызовах методов имеет смысл только когда все остальные оптимизации уже сделаны - алгоритмические в первую очередь. А то нафигачат запросов в циклах, и жалуются - у 1С вызовы методов долгие, поэтому все и тормозит)

Впрочем даже в этом случае смысл затеи сомнительный, ускорить отчет еще на 2% ценой усложнения поддержки, возможно новых багов и т.п..
270 Конструктор1С
 
23.01.19
04:06
(246) не будет. Всё изначально будет на своих местах. Если, конечно, автор процедур не наговнокодит с параметрами процедур
271 Конструктор1С
 
23.01.19
04:10
(260) области не оградят от дублирования кода, безобразной инициализации переменных, большой вложенности циклов и условий, и прочих "прелестей" портяночных процедур/функций. Области лишь только скрывают часть это непотребства
272 JeHer
 
23.01.19
04:30
(252) вот вам короткие функции 1С

Функция ПолучитьСтавкуНДС0() Экспорт

Функция ПолучитьСтавкуНДС10() Экспорт

Функция ПолучитьСтавкуНДС18() Экспорт

Функция ПолучитьСтавкуНДС20() Экспорт

Функция ПолучитьСтавкуБезНДС() Экспорт
273 dmpl
 
23.01.19
06:15
(270) Вы таки не понимаете главного (что еще более удивительно при заявляемом опыте): если нет проекта и алгоритма - разбиение не поможет. Если есть проект и алгоритм - разбить можно будет и потом без особых проблем. Все эти функции на 100500 строк с неочевидной структурой есть результат того, что сразу пишут код, без предварительных этапов. А не потому что он длинный. И если так же начнут писать короткими методами - там будет все еще печальнее. Кинут в качестве параметра структуру - и будут ее передавать везде как контекст.
274 dmpl
 
23.01.19
06:16
(271) Зато тут сразу видно алгоритм, сложность которого растет в геометрической прогрессии.
275 Конструктор1С
 
23.01.19
07:31
(273) "Если есть проект и алгоритм - разбить можно будет и потом без особых проблем"

Не можно. Если используются большие процедуры, это УЖЕ говорит о плохом проектировании. Или может покажешь большую процедуру/функцию, в которой всё гладко? Разделять на небольшие процедуры нужно сразу, чётко следуя принципу: одна процедура/функция для одной цели
276 Кирпич
 
23.01.19
08:27
(271) так и не в портяночных процедурах тоже может быть "дублирования кода, безобразной инициализации переменных, большой вложенности циклов и условий"
277 Конструктор1С
 
23.01.19
08:56
(276) может, но в гораздо меньшей степени. Например, в небольшой процедуре не получится инициализировать переменную на 200 строк раньше её использования, если в этой процедуре всего 20 строк.
278 dmpl
 
23.01.19
09:24
(275) В 1С цель одна - сделать все хорошо. Достаточно одной процедуры. Не вижу значительной разницы, в одной процедуре выполнить алгоритм по пунктам, или в нескольких. И разделяется затем при необходимости такая процедура элементарно. Проблемы возникают когда пишут еще даже не зная что.
279 dmpl
 
23.01.19
09:25
(277) :) Ага, она будет инициализирована на 10 функций раньше и передана в структуре.
280 Повелитель
 
23.01.19
09:26
281 Ordnung
 
23.01.19
09:27
(278) Помимо "хорошо" есть ещё "легко читабельно". Когда я ЗУПовую портянку вижу, тоска приходит.
282 dmpl
 
23.01.19
09:38
(281) Представь, что они разобьют ее на сотню процедур в разных модулях. Легче станет?
283 Ordnung
 
23.01.19
09:43
(282) Гораздо.
284 dmpl
 
23.01.19
10:12
(283) :) Лучше будет скакать туда-сюда, да еще и с менеджером временных таблиц в качестве параметра? Вам недостаточно запросов, собираемых в куче модулей?
285 Ordnung
 
23.01.19
10:38
(284) Ну какбе совсем необязательно из крайности в крайность кидаться.
286 Tonik992
 
23.01.19
10:57
(268) Эта тема будет работать только на клиенте
287 ADirks
 
23.01.19
10:58
(285) Мне кажется, проблема в том, что понятие "читабельность" не очень то формализуется. А людЯм подавай чёткие определения. Вот размер метода - штука крайне понятная - поэтому все к ней привязались, как будто это что-то самоценное. На самом же деле размер и читабельность конечно коррелируют, но функционально даже не связаны.

Чтение данной темы неизменно вызывает в памяти фразу:
- Старайся делать хорошо. Плохо само получится.

Зачем стараться сделать плохо, да ещё и гордо показывать: смотри, какое г. получилось?!
288 Ник080808
 
23.01.19
11:02
(236) (244) то есть, компиляция 14000 строк менее затратное по времени дело, чем вызов десяти процедур каждая в 30 строчек?
289 bolobol
 
23.01.19
11:13
(288) Вопрос в стиле "Кто круче: лыжник или сноубордист?"
290 Ник080808
 
23.01.19
11:19
(289) ну почему же? Лыжник или сноубордист это вопрос вкуса, а тут имеем два измеримых варианта - 14 000 строчек кода. Плюсы - вызов одной процедуры вместо десяти - экономия на вызовах, минуса - компилируется лишний код; большие затраты на внесение изменений и отладку отчета.
Второй вариант, 10 процедур общим объемом в 300 строк кода. Минус - каждый раз при формировании отчета делается вызов 10 процедур, Плюс - читаемость кода, меньше времени нужно на исследование, отладку и внесение изменений в отчет раз в 20.
291 dmpl
 
23.01.19
11:30
(285) Просто я представляю себе, как разделят создатели ЗУПа свою портянку.

(288) Компиляция делается 1 раз, а программа исполняется миллионы раз.
292 Ник080808
 
23.01.19
11:32
(291) в 1с разве встроенный код не компилируется каждый раз  при открытии формы?
293 dmpl
 
23.01.19
11:39
(292) Так делает интерпретатор, а не компилятор. Компилятор делает свою работу 1 раз, и на выходе получает исполняемый на выбранной машине код, а потому затраты на компиляцию будут нулевые.
294 Конструктор1С
 
23.01.19
11:40
(278) "Не вижу значительной разницы, в одной процедуре выполнить алгоритм по пунктам, или в нескольких."

Даже если эта большая процедура будет написана хорошо и гладко, анализировать её визуально будет сложнее, чем несколько более мелких процедуры. В один момент времени тебе придется созерцать и держать в голове бОльшее количество переменных, и наблюдать более глубокую вложенность циклов и условий.
Но вряд ли большая процедура будет хорошо написана. Сама по себе большая процедура подталкивает делать непотребности: разбрасывать переменные по всей длине процедуры и делать сложные логические проверки. Проще говоря, большие процедуры подталкивают писать более сложный для восприятия код, соответственно менее гибкий.
295 dmpl
 
23.01.19
11:46
(294) Анализировать визуально как раз проще - слишком глубокая вложенность циклов и условий видна сразу даже без вчитывания в код, все в одном месте (не надо никуда скакать и вспоминать, откуда ты сюда перешел). А насчет понятных названий - я так и не получил ответа на вопрос, по какому полю сортируется массив, и мне все равно придется скакать.

Мне вообще непонятно, почему вы полезли в код, а не в документацию к продукту, где ясный и понятный алгоритм изложен без всяких там особенностей языка? Зачем заниматься реверс-инжинирингом, когда есть документация?
296 Ник080808
 
23.01.19
11:52
(293) но все равно затраты времени на выполнение интерпретатором идет каждый раз при открытии формы. (295) это как проще анализировать? у вас идет
Если Условие1 Тогда
50 строчек кода;
Если условие2 тогда 50 строчек кода
Иначе
48 строк кода;
если условие3 тогда
45 строк кода
иначеесли 65 строк кода.
и ты тут такой сидишь и вспоминаешь комбинацию всех трех условий
297 bolobol
 
23.01.19
12:09
(290) Крутость - так себе зависит от "лыжник или сноубордист", но что за зависимость вы спросили в "компиляция 14000 строк менее затратное по времени дело, чем вызов десяти процедур каждая в 30 строчек?" - это настолько разные "время", что их не то что сравнивать, в одном абзаце-то нельзя упоминать.
До кучи, 30*10 = никак не 14000.
298 dmpl
 
23.01.19
12:17
(296) 1. Затраты идут на весь модуль, а не на используемый в данный момент код. Так что в первом приближении нет разницы, разбито или нет. А уж если разбито в 100500 модулей, как это любят делать создатели типовых - так еще и медленнее получится.
2. Во-первых, сворачивание условий настраивается. Во-вторых, чтобы в общем понять работу программы - надо смотреть алгоритм, а не код. А уже потом если что-то где-то не работает, или работает не по алгоритму - вот тут и искать. И заходить придется везде в таком случае. И тем же отладчиком смотреть удобнее когда оно все вместе.
299 Ник080808
 
23.01.19
12:17
(297) там меня поправили, исполнение интерпретатор, а не компиляция занимает время. Поправьте, если я не прав, но при открытии интерпретатор должен обработать весь модуль в 14 000 строчек и исполнить. "До кучи, 30*10 = никак не 14000." естественно потому что идет дублирование кода в 14 000 строчках, где в разных ветках выполняется одинаковый код для разных таблиц значений с одинаковой структурой.
300 Ник080808
 
23.01.19
12:21
(298) 2. Во-первых, сворачивание условий настраивается. - как это поможет когда вы в 7 уровне вложенности и вам нужно  посмотреть на каком уровне вложенности инициализировалась данная переменная?
Во-вторых, чтобы в общем понять работу программы - надо смотреть алгоритм, а не код - как можно посмотреть алгоритм формирования отчета в одной процедуре в 14 000 строк не глядя на код?
301 FIXXXL
 
23.01.19
12:21
(295) это видимо какая-то сферическая "большая и правильная процедура" в вакууме
мне больше приходилось разгребать авгиевы конюшни типа ПроверимВсеЧтоЕстьВРеализацииПередЗаписью(), да еще с кучей "зелени" поправок...
302 bolobol
 
23.01.19
12:36
(299) Предлагаете 1500 употреблений "КонецЦикла" в 14000 строчек кода как-то заменить десятью процедурами по 30 строчек кода? Это как это? Или какой у вас код должен дублироваться целыми строками на протяжении 14000 строк? Пустые строки - разделители?
303 dmpl
 
23.01.19
12:44
(300) 1. Поиск назад нормально работает. В отличие от разбитых по процедурам кусочков кода.
2. Алгоритм смотрится в документации к программе.

(301) Это лишь следствие бардака в разработке. И этому бардаку разбиение на маленькие кусочки не поможет. Разбиение имеет смысл тогда, когда все остальное в порядке.
304 Конструктор1С
 
23.01.19
12:46
(295) "Анализировать визуально как раз проще - слишком глубокая вложенность циклов и условий видна сразу"

и какова радость от этой видимости? Сиди себе, собирай пазл, пытайся понять, как оно там устроено и работает. Есть такое понятие - декомпозиция задачи. Это раскладывание одной большой и сложной задачи на множество маленьких и простых. В программировании декомпозиция рулит как нигде. Если декомпозиция задачи плохо проведена, алгоритм не продуман, начинаются появляться такие вот огороды:
https://www.govnokod.ru/22113
а то и гораздо хуже

"Мне вообще непонятно, почему вы полезли в код, а не в документацию к продукту, где ясный и понятный алгоритм изложен без всяких там особенностей языка? Зачем заниматься реверс-инжинирингом, когда есть документация?"

За все свои года одинэсинья ни разу не видел такой документации. Где можно посмотреть? Обычно в документации написано так: "себестоимость материальных запасов будет списана при проведении документа ХХХ", а за этой скупой фразой стоят 10 тысяч строк кода.
305 bolobol
 
23.01.19
12:47
(303) Серьёзно?
Вот только что, ЗУП 3.1.5.Последний
СЗВ_КОРР - дублируются строки о стаже.
Страницу документации, пожалуйста
306 bolobol
 
23.01.19
12:49
(304) "собирай пазл, пытайся понять, как оно там устроено" - в этом задача отладки, собрать пазл, поняв как оно всё устроено. Похоже, программирование - это не ваше, от слова совсем.
307 dmpl
 
23.01.19
12:49
(304) Вот и надо начинать с получения этой документации, а не разбиения. Без этой документации нормального разбиения все равно не будет. Это как телегу впереди лошади ставить и обсуждать - как ее лучше запрячь.

(305) Вы, как разработчик ЗУП, должны иметь к ней доступ.
308 bolobol
 
23.01.19
12:52
(307) Серьёзно? Понятно всё с вами. Вам просто всем сказать, какие они не умные, один вы всё знаете как правильно.
309 Конструктор1С
 
23.01.19
12:54
(306) вообще-то у отладки задача совершенно другая - поиск и устранение ошибок, а вовсе не разбор сложнозапутанного кода.

(307) так где такая документация есть, которая описывает алгоритмы и архитектуру? Самое "документируемое" из всего что я видел, это база СППР от типовой конфигурации. Но та очень мало проливает свет на логику программного кода.
310 Bigbro
 
23.01.19
12:55
(299) зачем интерпретатору разбирать строку до которой он не доходит?
я считал что будет выполняться (и интерпретироваться предварительно) только та ветка (5% кода) в которую мы попали по многочисленным проверкам условий.
или 1с интерпретирует все полностью?
311 ADirks
 
23.01.19
13:01
(309) Задача тролля никогда не говорить ничего по существу, но при этом каждый раз ласково указывать тебе, что ты немного не того, не соответствуешь, так сказать.
А знать что-то по делу им вовсе не нужно.
312 Ник080808
 
23.01.19
13:15
(302) ну там был код:
Перем Тз1 Тз2 Тз3 ... тз10
Если условие1 Тогда
еслиусловие1.1 тогда
тз1.Добавить();
тз1.пол1 = значение1
---
тз1.Поле14
еслиусловие1.2 Тогда
тз2.Добавить();
тз2.пол1 = значение1
---
тз2.Поле14

Если условие 10 тогда
и так далее. тз имеют одинаковые структуры. вынос дублирующегося кода и проверки условий в отдельные процедуры сократил код на 10к строк.
313 Ник080808
 
23.01.19
13:17
(303) "Алгоритм смотрится в документации к программе" - шутить изволите? я ни в одной конторе не видел документации к доработкам. Та что о доработках, где есть документация к типовым где описаны алгоритмы работы отдельного функционала?
314 Ник080808
 
23.01.19
13:22
(310) самому интересно. просто вот явная ошибка синтаксиса в общем модуле ругается при обращению к общему модулю, а конструкции типа Объект.ЧТотоСделай() где у объекта нет такой функции ошибки не выдает, пока не зайдешь в нужную ветку.
315 bolobol
 
23.01.19
13:24
(312) Наверное, всё-таки, на "10", без "к"? Просто даже модуль обработки для регламентированной отчётности - 18к...
И там нормальные такие коды зашифровки/расшифровки...
316 Ник080808
 
23.01.19
13:31
(315) это был семерошный отчет переданный мне по наследству  от другого франча. и судя по количеству галочек на форме и их наименованию этот отчет переписывался периодически лет 7. Тогда я впервые в жизни узнал слово рефакторинг кода и понял зачем он нужен, когда добавление одной расчетной колонки (показатель11-Показатель10 ) в отчете заняло 8 часов доработки и отладки
317 dmpl
 
23.01.19
13:31
(308) Если вы не пишете ЗУП - то и повлиять на разбиение не сможете. О чем тогда разговор?

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

(310) Как минимум синтаксический контроль проходит весь модуль.
318 Ordnung
 
23.01.19
13:33
(317) Какой документации, поясните? Отдельный талмуд, описывающий каждую функцию модуля?
319 Ник080808
 
23.01.19
13:39
(318) и отдельно талмуд к каждому обновлению
320 dmpl
 
23.01.19
13:40
(318) Документация включает, как минимум:
1. Проект с ФМ и структурой данных.
2. Алгоритмы, реализованных в коде, с привязкой к ФМ.

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

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

Понятно, что в экосистеме 1С так не принято. В 1С сразу с шашкой наголо бросаются, но ведь мы же хотим называться программистами, а не кодерами?
321 Ordnung
 
23.01.19
13:41
(320) Вы на ЗУП что-то подобное видели?
322 bolobol
 
23.01.19
13:43
(318) Не обращайте внимания, схоласт в чистом виде.
Документации, поясняющей, что отмена ввода новой строки в документ приводит к добавлению данных в существующую в документе, быть априори не может. Ибо - это косяк.
Разобраться в документации, чтобы выявить аналитически место для возможного проявления этого косяка, конечно, можно, но проще войти в отладку и остановиться на изменении строк стажа - ответ прям красным выделяется.
323 Ник080808
 
23.01.19
13:50
(320) вот вышла редакция ерп 2.2 к ней нет документации. вы  хотите ее поддерживать и внедрять. Вы сами будете к ней документацию писать?
324 Ordnung
 
23.01.19
13:51
(323) Ога, "надо начинать с документации" же :)
325 bolobol
 
23.01.19
13:52
(323) Получается, что да. Ведь правильно сначала написать документацию, если её нет... А - нет! Затребовать от 1С надо документацию и, в случае непредоставления - отказаться от использования и, тем более - поддержки.
326 bolobol
 
23.01.19
13:53
Видите, как мы все неправильно работаем! А потом на 1С жалуемся, хотя сами - палец о палец не ударили, чтобы всё было хорошо и с документацией.
327 dmpl
 
23.01.19
13:53
(321) В 1С должен быть, иначе текущие типовые просто посыпались бы уже.

(322) Описанное в (0) требует для своей корректной реализации такую документацию. Точнее, сама идея в том, что пишется алгоритм, затем он детализируется до такой степени, чтобы каждый его пункт можно было реализовать небольшой процедурой или функцией. А не так, что "давайте по ходу разбивать".

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

(323) Прежде чем делать доработки, необходимо составить такую документацию, если у вас ее нет. Но 1С крайне не рекомендует вообще лезть в код ERP, так что какая разница какой длины функция?

(324) Всегда надо начинать с документации. Иначе получается бардак и пирровы внедрения.
328 Ordnung
 
23.01.19
13:53
Не, ничего против документирования я не имею, более того, требую от своих сотрудников комментировать код и писать краткую документацию к доработкам, касающимся пользовательского интерфейса, но устраивать балаган с тотальным документированием КОДА...
329 dmpl
 
23.01.19
13:54
(328) Не кода, а алгоритмов. Код - это выходной результат, его документировать не надо.
330 Ordnung
 
23.01.19
13:57
(327) >В 1С должен быть, иначе текущие типовые просто посыпались бы уже

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

(329) >Не кода, а алгоритмов

Код - это и есть алгоритм, изложенный в ЯП. Вы предлагаете его помимо ЯП, ещё и человеческим языком подробно расписывать?
331 bolobol
 
23.01.19
14:00
(329) Похоже, вы невероятно путаете "рекомендации к разработке" с документацией. Алгоритм и его программную реализацию (детализацию). И не факт, что реализация, выполняя алгоритм на 100%, не имеет мест, которые расширяют этот алгоритм в баги.
332 dmpl
 
23.01.19
14:02
(330) 1. Такую документацию сторонним разработчикам не предоставляют по понятной причине. Ибо именно она имеет самую высокую ценность.
2. _СНАЧАЛА_ расписываете человеческим языком, что и каким образом вы хотите получить (по пунктам), _ПОТОМ_ пишете код (по пунктам).

(331) Если бага выявляется на этапе формализованных тестов - она в коде. Если бага такими тестами не выявляется - она в алгоритме. Соответственно, и правка должна идти в алгоритме во втором случае, а только потом в коде.
333 bolobol
 
23.01.19
14:02
А в документации-то всё в порядке будет: "при выборе Сотрудника - заполнить ТЗ стаж". А вот в реализации:
"ПриОкончанииРедактированияСтроки", а строка - один только Сотрудник. Всё верно? Ошибка, судя по документации есть? А судя по реализации?
334 dmpl
 
23.01.19
14:06
(333) Вам надо детализировать что значит "заполнить ТЗ стаж". Так, чтобы каждый пункт реализовался кодом на 1 экране.
335 Конструктор1С
 
23.01.19
14:06
(317) у меня-то алгоритмы есть, называются тех. заданиями. Только вот это совсем не тот уровень абстракции. В ТЗ будет одно предложение, а за могут стоять несколько сотен строк кода. Описывать всю логику программного кода отдельным документом это абсурд. Получается двойная работа.
Да, перед тем как лезть в конфигуратор, я занимаюсь декомпозицией задачи и проектированием. Но этот процесс мало походит на написание документации: что-то держу в голове, что-то в виде пометок или схем на бумаге, что-то в виде табличек в экселе, что-то в виде схем в графическом редакторе, где-то наброски метаданных... В папочку такое проектирование не подошьешь, а тупо описывать всё это разнообразие не вижу смысла, мне за это не платят.
336 bolobol
 
23.01.19
14:10
(334) Не имеет смысла. Ошибки там нет - оно работает корректно. Ошибка в дублировании данных в ТЗ Стаж в итоге выполнения этой части Алгоритма. Но где же?
337 dmpl
 
23.01.19
14:12
(335) Это не двойная работа, это подготовительный этап к тому, о чем пишется в (0). Надо просто взять и формализовать оформление такой декомпозиции, чтобы прикладывать это к документации. И смотреть потом не в коде, а в документации.

(336) А вы таки распишите, как заполнять таблицу.
338 bolobol
 
23.01.19
14:15
(337) Действительно! Чего бы нет. Почему бы ещё какой бесполезностью не позаниматься, лишь бы работу не делать!
Вы реально и в жизни настаиваете на использовании бестолковых действий, бесполезных вещей? Или только тут троллите?
339 Конструктор1С
 
23.01.19
14:17
Код это тоже своего рода документация, причем самая наидетальная. Но это если код грамотно написан, переменные названы грамотно и лаконично, имена процедур четко говорят о выполняемых ими действиях, вложенность циклов и условий небольшая, и ещё ряд условий. Такой код можно читать вместо документации. А теперь, внимание! Хорошее "самодокументирующееся" имя процедуре можно дать только тогда, когда имеет только одну целы (выполняет одно действие). Если процедура громоздкая, то в ней выполняется много действий, и этой процедуре априори нельзя дать хорошее имя. Либо это имя будет слишком высокой абстрактности, совершенно не поясняющее сути процедуры, либо имя будет дезинформирующим, раскрывающим только часть выполняемого процедурой алгоритма.
340 Вафель
 
23.01.19
14:44
(339) Вашими устами да мед пить.
341 Конструктор1С
 
23.01.19
14:49
(337) всякие там проектные документации на гораздо более высоком уровне абстракции, нежели программный код. В лучшем случае будет детальное описание алгоритма в терминах предметной области и набор соображений по архитектуре. Написание сложной документации, детально описывающей все алгоритмы, стоит больших денег. Расходы на такую документацию будут догонять расходы на саму разработку. Внятные ТЗ не часто выпросишь, уж не до роскоши
342 Oftan_Idy
 
23.01.19
15:05
(0) Все это чушь собачья.
Функции должны быть понятными, а какой длины не важно
343 Конструктор1С
 
23.01.19
15:23
(342) вот как раз большие размеры функций здорово ударяют по понятности оных
344 bolobol
 
23.01.19
15:36
(343) "Чушь собачья"! (с) (342)
Спагетти читаешь и читаешь себе, без прыжков. Всё в одном.
Вот если одно-второе Если на 100500 экранов растягивается и начинаются прыжки к разным точкам ветвления для сравнения условий - вот это да, это, прям, беда-а
345 Конструктор1С
 
23.01.19
15:57
(344) выше уже обсуждали, что есть понятие количества точек принятия решения на одну процедуру. Чем больше точек принятия решения, тем сложнее для восприятия процедура. Это аксиома. Машине пофиг, она и 100-кратное вложение циклов и условий переварит, а человеку сложно (БЫСТРО!) понять, чего там делает эта программа. Обычно большие процедуры выглядят так:
Процедура ВыполнитьЧегоТоТам()
    
    // много кода
    Если <Условие> Тогда
        Если <Условие> Тогда
            Для каждого  Из  Цикл
                Если <Условие> Тогда
                    // много кода
                    Для каждого  Из  Цикл
                        // много кода
                        Если <Условие> Тогда
                            // много кода    
                        Иначе    
                            // много кода    
                        КонецЕсли;    
                        
                    КонецЦикла;     
                    // много кода
                КонецЕсли;             
            КонецЦикла;
        Иначе    
            Для каждого  Из  Цикл                
                Если <Условие> Тогда
                    // много кода    
                Иначе    
                    // много кода    
                КонецЕсли;                
            КонецЦикла;
        КонецЕсли;
        // много кода
    ИначеЕсли <Условие> Тогда        
        Для каждого  Из  Цикл
            // много кода
            Если <Условие> Тогда
                // много кода    
            Иначе    
                // много кода    
            КонецЕсли;     
            // много кода
        КонецЦикла;     
    КонецЕсли;
    
КонецПроцедуры

только гораздо растянутее. Без многократного прогона отладчиком такой код понять почти невозможно. А это уже само по себе индикатор чрезмерной сложности
346 FIXXXL
 
23.01.19
16:03
(345) знакомые конюшни, потянуло навозом :)
347 Tonik992
 
23.01.19
16:37
Книга "Рефакторинг. Улучшение проекта существующего кода" меньше в объеме, но стоит гораздо дороже той же "Совершенный код". Почему так? Более ценные знания?
348 bolobol
 
23.01.19
17:22
(347) Чем лаконичнее - тем лучше, потому что быстрее, значит - эффективнее, т.е. - дороже
349 Cyberhawk
 
23.01.19
20:19
(215) Благодарю за инфу
350 vi0
 
09.02.19
09:03
(32) Про термин метод. На 9:10 https://youtu.be/j-zS42qRv88?t=550
351 Cyberhawk
 
10.02.19
08:39
(350) А в текстовом виде?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший