Для версии 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 22 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 22 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 22 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 2980 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 22 30.01.19 15:26 Сейчас в теме
(2)Почему "Подстава"? - наоборот - ведь прикладывают усилия, чтобы минимизировать сложности в поддержке таких корректировок исходной функциональности!

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

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

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

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

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

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


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

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

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

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

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


или так

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

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

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


или даже так

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

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

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


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

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

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

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

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

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

Ну а если бы это можно было бы не только в расширениях применять, и в основной конфигурации - это было бы просто фантастически!
Здесь я имею в виду писать как бы расширения функций, но внутри самой конфигурации (например в отдельных модулях алгоритмов, с указанием полного пути к "расширяемому" методу) - чтобы не вклиниваться в исходный код поставщика.
16. Darklight 22 30.01.19 16:22 Сейчас в теме
(9)Ну, может не всё красиво, но я бы не сказал, что уж очень криво - поясните - в чём костыли то?
18. sergathome 31.01.19 10:01 Сейчас в теме
(16) вместо внятного наследования все эти "директивы препроцессора"... блеванул бы, вот честно
19. Darklight 22 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 22 31.01.19 13:16 Сейчас в теме
(22)Я Вам предложил привести пример того, как можно решать указанные в новости проблемы с применением ООП - но Вы так и ничего и не привели. Вот возьмите, хотя бы, пример, который рассморен в новости, да поищите - как это он должен был бы выглядеть без костылей на ООП!
Я, вот, не вижу такого решения (в общем случае, а не для данного примера) с применением ООП, так чтобы без костылей!
29. sergathome 31.01.19 13:56 Сейчас в теме
(24) примера нет, поскольку в нормальном ООП такой задачи в принципе нет, как "заменить пару строк в модуле". а платформа 8 давно превратилась в то, что как ниже, опять же, правильно коллега написал - "Долго используемый костыль превращается в протез и становится неотделим от остального кода.". А это печаль.
32. Darklight 22 31.01.19 14:50 Сейчас в теме
Ну, про разную культуру программирования на 1С и на других языках я уже написал тут. Но это не означает, что такого нет, скажем в программах на c# - тот же пример вполне может быть и при построении приложения на C# - просто Вам лень подумать как это будет выглядеть там.
37. sergathome 31.01.19 16:19 Сейчас в теме
(32) Это не культура. Это прокрустово ложе процедурной парадигмы 8-ки. Расширяемое почти исключительно костылями.
41. Darklight 22 31.01.19 16:39 Сейчас в теме
(37)Я вот, тут, во всю распинался - что дело не столько в отсутствии ОПП, а в том, что нужно концептуально по другому закладывать архитектуру программного кода конфигураций в 1С. И сделать это можно даже не внедряя полноценной поддержки ООП! А если без так же бескультурно добавить ООП в 1С Предприятие - то программисты такого наколбасят - что Вам это процедурное программирование 8-ки раем покажется!

Вот Вы, даже не в состоянии представить пример из новости - как его так нужно реализовать, в так желаемой Вами, чтобы такие вот костыли не пришлось потом прикручивать в случае надобности. Не то, чтобы вообще предложить общую концепцию ООП программирования в 1С, чтобы такие костыли практически не были вообще нужны! А я, вот, даже привёл такой пример в (34) - для данного частного случая - только в ООП он тоже костыльный вышел (ну я не спец по ООП - уж простите).
43. sergathome 31.01.19 16:50 Сейчас в теме
(41) Наколбасить, конечно, и с ООП можно. Но без него - нельзя не наколбасить, вот в чём цимес. Рыба тухнет с головы. Платформа: а) устарела морально, б) замусорилась физически.
Насчет "как реализовать" - в сортах дерьма предпочитаю не разбираться. А дерьмо тут многослойное, качественное. Курсы, сертификаты и тп, ага.
7. mikl79 109 30.01.19 14:55 Сейчас в теме
радует, что расширения развиваются - активно ими пользуюсь
Туки Туки; +1 Ответить
10. Darklight 22 30.01.19 15:28 Сейчас в теме
(7)да, с версии 8.3.14(15) уже более менее можно будет пользоваться - когда типовые конфигурации дорастут до совместимости с этой версией платформы
12. acanta 30.01.19 15:48 Сейчас в теме
Расширение это насколько я помню, пакет динамического обновления конфигурации, сформированный и присоединенный вручную.
Т.е. в нем конструктивно изначально была возможность любого изменения конфигурации, а не только формы/модули.
14. Xershi 1001 30.01.19 16:11 Сейчас в теме
(12) ага БД поправить?) Только с 8.3.12.
17. vano-ekt 839 30.01.19 20:48 Сейчас в теме
#Костыль
#КонецКостыль
cheburashka; the1; sergathome; Brawler; +4 Ответить
20. Darklight 22 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 22 31.01.19 13:29 Сейчас в теме
(25)Простите, но я ничего не понял
28. _wlad_ 31.01.19 13:34 Сейчас в теме
(27)Какое слово использовать вместо слова "костыль" :)
33. Darklight 22 31.01.19 14:51 Сейчас в теме
(28)Я про вариант - как сделать лучше!
21. Bene_Valete 167 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 22 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 22 31.01.19 16:48 Сейчас в теме
(40)Я же Вам предложил - покажите реализацию данной задачи на других, не костыльных подходах! Но Вы не можете. Я, вот, хоть попытался! Указал, на то, что корень проблемы не в синтаксисе и той или иной технической парадигме программирования, а самой архитектуре написания программного кода, в философии, методологии программирования конфигураций на 1С. Вариант 3 - вполне себе можно переписать вообще ничего не привнося нового в семантику языка 1С - используя что есть сейчас - и от этого его красота не сильно пострадает. Но ведь никто так не пишет - да и вряд ли будет писать - в этом-то вся проблема! Программисты 1С вообще почти не думают о том, что их алгоритмы потом кому-то захочется использовать по-другому (да взять хотя бы то, что функции в модулях по умолчанию не экспортные - и много вспомогательных функций извне даже не вызвать, когда захочешь создать свою версию, какой-нибудь типовой функции)! Разработчики типовых конфигураций 1С так вообще издеваются над теми, кому потом понадобится в это всё вносить свои доработки! Да и разработчики платформы, зная о наличии очень большой проблемы в этом аспекте, не смогли за всё время, предложить действительно удобного решения по сопровождению доработанных решений (конечно развитие средств обновления конфигураций и расширений - это важные вехи, но в целом - эффект от них очень мал, по сравнению с имеющимся размером проблемы). И, поверьте, даже если переписать все конфигурации с применением ООП - ситуация от этого существенно лучше не станет) - все те же проблемы как стояли, так и будут стоять. Не согласны? Покажите на любом примере хотя бы частый случай - как это всё было бы решено с применением ООП).
44. sergathome 31.01.19 17:00 Сейчас в теме
(42) Медаль ? хыхы. Как Вы не поймёте - мне не интересна задача вида "заменить пару строк в модуле". Сама её постановка уже говорит. Данная задача в общем виде 100% решения не имеет. Хорошо, только для Вас, исключительно. Решение - любой модуль делится на секции, строк по 10. Секции именуются (нумеруются, создаётся классификатор, дерево секций и тд и тп). Секция объявляется неделимой единицей наследования. Дальше - понятно, надеюсь. Да, писаки типовых смогут и тут всё запороть. Здесь только юридически - в договоре приёмки продукта указывается максимальный размер секции, соглашения об именовании функций и тд. При нарушении - штраф смертельных размеров. Как-то так.
45. Darklight 22 31.01.19 17:03 Сейчас в теме
(44)Ну вот, Вы придумали свой очередной костыль - мне смешно ;-)
Напомнило как на ZX Spectrum экран делили на части - и палитру цветов раздельно назначили на эти части - смешно до слёз!

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

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

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

См. также

Заканчивается запись на бесплатный мастер-класс по внедрению Канбан-системы

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

Инфостарт продолжает практику проведения интересных онлайн-мероприятий. На этот раз – онлайн-игра для ИТ-руководителей и всех, кто хочет понять, как работает Канбан-система.

сегодня в 16:25    924    irina_selezneva    2       

Подводим итоги митапа «PostgreSQL VS Microsoft SQL» и выкладываем материалы для участников

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

В последнюю пятницу июля состоялся митап «PostgreSQL VS Microsoft SQL», посвященный двум самым популярным СУБД в мире 1С. Мы собрали всю информацию по прошедшему мероприятию и готовы поделиться ею с участниками.

сегодня в 13:00    271    vikad    25       

Фирма «1С» прекращает продажи сервиса 1С-UMI «Сайт за вас»

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

В течение двух лет пользователи 1С-UMI могли получать определенный объем услуг по наполнению сайта текстовыми и графическими материалами. После анализа продаж данный сервис было решено закрыть.

сегодня в 09:43    259    ЕленаЧерепнева    0       

Расписание митапа «Web-клиенты для 1С» готово!

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

Начало августа у нас связано с приходом 1С в пространство сайтов и web-приложений. Традиционный пятничный митап состоится 7 августа – его темой стали Web-клиенты для 1С. Сегодня мы представляем расписание мероприятия.

01.08.2020    1278    kbazzh    0       

Инфостарт поздравляет с Днем сисадмина и объявляет конкурс!

Новость Инфостарт ИТ-новость Конкурс

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

31.07.2020    692    AnastasiaKl    1       

Обновились условия сдачи теста «1С:Профессионал по 1С:ERP МСФО»

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

Фирма «1С» сообщила про обновление условий приемки экзамена «1С:Профессионал». Теперь пользовательский экзамен на проверку знаний МСФО в «1С:ERP Управление предприятием 2» нужно будет сдавать по релизу 2.5.

31.07.2020    610    ЕленаЧерепнева    0       

В 1С:ITIL доступна бесшовная интеграция с 1С-Коннект

Новость 1С:Франчайзи, автоматизация бизнеса Интеграция Сервисы

Разработчики сервиса 1С-Коннект сообщили о реализации бесшовной интеграции с конфигурацией 1С:ITIL, которая предназначена для автоматизации процессов управления ИТ-инфраструктурой предприятия.

29.07.2020    817    ЕленаЧерепнева    0       

4 онлайн-митапа Инфостарта на сентябрь: Service Desk, безопасность, маркировка и СКД

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

Осень – не повод грустить и впадать в депрессию, ведь впереди порция полезного и интересного контента. Сегодня мы расскажем вам о новых пятничных онлайн-встречах, запланированных на сентябрь.

29.07.2020    1493    kbazzh    0       

Подводим итоги конкурса на бесплатное участие в митапе по PostgreSQL VS Microsoft SQL

Новость Infostart Meetup Конкурс Мероприятия

Уже в эту пятницу стартует последний июльский онлайн-митап, который посвящен двум самым популярным СУБД в мире 1С – PostgreSQL и Microsoft SQL. Подводим итоги конкурса на бесплатное участие.

28.07.2020    1170    kbazzh    6       

Опубликована документация по 1С:EDT для разработчиков плагинов

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

Разработчики 1C:Enterprise Development Tools обновили документацию продукта, добавив в него описание по разработке плагинов, а также реализовали в нем встроенные возможности по написанию интеграционных тестов для плагинов.

28.07.2020    969    ЕленаЧерепнева    0       

Презентуем новый раздел «Управление проектом»

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

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

27.07.2020    1133    irina_selezneva    0       

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

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

Марафон онлайн-митапов продолжается! 24 июля в формате конференции Zoom состоялся митап на тему «Интеграционные решения в 1С». Подводим итоги встречи и открываем доступ к материалам для участников мероприятия.

27.07.2020    1349    vikad    74       

Завершается запись на курс по практике регламентированного учета и расчета себестоимости в 1С:ERP

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

С 3 по 28 августа на Инфостарте пройдет курс, посвященный подготовке экспертов по регламентированному учету и учету затрат для внедрения на крупных промышленных предприятиях. Успейте записаться на онлайн-обучение.

23.07.2020    1616    irina_selezneva    2       

Лауреаты Infostart Awards могут участвовать во всех онлайн-митапах бесплатно

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

Победители Infostart Awards имеют право бесплатно посещать конференцию в течение 5 лет после награждения. Мы расширяем право бесплатного участия на все онлайн-мероприятия Инфостарта.

23.07.2020    1369    irina_selezneva    0       

В сервисе 1С-Такском доступен автоматический роуминг с Диадок

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

Фирма «1С» сообщила о возможности обмена из программы 1С юридически значимыми электронными документами в автоматическом режиме между пользователями операторов Такском и СКБ Контур.

23.07.2020    1537    ЕленаЧерепнева    0       

В ближайших релизах платформы 1С будет доступен новый инструмент администрирования учетных записей

Новость Зазеркалье ИТ-новость

На страницах официального технологического блога «Заметки из Зазеркалья» появилось описание нового механизма восстановления паролей пользователей файловых и серверных информационных баз 1С.

22.07.2020    9235    ЕленаЧерепнева    7       

Выпущен дистрибутив Linux, который выглядит как Windows 10

Новость Linux Интерфейсы ИТ-новость

Разработчики из Бразилии выпустили дистрибутив Linux с интерфейсом, практически неотличимым от стиля оформления Windows 10. Свою операционную систему они назвали Linuxfx.

22.07.2020    2383    SKravchenko    3       

PostgreSQL VS Microsoft SQL: публикуем расписание и разыгрываем бесплатное участие

Новость Инфостарт Infostart Meetup Конкурс Мероприятия

В следующую пятницу мы проведем онлайн-митап, где будем говорить о двух самых популярных СУБД в мире 1С – PostgreSQL и Microsoft SQL. Рассказываем вам о программе мероприятия, а также разыгрываем бесплатный билет на этот митап.

21.07.2020    5589    kbazzh    118       

Код дохода в платежном поручении: новые правила и ответственность работодателя

Новость БП3.0 Банки Законодательство ИТ-новость

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

21.07.2020    1044    ЕленаЧерепнева    0       

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

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

14 августа состоится онлайн-митап сообщества Инфостарта. На этот раз поговорим об особой теме – оценка компетенций специалистов.

21.07.2020    1696    kbazzh    0       

«Что? Где? Когда?»: Инфостарт подводит итоги первой игры и приглашает поучаствовать в следующей!

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

16 июля при поддержке Инфостарта состоялась онлайн-игра «Что? Где? Когда?» с участием профессионалов и знатоков из сферы 1С.

20.07.2020    2268    AnastasiaKl    9       

С 26 августа стартует онлайн-курс по Agile в новом формате

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

В августе на Инфостарте стартует курс по управлению ИТ-проектами по Agile. Новый формат построен на принципах активного участия слушателей. Кроме традиционных видеолекций и вебинаров в программу добавлены онлайн-практикумы и онлайн-игры.

20.07.2020    1596    irina_selezneva    2       

Vanessa Automation: теперь с расширенным редактором сценариев на базе VS Code

Новость Автоматизация Интерфейсы ИТ-новость

Для написания и исполнения сценариев на языке Gherkin в Vanessa Automation теперь используется новый расширенный редактор кода. Возможность доступна для последних релизов платформы 1С:Предприятие, начиная с 8.3.14.

20.07.2020    3524    vikad    9       

Открыта запись на видеокурс по созданию коммерческих предложений

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

Инфостарт открывает продажи видеокурса «Да – сотрудничеству!» по отработке практических навыков в создании эффективного коммерческого предложения.

17.07.2020    1567    dklimchuk    0       

В сервисе 1С-ЭДО реализовано ведение внутреннего электронного документооборота

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

Фирма «1С» обновила функциональные возможности своего сервиса для автоматизации ЭДО. В новой версии сотрудники смогут подписывать внутренние документы с помощью простой электронной подписи.

17.07.2020    1563    ЕленаЧерепнева    2