Для версии 8.3.15 упростили поддержку расширений в простых и частых сценариях использования

30.01.2019     

В официальном блоге программистов 1С опубликована новость о развитии механизма расширений конфигурации. Его проработали в следующей версии платформы «1С:Предприятие».

Что нового у разработчиков: 

  • упрощение поддержки небольших изменений в методах,

  • облегчение поддержки расширений в случае переименования объектов конфигурации,

  • облегчение подключения «универсальных» расширений.

Необходимость замены метода

Часто возникают ситуации, когда не обязательно полностью менять поведение метода конфигурации, а нужно лишь немного подкорректировать его. Так, чтобы основное «содержание» метода менялось вместе с изменениями конфигурации, и в то же время в нем сохранялись ваши небольшие изменения.

Специально для таких небольших доработок сделано компромиссное решение – новая аннотация &ИзменениеИКонтроль. Она позволяет добавить собственные изменения в метод, сохраняя, при этом, его исходный текст.

В случае переименования объектов

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

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

 


 

Облегчение подключения «универсальных» расширений

Хорошо, если разработчик расширения предусмотрел собственную роль, включающую объекты расширения. Тогда администратор может назначить ее нужным пользователям. Однако заранее неизвестно, как такая роль может называться, да и само ее создание для разработчика расширения является чисто «механической» задачей.

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

Чтобы упростить создание и подключение «универсальных» расширений, внесены в механизм некоторые доработки. Они заключаются, например, в том, что теперь при создании расширения в нем автоматически создается роль, имя которой формируется по шаблону <ПрефиксРасширенияКонфигурации>_ОсновнаяРоль. Эта роль устанавливает права для новых собственных объектов.

Эта роль сразу же добавляется в свойство Основные роли расширения (возможность модифицировать основные роли мы добавили в версии 8.3.14).

 

 

Подробнее о всех доработках в Заметках из Зазеркалья.


Автор:
Константин Мазуренко Главный редактор


Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Senator_I 13 30.01.19 13:40 Сейчас в теме
#КонецВставить - автоматизация по-русски!
rname; zivan38; jamirza; catv; CratosX; sstas007; CyberCerber; Kochergov; +8 Ответить
3. molodoi1sneg 17 30.01.19 13:50 Сейчас в теме
5. nyam-nyam 30.01.19 14:09 Сейчас в теме
(3)#PutIn :)
vvp117; CratosX; mivari; YanTsys; maksa2005; the1; denmax; sstas007; catv; CyberCerber; Kochergov; +11 Ответить
6. Senator_I 13 30.01.19 14:11 Сейчас в теме
(3) ОкончаниеВставки
CratosX; CyberCerber; +2 Ответить
8. Darklight 27 30.01.19 14:59 Сейчас в теме
(3)Ну вот, раньше в програмнных скобках языковых конструкций 1С применяла склонения окончаний "Функция .... КонецФункци ; Цикл ... КонецЦикла ; Если ... Тогда ... Иначе ... КонецЕсли ; #Область ... #КонецОбласти" - даже в директивах препроцессора - а тут - вдруг решила отказаться от склонения. Да ещё и перейти на глагол. Революция, вбивающаяся из общего подхода - не красив получилось.

Уж лучше был бы так: "#Вставка ... #КонецВставки" а ещё лучше кокретизировать вставка чего "#ВставкаКода ... #КонецВставкиКода" или "#ВставкаАлгоритма ... #КонецВставкиАлгоритма".

Аналогично с удалением: "#УдалениеАлгоритма ... #КонецУдаленияАлгоритма"

ну и для кучи я бы добавил замену: "#ЗаменаАлгоритма ... #ЗаменяемНа ... #КонецЗаменыАлгоритма"
Зачем? Затем чтобы алгоритм сравнения текста лучше работал - позволял выполнить тройное сравнение с выделением мест что поменялось.

Ах да, конечно, такие фишки хочется чтобы поддерживались не только в расширениях - но и в основном тексте коннфигураций, и использовались при сравнении/обновлении конфигураций ;-)

Да, и хочется, чтобы удаляемый/заменяемый текст как-то выделялся в другом стиле - чтобы было видно, что он не активен (в идеале - это как в актуальной Visual Studio - неактивный блок алгоритма выводится в той же цветовой палитре, но бледнее).


И ещё:

В синтаксических конструкциях языка 1С меняющиеся окончания обычно возникают на различных инструкциях, являющийся программными скобками, сделанных по идеологии, которая (как мне кажется) зародилась в языке Фортран ("function ... end function ; do ... end do ; foreAll end foreAll; if ... then ... end if ; ")- когда программные блоки кода разграничиваются словосочетаниями, имеющими один корень: "Функция .... КонецФункци ; Цикл ... КонецЦикла ; Если ... Тогда ... Иначе ... КонецЕсли". Это только поначалу кажется удобным и понятным - а реально - засоряет синтаксис языка кучей лишних термов. Идеал был предложен языоком Си - все программные скобки всегда обозначаются только через фигурные скобки "{ ... }" - коротко, легко запоминается и чётко понятно, именно этот вариант сейчас наиболее популярен (с практически абсолютным перевесом среди языков, появившихся в XXI веке) среди императивных языков программирования. И никаких вариаций окончаний - на 1С смотрелось бы так: "Функция {....} ; Цикл {....} ; Если ... Тогда {....} Иначе {....} ; "#Область {....} ; "#Вставка {....} ;" Всё кратко, привычно, лаконично и понятно. ну и как в классике - скобки можно опустить - если к оператору относится только одна следующая за ним инструкция (ну, может кроме функций и инструкций препроцессора "#", где в этом просто нет нужды - так как такие вырожденные случаи крайне редки).

Увы, внедрить фигурные скобки в 1С: Предприятие 8 уже нельзя - это серьёзен изменение семантики языка. Хотя - вообще-то, автоматически сконвертировать код из одной семантики в другую - не такая уж и проблема - но на это навряд ли пойдут (всё равно будет много проблем с совместимостью, в т.ч. привычки программистов - хотя переучивание - это дело пары недель, максимум месяцев). А вот в новом поколении 1С Предприятие 9 такое нововведение я считаю было бы закономерным и очень правильным - это позволило бы сделать язык более легко усваиваемым и похожим на современные языки императивного программирования, что упростило бы "вход" в него программистам с других языков. Но это всё было бы логичным в купе с целым ворохом других улучшений языка, которые бы качественно выдвинули бы язык 1С на новый и современный уровень программирования!
cmd_vasec; igo1; Vladimir Litvinenko; +3 Ответить
15. Darklight 27 30.01.19 16:21 Сейчас в теме
(8)Прошу прощение за пару опечаток:
foreAll -> ForAll
Цикл ... КонецЦикла -> Пока ... Цикл ... КонецЦикла ; и другие циклы, например: Для каждого ... из ... Цикл ... КонецЦикла
Цикл ... { ... }-> Пока ... Цикл ... { ... } ; и другие циклы например: Для каждого ... из ... Цикл ... { ... }

Как видно, при применении фигурных скобок я не избавился от предшествующего им оператора "Цикл" (или для условного оператора - это "Тогда"), что, не свойственно современным языкам. Скорее всего я тут не прав и от него тоже стоит избавиться - пример: "ЕСЛИ (...) { ... } " - но тогда приведённые круглые скобки могут оказаться обязательными, как и для циклов: "ДЛЯ КАЖДОГО (... ИЗ ...) { ... }" - это только на первый взгляд кажется грубовато, на самом деле - в современных языках применяется именно такой подход и выглядит это не так уж плохо, а главное - позволяет делать очень мощьные вещи - например в языке Kotlin можно ввести свою функцию, которая, последним аргументом может принимать анонимную функцию и использовать её вот так "MyFunction(FirstArguemnt) { некий программный код, который будет преобразован в анонимную функцию и передан в MyFunction как второй аргумент}" - это позволяет красиво вводить как-бы свои программные инструкции - похожие на встроенные операторы языка. Комбинация таких инструкций позволяет создавать очень мощный и лаконичный программный код! И повышать уровень его абстракции. Ну а если такая техника не нужна, наверное, можно было бы и не требовать обязательного использования круглых скобок для встроенных операторов. Думаю и так синтаксический анализатор бы разобрался - что первое выражение относится к параметрам оператора - а следующее (которое может начинаться с программной скобки "{") - это его тело.
51. Good_Smile 06.09.19 15:24 Сейчас в теме
(8) Сейчас применила данную конструкцию.
Платформа 8.3.15.1489
Сделала #Удалить ... #КонецУдалить и #Вставить ... #КонецВставить, как написано в новости.
При проверке ошибка "Ожидается оператор препроцессора"

После поиска в гугле (в синтаксис-помощнике такого нет или может нужно было по справке искать)
нашла что правильно #Удаление ... #КонецУдаления и #Вставка ... #КонецВставки

Конечно, всего вашего комментария в 1с не видели, но традицию склонять окончания всё же оставили)
bp-service; malikova_julia; +2 Ответить
52. Darklight 27 09.09.19 10:59 Сейчас в теме
(51) Действительно, ананосировали одни термины - но реализовали другие - с правильными окончаниями - вот документация на ИТС
Но, во встроенной в платформу вставке (проверял в версии 8.3.16.869) - есть ошибка - написано во так "#Удалить … #КонецУдалить" - а правильно #Удаление … #КонецУдаления
А вот это написано во встроенной справке правильно "#Вставка … #КонецВставки"
Из этого видно - что явно сначала заложили один вариант, а потом заменили на другой, поменяв его, в попыхах, уже в самый последний момент - уж не знаю кто надоумил поменять, кто-то "свой" или мой комментарий повлиял, но факт - стало лучше. А встроенную справку наверняка поправят.

Пока это не так актуально - ибо типовые конфигурации ещё не добрались до поддержки релиза 8.3.15 - а без этого и применение этих инструкций в расширениях - мало где можно будет использовать :-(
malikova_julia; +1 Ответить
53. Good_Smile 19.09.19 12:51 Сейчас в теме
(52)
Пока это не так актуально - ибо типовые конфигурации ещё не добрались до поддержки релиза 8.3.15 - а без этого и применение этих инструкций в расширениях - мало где можно будет использовать :-(

А разве нужен режим совместимости 8.3.15 (если я правильно поняла, что поддержка релиза 8.3.15 - это режим совместимости)? Фактически, сейчас с любым режимом совместимости, если запускаешь базу на 8.3.15, этот функционал уже есть и работает.
У меня база с режимом совместимости 8.3.10, а &ИзменениеИКонтроль в расширении добавить можно.
2. PowerBoy 3101 30.01.19 13:42 Сейчас в теме
ИМХО &ИзменениеИКонтроль неудачное название, лучше назвать аннотацию &Подстава.
maksa2005; divSvid; cheburashka; CratosX; mivari; FreeArcher; the1; nazirovramzil; Brawler; sstas007; CyberCerber; wowik; user774630; KroVladS; NSerget; +15 Ответить
4. molodoi1sneg 17 30.01.19 13:52 Сейчас в теме
(2)
&Подстава
Или &Совместно
9. Darklight 27 30.01.19 15:26 Сейчас в теме
(2)Почему "Подстава"? - наоборот - ведь прикладывают усилия, чтобы минимизировать сложности в поддержке таких корректировок исходной функциональности!

Хотя да, термин "ИзменениеИКонтроль" мне тоже не нравится. Думаю.... лучше было вообще не вводить нового темина! Зачем он вообще нужен! Вполне хватило бы старого атрибута препроцессора "&Вместо" - а внутри - просто размещать новые инструкции препроцессора - если хоть одна есть - значит и весь исходный код должен присутствовать (и это будет контролировать конфигуратор) - если ни такой одной инструкции препроцессора нет - значит это контролировать и не нужно - а просто заместить!

Ну если уж так хочется ввести отдельный атрибут - введите ещё один, дополнительный "&КонтрольИсходногоАлгоритма" и используйте их вместе: &Вместо("бла_бла_бла")
&КонтрольИсходногоАлгоритма
Функция Расш_бла_бла_бла...

Или введите ещё один параметр атрибута препроцессора "&Вместо" (что даже логичнее):
&Вместо("бла_бла_бла",Контроль=Истина)
Функция Расш_бла_бла_бла...
//иные варианты написания: &Вместо("бла_бла_бла",Контроль=Да) ; &Вместо("бла_бла_бла",Контроль) ; &Вместо("бла_бла_бла", РежимКонтроляАлгоритма.Контролировать) ; ; &Вместо("бла_бла_бла", "Контролировать")
11. sergathome 30.01.19 15:45 Сейчас в теме
(9) не покидает ощущение хождения по граблям, образованных костылями
mivari; CyberCerber; +2 Ответить
13. Darklight 27 30.01.19 16:01 Сейчас в теме
(9) Кстати, развивая идею. Я бы ещё, добавил один вариант вставки своего кода не в начало и не в конец - а в средину, без необходимости тянуть весь текст исходного алгоритма - как -то вот так:

Пусть у нас есть в основной конфигурации функция
функция бла_бла_бла()

	БлокКода1;
	БлокКода2;
	БлокКода1;
	БлокКода3;
	БлокКода4;
	БлокКода2;
	БлокКода1; //*
	БлокКода4;
	БлокКода1;
	БлокКода5;

КонецФункции
Показать


Где одинаковыми именами обозначены идентичные (без учета симолов табуляции и комментариев) блоки инструкций

Тогда, если нам позарез нужно вставить свой код там где у меня содержится "//*" (считаем что этого нет в исходном коде - это просто я выделил место)

&Внедрить("бла_бла_бла")
функция Расш_бла_бла_бла()

	#ВставкаАлгоритма
		//Тут мой новый алгоритм
	#ПослеАлгоритма(НомерВхождения=3, НачалоПоиска=Начало)
		БлокКода1
	#КонецВставкиАлгоритма

КонецФункции
Показать


или так

&Внедрить("бла_бла_бла")
функция Расш_бла_бла_бла()

	#ВставкаАлгоритма
		//Тут мой новый алгоритм
	#ПередАлгоритмом(НачалоПоиска=Конец)
		БлокКода4
	#КонецВставкиАлгоритма

КонецФункции
Показать


или даже так

&Внедрить("бла_бла_бла")
функция Расш_бла_бла_бла()

	#ВставкаАлгоритма
		//Тут мой новый алгоритм
	#ПослеАлгоритма
		БлокКода1
	#ПередАлгоритмом
		БлокКода4
	#КонецВставкиАлгоритма

КонецФункции
Показать


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

Но, и это можно было бы решить заранее:

#ВставкаАлгоритма(ВыборВариантаМестаВставки=Первый) - самый первый сверху (он же ="Авто")
#ВставкаАлгоритма(ВыборВариантаМестаВставки=Последний) - самый последний сверху
#ВставкаАлгоритма(ВыборВариантаМестаВставки=Все) - надо вставить во все найденные места
#ВставкаАлгоритма(ВыборВариантаМестаВставки=Ручной) - надо будет выбрать вручную при применении (это же вариант по умолчанию=неопределено)

Если ничего не найдёт - то должна быть ошибка! Хотя и на этот случай - можно параметр предусмотреть - мол когда не важно это - не нашёл, ну и молча не вставил!

Аналогично - можно было бы реализовать и варианты замены и удаления, в общем-то!

Вот это было бы очень ЗДОРОВО!

Ну а если бы это можно было бы не только в расширениях применять, и в основной конфигурации - это было бы просто фантастически!
Здесь я имею в виду писать как бы расширения функций, но внутри самой конфигурации (например в отдельных модулях алгоритмов, с указанием полного пути к "расширяемому" методу) - чтобы не вклиниваться в исходный код поставщика.
16. Darklight 27 30.01.19 16:22 Сейчас в теме
(9)Ну, может не всё красиво, но я бы не сказал, что уж очень криво - поясните - в чём костыли то?
18. sergathome 31.01.19 10:01 Сейчас в теме
(16) вместо внятного наследования все эти "директивы препроцессора"... блеванул бы, вот честно
19. Darklight 27 31.01.19 10:32 Сейчас в теме
(18)Директивы препроцессора вещь тоже нужная (и активно используемая и в современных языках программирования), хотя и, возможно, несколько устаревшая (я бы больше в сторону макропрограммирования смотрел бы - но оно и в современных языках программирования пока ещё не особо развито) . Наследование, кстати, данные проблемы - никак не решает! И, если честно, я не знаю вообще как такие случаи решаются в других языках программирования - мне кажется, там до этого просто не доросли даже! Но.... там, и данные проблемы реже так остро возникают как в 1С - культура программирования разная!

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

Хотя, появление ООП - это тоже маловероятное новшество для 1С Предприятие 8-го поколения (с другой стороны, и ООП и макропрограммирование, при желании, можно было бы и в 8-ку внедрить - ничего кардинально ломающего совместимость в этих парадигмах нет - их можно вводить достаточно плавно).
22. sergathome 31.01.19 11:54 Сейчас в теме
(19) нужно что-то типа комплексного объекта, а-ля подсистема, в котором бы были "свойства" - объекты и "методы" вместо модулей. на это можно бы было накрутить хоть какое-то непротиворечивое наследование. а все эти, как правильно ниже написали, #Костыль #КонецКостыля - помойка плачет. давно уже.
24. Darklight 27 31.01.19 13:16 Сейчас в теме
(22)Я Вам предложил привести пример того, как можно решать указанные в новости проблемы с применением ООП - но Вы так и ничего и не привели. Вот возьмите, хотя бы, пример, который рассморен в новости, да поищите - как это он должен был бы выглядеть без костылей на ООП!
Я, вот, не вижу такого решения (в общем случае, а не для данного примера) с применением ООП, так чтобы без костылей!
29. sergathome 31.01.19 13:56 Сейчас в теме
(24) примера нет, поскольку в нормальном ООП такой задачи в принципе нет, как "заменить пару строк в модуле". а платформа 8 давно превратилась в то, что как ниже, опять же, правильно коллега написал - "Долго используемый костыль превращается в протез и становится неотделим от остального кода.". А это печаль.
32. Darklight 27 31.01.19 14:50 Сейчас в теме
Ну, про разную культуру программирования на 1С и на других языках я уже написал тут. Но это не означает, что такого нет, скажем в программах на c# - тот же пример вполне может быть и при построении приложения на C# - просто Вам лень подумать как это будет выглядеть там.
37. sergathome 31.01.19 16:19 Сейчас в теме
(32) Это не культура. Это прокрустово ложе процедурной парадигмы 8-ки. Расширяемое почти исключительно костылями.
41. Darklight 27 31.01.19 16:39 Сейчас в теме
(37)Я вот, тут, во всю распинался - что дело не столько в отсутствии ОПП, а в том, что нужно концептуально по другому закладывать архитектуру программного кода конфигураций в 1С. И сделать это можно даже не внедряя полноценной поддержки ООП! А если без так же бескультурно добавить ООП в 1С Предприятие - то программисты такого наколбасят - что Вам это процедурное программирование 8-ки раем покажется!

Вот Вы, даже не в состоянии представить пример из новости - как его так нужно реализовать, в так желаемой Вами, чтобы такие вот костыли не пришлось потом прикручивать в случае надобности. Не то, чтобы вообще предложить общую концепцию ООП программирования в 1С, чтобы такие костыли практически не были вообще нужны! А я, вот, даже привёл такой пример в (34) - для данного частного случая - только в ООП он тоже костыльный вышел (ну я не спец по ООП - уж простите).
43. sergathome 31.01.19 16:50 Сейчас в теме
(41) Наколбасить, конечно, и с ООП можно. Но без него - нельзя не наколбасить, вот в чём цимес. Рыба тухнет с головы. Платформа: а) устарела морально, б) замусорилась физически.
Насчет "как реализовать" - в сортах дерьма предпочитаю не разбираться. А дерьмо тут многослойное, качественное. Курсы, сертификаты и тп, ага.
7. mikl79 114 30.01.19 14:55 Сейчас в теме
радует, что расширения развиваются - активно ими пользуюсь
Туки Туки; +1 Ответить
10. Darklight 27 30.01.19 15:28 Сейчас в теме
(7)да, с версии 8.3.14(15) уже более менее можно будет пользоваться - когда типовые конфигурации дорастут до совместимости с этой версией платформы
12. acanta 30.01.19 15:48 Сейчас в теме
Расширение это насколько я помню, пакет динамического обновления конфигурации, сформированный и присоединенный вручную.
Т.е. в нем конструктивно изначально была возможность любого изменения конфигурации, а не только формы/модули.
14. Xershi 1174 30.01.19 16:11 Сейчас в теме
(12) ага БД поправить?) Только с 8.3.12.
17. vano-ekt 850 30.01.19 20:48 Сейчас в теме
#Костыль
#КонецКостыль
cheburashka; the1; sergathome; Brawler; +4 Ответить
20. Darklight 27 31.01.19 10:34 Сейчас в теме
(17)Предложите вариант лучше
25. _wlad_ 31.01.19 13:19 Сейчас в теме
(20)Уже давно предложили на той же mista:
Клудж
Значение
техн., жарг. клудж устройство, программа или часть программы, которые теоретически не должны работать, но почему-то работают
Отсутствует пример употребления
комп., жарг. ошибка, ляп
The first time, it’s a kludge! The second, a trick. Later, it’s a well-established technique!
— Сначала — это ошибка, затем хитрость, а после — всем известный метод. Mike Broido, «Intermetrics»
27. Darklight 27 31.01.19 13:29 Сейчас в теме
(25)Простите, но я ничего не понял
28. _wlad_ 31.01.19 13:34 Сейчас в теме
(27)Какое слово использовать вместо слова "костыль" :)
33. Darklight 27 31.01.19 14:51 Сейчас в теме
(28)Я про вариант - как сделать лучше!
21. Bene_Valete 174 31.01.19 11:00 Сейчас в теме
Это же отличная новость! Теперь ради одной строчи не нужно будет использовать #Вместо! Иной раз из-за этого рука не поднималась делать расширение - пришлось бы копировать миллион строк ради изменения одной
23. sergathome 31.01.19 11:56 Сейчас в теме
(21) рано радуетесь. что-то подсказывает, что работать нормально оно не будет. ибо костыль. классический.
26. _wlad_ 31.01.19 13:22 Сейчас в теме
(23)
ибо костыль. классический.

Долго используемый костыль превращается в протез и становится неотделим от остального кода.
sergathome; +1 Ответить
30. sergathome 31.01.19 14:00 Сейчас в теме
(26)
Долго используемый костыль превращается в протез и становится неотделим от остального кода.

Платформа 8 давно превратилась в эдакий набор костылей, что печально. Приходится иногда на другие языки и платформы переключаться, возвращаясь (отвыкнув) неизменно спотыкаюсь об очередной костыль и плююсь. ИМХО 1С надо забить на это поле граблей и пилить с нуля 9.
35. acanta 31.01.19 14:54 Сейчас в теме
(26)
Долго используемый костыль превращается в протез и становится неотделим от остального кода.

Ошибаетесь, костыль или протез (как вам больше нравится) вырастает сам на месте фантомной сущности, которая должна работать теоретически, но технически это по каким-либо причинам невозможно.
Ибо во вселенной бесконечное множество вещей которые не работают независимо от того, должно оно работать или нет. Но знаем мы только о том, о чем поинтересовались (котик Шредингера).
Техническая невозможность преодолима, а отсутствие наблюдателя - нет.
36. sergathome 31.01.19 16:16 Сейчас в теме
(35) хыхых. Ну вот какая "фантомная сущность" росла на месте обсуждаемого костыля ? А главное - как она теоретически могла бы работать ? ж))
38. acanta 31.01.19 16:20 Сейчас в теме
(36) Если бы вам сказали, что конфигурацию ЕРП с данными за 10 лет, доработанную несколькими поколениями разработчиков можно обновить до актуального релиза без ошибок за 10 минут, вы бы сказали - невозможно. Но эта сущность есть, хоть и фантомная. Мечта называется.
39. sergathome 31.01.19 16:22 Сейчас в теме
(38) ну только если так. мечту нейросети скоро реализуют, кстати. самопрограммирование, самомодификация и скайнет в итоге. запасаемся попкорном. :)
34. Darklight 27 31.01.19 14:52 Сейчас в теме
(23)Вот тут я с Вами не буду спорить - меня тоже терзают смутные сомнения в том, как это будет работать (особенно зная как работает сравнение текстов алгоритмов при объединении конфигураций). Я выше предложил немного более гибкое решение но и оно не идеально! Но я вообще не вижу тут идеального решения. Даже если тут макропрограммирование на полную катушку развернуть - хотя оно конечно переложит вопросы доведения результата к асимптотическому идеалу уже на руки самих конечных программистов - но простоты это не прибавит! Пока теория программирования ещё не родила парадигмы, позволяющей изящно и надёжно решать такие задачи (ну или свести их появление к асимптотическому нулю)!

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

Я напишу процедуру из примера вот так:

Вариант 1 "Фабрика классов" - навеян классическим подходом из ООП (где такое решение само по себе является костылём) с фишками из C#

функция СоздатьИнтернетПочтовоеСообщение(Контекст, Письмо, Отправитель, Назначение=неопределено, ДополнительныеПараметры=неопределено)

	ИмяТипаПровайдераСообщений  = ДополнительныеПараметры?.ИмяТипаПровайдераСообщений ?? "ИнтернетПочтовоеСообщение";
	Сообщение = Контекст?.ФабрикаТипов.СоздатьОбъект(Контекст, ИмяТипаПровайдераСообщений, Назначение, ДополнительныеПараметры) ?? Новый ИнтернетПочтовоеСообщение();
	
	Сообщение.Тема = Письмо.Наименование;
	Сообщение.Отправитель = Отправитель;
	
	Текст = Сообщение.Тексты.Добавить("Привет!")
	Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
	
	возврат Сообщение;

КонецФункции

//При этом у нас создан свой класс-наследник от ИнтернетПочтовоеСообщение, с переопределёнными свойствами

КЛАСС СрочноеИнтернетПочтовоеСообщение(ИнтернетПочтовоеСообщение)

	&Переопределить
	Тема 
	СОБЫТИЯ
		ЧТЕНИЕ
			возврат РОДИТЕЛЬ.Тема+ " СРОЧНО";
		КОНЕЦЧТЕНИЕ
	КОНЕЦСОБЫТИЯ;

	&Переопределить
	Отправитель
	СОБЫТИЯ
		ЧТЕНИЕ
			возврат РОДИТЕЛЬ.Отправитель+ " СРОЧНО";
		КОНЕЦЧТЕНИЕ
	КОНЕЦСОБЫТИЯ;

КонецКласса

//Данные класс зарегистрирован в нашей фабрике классов под именем "СрочноеИнтернетПочтовоеСообщение", которая хранится в контексте выполнения (упущу эти простые действия из примера)

//Тогда вызов функции будет такой
Сообщение = СоздатьИнтернетПочтовоеСообщение(Контекст, Письмо, Отправитель, , Новый Структура("ИмяТипаПровайдераСообщений", "СрочноеИнтернетПочтовоеСообщение"));

//Пояснение операций (взяты из C#):
//?. - правый оператор  разыменования со встроенной проверкой на null (а для 1С ещё и на неопределено) - если операнд слева не инициализирован значением - то выражение справа не выполняется, а возвращает null (ну в 1С наверное "неопределено"). так же для динамических структурных объектов (ака "Структура") обращение к свойствам через такую операцию обеспечивает проверку их отсутствия - тогда так же будет возвращено "неопределено"
//?? - бинарный оператор - быстрая проверка на null или неопределенно - если левый операнд такой, то возвращает правый, иначе возвращает левый
Показать


Суть примера в том, что я подменяю типовой класс, на свой, с изменённой логикой и заставляю функцию использовать именно его.

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

Тогда вариант 2 "Динамическая/Статическая модификация" - навеян метапрограммированием

&РасширенноеУправление
функция СоздатьИнтернетПочтовоеСообщение(Письмо, Отправитель)

	Сообщение = Новый ИнтернетПочтовоеСообщение() &МаркерПравый("НовыйИнтернетПочтовоеСообщение");
	
	Если &ВнутреннийПараметр("СтандартнаяИнициализацияСообщения", Истина) = Истина Тогда
		Сообщение.Тема = Письмо.Наименование;
		Сообщение.Отправитель = Отправитель;
	КонецЕсл;
	Сообщение &МаркерПравый("ИнициализацияСообщения");
	
	Текст = Сообщение.Тексты.Добавить("Привет!")
	Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
	
	возврат Сообщение;

КонецФункции


//Тогда для динамического изменения мы в месте вызова данной функции создадим новую, с модификацией:

ВнутренниеПараметры = Новый Структура("СтандартнаяИнициализацияСообщения", Ложь);
НоваяФункция = МОДИФИКАЦИЯ функция СоздатьИнтернетПочтовоеСообщение
				УСТАНОВКА ВнутренниеПараметры ВнутренниеПараметры 
				ЗАМЕНА Маркер("ИнициализацияСообщения")
					Сообщение.Тема = Письмо.Наименование + " СРОЧНО";
					Сообщение.Отправитель = Отправитель+ " СРОЧНО";
				КОНЕЦЗАМЕНЫ
			КОНЕЦМОДИФИКАЦИИ

//ну и выполняем уже модифицированную функцию
Сообщение = НоваяФункция(Письмо, Отправитель);

Показать


Тоже нельзя сказать, что вариант 2 выглядит красиво
Его статическая версия - не создаёт новую функцию - а модифицирует исходную (или создаёт новую, на основе исходной, но тоже статически) в специальном модуле статического выполнения макрофункций (выполняемого только в момент компиляции)

Поэтому вариант 3

&РасширенноеУправление
функция СоздатьИнтернетПочтовоеСообщение(Письмо, Отправитель)

	Сообщение = &ВнутреннийПараметр("ИмяТипаПровайдераСообщений", Новый ИнтернетПочтовоеСообщение());
	
	Если &ВнутреннийПараметр("СтандартнаяИнициализацияСообщения", Истина) = Истина Тогда
		Сообщение.Тема = Письмо.Наименование;
		Сообщение.Отправитель = Отправитель;
	КонецЕсл;
	ВЫЗВАТЬФУНКЦИЮ(&ВнутреннийПараметр("ИнициализацияСообщения"), Новый Структура("Сообщение, Письмо, Отправитель", Сообщение, Письмо, Отправитель)));
	
	Текст = Сообщение.Тексты.Добавить("Привет!")
	Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
	
	возврат Сообщение;

КонецФункции

функция ОбработкаСообщений(Сообщение, Письмо, Отправитель) экспорт
	Сообщение.Тема = Письмо.Наименование + " СРОЧНО";
	Сообщение.Отправитель = Отправитель+ " СРОЧНО";
	возврат неопределено;
КонецФункции


ВнутренниеПараметры = Новый Структура("СтандартнаяИнициализацияСообщения, ИнициализацияСообщения", Ложь, @ОбработкаСообщений);  //@ОбработкаСообщений - это ссылка на функцию
Сообщение = СоздатьИнтернетПочтовоеСообщение(Письмо, Отправитель) СПАРАМЕТРАМИВЫПОЛНЕНИЯ(ВнутренниеПараметры);

Показать


В данном примере частично совмещены варианты 1 и 2 с одной стороны - я вынес за пределы нашей функции функционал как выбор типа объекта-провайдера сообщений, так и алгоритм модификации заголовка сообщения, с другой так же ввел макроуправление - встроенные параметры функции (которые не передаются через аргументы функции, хотя такую передачу так же можно было бы сделать без всяких макрохитростей)
Теперь это выглядит более-менее красиво!
Но я повторюсь, я не претендую на красоту данных примеров - я просто намекаю на то, что проблема лежит не только в области синтаксиса языка, но и в области архитектуры построения самих алгоритмов.
Ну и как бы эту архитектуру правильно не выстраивали – всё равно будут случаи, когда нужно будет что-то вставить своё в эту типовую архитектуру в месте, где это в ней никак не предусмотрено!
40. sergathome 31.01.19 16:32 Сейчас в теме
(34) очевидно, что задача в общем виде решения не имеет, что и диктует костыльность подходов. да, можно идти таким путём, и 1С им давно идёт, более того, коммерчески успешно идёт... Но придёт она в Ж, в итоге, если не одумается. Количество несистематизированных решений (читай - костылей) растёт, правильно применять их ВСЕ не умеет уже НИКТО (зуб не дам, но качество типовых известно), а дальше будет только хуже... Надо рубить. Нафик.
42. Darklight 27 31.01.19 16:48 Сейчас в теме
(40)Я же Вам предложил - покажите реализацию данной задачи на других, не костыльных подходах! Но Вы не можете. Я, вот, хоть попытался! Указал, на то, что корень проблемы не в синтаксисе и той или иной технической парадигме программирования, а самой архитектуре написания программного кода, в философии, методологии программирования конфигураций на 1С. Вариант 3 - вполне себе можно переписать вообще ничего не привнося нового в семантику языка 1С - используя что есть сейчас - и от этого его красота не сильно пострадает. Но ведь никто так не пишет - да и вряд ли будет писать - в этом-то вся проблема! Программисты 1С вообще почти не думают о том, что их алгоритмы потом кому-то захочется использовать по-другому (да взять хотя бы то, что функции в модулях по умолчанию не экспортные - и много вспомогательных функций извне даже не вызвать, когда захочешь создать свою версию, какой-нибудь типовой функции)! Разработчики типовых конфигураций 1С так вообще издеваются над теми, кому потом понадобится в это всё вносить свои доработки! Да и разработчики платформы, зная о наличии очень большой проблемы в этом аспекте, не смогли за всё время, предложить действительно удобного решения по сопровождению доработанных решений (конечно развитие средств обновления конфигураций и расширений - это важные вехи, но в целом - эффект от них очень мал, по сравнению с имеющимся размером проблемы). И, поверьте, даже если переписать все конфигурации с применением ООП - ситуация от этого существенно лучше не станет) - все те же проблемы как стояли, так и будут стоять. Не согласны? Покажите на любом примере хотя бы частый случай - как это всё было бы решено с применением ООП).
44. sergathome 31.01.19 17:00 Сейчас в теме
(42) Медаль ? хыхы. Как Вы не поймёте - мне не интересна задача вида "заменить пару строк в модуле". Сама её постановка уже говорит. Данная задача в общем виде 100% решения не имеет. Хорошо, только для Вас, исключительно. Решение - любой модуль делится на секции, строк по 10. Секции именуются (нумеруются, создаётся классификатор, дерево секций и тд и тп). Секция объявляется неделимой единицей наследования. Дальше - понятно, надеюсь. Да, писаки типовых смогут и тут всё запороть. Здесь только юридически - в договоре приёмки продукта указывается максимальный размер секции, соглашения об именовании функций и тд. При нарушении - штраф смертельных размеров. Как-то так.
45. Darklight 27 31.01.19 17:03 Сейчас в теме
(44)Ну вот, Вы придумали свой очередной костыль - мне смешно ;-)
Напомнило как на ZX Spectrum экран делили на части - и палитру цветов раздельно назначили на эти части - смешно до слёз!

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

Вот это и говорит о том, что программисты по-прежнему ищу пути исправления проблем, нежели пути искоренения их возникновения!
46. sergathome 31.01.19 17:05 Сейчас в теме
(45) смех - это прекрасно.
- Негер, негер, ты - китай ?
- Негер, бабка, негер.
- Негер, негер, ты - китай ?
- Негер, бабка, негер.
- Негер, негер, ты - китай ?
- Ну китай, бабка, китай !
- А как на негера похож !
47. Darklight 27 31.01.19 17:08 Сейчас в теме
(46)смех смехом - костыли костылями!
31. Enigma 241 31.01.19 14:46 Сейчас в теме
1С как-то однобоко заботится о разработке расширений. Изменения в статье - это конечно круто, но где напрашивающаяся возможность в синтаксис-помошнике основной конфигурации (или другого расширения) видеть экспортные методы расширений? Они существуют и доступны, так почему же мы не можем их видеть?
48. o4karek 31.01.19 17:29 Сейчас в теме
(31) А в СП видны экспортные методы обычной конфигурации? О_О
И почему в СП должны быть видны методы конфигурации?
49. Enigma 241 01.02.19 09:39 Сейчас в теме
Я имел в виду в контекстной подсказке, очевидным образом.

Хотя автоматическая генерация СП на основе описаний методов тоже могло бы быть ничего :D
50. AlexeyFreeLife 01.02.19 11:14 Сейчас в теме
а я так и не понял что хорошего в расширениях для программиста :)
54. Darklight 27 11.11.19 10:20 Сейчас в теме
(50)Возможность подписываться на события вызова функций модулей (и события форм, кроме автогенерируемых :-( ) - когда не хочется внедряться в код модулей - походу больше ничего хорошего в них нет - всё остальное лучше делать внутри основной конфигурации
Оставьте свое сообщение

См. также

1С-разработчики взяли бронзу на международном чемпионате по созданию бизнес-приложений

Новость ИТ-новость

С 16 июня по 18 июля прошел Распределенный Евразийский чемпионат под эгидой WorldSkills Russia. Третье место в компетенции «IT Software Solutions for Business» занял разработчик из Узбекистана – свой проект он реализовал на платформе «1C:Enterprise».

сегодня в 13:29    2322    VKuser24342747    0       

Спецпредложение: кешбэк 25% на товары и услуги Инфостарт при покупке лицензии 1С-Битрикс

Новость

Оформите заказ на лицензию 1С-Битрикс24 и получите повышенный кешбэк – 25% от стоимости лицензии на товары и услуги от Инфостарт. Кешбэк несгораемый: им можно воспользоваться без ограничения по времени!

сегодня в 11:35    3492    jzozulya    0       

Узнайте все о настройке инфраструктуры для 1С с видеокурсом «Администратор 1С v2.7»

Новость Обучение, бизнес-тренинг, курсы

Всего за 49 дней вы пройдете путь от новичка и до эксперта-администратора 1С – узнаете лучшие приемы по качественному обслуживанию, администрированию, настройке, установке «1С:Предприятия» и сопутствующего программного обеспечения.

сегодня в 09:28    2680    mgrinchenko    0       

Ушел из жизни Павел Чистов

Новость Инфостарт

30 июля 2021 года скоропостижно скончался Павел Чистов. Многие 1С-разработчики вошли в профессию благодаря его книгам, вебинарам и лекциям.

31.07.2021    15073    support    99       

Внимание! Разыскиваем докладчиков в управленческие секции на INFOSTART EVENT Москва 2021!

Новость Инфостарт infostartevent Мероприятия

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

30.07.2021    2625    eselyanina    0       

Спецкурс по 7-ому PMBoK®: для выпускников продвинутого курса по классическим методам

Новость Обучение, бизнес-тренинг, курсы Управление проектами

Только один набор! Для выпускников Продвинутого курса на Инфостарте – подробно разберем, в чем различия между 6-ым и 7-ым PMBoK® Guide.

30.07.2021    2328    mgrinchenko    0       

Объявляем розыск докладчиков в технические секции на INFOSTART EVENT 2021 Москва!

Новость Инфостарт infostartevent Мероприятия

17 августа мы откроем голосование за доклады, а пока - объявляем розыск докладчиков. Мы подготовили список актуальных, «трендовых» тем, которые будут интересны участникам конференции и увеличат шансы спикеров попасть в программу конференции.

29.07.2021    4304    eselyanina    2       

Запущен бесплатный сервис для регистрации бизнеса

Новость Сервисы

Фирма «1С» выпустила на базе 1С:Fresh сервис «1С:Регистрация бизнеса». Благодаря встроенному мастер-помощнику сервис поможет избежать ошибок при заполнении и оперативно подготовить весь пакет документов для регистрации юридического лица.

29.07.2021    2739    ekandyba    14       

Удостоверяющий центр фирмы «1С» получил аккредитацию Минцифры

Новость ИТ-новость Цифровая подпись

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

29.07.2021    3454    ЕленаЧерепнева    0       

Курс «КОМАНДА» от школы менеджеров Стратоплан: для всех пользователей Инфостарта – скидка 10%

Новость Обучение, бизнес-тренинг, курсы Управление проектами

3 сентября 2021 года стартует курс для тимлидов «Команда». Программа курса предполагает акцент на взаимоотношениях с людьми и командой: как вместе с командой решать поступающие задачи, как жить в процессах изменений и приносить пользу компании.

29.07.2021    2318    mgrinchenko    0       

Фирма «1С» выпустила продукт для школ с цифровыми учебными материалами

Новость ИТ-новость Образование

Комплексный продукт для организации удаленного обучения «Библиотека цифровых учебных материалов» предоставляет доступ к интерактивным урокам по всем основным дисциплинам и систему «1С:Образование 5. Школа» для неограниченного числа пользователей.

28.07.2021    2112    ЕленаЧерепнева    0       

Стартует эксперимент по заключению договоров и совершению сделок через портал госуслуг с использованием УКЭП

Новость Законодательство ИТ-новость Минкомсвязь Цифровая подпись Цифровая экономика

С 20 июля 2021 года по 30 июля 2022 года пройдет эксперимент по оформлению юридически значимых действий в электронной форме на портале Госуслуг с использованием усиленной электронной подписи (УКЭП).

28.07.2021    1304    Senator_I    0       

Открываем продажу видеокурса «Формула работы с людьми»

Новость Обучение, бизнес-тренинг, курсы Управление проектами

Видеокурс «Формула работы с людьми» разработан основателями Школы менеджеров «Стратоплан» на основе практического опыта работы на менеджерских и директорских позициях в компаниях SUN, Intel, Яндекс, ЕРАМ и Luxoft.

28.07.2021    2291    mgrinchenko    0       

УНФ 1.6.25: новые возможности для складского учета

Новость УНФ Конфигурация

В интерфейсе 1С:УНФ 1.6.25 появился раздел «Склад», где собраны все документы и справочники для складского учета. Сборку и разборку теперь можно отражать с помощью документа «Комплектация запасов», который не требует включения раздела «Производство».

27.07.2021    3170    ЕленаЧерепнева    0       

Фирма «1С» реализовала автоматизированное тестирование для мобильной платформы

Новость Автоматизация Зазеркалье Мобильные приложения

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

27.07.2021    4631    ЕленаЧерепнева    0       

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

Новость Обучение, бизнес-тренинг, курсы Инфостарт

С 1 сентября по 1 декабря на Инфостарте пройдет «Базовый курс для начинающих 1С-программистов». Слушатели курса приобретут практические навыки по разработке собственных или доработке существующих прикладных решений на платформе «1С:Предприятие».

27.07.2021    7491    mgrinchenko    0       

«Российские космические системы»: мы приступили к глобальному внедрению продуктов 1С

Новость Интервью Инфостарт infostartevent Новости компаний

В ходе конференции нам удалось пообщаться с Дмитрием Лепешкиным, директором по информационным технологиям АО «Российские космические системы». Обсудили внедрение 1С в компании и роль постоянного развития специалистов в успехе проекта.

27.07.2021    2089    vikad    9       

Открываем тестирование новой версии «Снегопата» для x64

Новость Автоматизация Интеграция Инфостарт

Проект по расширению возможностей конфигуратора 1С 8.3 «Снегопат» полностью перерожден на новой архитектуре и реализован в виде модуля для Core.As. Главное преимущество новой версии – поддержка x64 версии конфигуратора на платформе 8.3.18.

26.07.2021    6573    vikad    28       

Классические методы управления ИТ-проектами: запись на новый поток онлайн-курса открыта

Новость Обучение, бизнес-тренинг, курсы Инфостарт Управление проектами

С 16 сентября по 23 декабря 2021 года пройдет четвертый поток продвинутого онлайн-курса по классическим методам управления проектами. Курс построен на основе PMBoK® Guide 7 и проводится на основе онлайн-лекций с преподавателем.

26.07.2021    3734    mgrinchenko    0       

Сборщики мобильных приложений 1С под Android начнут переходить на формат AAB

Новость Android Google Безопасность Зазеркалье Мобильные приложения

Фирма «1С» опубликовала разъяснения и рекомендации для разработчиков приложений на мобильной платформе 1С, которые касаются перехода на новый формат публикации – Android App Bundle (AAB).

23.07.2021    2487    ЕленаЧерепнева    1       

Открываем запись на базовый курс по управлению ИТ-проектами

Новость Обучение, бизнес-тренинг, курсы Инфостарт Управление проектами

6 октября 2021 года стартует 9 поток базового курса от Марии Темчиной по управлению ИТ-проектами, где разбираются практики как гибкого, так и классического подходов на основе PMBoK® 6 и PMBoK® 7.

23.07.2021    5186    mgrinchenko    0       

Новые возможности и редизайн конфигурации «1С:Маркетинг. Лидогенерация»

Новость 1С:Фреш Онлайн-торговля Сервисы Соцсети

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

22.07.2021    2955    ЕленаЧерепнева    0       

Инфостарт отменяет для самозанятых комиссию за обслуживание физлиц

Новость Инфостарт Infostart Software Partners

Самозанятые больше не будут платить комиссию при выводе средств с договора на сайте Инфостарт. Она составляла 3% от суммы вознаграждения. Объясняем, кто еще платит такую комиссию, и можно ли переоформить договор, если вы решили стать самозанятым.

22.07.2021    4134    pvasiletc    1       

Приглашаем на открытый вебинар на тему «7-ой PMBoK Guide®: что нового и как он повлияет на управление ИТ-проектами»

Новость Обучение, бизнес-тренинг, курсы Инфостарт Управление проектами

2 августа в 19:00 по мск состоится бесплатный вебинар об особенностях нового издания PMBoK Guide® 7. Слушатели узнают об изменениях в стандарте классического проектного управления и смогут задать вопросы ведущей вебинара – Марии Темчиной.

22.07.2021    4893    mgrinchenko    0       

Открываем набор на обновленный комплексный курс по управлению ИТ-проектами от Марии Темчиной

Новость Обучение, бизнес-тренинг, курсы Инфостарт Управление проектами

6 октября стартует комплексный курс по управлению ИТ-проектами, состоящий из трёх модулей: базовый курс, гибкие подходы Agile и классические подходы PMBoK. Обновленная программа обучения учитывает все нюансы новой версии свода знаний PMBoK® Guide7.

21.07.2021    2596    mgrinchenko    0