Ищем самый глубокий стек вызовов типовой конфигурации

1. Alexei Philippov (philya) 64 11.10.16 21:30 Сейчас в теме
Ковырял в ЗУП 3.0 расчет аванса по кнопочке заполнить. Нашел откуда берется ФОТ, не понял почему он не меняется при изменении окладов кадровым изменением, понял что все существующие методы расчета авансов нас не устроят и придется написать внешнюю обработку заполнения табличной части в один маленький запрос и одну процедуру.

В процессе ковыряния наблюдал стеки вызовов глубиной 18, удаление всех временных таблиц, миллионы одно строчных методов, которые вызывают друг-друга, троекратное создание и выполнение запроса для получения списка сотрудников, которым положен аванс. Я считаю - это лучшие практики программирования, без еды программисты 1с не останутся никогда )

Объявляю вознаграждение в 20 смарт-маней за самый глубокий стек вызовов в типовой конфигурации 1с. Подведение итогов 30.12.2016 года.
Прикрепленные файлы:
Дмитрий74Чел; Патриот; papami; +3 Ответить 4
Вознаграждение за ответ
Показать полностью

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


близка к идеалу (3.77%, 2 голосов.)
3.77%
немного напрягает (15.09%, 8 голосов.)
15.09%
растет каждый год (24.53%, 13 голосов.)
24.53%
фирма 1с следует порочным практикам обобщения всего и вся (15.09%, 8 голосов.)
15.09%
ужас, дайте мне это развидеть (41.51%, 22 голосов.)
41.51%

Найденные решения
46. Пишу код как картины (yurii_host) 1042 23.10.16 09:58 Сейчас в теме +20 $m
Замерял в ерпи 2.1 стек вызовов в процедуре закрытия месяца. Насчитал глубину около 22.
Прикладываю в файле замер. Вроде максимальная глубина в строке 2853
Прикрепленные файлы:
Формирование движения по партиям при закрытии месяца.mxl
Остальные ответы
2. Алексей Роза (DoctorRoza) 11.10.16 23:15 Сейчас в теме
18 вызовов? Это мало! Проведение документов в БУХ 3.0 там за 100 улетает!
3. Игорь Дайнеко (Dnki) 12.10.16 02:06 Сейчас в теме
(2) DoctorRoza, и остальные господа! Коль это предмет научного исследования, то давайте подавать факты четко.
Указывать :
1)расположение процедуры (имя общего модуля, имя объекта и т.д.)
2)ее имя
3)глубина (пожалуй, с учетом всех, от головной по последней вызванной).

А мое мнение - это отврат. Я своих программистов бью по рукам за излишнее разбиение. Оно должно быть продиктовано смыслом. А именно, когда процедура реально вызывается из 2-х и более мест. Разбивка просто "для компактности" только убивает сопровождаемость.
pm74; PhoenixAOD; +2 3 Ответить 3
4. Alexei Philippov (philya) 64 12.10.16 07:13 Сейчас в теме
(2) DoctorRoza, я верю, но хочу картинку (у меня не получилось вывести стек вызовов в текстовый документ) и краткое описание в какой момент это случается.
5. Олег Родионов (Ovrfox) 7 12.10.16 09:11 Сейчас в теме
(3) Dnki, Не соглашусь с вами. Например процедура размещения товара на адресном складе
Поддерживать 600 строк
Или основная процедура с примерно таким текстом
ПолучитьОстаткиРаспределения(Парметры)
ОпределитьгруппыСовместимости(Парам)
Для каждой группа из группы цикл
РаспределитьГруппу(парам)
КонецЦикла
СоздатьДокПеремещения(Парам);
При этом все указанные процедуры вызываются только из одного места и в сумме примерно те же 600 строк

Какой вариант легче поддерживать? Я считаю, что второй.
Alien_job; Патриот; kuzyara; BlizD; dj_serega; Serega-artem; Артано; корум; +8 Ответить 2
6. Александр Заварзин (loki03) 12.10.16 09:34 Сейчас в теме
(5) А если так:
Процедура РазмещениеТовараНаСкладе()
// Получить остатки распределения
блок какого-то код
// Определить группы совместимости
снова блок кода
// Распределяем группы
Для Каждого Группа из Группы Цикл
КонецЦикла;
// Создать документ перемещения
код для создания документа
КонецПроцедуры
...Показать Скрыть


Все то же самое, все в одной процедуре.
Аккуратно разбито по блокам, и без лишних вызовов...
7. Валерий К (klinval) 201 12.10.16 10:00 Сейчас в теме
(3) Dnki,
Я своих программистов бью по рукам за излишнее разбиение. Оно должно быть продиктовано смыслом. А именно, когда процедура реально вызывается из 2-х и более мест. Разбивка просто "для компактности" только убивает сопровождаемость.

Две крайности:
1) 1С-овская крайность - когда тысячи одно строчных методов, попытка на каждый чих создать отдельную процедуру или функцию
2) Вторая крайность - когда всё должно быть в одной процедуре. 1000 строк кода? 5000 строк кода? Уже даже разработчик не может понять что и как - ни в коем случае не разбивать на методы, а то мы станем как программисты фирмы 1С!

А не лучше ли найти золотую середину? Метод может быть и на 50 строк кода, но ничего не понятно, из-за, например, глубокой вложенности. Его нужно разбить. А может метод и на 200 строк (рабочего кода без комментариев и пустых строк) быть понятен даже программисту впервые прочитавшему его.

Разбивка как сама цель, т.е. <Разбивка просто "для компактности"> - такого не должно быть. Но и не разбивать нечитаемый метод только потому что выделенная процедура будет вызываться только из одного места - тоже нельзя. Читаемость уменьшается в обоих случаях.
Дмитрий74Чел; Артано; +2 Ответить 1
8. Олег Родионов (Ovrfox) 7 12.10.16 11:36 Сейчас в теме
(6) loki03, Но если захотеть повторно использовать код - то придется таки разбивать.
Это первое
Во вторых - где гарантия, что все переменные разнесены по блокам? Что если отделить Выделенный фрагмент, то он сразу заработает?
В третьих - комментарии ставим только между блоками? А если внутри блока захотелось? Как тогда понять где блок, не читаю всю процедуру?
Вывод - разбиение все же увеличивает читабельность кода. Просто увлекаться и злоупотреблять не нужно.
9. Валерий К (klinval) 201 12.10.16 12:46 Сейчас в теме
(1) philya,
Объявляю вознаграждение в 20 смарт-маней за самый глубокий стек вызовов в типовой конфигурации 1с. Подведение итогов 30.12.2016 года.

А вы в курсе что к указанной дате все эти 20 СМ сгорят?
Ovrfox; v3rter; +2 Ответить 1
10. Сергей necropunk (necropunk) 5 12.10.16 13:34 Сейчас в теме
Сейчас придет ildarovich, выгрузит всю ERP в хитроумную цепочку графов и напишет запрос, выбирающий максимальную глубину вызовов в этом графе :)
Perrojka; Дмитрий74Чел; zqzq; config; +4 Ответить
11. Сергей Старых (tormozit) 4272 12.10.16 15:29 Сейчас в теме
Надо было в условиях запретить рекурсию (неуникальные строки в стеке) в любом виде. А без этого запрета первая же рекурсия даст приличную глубину. Например в обработке УниверсальныйОбменДаннымиXML при рекурсивной выгрузке по ссылкам.
12. Alexei Philippov (philya) 64 12.10.16 16:22 Сейчас в теме
(9) klinval, я еще дам ) У меня есть.
13. Артано Майаров (Артано) 320 12.10.16 17:26 Сейчас в теме
(3) (6) (7) Код разбивают не для красоты, а для облегчения сопровождаемости чужого кода. Ваш любимый вылизанный код, для другого программиста будет сущим адом, если писать функции по 600-1000 строк. Практика показывает, что если код функции занимает более одного экрана, то скорость прочтения и понимания кода падает в разы. Если же те самые блоки разбиты на функции с говорящими названиями, то можно даже избавится от излишнего описания, оставив короткий комментарий по специфическим моментам, которые нельзя вместить в наименование.
monkbest; shmeler; Serega-artem; kraynev-navi; +4 Ответить 2
14. Alexei Philippov (philya) 64 12.10.16 19:04 Сейчас в теме
(13) Артано, вы говорите понятные вещи. Расскажите зачем 1с из обработчика кнопки вызывает метод модуля документа, который тупо вызывает метод формы? Зачем все эти общие модули, в которых однострочные методы вызывают однострочные методы?
15. Артано Майаров (Артано) 320 13.10.16 14:52 Сейчас в теме
(14) Это вопрос к разработчикам 1С. Но по практике сказать могу следующее. Если код выполняется много раз, то бывает создаются и функции в 1-3 строки. Особенно если этот участок кода склонен к периодическим изменениям. Очень удобно, в таком случае, выделить участок кода и пользоваться уже им как методом с утвержденной спецификацией. Если потребуется внести изменения, то изменяется лишь один метод. Входящие и исходящие данные не меняются, внутренности инкапсулированы, так что в таком случае выигрыш.
По приведенному примеру сказать мало что могу, возможно это остатки другого кода, когда эти методы были не однострочными.

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

Например когда стартует крупный проект в нем очень много неизвестных и никакое ТЗ которые можно создать в разумные сроки не поможет. Поэтому при проектировании в первую очередь разрабатывается структура кода. Так чтобы разные сущности были разделены на методы и модули. Такой подход позволит при уточнении очередных требований легко внести изменения в уже написанный код.

В юмористическо-литературной форме эту проблему я когда-то уже излагал
16. Артем Трущ (papami) 17 15.10.16 22:05 Сейчас в теме
Это вопрос к разработчикам 1С

Вообще, к разработчикам типовых конфигураций много вопросов.
Но мне понравилось, что топикстартер не задается вопросом "Зачем столько?", а просто предлагает постебатьсячитать. И это правильно!

Подписался на тему.
17. Сисой Сисой (Сисой) 81 17.10.16 12:01 Сейчас в теме
На самом деле все просто. 90% однострочных процедур в БСП и типовых - это претензия не к разработчикам БСП и типовых, а к разработчикам платформы. Кто ж виноват, что эти птеродактили сделали свойства общих модулей (вызов сервера, повторное использование значений и т.п.) статически неизменяемыми. В итоге плодится куча абсолютно бесполезных модулей ТраТаТаПовтИсп. Плюс невозможность переопределять или дополнять средствами платформы методы общих модулей (для модулей форм подобное сделано в расширениях) - значит добавляем ТраТаТаПереопределяемый.
18. Валерий К (klinval) 201 18.10.16 09:18 Сейчас в теме
(17) Сисой,
90% однострочных процедур в БСП и типовых - это претензия не к разработчикам БСП и типовых, а к разработчикам платформы.

Не знаю что там с платформой, но у меня почему то ни разу не возникло желания написать свой метод из одной строки, который вызовет другой мой метод из одной строки, который в свою очередь вызовет ещё метод...
Двойную вложенность однострочных методов ещё можно объяснить особенностями платформы, но не тройную, четверную.
19. Валерий К (klinval) 201 18.10.16 09:49 Сейчас в теме
Пришлось однажды переделывать код не 1С-овской конфигурации (скорее всего не 1С-Совместимо) - после этого я стал лучше относится к конфигурациям фирмы 1С. Там перед тем как вызовется реальный код ещё пройдёт 2-10 однострочных вызовов (многие не переходящие по F12). А сам реальный код модулей формы, модулей конфигурации хранится во внешних обработках... Отлаживать и изменить что-то - нереально. Кстати поломать конфу можно прямо из режима предприятия - стоит только удалить какую-нибудь прикрепленную внешнюю обработку.

Специально сделал скрины с той конфигурации. Из них мы видим, что ПриСозданииНаСервере формы документа мы обращаемся к внешней обработке, в которой тоже есть обращение к другой внешней обработке...
Прикрепленные файлы:
20. Артем Трущ (papami) 17 18.10.16 12:54 Сейчас в теме
Пришлось однажды переделывать код не 1С-овской конфигурации

О того, что кто-то пишет еще хуже, код типовых лучше не становится.
21. Валерий К (klinval) 201 18.10.16 16:57 Сейчас в теме
(20) papami, чисто психологический эффект: видишь, что где то намного хуже и твоя оценка от "Отвратительно" меняется в пользу "Плохо, но терпимо"
22. Andrey Erastov (tailer2) 18.10.16 17:54 Сейчас в теме
(6) loki03,
#Область
...
#КонецОбласти
23. Andrey Erastov (tailer2) 18.10.16 17:56 Сейчас в теме
24. Andrey Erastov (tailer2) 18.10.16 17:58 Сейчас в теме
25. Andrey Erastov (tailer2) 18.10.16 18:19 Сейчас в теме
(19) klinval, это позволяет менять функционал, не выгоняя юзеров
для базы 24/7 это выход
26. Валерий К (klinval) 201 19.10.16 09:54 Сейчас в теме
(25) tailer2, это база для управления IT (заявки пользователей, учет картриджей и т.д.). Явно не 24/7!
Да даже для базы 24/7 - это спорное решение. Как таковой отладки для такой базы нет. Изменения/внесение/поиск/доработка которые в нормальной базе заняли бы пол часа, тут пришлось делать целый день, т.к. пока разберёшься как что устроено... Случайно затёрли одну обработку - база вообще перестала открываться.
27. Andrey Erastov (tailer2) 19.10.16 10:17 Сейчас в теме
(26) klinval,
для базы 24/7
заняли бы пол часа

^)))

пришлось делать целый день
хоть неделю, юзеры юзают
или у нас с вами разные 24/7?

про "случайно затерли", -...
ну, молодцы :))
28. Валерий К (klinval) 201 19.10.16 11:15 Сейчас в теме
(27) tailer2,
хоть неделю, юзеры юзают
или у нас с вами разные 24/7?

Я о другом - о труде программиста и сопровождаемости. Если организация переходит на такой вариант, то помимо <это позволяет менять функционал, не выгоняя юзеров> появляется сложности с сопровождением, следовательно увеличиваются временные затраты на исправление и денежные на труд программиста. Т.е. помимо плюсов есть и минусы. Насколько я знаю организации 24/7 обычно балуются динамическим обновлением.

И ещё: Если <1) База не 24/7 и 2) Работа которая заняла бы пол часа ушло 8 часов из-за такой специфики> Тогда вопрос зачем это нужно? А база, я повторюсь, для учета заявок пользователей IT отделу. Такая база в принципе 24/7 не нужна даже на большом предприятии. 5 минут простоя для обновления этой базы явно не вызовут миллионные убытки, т.к. в такой базе не ведется коммерческая деятельность. Т.е. логика разработчиков конкретно этого решения мне вообще не понятна.
29. rjhev korum (корум) 304 19.10.16 11:58 Сейчас в теме
(28) klinval, аврально допиливали на ходу, потом ещё перепиливали при обнаружении прорех.
А потом, как всё отладилось, прибираться не стали, ибо как всегда есть другие задачи, да и "работает - не трожь!".

И да, тот разработчик, который запустил это нечто, разбирался бы с проблемой не день, не 8 часов, а не больше часа с перекурами.
30. Артем Трущ (papami) 17 19.10.16 13:03 Сейчас в теме
И да, тот разработчик, который запустил это нечто, разбирался бы с проблемой не день, не 8 часов, а не больше часа с перекурами.

Точняк! Проблема с потерей времени не в методике, а в том, что контора потеряла ценного (того самого) разработчика...
...И возня с 18-ю вложенными функциями связана не с тем, что их так много, а с тем, что тот самый разработчик типовой работает не в нашей конторе.
31. Валерий К (klinval) 201 19.10.16 13:20 Сейчас в теме
(29) корум,
аврально допиливали на ходу, потом ещё перепиливали при обнаружении прорех.
А потом, как всё отладилось, прибираться не стали, ибо как всегда есть другие задачи, да и "работает - не трожь!".

Не разбирался на 100% в конфе, но судя по тому что я видел: практически всё выведено во внешние обработки. Например движений документы не делают напрямки, зато есть одна подписка на все документы, которая вызывает внешнюю обработку, в которой и есть весь код. Плюс все формы фактически внешние. Причём внутренние нарисованы так-же как и внешние, но весь код состоит из перенаправлений на внешнюю...

Думаю это было продиктовано не авралом, а это целеноправленное решение делать именно так. Причём есть ощущение, что у разрабов есть нормальная база, просто они в релиз атоматизированными средствами делают из неё базу с внешними обработками. Тем самым завязывают пользователя чисто на себя, т.к. сторонний программист в таком бреде будет разбираться гораздо дольше. Ну и конечно плюс в том, что исправить ошибку можно через внешнюю обработку, которую пользователь может сам прикрепить.
32. Alexei Philippov (philya) 64 19.10.16 20:54 Сейчас в теме
(17) Сисой, похоже в 8.3.9 расширения могут уже почти всё - нужно попробовать.
33. Денис Ковалев (denger8088) 20.10.16 20:43 Сейчас в теме
Недавно в Бухгалтерии 3.0 дописывали небольшой функционал! Я чуть с ума не сошел пока прописал нужные обработки в загрузку с банка выписки... Это не реально туда суда!!! ССЫЛКА НА ССЫЛКЕ И ССЫЛКОЙ ПОГОНЯЕТ ВЕСЬ функционал )))

P.S. просто не выдержал (крик души)
34. ффф ыыы (zqzq) 16 21.10.16 08:26 Сейчас в теме
Вообще про оптимальную длину метода всё уже изучено вдоль и поперёк, см. С. Макконнел "Совершенный код", например. А большой стек это частично следствие отсутствия ООП и костылей по некоторому эмулированию этого же ООП.

В целом в текущей платформе подход 1С адекватен, я считаю.
35. A M (DarkUser) 21.10.16 09:40 Сейчас в теме
Вынесение кода во внешние обработки возможно связанно с тем, что со временем разработчик этой конфигурации закроет их в *.dll или установит пароли на внешние обработки. Соответственно будет ещё брать деньги за сопровождение и доработку функционала. Весьма логичное решение.
36. Валерий К (klinval) 201 21.10.16 10:14 Сейчас в теме
(34) zqzq, цитата из книги:
Так какую же длину методов считать приемлемой в объектно-ориентированных
программах? Многие методы в объектно-ориентированных программах будут ме-
тодами доступа, обычно очень короткими. Время от времени реализация сложно-
го алгоритма будет требовать создания более длинного метода, и тогда методу можно
будет позволить вырасти до 100–200 строк (строкой считается непустая строка
исходного кода, не являющаяся комментарием). Десятилетия исследований гово-
рят о том, что методы такой длины не более подвержены ошибкам, чем методы
меньших размеров. Пусть длину метода определяют не искусственные ограниче-
ния, а такие факторы, как связность метода, глубина вложенности, число перемен-
ных, число точек принятия решений, число комментариев, необходимых для объяс-
нения метода, и другие соображения, связанные со сложностью кода.

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

Под принципы изложенные Макконнеллом 1С вроде подходит, но это не значит, что код у них получается всегда понятным. Лично я на опрос ответил "немного напрягает".

Меня больше беспокоит качество техподдержки, которая порой всеми правдами-неправдами старается не принять заявку. Даже хотел выложить безграмотные ответы ТП на инфостарте (просто вопрос-ответ без комментариев, чтобы пользователи сами оценили кто неправ), но как-то подостыл... Но и эту проблему обошёл: просто перестали писать в ТП)) Пишем сейчас в основном только про ошибки платформы, т.к. мы их исправить не можем, да и такие ошибки с первой линии обороны обычно быстрее переадресовывают техническому специалисту.
37. Антон Антонов (monkbest) 28 21.10.16 14:18 Сейчас в теме
(36) klinval, есть другая умная книжка, называется "Чистый код", так вот вней не то что 100-200 допускается, там строчки 3 рекомендуют писать в одной процедуре не более. Автор настаивает на3ех строках, но допускает 1 экран. Если процедура не лезет на эуран, то это говно код. И такой подход тоже имеет право на существование

(1) Однострочные вызовы глубиной 10 и более раз - следствие не методики "Чистого кода" Роберта Мартина, а разработанной 1Сом методологии доработок типовых конфигураций. А суть его в том, что надо сторонним разрабам (нам с Вами) четкое место, куда они будут вживлять свой говнокод и это место не будет "мигрировать" от релиза к релизу, что упростит обновление. Этим местом являются модули с постфиксом "Переопределяемый" в имени, в них нет вообще кода, а только вызов следующего метода. Таким образом каждое место, куда теоретически можно внести доработку должно проходить через переопределяемый модуль увеличивая глубину стека на 2. Т.е. если в алгоритме 5 таких мест + бегаем с формы в модуль, с клиента на сервер, вот и получим 15 и более глубину стека.

Все оказывается ради нас сделано. Но я согласен с возмущением автора, т.к. это нечитабельный бред и эта методология яйца выеденного не стоит.
38. Антон Антонов (monkbest) 28 21.10.16 14:40 Сейчас в теме
(1) 20 методом тыка в Бух 3.0 нашел 20 уровней вложенности
Прикрепленные файлы:
39. Валерий К (klinval) 201 21.10.16 14:41 Сейчас в теме
(37) monkbest,
Автор настаивает на3ех строках, но допускает 1 экран.

1 экран тоже понятие относительное. В зависимости от настроек винды и конфигуратора у меня может поместится от 1 до 1000 строк на 1 экран. Лучше измерять в строках.
Мне ближе мнение:
Пусть длину метода определяют не искусственные ограничения

Т.к. можно и на 1 экран написать код который никто (даже сам авто на следующий день) не разберёт, а можно и на 10 экранов написать понятный код. Всё индивидуально, а все почему-то всегда предлагают одну из крайностей: разбить на 100 методов по 10 строк или написать 1 метод на 1000 строк. В зависимости от ситуации правильным может оказаться любой вариант или средний между ними.
40. Валерий К (klinval) 201 21.10.16 14:48 Сейчас в теме
(38) monkbest, и заметьте - ни одного метода с допиской "Переопределяемый"...
Если честно в шоке, я думал, что автора с 18 никто не побьет! Я находил только 15 глубину (5 до вызова фонового задания и 10 после). Получается тенденция такая - всё что связано с ЗП имеет большую глубину вложенности.
41. Антон Антонов (monkbest) 28 21.10.16 14:50 Сейчас в теме
(1) опа, уже 21, все там же по кнопке рассчитать зарпалату, этим можно заниматься до бесконечности)))
Прикрепленные файлы:
42. Антон Антонов (monkbest) 28 21.10.16 14:53 Сейчас в теме
(40) klinval, это я еще ЗУП 3.0 не открыл, там думаю можно хорошо нарыть))) я знаю при формировании отчетов там тексты запрсов кодом формируются через одно место и сам расчет ЗП там посложнее чем в Бух 3.0 будет))
43. Антон Антонов (monkbest) 28 21.10.16 15:05 Сейчас в теме
(39) klinval,
1 экран тоже понятие относительное. В зависимости от настроек винды и конфигуратора у меня может поместится от 1 до 1000 строк на 1 экран.

относительное, но не в таком широком диапазоне.

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

Ну и это объективное удобство, когда читая код ты видишь заголовок функции, все переменные.
44. Дмитрий Агаглуян (lSanderSl) 21.10.16 15:41 Сейчас в теме
Как думаете, будет ли ООП в 1С?
45. Антон Антонов (monkbest) 28 21.10.16 16:00 Сейчас в теме
(44) lSanderSl, вопрос порождающий холивар, т.к. есть сразу встречные вопросы:

Что такое ООП в Вашем понимании?
Разве мы в 1С не работаем исключительно с объектами используя их методы и свойства?
Разве с появлением модуля менеджера в 1С не появилось разделение на методы объекта и класса?

На самом деле 1С со времен 7.7 - самое настоящее ООП с одним ограничением: мы не можем создавать свои классы.
Но тут вопрос: а зачем нам убирать это ограничение и разрешить создавать свои классы и заниматься наследованием?

Это не минус, такой подход позволяет разрабатывать со скоростью света, все однотипно и единообразно, есть своя методология и т.д. и т.п.
Плюс усложнение синтаксиса снизит скорость работы интерпритатора.
dj_serega; krv2k; Артано; +3 Ответить
46. Пишу код как картины (yurii_host) 1042 23.10.16 09:58 Сейчас в теме +20 $m
Замерял в ерпи 2.1 стек вызовов в процедуре закрытия месяца. Насчитал глубину около 22.
Прикладываю в файле замер. Вроде максимальная глубина в строке 2853
Прикрепленные файлы:
Формирование движения по партиям при закрытии месяца.mxl
47. Антон Антонов (monkbest) 28 24.10.16 07:56 Сейчас в теме
(46) yurii_host, а как получить такой файл?
48. Пишу код как картины (yurii_host) 1042 24.10.16 08:39 Сейчас в теме
49. Alexei Philippov (philya) 64 25.10.16 00:07 Сейчас в теме
(46) yurii_host, в закрытии месяца сложность алгоритмов хотя бы как-то объяснима. Я тыкался в начисление аванса процентом от оклада!!

Вы пока лидер. )
50. Сергей necropunk (necropunk) 5 25.10.16 09:29 Сейчас в теме
(49) philya, мне даже интересно, что победит в итоге: Зарплата или планирование производства в ERP...
51. Сергей necropunk (necropunk) 5 25.10.16 15:03 Сейчас в теме
В ERP на формировании движений по расчетам с партнерами - 17.
(48) yurii_host, кстати, на ERP 2.1.3.199 ругается на "Не обнаружен метод Оповестить".
52. Пишу код как картины (yurii_host) 1042 26.10.16 00:01 Сейчас в теме
(51) видимо запускаете на серверной. Этот вопрос уже был в комментариях к статье)
Для моих задач хватало пока использовать демо версии развернутые в файловой базе. Поэтому в работает пока только в толстом клиенте. Но вообще, если добавить в конфигурацию серверный ГЛОБАЛЬНЫЙ модуль и объявить в нем процедуру Оповестить, то в ней можно было бы и прописать логирование. Но там нужно подумать, как это сделать оптимальнее. У меня пока руки до этого не дошли
53. Антон Антонов (monkbest) 28 26.10.16 17:22 Сейчас в теме
(52) да, я уже наступил на эти грабли, но проблема была не в том, что база серверная, а в том, что клиент - тонкий. В толстом почему-то работает. Хотя работать не должно нигде, т.к. метод оповестить не доступен на сервере и в серверных модулях его нельзя вызывать..
54. c+ + (ture) 228 28.10.16 12:02 Сейчас в теме
В 1с люди работают с утра и до упаду, есть конечно гики, которые живут на работе как дома, но в целом это нарушение режима нормальной жизни. Как результат мысли в кучу программисты собрать не могут. А наличие короткого кода быстро облечит неграмотность, поэтому есть негласная договоренность закидать стороннего наблюдателя шаблонами программирования и нещадно огромным количеством вспомогательных функций с элементами защитного программирования (это значит функция всегда относится к вызывающему коду, как к коду идиота, который что-то вызвал и ожидает сервис пятизвездочного отеля). Это последнее порождает вложенность, которая сбивает ваши мысли с нити ходы выполнения программы, что без отладчика вообще не ясно "откуда пришло и куда полетит".
55. Сергей necropunk (necropunk) 5 01.11.16 15:51 Сейчас в теме
(52) Нет, в файловой демке делал, читал же требования.
56. Пишу код как картины (yurii_host) 1042 01.11.16 22:20 Сейчас в теме
(55) если пишет, что не обнаружен метод оповестить, значит запуск был в тонком клиенте, надо в толстом. Тогда он видит этот метод. Тоже запускал на ерпи, проблем не было.
Вообще, если вопрос актуален, готов разобраться в конце недели, если кинете мне конфу в личку
57. Сергей necropunk (necropunk) 5 02.11.16 12:02 Сейчас в теме
(56) Абсолютно точно запускал в толстом клиенте, в управляемом приложении. Может проблема в платформе? У меня 8.3.7.1917. Мне не критично, я эту демку-то развернул только из-за этого топика, чтоб вашу разработку потестировать. Если вам нужно/интересно - могу выложить CF на яндекс-диск.
58. Пишу код как картины (yurii_host) 1042 02.11.16 22:16 Сейчас в теме
Да, мне интересно. Если она еще сохранилась, то выложите, плиз. Я ее протещу. Если там вдруг ошибка в алгоритме - исправлю. Ссылку можно в личку скинуть.
Я эту схему периодически пользую на проектах, поэтому хочу, чтоб она работала
59. Vladimir Zemenkov (KillHunter) 6 12.12.16 15:41 Сейчас в теме
(54)
Полностью согласен с вашим мнением. А программа 1с должна быть интуитивно понятная и в плане интерфейса и в плане написания (оптимизации) кода, а когда запрос на 100 страниц это уже никуда не годится и хочется этому программеру прописать пилюлю в глаз :)
60. Alexei Philippov (philya) 64 05.01.17 05:16 Сейчас в теме
(46) Наш победитель! Ему отданы 20 смарт маней. Ура!
Оставьте свое сообщение