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

30.01.2019      45798

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

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

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

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

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

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

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

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

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

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

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

 


 

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

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

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

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

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

 

 

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


Автор:
Главный редактор


Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Senator_I 166 30.01.19 13:40 Сейчас в теме
#КонецВставить - автоматизация по-русски!
rname; zivan38; jamirza; catv; CratosX; sstas007; CyberCerber; Kochergov; +8 Ответить
3. molodoi1sneg 17 30.01.19 13:50 Сейчас в теме
(1) #EndInsert лучше?
5. nyam-nyam 30.01.19 14:09 Сейчас в теме
(3)#PutIn :)
vvp117; CratosX; mivari; YanTsys; maksa2005; ixijixi; denmax; sstas007; catv; CyberCerber; Kochergov; +11 Ответить
6. Senator_I 166 30.01.19 14:11 Сейчас в теме
(3) ОкончаниеВставки
CratosX; CyberCerber; +2 Ответить
8. Darklight 32 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 32 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; digital_julia; +2 Ответить
52. Darklight 32 09.09.19 10:59 Сейчас в теме
(51) Действительно, ананосировали одни термины - но реализовали другие - с правильными окончаниями - вот документация на ИТС
Но, во встроенной в платформу вставке (проверял в версии 8.3.16.869) - есть ошибка - написано во так "#Удалить … #КонецУдалить" - а правильно #Удаление … #КонецУдаления
А вот это написано во встроенной справке правильно "#Вставка … #КонецВставки"
Из этого видно - что явно сначала заложили один вариант, а потом заменили на другой, поменяв его, в попыхах, уже в самый последний момент - уж не знаю кто надоумил поменять, кто-то "свой" или мой комментарий повлиял, но факт - стало лучше. А встроенную справку наверняка поправят.

Пока это не так актуально - ибо типовые конфигурации ещё не добрались до поддержки релиза 8.3.15 - а без этого и применение этих инструкций в расширениях - мало где можно будет использовать :-(
digital_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 3350 30.01.19 13:42 Сейчас в теме
ИМХО &ИзменениеИКонтроль неудачное название, лучше назвать аннотацию &Подстава.
maksa2005; divSvid; cheburashka; CratosX; mivari; FreeArcher; ixijixi; nazirovramzil; Brawler; sstas007; CyberCerber; wowik; user774630; KroVladS; NSerget; +15 Ответить
4. molodoi1sneg 17 30.01.19 13:52 Сейчас в теме
(2)
&Подстава
Или &Совместно
9. Darklight 32 30.01.19 15:26 Сейчас в теме
(2)Почему "Подстава"? - наоборот - ведь прикладывают усилия, чтобы минимизировать сложности в поддержке таких корректировок исходной функциональности!

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

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

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

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

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

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


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

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

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

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

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


или так

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

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

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


или даже так

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

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

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


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

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

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

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

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

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

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

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

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

Вот Вы, даже не в состоянии представить пример из новости - как его так нужно реализовать, в так желаемой Вами, чтобы такие вот костыли не пришлось потом прикручивать в случае надобности. Не то, чтобы вообще предложить общую концепцию ООП программирования в 1С, чтобы такие костыли практически не были вообще нужны! А я, вот, даже привёл такой пример в (34) - для данного частного случая - только в ООП он тоже костыльный вышел (ну я не спец по ООП - уж простите).
43. sergathome 4 31.01.19 16:50 Сейчас в теме
(41) Наколбасить, конечно, и с ООП можно. Но без него - нельзя не наколбасить, вот в чём цимес. Рыба тухнет с головы. Платформа: а) устарела морально, б) замусорилась физически.
Насчет "как реализовать" - в сортах дерьма предпочитаю не разбираться. А дерьмо тут многослойное, качественное. Курсы, сертификаты и тп, ага.
7. mikl79 118 30.01.19 14:55 Сейчас в теме
радует, что расширения развиваются - активно ими пользуюсь
Туки Туки; +1 Ответить
10. Darklight 32 30.01.19 15:28 Сейчас в теме
(7)да, с версии 8.3.14(15) уже более менее можно будет пользоваться - когда типовые конфигурации дорастут до совместимости с этой версией платформы
12. acanta 30.01.19 15:48 Сейчас в теме
Расширение это насколько я помню, пакет динамического обновления конфигурации, сформированный и присоединенный вручную.
Т.е. в нем конструктивно изначально была возможность любого изменения конфигурации, а не только формы/модули.
14. Xershi 1474 30.01.19 16:11 Сейчас в теме
(12) ага БД поправить?) Только с 8.3.12.
17. vano-ekt 123 30.01.19 20:48 Сейчас в теме
#Костыль
#КонецКостыль
cheburashka; ixijixi; sergathome; Brawler; +4 Ответить
20. Darklight 32 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 32 31.01.19 13:29 Сейчас в теме
(25)Простите, но я ничего не понял
28. _wlad_ 31.01.19 13:34 Сейчас в теме
(27)Какое слово использовать вместо слова "костыль" :)
33. Darklight 32 31.01.19 14:51 Сейчас в теме
(28)Я про вариант - как сделать лучше!
21. Bene_Valete 188 31.01.19 11:00 Сейчас в теме
Это же отличная новость! Теперь ради одной строчи не нужно будет использовать #Вместо! Иной раз из-за этого рука не поднималась делать расширение - пришлось бы копировать миллион строк ради изменения одной
23. sergathome 4 31.01.19 11:56 Сейчас в теме
(21) рано радуетесь. что-то подсказывает, что работать нормально оно не будет. ибо костыль. классический.
26. _wlad_ 31.01.19 13:22 Сейчас в теме
(23)
ибо костыль. классический.

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

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

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

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

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

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

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

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

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

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

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

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

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

КонецКласса

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

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

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


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

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

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

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

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

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


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

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

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

Показать


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

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

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

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

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

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


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

Показать


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

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

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

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

См. также

WhatsApp или SMS?

Новость Маркетплейс

В среднем 2/3 россиян используют мессенджер WhatsApp каждый день. В октябре 2023 года ежемесячный охват WhatsApp составил 78.4% населения России (за период октябрь 2022-2023 года этот показатель вырос на 8.8%). С развитием технологий мессенджеры стали серьезным оружием в сфере продаж. В этой статье мы рассмотрим WhatsApp с точки зрения его возможностей, осветим преимущества и недостатки в сравнении с SMS-сообщениями.

сегодня в 17:30    71    dpershin    0       

0

Стартует курс по классическим методам проектного управления! Успейте записаться

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

28 марта на Инфостарт стартует онлайн-курс Марии Темчиной по классическому управлению ИТ-проектами. Слушатели курса изучат инструменты из PMBoK® и «1С:Технологии корпоративного внедрения», а также научатся применять их на проектах любого масштаба.

сегодня в 15:00    60    user997184    0       

1

Успейте до повышения цены: бронируйте участие по выгодным тарифам

Новость Aнализ&Управление Мероприятия

С 1 апреля запланировано изменение цен на участие в конференции «Анализ и Управление в ИТ-проектах». Публикуем таблицу с новой стоимостью на билеты и рассказываем, что нас ждет на конференции.

сегодня в 11:00    86    AnastasiaKl    0       

1

Объявляем сбор кейсов для баттла аналитиков

Новость Aнализ&Управление Мероприятия

Для конференции «Анализ и Управление в ИТ-проектах 2024» мы подбираем контент так, чтобы 70% приходилось на практические активности и только 30% – на теорию.

вчера в 15:00    386    user997184    0       

16

Научитесь работать в системе «1С:Аналитика» на курсе от Инфостарта

Новость Обучение

9 апреля стартует онлайн-курс по изучению возможностей и получению навыков работы в системе «1С:Аналитика». Курс подойдет пользователям 1С:Предприятие, которые уже имеют определенный опыт работы с различными прикладными решениями на платформе.

вчера в 14:00    282    AnastasiaKl    0       

15

ЭПД в «Мастер ТТН»: электронная транспортная накладная с автозаполнением реквизитов на основании реализации

Новость Маркетплейс ЭДО

В расширении «Мастер ТТН» появилось дополнение для формирования электронной транспортной накладной (ЭТрН) и отправки данных через оператора ЭПД «Калуга Астрал» по клиентскому API.

вчера в 12:09    245    Olga_Amelchenkova    0       

2

Завершение сеансов и назначение каталогов для хранения данных сервисов кластера – новое для админов в 8.3.26

Новость Зазеркалье

Официальный технологический блог «Заметки из Зазеркалья» опубликовал анонс новых возможностей технологической платформы 1С 8.3.26. На этот раз – хорошие новости для тех, кто занимается администрированием систем 1С:Предприятие.

вчера в 09:36    291    ЕленаЧерепнева    0       

1

Грандиозная распродажа на Инфостарт.Маркетплейс: с 25 марта по 7 апреля

Новость Маркетплейс

С 25 марта мы запустили распродажу на Инфостарт.Маркетплейс. Решение со скидкой до 50% можно выбрать для самых разных задач: от интеграции с маркетплейсами до инструментов разработчика. Рассказываем об условиях акции и о том, как воспользоваться специальным предложением.

26.03.2024    350    user997184    0       

4

Вышла Java 22

Новость ИТ-Новость Языки программирования

Выпущена общедоступная версия JDK 22, построенная на эталонной реализации Java SE. Готовые к использованию дистрибутивы под лицензией GPL уже доступны в рамках открытого проекта OpenJDK.

26.03.2024    310    VKuser24342747    0       

1

Станьте партнером конференции «Анализ и Управление в ИТ-проектах»: осталось всего 3 места!

Новость Aнализ&Управление Мероприятия

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

26.03.2024    281    user997184    0       

15

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

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

Директор по проектам Инфостарт Мария Темчина, приглашает на Комплексный курс по управлению ИТ-проектами «3 в 1». Вы научитесь успешно руководить масштабными проектами в любом окружении (Водопад, Agile, гибридные подходы).

25.03.2024    289    user997184    0       

0

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

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

26 марта, в 11:00 по МСК, приглашаем на онлайн-вебинар о новых возможностях и основном функционале сервиса «1С-Коннект». Узнайте, как настроить автоматизацию техподдержки, услуг и коммуникаций с помощью платформы.

25.03.2024    291    AnastasiaKl    0       

1

Настраиваемые заявления для 1С:Кабинета сотрудника: доступно для типовых конфигураций

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

Собственные настраиваемые шаблоны документов для сервиса 1С:Кабинет сотрудника можно создавать в 1С:БП 3.0.149, ЗУП 3.1.27.170 и ERP/КА 2.5.16.84. Рассказываем, как использовать эту возможность.

22.03.2024    654    ЕленаЧерепнева    0       

15

Большое интервью про стажеров: что делать, если ты решил «войти в ИТ» и выбрал 1С

Новость Сообщество

Представьте ситуацию: вы недавно окончили технический вуз или курсы по 1С-разработке. Кажется, что пора получать профиты и зарабатывать, но куда податься без опыта? Самый очевидный вывод – стажировка.

22.03.2024    1011    user997184    7       

16

Подводим итоги первого тура голосования и объявляем докладчиков-финалистов

Новость Aнализ&Управление Мероприятия

С 27 февраля по 19 марта прошел 1 тур голосования за доклады конференции «Анализ и Управление в ИТ-проектах». Модераторы рассмотрели 250+ заявок: проводили собеседования с докладчиками, уточняли тезисы и оттачивали каждую, прежде чем выпустить «в эфир».

22.03.2024    787    user997184    0       

16

Обновленный курс по работе с 1С:Аналитика: старт 9 апреля

Новость Обучение Программист

На онлайн-курсе «Работа с 1С:Аналитика» мы изучим возможности системы – составной части платформы «1С:Предприятие» и получим практические навыки по работе с ней.

22.03.2024    491    AnastasiaKl    0       

2

Бесплатный вебинар: Как опубликовать решение в Базе знаний Инфостарт

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

Продолжаем рассказывать о том, как работать с Базой знаний и 1С-Store. 17 апреля в 11:00 МСК приглашаем на бесплатный онлайн-вебинар от Инфостарт.Сопровождение 1С, где мы расскажем, как правильно создавать, оформлять решения или статьи.

22.03.2024    444    AnastasiaKl    2       

16

Интеграция с ГИИС ДМДК: применение УТМ скоро станет обязательным

Новость Маркетплейс Маркировка Новый релиз Обзор готовых решений

До сентября 2024 года планируется обязать участников оборота использовать УТМ при продаже ювелирных изделий в розницу. Рассказываем, как задачи по интеграции с ГИИС ДМДК с использованием УТМ реализованы в продуктах 1С.

21.03.2024    903    user1915669    0       

15

Что нового в сервисах 1С: обзор актуальных обновлений

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

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

20.03.2024    1751    ЕленаЧерепнева    1       

1

Новая редакция 1C:PM Управление проектами 5.0 и снятие с продаж 1С:УПО на обычных формах

Новость

Фирма «1С» обновила линейку решений для управления проектами – из прайс-листа была исключена устаревшая конфигурация «1С:Управление проектным офисом», а актуальное решение «1C:PM Управление проектами ПРОФ» обновлено до редакции 5.0.

20.03.2024    733    ЕленаЧерепнева    0       

1

28 марта – старт продвинутого курса по управлению ИТ-проектами

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

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

20.03.2024    658    AnastasiaKl    0       

15

Подписывайтесь на ТГ-канал «Анализ и Управление в ИТ-проектах» и выигрывайте призы

Новость Aнализ&Управление Мероприятия

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

19.03.2024    724    AnastasiaKl    0       

15

21 марта – бесплатный вебинар по выгрузке данных из 1С в BI-аналитику

Новость Маркетплейс

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

18.03.2024    920    user997184    0       

1

1С-Коннект как единое окно взаимодействия для сотрудников компании: корпоративная культура в эпоху удаленки

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

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

18.03.2024    1126    vikad    0       

17

Онлайн-курс по прототипированию интерфейсов в Figma начнется уже сегодня: успейте присоединиться

Новость Обучение

Сегодня, 18 марта, стартует онлайн-обучению по прототипированию интерфейсов 1С. На курсе потренируемся работать с Figma, нарисуем современный баннер, спроектируем командную панель и потренируемся давать обратную связь по прототипам.

18.03.2024    584    user997184    0       

2