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

30.01.2019      45819

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

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

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

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

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

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

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

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

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

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

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

 


 

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

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

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

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

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

 

 

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


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


Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Senator_I 170 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 170 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 3363 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 1483 30.01.19 16:11 Сейчас в теме
(12) ага БД поправить?) Только с 8.3.12.
+
17. vano-ekt 124 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»
acanta; +1
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 309 31.01.19 14:46 Сейчас в теме
1С как-то однобоко заботится о разработке расширений. Изменения в статье - это конечно круто, но где напрашивающаяся возможность в синтаксис-помошнике основной конфигурации (или другого расширения) видеть экспортные методы расширений? Они существуют и доступны, так почему же мы не можем их видеть?
+
48. o4karek 31.01.19 17:29 Сейчас в теме
(31) А в СП видны экспортные методы обычной конфигурации? О_О
И почему в СП должны быть видны методы конфигурации?
+
49. Enigma 309 01.02.19 09:39 Сейчас в теме
Я имел в виду в контекстной подсказке, очевидным образом.

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

См. также

Готова программа конференции «Анализ и управление в ИТ-проектах»

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

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

вчера в 17:00    186    eselyanina    0       

16

Продлеваем прием заявок на конкурс «Современные возможности 1С: нетиповые интеграции и доработки»

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

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

17.04.2024    197    user997184    0       

1

Как использовать SmartWay в 1С для планирования командировок

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

Smartway – решение для планирования и организации командировок, разработанный на базе российского ПО. Просто задайте направления и даты, а Smartway сравнит цены на билеты или гостиницы в режиме реального времени, предложит выгодные варианты

17.04.2024    200    user997184    0       

2

Расширяем возможности типового 1С-ЭПД: автозаполнение электронной транспортной накладной для нескольких реализаций

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

Из документа «Транспортная накладная», входящего в состав расширения «Мастер ТТН», теперь можно отправлять ЭТрН через типовую подсистему 1С-ЭДО, расширяя ее возможности автозаполнением всех требуемых реквизитов.

16.04.2024    287    Olga_Amelchenkova    0       

3

Приглашаем на первый бесплатный вебинар Комплексного курса по управлению ИТ-проектами

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

17 апреля стартует Комплексный курс по управлению ИТ-проектами. Курс начнется с бесплатного welcome-вебинара, где мы поговорим о компетенциях современного руководителя и расскажем подробно о программе курса.

16.04.2024    458    AnastasiaKl    1       

14

Обновлены материалы для подготовки к сертификации по 1С:ERP

Новость 1С:ERP Управление предприятием 2

Фирма «1С» доработала материалы для подготовки к тестированиям 1С:Профессионал и 1С:Специалист-консультант по конфигурации 1С:ERP Управление предприятием 2. С 26 апреля тестирование будет проводиться по обновленному комплекту вопросов.

16.04.2024    267    ЕленаЧерепнева    0       

1

Фирма «1С» возглавила ежегодный рейтинг франшиз по версии РБК

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

РБК ежегодно составляет рейтинг наиболее популярных российских франшиз. На протяжении многих лет фирма «1С» лидирует среди прочих предложений на рынке франчайзинга.

15.04.2024    296    ЕленаЧерепнева    0       

1

Фирма «1С» дополнила перечень продуктов, которые подорожают с 1 июля 2024 года

Новость

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

15.04.2024    1235    ЕленаЧерепнева    0       

1

Сегодня, в 12:00, стартует бесплатный вебинар Марии Темчиной по разбору ошибок в управлении ИТ-проектами

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

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

15.04.2024    893    AnastasiaKl    0       

2

Обновление «1С:Документооборот КОРП 3.014»: очень много приятных мелочей

Новость

В релиз «1С:Документооборот КОРП 3.014» вошли улучшенные интеграции с 1С-сервисами: они расширяют возможности конфигурации. Улучшена функциональность самого продукта – разработчики добавили новые инструменты для работы с документами и файлами.

12.04.2024    1401    ЕленаЧерепнева    0       

2

Бесплатный онлайн-вебинар «1С:Аналитика – BI-система на платформе 1С»

Новость

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

11.04.2024    1647    AnastasiaKl    1       

15

Отвечаем на вопрос: зачем публиковать свои решения в Базе знаний Инфостарт

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

Если вы еще сомневаетесь, вливаться ли в наше сообщество, обязательно прочитайте эту статью.

11.04.2024    931    Sofya_Sukur    6       

25

Фирма «1С» актуализировала состояние плана задач для 1С:Предприятие 8.3.27

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

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

10.04.2024    630    ЕленаЧерепнева    0       

2

Учет по проектам в 1С Бухгалтерии v 2.9: главные обновления

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

Учет рабочего времени по проектам и распределение заработной платы по отработанным часам в новой версии расширения «Учет по проектам в 1С:Бухгалтерии 3.0». Рассказываем об обновлениях подробнее.

09.04.2024    1014    user997184    0       

2

Сегодня стартует курс по 1С:Аналитике: успейте присоединиться

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

Сегодня, в 16:00 по Мск, состоится первый из четырех вебинаров онлайн-курса «Работа с 1С:Аналитика». Еще есть время записаться на обучение, где вы узнаете, как работать в системе и максимально использовать ее функционал.

09.04.2024    839    AnastasiaKl    0       

15

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

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

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

08.04.2024    887    user997184    0       

13

12 апреля – бесплатный вебинар «Быстрый анализ медленных операций системы 1С»

Новость

12 апреля состоится бесплатный вебинар о том, анализировать проблемы производительности 1С с помощью программного продукта «Алькир». На вебинаре протестируем «Алькир» в работе и с его помощью проверим гипотезы при расследовании проблем.

08.04.2024    1170    user997184    1       

16

INFOSTART TECH EVENT 2024: 11 апреля меняем цены на участие

Новость Infostart Event Мероприятия

Осенняя конференция Инфостарт пройдет с 10-12 октября 2024 года. Чем ближе дата мероприятия, тем меньше скидка на покупку билетов на конференцию. Очередное плановое изменение цены произойдет 11 апреля.

08.04.2024    1008    AnastasiaKl    0       

16

Объявляем прием заявок в секцию «Открытый микрофон»

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

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

04.04.2024    981    user997184    0       

15

В сервисе «1С-Курьерика» для автоматизации собственной доставки обновлены тарифы

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

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

04.04.2024    941    ЕленаЧерепнева    2       

2

Отвечаем на вопросы по работе с GitFlic – российским аналогом решений для хранения, обмена и работы с кодом

Новость

11 марта на Инфостарт прошел бесплатный вебинар-знакомство с продуктом GitFlic. GitFlic – первая российская платформа для удобной и быстрой работы с исходным кодом, и его хранения.

03.04.2024    1206    user997184    0       

1

Работа с 1С:Аналитика: старт курса через неделю

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

9 апреля, во вторник, начнется обучение на курсе по системе «1С:Аналитика». На курсе мы узнаем о возможностях системы, в том числе и об обновленном функционале, и научимся в ней работать.

02.04.2024    1117    AnastasiaKl    0       

15

Заполните анкету и получите 15+ полезных материалов для руководителей проектов

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

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

01.04.2024    1321    AnastasiaKl    0       

16

Единый семинар 1С – регистрируйтесь и получайте подарки от Инфостарт

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

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

01.04.2024    1104    user997184    0       

16