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

30.01.2019      40997

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

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

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

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

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

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

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

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

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

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

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

 


 

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

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

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

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

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

 

 

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


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


Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Senator_I 17 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; ixijixi; denmax; sstas007; catv; CyberCerber; Kochergov; +11 Ответить
6. Senator_I 17 30.01.19 14:11 Сейчас в теме
(3) ОкончаниеВставки
CratosX; CyberCerber; +2 Ответить
8. Darklight 29 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 29 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 29 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 3228 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 29 30.01.19 15:26 Сейчас в теме
(2)Почему "Подстава"? - наоборот - ведь прикладывают усилия, чтобы минимизировать сложности в поддержке таких корректировок исходной функциональности!

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

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

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

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

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

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


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

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

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

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

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


или так

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

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

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


или даже так

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

КонецКласса

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

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

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


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

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

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

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

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

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


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

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

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

Показать


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

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

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

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

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

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


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

Показать


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

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

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

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

См. также

Дайджест: собрали главные новости за неделю

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

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

вчера в 17:40    1186    user997184    0       

«Анализ и управление в ИТ-проектах»: рассказываем о модераторах секций для руководителей

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

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

вчера в 17:39    1234    eselyanina    0       

Завершился ежегодный опрос: готовимся вручать призы участникам

Новость Инфостарт ИТ-новость Опрос

В декабре Инфостарт запустил глобальное исследование – Ежегодный опрос сообщества 1С. За полтора месяца в опросе поучаствовали почти 11 тысяч человек. Мы уже обрабатываем результаты, чтобы поделиться ими с сообществом.

вчера в 12:00    1552    user997184    5       

Фирма «1С» уведомила об изменениях в «Библиотеке подключаемого оборудования»

Новость ИТ-новость Онлайн-кассы

В стандартной библиотеке 1С:БПО редакции 3.1 и 3.2 изменен состав поддерживаемых драйверов для некоторых моделей торгового оборудования: сканеров штрихкода, эквайринговых терминалов и некоторых моделей ККТ.

01.02.2023    1716    ЕленаЧерепнева    0       

Станьте партнером первой практической конференции «Анализ и управление в ИТ-проектах»

Новость ИТ-новость Мероприятия

25-27 мая состоится первая практическая конференция Инфостарта для аналитиков и руководителей. 70% контента программы мероприятия – это мастер-классы, воркшопы, батлы, круглые столы, и 30% – доклады.

01.02.2023    1524    eselyanina    0       

В ожидании 8.3.24 и 8.3.25: обновлены планы развития для ближайших релизов 1С:Предприятие

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

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

01.02.2023    2722    ЕленаЧерепнева    2       

Перезагрузка биржи фриланса на Infostart.ru: представляем Инфостарт Фриланс

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

Инфостарт Фриланс – сервис, который помогает заказчикам искать специалистов 1С под разовые задачи. Сотрудничество заказчиков и фрилансеров взаимовыгодное: заказчик получает решение задачи, а фрилансер – гарантированную оплату за свой труд.

31.01.2023    3177    user997184    30       

Infostart Toolkit 2023.1: структура хранения полей метаданных, ссылки на объект и поддержка контекста расширений

Новость Инфостарт ИТ-новость Обзор готовых решений Инструменты и обработки

В новом релизе для инструмента «Метаданные» реализована структура хранения полей и вывод ссылок на объект. Кроме этого, появилась полноценная поддержка контекста расширений – и для инструмента «Метаданные», и для подсказки в редакторе кода.

31.01.2023    2633    vikad    0       

Ищем коллег-аналитиков в продуктовую команду ФинОфиса

Новость Инфостарт ИТ-новость ФинОфис

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

27.01.2023    2124    Iuliia_Feofanova    4       

1С:Управление нашей строительной фирмой: встречаем новую редакцию на базе 1С:УНФ 3.0

Новость 1С:Управление нашей фирмой 3.0 Строительство ИТ-новость

Разработчики перевели решение на новую, третью, редакцию 1С:УНФ, расширили отраслевые возможности, а также добавили еще один вариант поставки – базовую однопользовательскую версию конфигурации.

27.01.2023    2057    ЕленаЧерепнева    0       

1С:CRM 3.1: новые возможности релиза и преимущества подписки

Новость ИТ-новость Новый релиз

Фирма «1С» анонсировала выход новой редакции 1С:CRM 3.1. В конфигурации реализован ряд интересных идей для автоматизации управления продажами. А также существенно изменен подход к условиям доступа к отраслевой функциональности решения.

26.01.2023    2547    ЕленаЧерепнева    7       

Гибкая настройка распределения косвенных расходов и заполнение отчета «Исполнение контрактов ГОЗ» по данным учета

Новость ИТ-новость Новый релиз Обзор готовых решений

В новой версии 1.3.598 подсистемы «Гособоронзаказ: раздельный учет» реализован ряд существенных изменений, направленных на расширение возможностей и увеличение производительности.

26.01.2023    2690    TShaban    0       

6 дней до повышения стоимости на участие в конференции «Анализ и управление в ИТ-проектами»

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

Практическая конференция для руководителей проектов и аналитиков – это новый уникальный формат мероприятия. Участников ждет 70% практики – мастер-классы, воркшопы, круглые столы и 30% – докладов.

26.01.2023    2532    eselyanina    0       

Начался курс для начинающих в 1С-программировании: еще есть возможность записаться

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

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

25.01.2023    2406    dklimchuk    1       

Учет курсовых разниц в 2022-2024 году

Новость 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием ИТ-новость Обзор готовых решений

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

25.01.2023    4859    ЕленаЧерепнева    1       

Infostart Event 2023: приглашаем на главное событие года в мире 1С

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

С 11 по 13 октября 2023 года в питерском отеле «Санкт-Петербург» пройдет 13-я конференция Infostart Event. Проведите три октябрьских дня вместе с лучшими 1С-никами страны! Продажи билетов уже открыты.

25.01.2023    2972    vikad    2       

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

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

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

24.01.2023    3408    dklimchuk    0       

Как монетизировать свои знания на Инфостарте, если ты 1С-разработчик

Новость Инфостарт ИТ-новость Сервисы Стартмани

Если у вас есть интересное решение наболевших проблем – например, отчет, обработка или подсистема на платформе 1С – делитесь своей разработкой и зарабатывайте стартмани.

24.01.2023    3031    user997184    3       

Вышел новый продукт «1С:Бухгалтерия лизинговой компании КОРП»

Новость ИТ-новость Конфигурация

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

24.01.2023    2106    ЕленаЧерепнева    0       

25 января стартует курс для начинающих в 1С-программировании

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

25 января на Инфостарте начнется наиболее популярный курс среди начинающих 1С-разработчиков.

23.01.2023    2725    dklimchuk    0       

Бюджетирование в строительной компании: кейс успешного проекта

Новость ИТ-новость ФинОфис

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

23.01.2023    3281    user1816563    0       

Практическая конференция «Анализ и управление в ИТ-проектах» – темы, сроки и механизм отбора заявок

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

25-27 мая Инфостарт проведет первую практическую конференцию для аналитиков и руководителей проектов - «Анализ и управление в ИТ-проектах». Участников ждет 70% практики и всего 30% теории.

23.01.2023    2155    eselyanina    0       

1 февраля стартует конкурс корпоративной автоматизации «1C:Проект года» по итогам 2022 года

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

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

23.01.2023    2050    ЕленаЧерепнева    0       

В 1С:УНФ 3.0 реализована поддержка Единого налогового платежа

Новость 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 ИТ-новость Новый релиз

1С:УНФ предназначена для ведения управленческого учета, однако в самой последней версии конфигурации пользователям будет доступна возможность проведения расчетов через Единый налоговый счет согласно последним требованиям ФНС.

20.01.2023    3228    ЕленаЧерепнева    0       

Новые возможности для управления сеансами пользователей в 8.3.24

Новость Платформа 1С v8.3 Зазеркалье ИТ-новость

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

20.01.2023    2829    ЕленаЧерепнева    16