Взгляд на практику разработки в EDT из зазеркалья

26.07.18

Разработка - EDT

В данной статье расскажем о практическом опыте использования разработки в EDT: немного про интерфейс, командную разработку и GIT.

Начнем.

Уже давно обещал поделиться нашим опытом по работе в новой среде разработки. Наконец нашел время и подготовил краткое описание – небольшой отчет и некоторые мысли. В качестве источников информации для осмысления были взяты:

  • вопросы с партнерского форума;
  • мнение коллег на основе практики работы;
  • мнение коллег из сообщества;
  • интернет;
  • мои собственные мысли.

Пока сообщество в целом настороженно смотрит в сторону EDT, но постепенно свыкается с мыслью что он есть и будет. Надеемся, что данная статья поможет вам сделать шаг или еще один шаг в сторону начала работы в этом новом инструменте.

О чем мы хотим рассказать (обзорно):

  • Интерфейс и возможности EDT;
  • Ключевые моменты при работе с GIT;
  • Процесс разработки;
  • Полезные советы.

Готовы? Поехали!

I) Основное про интерфейс и возможности EDT.

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

Отметим отдельно - работа в EDT это теперь не только «сидеть в конфигураторе», теперь это жизнь в полноценном окружении и в рамках процесса разработки.

Переспективы.

Первое на что следует обратить внимание и то с чем вы сразу сталкиваетесь, когда окажитесь внутри – это переспективы. На них расположены основные рабочие пространства:
•    1С пространство.
•    GIT пространство.
•    Debug пространство.

1С пространство. 

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

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

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

Задачи по коду. Можно создавать мини задачки для себя внутри конфигурации (для полноценного управления задачами все же стоит использовать взрослую систему). Они отображаются на панели вкладки «Задачи». Для их добавления пишем в коде конструкцию:
 //TODO: Вот тут позже допилю, сейчас некогда)

 Синтаксис помощник автоматически позиционируется по выбранному коду. На мой взгляд стало удобнее.

Сравнение кода, конфигураций. Возможности сравнения гораздо более продвинутые, правда довольно непривычно относительно привычного инструмента из конфигуратора.  Теперь вы без труда сможете сравнить текущее состояние конфигурации с конфигурацией в проекте, с конфигурацией из файла или с любой версией в гит. Сравнение с историей теперь выглядит гораздо удобнее и практичнее. Для этого необходимо выбрать проект и в выпадающей командной панели по правому клику мышки ищем «Сравнить с…»(Compare with…) и выбираем один из доступных вариантов.

Горячие клавиши. Клавиши работы в EDT изменились и теперь придется переучиваться или запоминать второй набор. Чтобы вызвать список доступных горячих клавиш нажмите комбинацию «Control+Shift+L». Приведем набор наиболее полезных сочетаний:

  • Подсказка «Ctrl+Space»
  • Закомментировать «Ctrl+/»
  • F3 перейти к определению
  • F11 отладка и Ctrl+F11 запуск.
  • И другие.

И еще много чего интересного, устал писать. Попробуйте посмотреть сами.

GIT пространство. 

Мы занимаемся командной разработкой, а тут без работы с распределенными хранилищами и вресионированием никуда). Интерфейсно упрощенно и немного спартански местами. Позволяет выполнять стандартный функционал + некоторая специализация по назначению IDE. Интерфейс SourceTree или GitHubDecktop поприятнее и удобнее.

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

Более подробно про работу с GIT напишем ниже.

Пространство отладка. 

Для отладки в EDT серверной базы у вас в настройках кластера должен стоять атрибут «-debug» и  «-http», по умолчанию если не указано считается «tcp/ip». 

В конфигураторе придется изменить настройки также по пути на вариант http – «Сервис»-> «Параметры»-> вкладка «Отладка»-> «Протокол отладки» изменить на «Отладка по протоколу HTTP» и «Сервер отладки» установить, как «Использовать сервер отладки кластера».

Чтобы подключить клиент браузера необходимо выполнять запуск с параметром «debug». Пример: http://localhost/demo?debug&debuggerurl=127.0.0.1 или http://localhost/demo?debug

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

Другое. 

Авто обновление. В настройках EDT по умолчанию стоит авто обновление конфигурации информационных баз в режиме «Обновление в процессе редактирования». Советую никогда не использовать данный режим.

Что делать, когда пока не поддерживаются некоторые особенности платформы? К примеру, работа с внешними источниками данных в EDT не поддерживается, но в силу обстоятельств работать с данным функционалом необходимо. В этом случае закрываем EDT и открываем конфигуратор (снова здравствуйте) и вносим требуемые правки, а затем снова возвращаемся в EDT и при попытке запуска он нам сообщит, что произошли изменения и предложит один из трех вариантов. Мы выбираем получить изменения в хранилище и наслаждаемся процессом. Весь неподдерживаемый функционал платформа сохраняет в папку рядом с проектом с наименованием «unknown» (неизвестные). Вручную редактировать в блокноте модули не советуем).

Поддержка поставщика. Увы изменять настройки поддержи в EDT пока нет возможности. В данном случае вы или снимаете «замочки», или разрабатываете расширения. И снять «замочки» рекомендуем до импорта проекта в EDT в старом добром конфигураторе.

Оборудование для работы. Конфигурация «Тестирование 3.0» достаточно легковесная поэтому работает достаточно успешно на средненьких мощностях. Мне удалось на ней работать в «VirtualBox» на ноутбуке i7-4500U 2,6 ГГц (3,1 ГГц boost) с 8ГБ, для виртуальной машины я выделил 2 ядра и 4 Гб памяти. На стандартной машине разработчика работа идет комфортно, даже отлично.
ERP запускали на сервере разработки с Xeon E5-16300 3,7 ГГц и 128 Гб памяти. По ощущениям не уступает конфигуратору, но потребляет значительно больше процессорных ресурсов и памяти. И количество одновременно работающих пользователей на этой машине разработки снизилось до 3х-4х человек с временным пожиранием ресурсов процессора до 90-100%.

Что в итоге?

Подведем резюме сравнения с типовым конфигуратором.

Преимущества:
•    Новые возможности разработки 
•    Механизм сравнения в целом, а также сравнение форм, ролей.
•    Новое хранилище, основанное на GIT
•    Возможность создания плагинов
•    Система редактирования запросов и возможность сохранения комментариев после редактирования конструктором
•    Более удобная и наглядная отладка
•    Есть структура модуля, иерархия вызовов, er-diagram и всякие удобства, которые не планируется на старом конфигураторе

Недостатки:
•    Нет пока поддержки части функционала, доступного в старом конфигураторе (приходится использовать сразу две среды)
•    Жрет ресурсы, использует Java и пока кажется более медленным
•    Более нагруженный интерфейс
•    Непривычная среда исполнения
•    Новые баги) а также куча мелких надоедливых багов, как разбегающиеся тараканы ночью на кухне)
•    Еще не готов к комфортной разработке крупных проектов типа ЕРП.

В целом EDT выглядит обнадеживающе, про недостатки можно сказать так: со временем стерпится и слюбится)

II) Про работу с GIT и процесс разработки

Про GIT.

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

Сейчас в сообществе поднимается хайп по вопросам, связанным с GIT (смотрим на количество упоминаний слова GIT в рамках предстоящей конференции 2018), но на мой скромный взгляд, использование данного функционала самого по себе без привязки к процессу разработки не полноценно. В связке с EDT это уже выглядит как закономерное и полезное явление.

Хранилище GIT. Используем GIT на GitHub с публичным репозиторием, если хотите приватный, то придется доплатить. Можно получить бесплатный приватный репозиторий на botbucket, только тут другое ограничение – бесплатно можно использовать только на команду в 5 человек. 

Инструменты для работы с GIT. Это список из следующих приложений: 
•    старый добрый GIT GUI. Довольно аскетичен и прост, можно сказать ничего лишнего, а если вам надо что-то более сложное, то берем консоль Git Bush и решаем те задачи, которые не по силам графической части.
•    GitHub Desktop. Инструмент, оптимизированный для работы в облаке Git Hub. Если используете хранилище в этом облаке, то это будет хороший выбор.
•    Встроенный в EDT. Он есть, и он работает. Его функционала вполне достаточно для реализации поставленных задач по разработке.
•    Source Tree. Мощный и популярный бесплатный инструмент от Atlassian. Красив и практичен.
•    И последний это TortoiseGit. К его преимуществам можно отнести тот факт, что он хорошо встраивается в контекстное меню проводника. Благодаря этому вы сразу в нем сможете для конкретного файла получить подробную информацию об его изменениях или выгрузить копию из истории.

Все инструменты пригодны для работы и у нас коллеги используют несколько комбинаций. Те, которые нравятся в силу тех или иных индивидуальных особенностей. 

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

Получение изменений (fetch/pull). Примите за правило получать изменения из облака – fetch+merge или pull!

Передача изменений (push). Сделали работу и завершили задачку, тогда отправляем наши изменения в основное хранилище.

Тайники (stashes). Очень удобный инструмент. Необходимость возникает в нем в том случае, когда вы работаете над какой-то задачей и вдруг вынуждены переключиться на блокирующую или срочную, но помещать код в ветку облака не хочется. У нас есть правило не работающий код мы не коммитим и не помещаем. Откатывать свои изменения или делать копию текущего состояния невыход или не удобно. Поэтому смело создаем тайник, в который скроются все изменения. Потом, когда вернетесь к текущей задаче, то смело сможете достать прерванные изменения и продолжить работу.

Про процесс работы.

В качестве процесса разработки для конфигурации "Тестирование 3.0" мы выбрали «Git Hub Flow» (показан на рисунке ниже). Это наиболее простой из существующих процессов разработки, если не сравнивать с анархией. Думаю, еще вас могут заинтересовать «Git Flow» и «Git Lab Flow», но об этом в другой раз.

Процесс разработки «Git Hub Flow» - теория.

Реальная картинка с рассматриваемого проекта – практика)

Что хорошего в этом процессе? 

  • новые возможности добавляются сразу по готовности;
  • ошибки исправляются довольно оперативно и добавляются в текущий режим;
  • простой рабочий процесс: минимальное количество правил, наличие одной основной ветки (master).

Рекомендации для успешной работы в рамках процесса:

  • содержимое ветви master должно быть всегда работоспособно;
  • любая доработка должна отражаться задачей и формировать ветку из мастера с номером задачи в наименовании. Наименование задачи должно отражать краткую суть происходящего;
  • всегда создавайте pull-request;
  • используйте в разработке обязательно код-ревью, вы же команда! Не стоит следовать мыслителю с картинки ниже по тексту.

Как мы перешли с конфигуратора? У нас есть два хранилища релизное и разработческое, или рабочая конфигурация и хранилище разработки:

  • На первом шаге в ветку мастер выгружаем рабочую конфигурацию;
  • На втором шаге делаем ветку с именем "Старое хранилище" и туда загружаем хранилище разработки; 
  • Далее при необходимости сливаем изменения из бранча старого хранилища в ветку develop или mater (в зависимости от процесса).

Что в итоге?

Какие плюсы:

  • Наконец появилась возможность нормального командного процесса работы и разработки;
  • Это GIT, с конфигуратором это было не реально! Хранилище не считается);
  • Возможность просмотра истории изменений в один клик и быстро;
  • Дополнительные бонусные возможности настройки правил работы с репозиторием из облака (github - защита ветки, необходимость pull-request, обязательность code-reviw и др.);
  • Другие преимущества использования GIT.

Что из минусов:

  • В некоторых случаях усложняется процесс разработки;
  • Это не привычно и нужно подстраиваться;
  • В EDT пока еще баги и это несколько портит впечатление.

А какой процесс использовался при работе с конфигуратором? Некоторые коллеги, с которыми я общался, вообще не использовали хранилища для разработки или в давние времена изменения отправляли прямо в production. В конфигураторе вести разработку с использованием веток или ветвления возможности не было поэтому это огромный плюс, который появляется с приходом EDT в мир разработки 1С.

EDT GIT GITHUB FLOW

См. также

Командная разработка облачных продуктов, используя 1С:EDT

DevOps и автоматизация разработки EDT Бесплатно (free)

Даже в рамках одной компании подходы к организации командной разработки могут отличаться: методикой работы с ветками, организацией тестовых и разработческих контуров, параллельным использованием хранилищ или полным переходом на Git. Расскажем, какие варианты распределения серверных стендов и организации CI/CD выбрали для своих команд тимлиды двух отделов, и как у них происходило внедрение 1С:EDT.

05.09.2023    1058    WhatIsLoveMakoveev    0    

4

Доработка типовой конфигурации в 1С:EDT. Разработка, тестирование, слияние, выпуск

DevOps и автоматизация разработки EDT Бесплатно (free)

Использование EDT дает преимущества даже для тех, кто до сих пор остается в конфигураторе. Достаточно настроить разбор основного хранилища разработки в GitConverter и автоматизировать CI на GitLab с помощью скриптов на 1С:Исполнителе. Статья о том, как задействовать для кодовой базы проекта валидацию EDT, используя встроенный механизм GitLab Code Quality, и генерировать дымовые тесты для Vanessa Automation.

23.08.2023    3970    doublesun    25    

33

EDT и полный стек CI/CD

EDT Тестирование QA Бесплатно (free)

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

19.07.2023    3378    yukon    12    

36

EDT. Не активируется проектный контекст

EDT Россия Бесплатно (free)

Проблема не активирующегося контекста проекта в EDT и вариант ее обхода.

12.12.2022    1980    AntonChausov    2    

5

Куда привели 2 года работы с EDT

EDT Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

EDT позволяет работать с кодовой базой конфигураций напрямую – использовать GIT, помещать изменения в ветки и запускать тесты до попадания в основную кодовую базу, чтобы добиться «зеленых ночных сборок» для конфигурации. Разработчик из компании «Первый БИТ» Валерий Дыков на конференции Infostart Event 2021 Post Apocalypse рассказал, как безболезненно перейти на EDT и получить преимущества работы с GIT, продолжая работать в конфигураторе.

01.09.2022    8433    Begemoth80    21    

39

Ручная выгрузка и загрузка конфигурации

EDT Механизмы платформы 1С Платформа 1С v8.3 Россия Абонемент ($m)

Внешняя обработка позволяет выполнять выборочную выгрузку и загрузку объектов конфигурации 1С.

1 стартмани

26.08.2022    4112    10    user1041830    4    

9

Быстрое обновление базы 1С из XML-файлов конфигурации (EDT-GIT)

DevOps и автоматизация разработки EDT Обновление 1С Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Быстрое обновление конфигурации и базы данных 1С, вместо долгого обновления из EDT (1C:Enterprise Development Tools) при использовании хранилища GIT. Непосредственное обновлении базы на сервере баз данных (минуя сервер 1С) из XML-файлов конфигурации при помощи утилиты автономного сервера 1С - ibcmd.

1 стартмани

13.07.2022    12349    8    Bitnikov    19    

53
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
99. ivanov660 4347 28.06.19 10:04 Сейчас в теме
(98)смотрите 13-е сообщение
100. Scorpion4eg 424 28.06.19 10:38 Сейчас в теме
(99) Тогда грустно. Мне общий язык нужен русский. А вот git меня нервирует.
103. nazirovramzil 01.10.19 09:26 Сейчас в теме
(99)Здравствуйте. В общем начал работать в EDT и возникли проблемы с отладкой. У организации прокси сервер, и из-за этого не работают точки останова, перенастроил кучу параметров, без отключения прокси так ничего и не получается. Нет ли у вас какой либо подсказки по этому вопросу?
104. ivanov660 4347 02.10.19 18:27 Сейчас в теме
(103)Мы не используем прокси внутри, может кто-нибудь из коллег ответит на вопрос.
101. kalyaka 1069 27.09.19 10:03 Сейчас в теме
И еще много чего интересного, устал писать. Попробуйте посмотреть сами.

Горячие клавиши можно выгрузить из самой среды по кнопке Экспортировать в меню Окно-Параметры-Общие-Клавиши.
Прикрепляю к сообщению выгрузку из EDT 1.14
Прикрепленные файлы:
Горячие клавиши.xlsx
ivanov660; +1 Ответить
102. kalyaka 1069 27.09.19 10:42 Сейчас в теме
(101) добавил клавиши из конфигуратора
Прикрепленные файлы:
Горячие клавиши.xlsx
105. dimasts 22 05.03.20 11:10 Сейчас в теме
Подскажите как назначить клавишу Insert на добавление Реквизита в Окне Навигатор?
106. kalyaka 1069 05.03.20 11:11 Сейчас в теме
(105) Это пока не реализовано
107. dimasts 22 13.03.20 15:39 Сейчас в теме
Друзья, подскажите пожалуйста, как вытравить EDT с MacOS полностью.
Чего-то нанастраивал, теперь в окне Импорта не работает кнопка, в которой надо было выбирать тип Аутентификации и Пользователя с Паролем – пишет

eclipse.buildId=unknown
java.version=11.0.6
java.vendor=BellSoft
BootLoader constants: OS=macosx, ARCH=x86_64, WS=cocoa, NL=ru_RU
Command-line arguments: -os macosx -ws cocoa -arch x86_64

com._1c.g5.v8.dt.platform.services.core
Ошибка
Fri Mar 13 15:31:31 MSK 2020
Ошибка загрузки из внутреннего хранилища

org.eclipse.equinox.security.storage.StorageException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.
at org.eclipse.equinox.internal.security.storage.SecurePreferences.get(SecurePreferences.java:275)
at org.eclipse.equinox.internal.security.storage.SecurePreferencesWrapper.get(SecurePreferencesWrapper.java:123)
at com._1c.g5.v8.dt.internal.platform.services.core.infobases.InfobaseAccessManager.getSettings(InfobaseAccessManager.java:106)
at com._1c.g5.v8.dt.platform.services.core.infobases.IInfobaseAccessManager$pbryglu.getSettings(Unknown Source)
at com._1c.g5.v8.dt.internal.platform.services.ui.infobases._import.ExtensionsViewer.buildArguments(ExtensionsViewer.java:284)
at com._1c.g5.v8.dt.internal.platform.services.ui.infobases._import.ExtensionsViewer.lambda$0(ExtensionsViewer.java:157)
at com._1c.g5.v8.dt.platform.services.core.ProgressMonitorAwareExecutor.lambda$0(ProgressMonitorAwareExecutor.java:61)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.
at java.base/com.sun.crypto.provider.CipherCore.unpad(CipherCore.java:975)
at java.base/com.sun.crypto.provider.CipherCore.fillOutputBuffer(CipherCore.java:1056)
at java.base/com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:853)
at java.base/com.sun.crypto.provider.PBES1Core.doFinal(PBES1Core.java:432)
at java.base/com.sun.crypto.provider.PBEWithMD5AndDESCipher.engineDoFinal(PBEWithMD5AndDESCipher.java:316)
at java.base/javax.crypto.Cipher.doFinal(Cipher.java:2202)
at org.eclipse.equinox.internal.security.storage.JavaEncryption.internalDecrypt(JavaEncryption.java:186)
at org.eclipse.equinox.internal.security.storage.JavaEncryption.decrypt(JavaEncryption.java:163)
at org.eclipse.equinox.internal.security.storage.SecurePreferences.get(SecurePreferences.java:272)
... 10 more
108. dimasts 22 13.03.20 15:48 Сейчас в теме
1ce-installer.app не запускается запрашивает пароль и выходит
(107)
110. dimasts 22 13.03.20 22:08 Сейчас в теме
Для решения подобных проблем подойдёт костыль в виде удаления скрытой папки .eclipse/org.eclipse/org.eclipse.equinox.security в корневом каталоге пользователя.
(107)
109. dimasts 22 13.03.20 16:55 Сейчас в теме
Решение найдено!
В папке Пользователя нашлись скрытые папки .1C и .eclipse, которые не находятся поиском и деинсталяторами.
Удалил все проги, удалил все папки наденые поиском содержащие 1C, удалил папки с точками из папки пользователя.
Переустановил все проги, кнопочки заработали.
(108)
111. dimasts 22 25.03.20 22:41 Сейчас в теме
Друзья, это нормально, что при отладке каждое телодвижение выполняется 2-3 секунды иногда и 5. У меня 32 гига оперативы 5 гигагерц проц и все диски SSD. Может стоит обновить железо на более мощное или всё же дело в какой-нибудь галочке в настройках? Переустановка EDT не помогла.
112. dimasts 22 26.03.20 02:28 Сейчас в теме
(111) Во время отладки отключи ненужные галочки в «Настройке предметов отладки» в меню «Выполнить»
113. ivanov660 4347 26.03.20 14:40 Сейчас в теме
(111)откройте редактор проекта и посмотрите, что стоит флаг "обновлять перед запуском".
Если же стоит флаг "обновление в процессе редактирования", то можете наблюдать компиляцию и фризы после каждого действия. и лучше так не ставить.
114. dimasts 22 06.05.20 13:36 Сейчас в теме
Совсем не понятно, где смотреть ошибку при остановке отладки. Но я уверен, когда-нибудь эта возможность появится. Надо всего лишь пару лет потерпеть :)
115. Veni_k 2 23.08.20 20:32 Сейчас в теме
Добрый день. Вы советуете не использовать автоматическое обновление информационной базы. Два вопроса.

1. Почему?
2. Где бы найти описание вариантов обновление (по традиции мануал от 1С немного куцый)?
117. viki_glebova 30.10.23 08:58 Сейчас в теме
Коллеги, всем привет. Подскажите, пожалуйста, что такое пул-реквест? И как его делать?
Оставьте свое сообщение