Вход | Регистрация
    1  2   

Можно ли надеяться на разбиение процедур для упрощения работы расширений?

Можно ли надеяться на разбиение процедур для упрощения работы расширений?
Я
   Гений 1С
 
19.04.21 - 08:11
Недавно менял процедуру печати накладной реализации в УТ11.
Так там вся печать одной процедурой - расширение не втиснуть.
Не пора ли 1С пересмотреть подход к написанию процедур и втыкать по возможности затычки.

Т.е. вместо:

ПодоготовитьПараметрыЗапроса
ВыполнитьЗапрос
ПолучитьМакет
ОбойтиЗапрос
ВернутьМакет

Сделать соответствующие процедуры.

А может просто доработать механизм расширений, чтобы можно было по ходу процедуры расставлять метки (как для GOTO), а расширения привязывать к этим меткам и иметь весь контекст процедуры?
   Beduin
 
1 - 19.04.21 - 08:15
Весь текст процедуры копируешь и переносишь в отдельную В ней дорабатываешь. А в той откуда скопировал просто вызов на доработанную с возвратом после этого.
   Beduin
 
2 - 19.04.21 - 08:16
В нормальных языках проще это все. Класс создал свой из исходного и перегрузил метод.
   Василий Алибабаевич
 
3 - 19.04.21 - 08:17
(0) "вся печать одной процедурой - расширение не втиснуть."
Для доработки, дополнения... печатных форм расширение и нафик не нужно.
   Гений 1С
 
4 - 19.04.21 - 08:20
(1) спасибо, КЭП, я в курсе. Но что делать при обновлениях, гыгыгы
   Гений 1С
 
5 - 19.04.21 - 08:20
(3) а для не печатных форм? а? это я пример привел.
   Beduin
 
6 - 19.04.21 - 08:27
(4) Ты при обновлениях будешь страдать в любом случае. Слияние кода из двух разных источников страдания везде.
   hhhh
 
7 - 19.04.21 - 08:34
(4) вроде это там всё это есть, вы документацию не читали.
   Гений 1С
 
8 - 19.04.21 - 08:34
(6) вероятности разные. если поменять весь код, вероятность косяка больше, чем если кусочек
   Гений 1С
 
9 - 19.04.21 - 08:34
(7) нету, не врите
   PLUT
 
10 - 19.04.21 - 08:45
(8) однох@йственно. 1С придумало заклинание "ИзменениеИКонтроль" для расширений

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

Как только разработчики пофигурации исправят ошибку (и расширяемая пофигурация будет обновлена), твое расширение перестанет выполняться с диагностикой следующего вида "ашипка. текст модуля для метода изменился"
   Гений 1С
 
11 - 19.04.21 - 08:50
(10) это булшит
   dmpl
 
12 - 19.04.21 - 08:51
(8) Если поменять основной код - вероятность не заметить критичные изменения при обновлении минимальна. Так что само по себе расширение надо применять обдуманно, а не так, что любые изменения - в расширении.
   PLUT
 
13 - 19.04.21 - 08:54
(11) бред питт какой-то?

ИзменениеИКонтроль для метода можно применить один раз, таким образом исключается заимствование метода в несколько расщирений.

и еще немного магии: Для восстановления следует нажать гиперссылку в колонке Действие. В результате будет открыта форма трех-стороннего объединения модуля.
Если в конфигурации не настроено использование внешней программы для трехстороннего объединения ‑ восстановить соответствие с методом конфигурации будет невозможно и фокус не получится.
   Провинциальный 1сник
 
14 - 19.04.21 - 09:02
По каким-то причинам 1с сознательно затрудняет модификацию алгоритмов общих модулей в расширениях. Это делается разными способами, но все связаны с разрушением "законченности" синтаксических единиц(процедур, функций). То есть, просто подменить вход и выход у процедуры по тем или иным причинам крайне сложно, не дублируя и не переписывая код. Неоднократно с таким сталкивался.
А "изменение и контроль" - кривой костыль.
   PLUT
 
15 - 19.04.21 - 09:05
(14) как и механизм расширений в целом - костылестроение поверх пофигурации на поддержке

ИзменениеИКонтроль заставит уделить внимание изменившимся модулям, ну там применить немного магии и в продакшн
   Провинциальный 1сник
 
16 - 19.04.21 - 09:07
(15) "ИзменениеИКонтроль заставит уделить внимание изменившимся модулям"
Вот только это внимание не поможет в том случае, если модуль не изменился, а просто перестал использоваться с определенной даты, вместо него выполнение идет по другой ветке.
   PLUT
 
17 - 19.04.21 - 09:08
(16) ну так и он перестанет использоваться с определенной даты? а вместо него пофигурация будет выполняться по другой ветве
   Почему 1С
 
18 - 19.04.21 - 09:32
(0) Не пора ли 1С пересмотреть подход к написанию процедур
Вообще длинные процедуры это признак низкого уровня программиста, я думаю в 1С конфигурации кодят люди только с хорошей квалификации, так что стоит ожидать.
   Провинциальный 1сник
 
19 - 19.04.21 - 09:45
(18) Кто только в 1с не кодит. Ходят слухи, что там даже инопланетяне работают.
   Dmitrii
 
20 - 19.04.21 - 10:03
Ещё один неофит расширений.
Расширения не всегда и не везде подходят.
Если говорить конкретно о печатных формах, то не надо их модифицировать. Если ограничится пользовательскими возможностями по правке макетов в режиме "Предприятие" не получается, то надо писать свою печатную форму и подключать её через БСП. Там же (в БСП) есть возможность подмены или удаления вызова типовой команды печати.
Если же речь о правке процедур и функций, например, в общих модулях, то в 99% случаев лучше это делать в самой конфигурации. Даже тогда, когда казалось бы можно использовать вызовы "Перед" или "После".
Лучше контролировать процесс обновления и понимать - как будут совместно работать твои дописки с типовыми изменениями очередного обновления, чем иметь чёрный ящик в виде расширения, где что-то происходит, но ты даже понятия не имеешь что, т.к. никаких инструментов по сравнению всех расширений (которых может быть хоть десяток) с исходной конфигурацией не существует.
   Gimalaj
 
21 - 19.04.21 - 10:19
(18) Как люди работают в 1С: https://habr.com/ru/post/470561/
   Гений 1С
 
22 - 19.04.21 - 10:30
(20) тут не о модификации, а скорее о баго-фичах 1с при печати: Странная печать услуг в расходной накладной и накладной реализации УТ11.
   dmpl
 
23 - 19.04.21 - 10:32
(22) А какая разница? Не трогай типовую форму, пили свою. Когда 1С что-то изменит - будет выбор: воспользоваться типовой или доработанной.
   Гений 1С
 
24 - 19.04.21 - 10:33
(21) круть. было дело и я пытался устроиться в 1С, чтобы нести так сказать свой гений в массы. Но это не контора, где может процветать гений.
   Гений 1С
 
25 - 19.04.21 - 10:33
(23) одна дает, другая дразнится. В чем довод?
   Ботаник Гарден Меран
 
26 - 19.04.21 - 10:35
(13)
Лесенки расширений с &Вместо и ПродолжитьВызов работают.
Результат, конечно, труднообновляемый.
   VladZ
 
27 - 19.04.21 - 10:36
(0) Пихать дополнительные печ.формы в расширении нужно только в случае, когда у тебя 100500 баз и нужно будет быстро растиражировать данную печ.форму по всем базам.
Во всех остальных случаях - через создание внешней печатной формы.
   dmpl
 
28 - 19.04.21 - 10:49
(25) Хотя бы типовая форма будет работать в случае чего. А если нужна именно доработанная - не надо будет всех выгонять для принятия изменений.
   Гений 1С
 
29 - 19.04.21 - 10:50
(27) аргументация будет?
   dmpl
 
30 - 19.04.21 - 10:51
(27) Если 100500 баз - проще настроить синхронизацию справочника доп. обработок с репозиторием.
 
 
   Гений 1С
 
31 - 19.04.21 - 10:51
(28) так себе логика
   dmpl
 
32 - 19.04.21 - 10:54
(31) Это единственно верная логика, когда обслуживаешь что-то крупнее ларька, и требуется согласование с кучей отделов для внепланового обслуживания системы.
   Dmitrii
 
33 - 19.04.21 - 11:05
(22) >> тут не о модификации, а скорее о баго-фичах 1с.

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

Единственное исключение - патчи для исправления ошибок, признанных 1С. Если ты точно знаешь, что в одном из ближайших обновлений найденный тобою баг будет исправлен 1С, то можно сделать своё расширение, которое меняет как угодно общие модули. Потому, что при следующем обновлении (где 1С исправит косяк) ты это расширение выкинешь и забудешь о нём.
   Гений 1С
 
34 - 19.04.21 - 11:46
(32) я больше с ларьками, прости
   H A D G E H O G s
 
35 - 19.04.21 - 11:49
(2) В "нормальных" языках даже в перегруженном методе надо писать его с нуля, копируя кусок родительского метода, либо тупо вызывая его через inherited. И вы это прекрасно знаете.
   H A D G E H O G s
 
36 - 19.04.21 - 11:54
Расширения отлично подходят везде.
Надо просто не лениться и запускать проверку возможности применения после обновлений.
   Гений 1С
 
37 - 19.04.21 - 11:55
(36) Спасибо КЭП, но перегрузка без проверки изменения кода намного стабильнее работает и требует меньше вызовов программиста
   H A D G E H O G s
 
38 - 19.04.21 - 11:57
(37) Это для мистеров Мисмачей в порядке вещей замаскировать проблему. Есть шанс, что перекрытие изменений в базовом методе может создать проблем на будущее.
   Гений 1С
 
39 - 19.04.21 - 11:59
(38) таки вы, Карл, в расширениях используете только замещения с контролем, не так ли?
   H A D G E H O G s
 
40 - 19.04.21 - 12:08
(39) Перед и После тоже, почему нет?
   Гений 1С
 
41 - 19.04.21 - 12:24
(40) так там же ты не проконтролируешь изменения внутри процедуры, вдруг логика поменяется внутри? Паранойя должна быть разумной
   Вафель
 
42 - 19.04.21 - 12:24
Надеятся то можно, но вот результат вряд ли будет.
О программистах партнёрах думают в последнюю очередь
   Гений 1С
 
43 - 19.04.21 - 12:25
не, ну если сомневаться в коде перекрываемой процедуры, то нужно при всяком обновлении все перекрытия пересматривать, если верить логике товарища Ежова. Тут или трусы сними или крестик надень.
   Вафель
 
44 - 19.04.21 - 12:26
А по поводу печати: мало того что там все в 1 процедуре, так ещё обход идёт по выборке вместо таблицы. Даже свою колонку не добавишь
   VladZ
 
45 - 19.04.21 - 12:36
(29) Мой аргумент:
- через создание внешней печатной формы разработка проще. Технология разработки уже устоялась: это стандарт, который уже не меняется хрен знает сколько. Можно не заморачиваться вопросом: "Что будет, если компания 1с изменит точки интеграции".
- через расширение нужно знать точки интеграции. И не факт, что эти точки интеграции не изменятся через полгода.

Хотя.. Второй вариант более денежный. Всегда можно свалить на фирму 1с (это не ты не можешь сделать стабильную печ.форму, это компания 1с постоянно "что-то меняет"). Постоянный источник дохода на ровном месте.
   H A D G E H O G s
 
46 - 19.04.21 - 12:36
(41) Ну, например, свои процедуры в
ОМ
МодификацияКонфигурацииПереопределяемый

в базовом модуле это вообще пустые процедуры, предназначенные для переопределения внутри конфигурации, но еще лучше их переопределить в расширении.
   H A D G E H O G s
 
47 - 19.04.21 - 12:38
(45) Во всех новых продуктах буду отказываться от ВПФ.
   Вафель
 
48 - 19.04.21 - 12:39
(47) а какая замена?
   H A D G E H O G s
 
49 - 19.04.21 - 12:46
(48) Встроенное в расширение.
Просто как только в расширении покажется новая обработка "ПечатьТТНВозвратыДляИППупкин" я сразу это увижу и спрошу у автора - "А какого хрена".
   dmpl
 
50 - 19.04.21 - 12:48
(49) А что, права на справочник ВПФ нельзя так настроить, чтобы только ты мог загружать туда новые обработки?
   H A D G E H O G s
 
51 - 19.04.21 - 12:54
(50) Конечно можно. Но я предпочту в составе конфигурации, чтобы и правки можно было проще вносить и проверки конфигурационные выполнять и рефакторинг.
   Почему 1С
 
52 - 19.04.21 - 12:55
(44) Выгрузка результата запроса в промежуточную таблицу (например, в таблицу значений) без необходимости (-1 балл)
   Гений 1С
 
53 - 19.04.21 - 12:56
(44) есть хитрый способ выгружаешь в таблицу, добавялешь туда колонку формируешь новую выборку запросом из таблицы. Обманывать 1С мы умеем хитро
   H A D G E H O G s
 
54 - 19.04.21 - 12:57
(52) Вон, посмотри, как работают профессионалы (53)
   Гений 1С
 
55 - 19.04.21 - 12:58
(45) речь не только о печатных формах. сходи на geniy1s.ru, там я описываю свой практический опыт, в последнее время часты расширения. Вот в ЭДО приходилось тоже тянуть всю процедуру экранов на 10
   Почему 1С
 
56 - 19.04.21 - 13:01
(54) я думаю это он прикалывается так
   Гений 1С
 
57 - 19.04.21 - 13:02
(56) не, что ты, рабочий метод. Это ж программисты метрополии (с Селезневки) заинтересованы делать все по красоте для сферического коня в вакууме, а мы - практики.
   Гений 1С
 
58 - 19.04.21 - 13:02
(56) лично я так делал, чтобы подсунуть 1С свою выборку, правда, уже не вспомню где
   PLUT
 
59 - 19.04.21 - 13:04
(54) да 1С сама в типовых использует такой финт ушами, как выгрузить временную в ТЗ, доработать напильником и запихать обратно в МВТ

ТЗ = Запрос.МенеджерВременныхТаблиц.Таблицы["Какаятовременнаятаблица"].ПолучитьДанные().Выгрузить();
Для Каждого СтрокаТЗ из ТЗ Цикл
 ... тут какая-то магия по модификации ТЗ
КонецЦикла

МассивПолейВыборки = Новый Массив;
        Для Каждого Колонка Из ТЗ.Колонки Цикл
            МассивПолейВыборки.Добавить(Колонка.Имя);
        КонецЦикла;
        ТекстПолейВыборки = СтрСоединить(МассивПолейВыборки, ",");
        
        ТекстЗапроса = "
            |УНИЧТОЖИТЬ %1
            |;
            |ВЫБРАТЬ
            |    %2
            |ПОМЕСТИТЬ %1
            |ИЗ 
            |    &Таблица КАК Таблица";
        ТекстЗапроса = СтрШаблон(ТекстЗапроса, "Какаятовременнаятаблица", ТекстПолейВыборки);
        
        Запрос.Текст = ТекстЗапроса;
        Запрос.УстановитьПараметр("Таблица", ТЗ);
        
        Запрос.Выполнить();
   H A D G E H O G s
 
60 - 19.04.21 - 13:06
(59) Это не отменяет -1 балл :-)
Это как оправдывать свою ошибку, ошибкой, которую допускает твой руководитель.
 
 
   H A D G E H O G s
 
61 - 19.04.21 - 13:07
Но на самом деле, ничего страшного в выгрузке в ТЗ нет.
   PLUT
 
62 - 19.04.21 - 13:09
(60) я всегда знал, что в типовых г@внокод. а что в последних платформах расширили работу с МВТ, так "это жжж неспроста"
   Почему 1С
 
63 - 19.04.21 - 13:17
(59) Сформировать таблицу с данными, которые неэффективно или невозможно получить в запросе это вполне распространённый метод работы.
Но вот обход выборки через ТЗ сразу режет глаз. И есть подозрение что -1 балл, не спроста и такой обход требует доп. ресурсов.
   Гений 1С
 
64 - 19.04.21 - 13:18
(63) это такой же идиотизм, как запрет на запросы в цикле, как реализации печати документов через запросы и прочие чудеса, придуманные Чистовым и компанией, или кто там за методологию отвечает. Гики, оторванные от реальности
   PLUT
 
65 - 19.04.21 - 13:20
(63) ну например, в ТЗ добавить колоку и заполнить значение (например произведением соседних колонок). Как по-другому будешь делать? Повторю, код из типовой пофигурации взят
   Почему 1С
 
66 - 19.04.21 - 13:24
(65) Я про обход результата запроса через таблицу, про передачу ТЗ через параметр в запрос написал что имеет место быть в определенных ситуациях.
   Почему 1С
 
67 - 19.04.21 - 13:29
(64) по моему все адекватно у них с рекомендациями что хорошо, что плохо. Ну я согласен иногда можно и запросы в цикле, если без них, все сильно сложнее выйдет, ну так и с другими рекомендациями на 90% верны, 10% имеют исключения когда можно игнорировать.
Чистов вообще классный, гений подачи материала.
   Гений 1С
 
68 - 19.04.21 - 13:35
(67) это адекватно выливается в кривые процедуры печати документов, которые мы наблюдаем.
   Uberschall
 
69 - 19.04.21 - 13:48
(2) это когда исходный класс был разработан с расчетом на то, что от него будет наследование. Как правило, если сразу такой цели нет, то класс делают final, чтобы избежать "fragile base class problem".
Это же относится и к процедуре в (0).
   Гений 1С
 
70 - 19.04.21 - 14:01
(69) ты думаешь 1С рассчитывает какие вещи у нее будут наследовать, какие нет? Рассмешил, сказочник
   Uberschall
 
71 - 19.04.21 - 14:09
(70) а как же общие модули типа ХХХ_переопределяемый?
   dmpl
 
72 - 19.04.21 - 14:53
(52) Даже если аргументируешь необходимость в данном случае такого подхода? Впрочем, экзамен на то и экзамен, что экзаменуемый должен продемонстрировать умение решить задачу при определенных ограничениях - видимо, там нет задач, когда такой подход можно аргументировать. А в реальной жизни если есть достаточные основания - это не запрещено.
   Почему 1С
 
73 - 19.04.21 - 15:11
(72) Если аргументируешь не будет - 1 балла, там же есть уточнение "использовать без необходимости"
   Провинциальный 1сник
 
74 - 21.04.21 - 13:03
Выборка из результата запроса ничем не лучше выгрузки в ТЗ. Выборка - это не курсор СУБД. Это по сути та же выгрузка, только с более убогим программным интерфейсом. И память жрет практически столько же. Можете проверить на тестовом примере..
Но непонятно почему в 1с хорошим тоном считается использовать выборку, а не выгрузку. В то время как выборка намного хуже для поддержки.
   Гений 1С
 
75 - 21.04.21 - 13:08
(74) Может они в 1С там думают, что выборка - это курсор? Поверье у них такое
   H A D G E H O G s
 
76 - 21.04.21 - 13:11
(74) там есть короткий пик потребления памяти 2x при Выгрузить(). Изза этого. Но мне как то пофиг.
   1ctube
 
77 - 21.04.21 - 13:52
(14) "По каким-то причинам 1с сознательно затрудняет модификацию алгоритмов общих модулей в расширениях. Это делается разными способами, но все связаны с разрушением "законченности" синтаксических единиц(процедур, функций). То есть, просто подменить вход и выход у процедуры по тем или иным причинам крайне сложно, не дублируя и не переписывая код. Неоднократно с таким сталкивался."

Вот вот. Проще отказаться от расширений, снять конфу с поддержки и дорабатывать. Как же я ненавижу расширения
   Гений 1С
 
78 - 21.04.21 - 21:38
(77) нет, есть еще метод парсинга. Я уже писал о нем на мисте. Ищи и наслаждайся.
   Вафель
 
79 - 21.04.21 - 22:22
(77) да потому что архитектора нормального там нет, а может и вообще нет
   Гений 1С
 
80 - 04.05.21 - 18:43
таки устал бороться с 1С и перешел на ИзменениеСКонтролем или как оно правильно называется. экономлю много времени.
   Василий Алибабаевич
 
81 - 04.05.21 - 18:48
(80) К чему тогда были советы из (78)? В порядке бреда? Или коллеге решил свинью подложить?
   Гений 1С
 
82 - 04.05.21 - 19:07
(81) это хорошие советы. для фикси или конторы, где большой объем изменений. Они съэкономят много нервов на обновлениях
   Uberschall
 
83 - 04.05.21 - 20:20
(82)  где большой объем изменений лучше вообще не надо расширения
   Ненавижу 1С
 
84 - 04.05.21 - 21:55
(80) а чё не на свой велосипед?
   Фрэнки
 
85 - 05.05.21 - 09:31
(77) "Я гналась за Вами три дня, чтобы сказать как Вы мне безразличны!"
   acanta
 
86 - 05.05.21 - 09:34
(85) бабушка потеряла костыль и бегала за ребенком?
   Новый1сник2
 
87 - 05.05.21 - 09:47
(0) печатные формы лучше внешними делать, а не расширением
   ДенисЧ
 
88 - 05.05.21 - 09:55
(87) А ИТС говорит - наоборот...
   Гений 1С
 
89 - 05.05.21 - 09:55
(88) (87) внешними дороже
   Волшебник
 
90 - 05.05.21 - 10:15
(67) У профессионалов запросы в цикле не тормозят.
   Новый1сник2
 
91 - 05.05.21 - 10:41
(88) расширение делается под конкретного клиента (если это не тиражная разработка).
а ВПФ один раз сделал и можно подключать и к другим клиентам.
   Новый1сник2
 
92 - 05.05.21 - 10:47
(89) странная у тебя позиция, дороже чего ?
   Гений 1С
 
93 - 05.05.21 - 10:48
(92) внешними дороже чем расширениями.
   Гений 1С
 
94 - 05.05.21 - 10:48
(91) почему расширение нельзя многим клиентам ставить? Можно.
   ДенисЧ
 
95 - 05.05.21 - 10:49
(93) Нунуну. Это у тебя ценник такой?
   Гений 1С
 
96 - 05.05.21 - 10:49
(95) это из практики.
   Новый1сник2
 
97 - 05.05.21 - 10:54
(94) если у тебя с десяток форм, и пара ВПФ отвалилось при обновлении, по моему проще эти пару форм поправить. а если они у тебя в расширении, и расширение отвалилось. думаю дольше придется восстанавливать + все формы будут не доступны.
   Фрэнки
 
98 - 05.05.21 - 10:55
(97) нет, не дольше
   Гений 1С
 
99 - 05.05.21 - 10:55
(97) пардон, если отвалилось расширение печатной формы, с чего отвалиться форме? ;-)
   Новый1сник2
 
100 - 05.05.21 - 10:56
(94) если делаешь расширение под конкретного клиента, кроме печ.форм там и другие вещи наверняка есть. остальным клиентам всем будешь ставить это расширение?
  1  2   

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.