<?xml version="1.0" encoding="utf-8"?>

<rss version="2.0">
 <channel>
	<title>dev.NET</title>
	<link>http://dev.1c-bitrix.ru/community/blogs/net/</link>
	<description></description>
	<language>ru</language>
	<docs>http://backend.userland.com/rss2</docs>
	<pubDate>Tue, 07 Apr 2026 04:01:00 +0300</pubDate>

    <item>
      <title>Интернет-магазин на Битрикс ASP.NET - предложения (SKU), составные скидки, интеграция с 1С</title>
      <description><![CDATA[<img src="https://site-cloud-files.bitrix24.tech/blog/7a4/logo.png" title="" alt="" border="0"style=" width:206px; height:81px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=3678" /><br /><br />На днях мы подготовили очередное обновление для "1С-Битрикс: Управление сайтом ASP.NET" версии 5.5.1. И хотя номер версии минорный, обновление &nbsp;вполне себе значительное и несет в себе много нового функционала. Основные изменения коснулись Интернет-магазина. Начнем по порядку. <br /><br /><a href="http://dev.1c-bitrix.ru/community/blogs/net/2491.php">Подробнее...</a>]]></description>
      <link>http://dev.1c-bitrix.ru/community/blogs/net/2491.php</link>
      <guid>http://dev.1c-bitrix.ru/community/blogs/net/2491.php</guid>
      <pubDate>Wed, 16 Feb 2011 11:37:05 +0300</pubDate>
    </item>

    <item>
      <title>1С-Битрикс: Управление Сайтом ASP.NET 5.5</title>
      <description><![CDATA[Вышла новая версия "<i>1С-Битрикс: Управление сайтом ASP.NET 5.5</i>". C 17 ноября она доступна через систему обновлений и в виде дистрибутивов.<br /><br />Главная задача, которую мы решили – осуществление торговли через Интернет. Теперь нет ничего легче, чем создать свое торговое представительство в Интернете.<br /><br />Устанавливаем готовое решение "Интернет-магазин" и получаем рабочий сайт со структурой, меню, разделами, страницами и настроенными службами доставки и платёжными системами. Чтобы запустить магазин в работу, достаточно заменить демонстрационный каталог на каталог с вашими товарами.<br /><br /><img src="https://site-cloud-files.bitrix24.tech/blog/f8d/p1.png" title="" alt="" border="0"style=" width:700px; height:478px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=3345" /><br /><br /><b>Модули для осуществления торговли</b><br /><br />Функционирование магазина обеспечивают новые модули: "Валюты", "Торговый каталог" и собственно "Интернет-магазин".<br /><br />Модуль <b>"Валюты"</b> позволяет управлять корзиной валют магазина и обеспечивает автоматический пересчёт цены товара в валюту заказа, в соответствии с текущим курсом. <br /><br />Модуль <b>"Торговый каталог"</b> обеспечивает поддержку создания и управления витриной товаров. Он отвечает за управление товарами, ставками НДС, типами цен (независимые или производные от базовой) и наценками. При этом поддерживаются многоуровневые цены. Многоуровневые цены – это возможность устанавливать цену товара в зависти от его количества в заказе.<br />Например, свойства товара в каталоге могут выглядеть так: <br /><br /><img src="https://site-cloud-files.bitrix24.tech/blog/dcf/p2.png" title="" alt="" border="0"style=" width:700px; height:285px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=3346" /><br /><br />Модуль <b>"Интернет-магазин"</b> осуществляет поддержку продажи товаров с сайта: формирование заказа в корзине, его оформление, оплату и доставку.<br /><br /><b>Работа магазина</b><br /><br />Мы постарались сделать магазин удобным для пользователя. Одна из важных особенностей: для начала формирования заказа не требуется предварительной регистрации - вы будете автоматически зарегистрированы при создании первого заказа.<br /><br />Интуитивно понятный интерфейс "Корзины товаров" облегчает формирование заказа. <br /><br /><img src="https://site-cloud-files.bitrix24.tech/blog/14d/p3.png" title="" alt="" border="0"style=" width:700px; height:403px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=3340" /><br /><br />Вы можете положить товар <b>в корзину</b> или удалить его. Установить нужное количество заказываемого товара, просмотреть его характеристики, например: вес, цвет или размер упаковки. Просмотреть стоимость каждой товарной позиции заказа по отдельности и их общую стоимость. Также у вас имеется возможность отложить товар (оставив в корзине), чтобы включить в следующий заказ.<br /><br />От формирования заказа переходим к оформлению. Здесь остаётся только выбрать варианты доставки и &nbsp;способ оплаты и указать при необходимости другие данные: <br /><br /><img src="http://dev.1c-bitrix.ru/upload/blog/c4e/p4.png" title="" alt="" border="0"style=" width:0px; height:0px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=3341" /><br /><br />Состав данных зависит от <b>типа клиента</b>, к которому принадлежит покупатель. Мастер установки решения при инсталляции создаст два типа клиента: “Физическое лицо” и “Юридическое лицо”. Настроить их можно в Административной части, где модифицируются существующие &nbsp;и создаются свои новые типы. Для любого типа клиента можно задать индивидуальный набор свойств, содержащих специфическую информацию. Например: ИНН для юридического лица. Эта информация применяется для обработки оплаты и доставки заказа.<br /><br />В зависимости от выбранного типа клиента предлагаются <b>платёжные системы</b>. Для физического лица &nbsp;- &nbsp;“Наличные курьеру”, “Квитанция Сбербанка”, а для юридического - “Банковский перевод”. Мастер установки решения создаст эти платёжные системы. Дополнительно, вы можете &nbsp;активировать платёжную систему “ASSIST” для оплаты кредитной карточкой. Какую бы платёжную систему не выбрал покупатель, &nbsp;он всегда получит максимум помощи при совершении оплаты. <br /><br /><b>Варианты доставки</b> &nbsp;предоставляются службами доставки, которые условно делятся на автоматизированные и настраиваемые. Автоматизированные службы доставки рассчитывают стоимость доставки на основании данных заказа. Например, автоматизированная служба “Почта России” рассчитывает стоимость доставки на основании почтового индекса получателя, веса заказа и типа отправления. &nbsp;В поставке идёт только одна автоматизированная служба доставки: “Почта России”. <br /><br />Настраиваемые службы доставки отличает фиксированная стоимость доставки. Мастер установки решения создаст две настраиваемые службы доставки: “Доставка курьером” и “Самовывоз”. Новые настраиваемые службы создаются с помощью простой формы в Панели управления.<br /><br />Вся введенная при оформлении заказа информация будет сохранена в специальном профиле и используется при следующем оформлении заказа. Покупатель может иметь больше одного профиля, если он заказывает товары, например, на разные адреса.<br /><br />Отслеживать состояние заказа, отменить или повторить его можно в списке заказов. <br /><br /><img src="https://site-cloud-files.bitrix24.tech/blog/9db/p5.png" title="" alt="" border="0"style=" width:700px; height:415px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=3342" /><br /><br />Сотрудники магазина обрабатывают заказы клиентов в административной части сайта.<br />В списке заказов отслеживают подробную информацию о заказе, изменяют его статус, устанавливают флаги отгрузки и оплаты:<br /><br /><img src="https://site-cloud-files.bitrix24.tech/blog/aad/p6.png" title="" alt="" border="0"style=" width:700px; height:350px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=3347" /><br /><br />В форме детального просмотра заказа меняют состав заказа, службу доставки и систему оплаты и другие данные:<br /><br /><img src="https://site-cloud-files.bitrix24.tech/blog/c37/p7.png" title="" alt="" border="0"style=" width:700px; height:407px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=3348" /><br /><br />Система статусов заказов не ограничивает владельцев магазина заранее предопределенным набором. Ничто не мешает добавлять собственные статусы, а также определять права на установку статусов для пользователей и групп.<br /><br /><b>Планы на будущее</b><br /><br />До конца года мы планируем сделать интеграцию магазина с 1С, которая позволит представить весь ассортимент товаров на сайте и централизованно управлять продажами.<br /><a href="http://dev.1c-bitrix.ru/community/blogs/net/2351.php">Подробнее...</a>]]></description>
      <link>http://dev.1c-bitrix.ru/community/blogs/net/2351.php</link>
      <guid>http://dev.1c-bitrix.ru/community/blogs/net/2351.php</guid>
      <pubDate>Tue, 23 Nov 2010 14:55:47 +0300</pubDate>
    </item>

    <item>
      <title>Обновление документации для разработчиков</title>
      <description><![CDATA[Мы обновили документацию для разработчиков на 1C-Битрикс: Управление Сайтом ASP.NET.<br /><br />Что изменилось:<br /><br />- Мы написали подробное руководство по созданию собственного модуля, включающее следующие темы:<br /><ul><li>Структура файлов модуля<br /><li>Создание класса модуля<br /><li>Создание инсталлятора модуля<br /><li>Создание сущностей<br /><li>Создание языковых файлов<br /><li>Создание административных страниц<br /><li>Создание компонентов<br /></ul>- Также добавили небольшой раздел, описывающий этапы создания решения.<br /><br />- Изменения также коснулись документации по API.<br /><br />Скачать документацию можно <noindex><a href="http://dev.1c-bitrix.ru/download/bitrix_net_api.chm" target="_blank" rel="nofollow" >здесь</a></noindex>.<br /><br /><a href="http://dev.1c-bitrix.ru/community/blogs/net/2196.php">Подробнее...</a>]]></description>
      <link>http://dev.1c-bitrix.ru/community/blogs/net/2196.php</link>
      <guid>http://dev.1c-bitrix.ru/community/blogs/net/2196.php</guid>
      <pubDate>Fri, 24 Sep 2010 14:40:41 +0400</pubDate>
    </item>

    <item>
      <title>В свете недавней уязвимости ASP.NET</title>
      <description><![CDATA[Всем, кто еще этого не сделал, рекомендую ознакомиться с недавно опубликованной уязвимостью безопасности в ASP.NET. Уязвимость <b>НЕ ЯВЛЯЕТСЯ уязвимостью продукта 1С-Битрикс: Управление Сайтом ASP.NET</b> - ей подвержены все ASP.NET приложения на базе всех версий Microsoft .NET Framework. Детальное описание можно почитать по нижеприведенным ссылкам:<br /><br /><noindex><a href="http://habrahabr.ru/blogs/infosecurity/104511/" target="_blank" rel="nofollow" >http://habrahabr.ru/blogs/infosecurity/104511/</a></noindex><br /><noindex><a href="http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx" target="_blank" rel="nofollow" >http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx</a></noindex><br /><br />Источники рекомендуют включить в файле web.config режим customErrors. Для версии .NET Framework ниже 3.5 SP1 должна получиться строка вида:<br /><br /> &lt;customErrors mode="On" defaultRedirect="~/404.aspx" /&gt;<br /><br />Для &nbsp;.NET Framework ниже 3.5 SP1 и 4.0 - вида:<br /><br /> &lt;customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/404.aspx" /&gt;<br /><br />Кроме того, <b>мы выпустили срочное обновление продукта 1С-Битрикс: Управление Сайтом ASP.NET, которое автоматически закрывает основной сценарий использования этой уязвимости</b>. В дальнейшем, когда будет опубликовано официальное решение этой проблемы, мы сообщим об этом.<br /><a href="http://dev.1c-bitrix.ru/community/blogs/net/2192.php">Подробнее...</a>]]></description>
      <link>http://dev.1c-bitrix.ru/community/blogs/net/2192.php</link>
      <guid>http://dev.1c-bitrix.ru/community/blogs/net/2192.php</guid>
      <pubDate>Thu, 23 Sep 2010 15:13:13 +0400</pubDate>
    </item>

    <item>
      <title>Очередное обновление ASP.NET версии</title>
      <description><![CDATA[<img src="https://site-cloud-files.bitrix24.tech/blog/037/NET Logo.png" title="" alt="Логотип .NET" border="0"style=" width:328px; height:81px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=2915" /> 
<br />
 Буквально несколько минут назад выложили очередное сервисное обновление за номером 5.0.2   
<br />
Из вкусного: 
<ul> 
  <li>Промоутинг пользователей на основе рейтинга (стандартный функционал поддерживает привязку/отвязку пользователей к ролям) 
    <br />
   <img src="https://site-cloud-files.bitrix24.tech/blog/f50/screen.png" title="" alt="Промоутинг" border="0"style=" width:698px; height:518px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=2916" /></li>
 
  <li>Поддержка OpenID и LiveID 
    <br />
   <img src="https://site-cloud-files.bitrix24.tech/blog/31a/screen.png" title="" alt="OpenID и Live ID" border="0"style=" width:574px; height:602px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=2917" /></li>
 
  <li>Поддержка Яндекс-карт 
    <br />
   <img src="https://site-cloud-files.bitrix24.tech/blog/490/screen.png" title="" alt="Яндекс.Карты" border="0"style=" width:700px; height:559px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=2918" /></li>
 
  <li>Новый шаблон для фотогалереи 
    <br />
   <img src="https://site-cloud-files.bitrix24.tech/blog/9b0/screen.png" title="" alt="Фотогалерея" border="0"style=" width:635px; height:570px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=2919" /></li>
 </ul>
 По мелочам: 
<ul> 
  <li>Расширенная настройка CAPTCHA </li>
 
  <li>Поддержка рейтингов и голосований в форумах и блогах </li>
 
  <li>Небольшой тюнинг меню и карты сайта (в карту сайта, например, можно теперь включать более 2-х типов меню и задать несколько параллельных цепочек построения) </li>
 
  <li>Компонент регистрации теперь поддерживает пользовательские свойства </li>
 
  <li>Может еще что-нибудь, о чем я забыл упомянуть <img src="http://dev.1c-bitrix.ru/upload/main/smiles/3/bx_smile_smile.png" border="0" data-code=":)" data-definition="UHD" alt=":)" style="width:20px;height:20px;" title="С улыбкой" class="bx-smile" /> </li>
 </ul>
 Ну и партия исправлений ошибок и внутренних оптимизаций. А мы приступаем к сборке очередного обновления в котором ожидается еще немного интересных фишечек.<br /><a href="http://dev.1c-bitrix.ru/community/blogs/net/2127.php">Подробнее...</a>]]></description>
      <link>http://dev.1c-bitrix.ru/community/blogs/net/2127.php</link>
      <guid>http://dev.1c-bitrix.ru/community/blogs/net/2127.php</guid>
      <pubDate>Tue, 31 Aug 2010 15:23:45 +0400</pubDate>
    </item>

    <item>
      <title>Битрикс ASP.NET: продвинутый RSS-агрегатор</title>
      <description><![CDATA[Всем привет!<br /><br />Роберт Басыров написал отличную <noindex><a href="https://dev.1c-bitrix.ru/docs/articles/develop/230100/?SHOWALL_1=1" target="_blank" rel="nofollow" >статью</a></noindex> про то, как создать продвинутый RSS-агрегатор.<br /><br />Особо отмечу, что в этом примере задействован весь спектр технологий нашей CMS: инфоблоки, пользовательские свойства, агенты, обработчики событий, ORM.<br /><a href="http://dev.1c-bitrix.ru/community/blogs/net/2060.php">Подробнее...</a>]]></description>
      <link>http://dev.1c-bitrix.ru/community/blogs/net/2060.php</link>
      <guid>http://dev.1c-bitrix.ru/community/blogs/net/2060.php</guid>
      <pubDate>Mon, 02 Aug 2010 23:03:29 +0400</pubDate>
    </item>

    <item>
      <title>Видео про 1C-Битрикс: ASP.NET</title>
      <description><![CDATA[Всем привет! В мае и июне мы выступали с докладами про 1C-Битрикс: Управление Сайтом ASP.NET. 

Дмитрий Пялов на конференции <a href="http://remix.ru" >Remix</a>

<iframe style="width: 470px; height: 390px; " src="http://www.techdays.ru/LectureViewer.aspx?LectureId=14755536-a050-4b3b-b6cc-8dd3c504e23f" frameborder="0" scrolling="no" mce_src="http://www.techdays.ru/LectureViewer.aspx?LectureId=14755536-a050-4b3b-b6cc-8dd3c504e23f"></iframe>

Антон Герасимюк на <a href="http://conf2010.1c-bitrix.ru" >летней партнерской конференции 1C-Битрикс</a>


<video id="bx_videojs_player_af45c218b604c62f3bbe7dzzuezS" class="video-js ui-video-player ui-icon-set__scope vjs-default-skin" width="470" height="390">
	<source src="http://conf2010.1c-bitrix.ru/conf2010/video/day1/btx100624_11.mp4" type="video/mp4">
</video>
<script>
(function() {
	const params = {"autoplay":false,"preload":false,"controls":true,"height":390,"width":470,"fluid":false,"skin":"vjs-default-skin","sources":[{"src":"http:\/\/conf2010.1c-bitrix.ru\/conf2010\/video\/day1\/btx100624_11.mp4","type":"video\/mp4"}]};
	params.isAudio = false;

	const init = () => {
		const player = new BX.UI.VideoPlayer.Player('bx_videojs_player_af45c218b604c62f3bbe7dzzuezS', params);
		if(!player.lazyload)
		{
			player.init();
		}
	};

	if (BX.Reflection.getClass('BX.UI.VideoPlayer.Player') !== null)
	{
		init();
	}
	else
	{
		BX.Runtime.loadExtension('ui.video-player').then(() => {
			init();
		});
	}
})();
</script><br /><a href="http://dev.1c-bitrix.ru/community/blogs/net/2033.php">Подробнее...</a>]]></description>
      <link>http://dev.1c-bitrix.ru/community/blogs/net/2033.php</link>
      <guid>http://dev.1c-bitrix.ru/community/blogs/net/2033.php</guid>
      <pubDate>Wed, 21 Jul 2010 00:10:37 +0400</pubDate>
    </item>

    <item>
      <title>Кастомизация шаблона iblock.element.webform</title>
      <description><![CDATA[Для PHP версии есть много статей на тему кастомизации шаблонов компонентов. Для ASP.NET версии примеров не так уж много, а точнее нет вообще, за исключением статьи по написанию <a href="http://dev.1c-bitrix.ru/download/bitrix_net_api.chm">собственного компонента</a> в документации для разработчиков. В данной статье мы постараемся исправить эту несправедливость. Речь пойдет про компонент bitrix:iblock.element.webform (описание работы этого компонента вы можете найти <a href="http://dev.1c-bitrix.ru/community/blogs/net/662.php">здесь</a>), он делает то же самое, что и его <a href="http://dev.1c-bitrix.ru/user_help/content/iblock/components_2/element_add/iblock_element_add_form.php">собрат из PHP версии</a>, а именно, позволяет в публичке добавлять и редактировать элементы инфоблока. 
<br />
<b>Задача.</b>
<br />
 Необходимо сделать удобную форму добавления файлов на сайт с привязкой к нескольким разделам инфоблока. 
<br />
 <center><img src="https://site-cloud-files.bitrix24.tech/blog/3db/triple-screenshot.png" title="" alt="" border="0"style=" width:700px; height:276px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=2595" /></center> 
<br />
 На скриншоте показана структура инфоблока, для которого мы создадим форму добавления файлов. Так как стандартный контрол для редактирования секции нас не устраивает, мы сделаем его более удобным. При привязке к секциям мы должны делать проверку на обязательную привязку по категории и языку программирования. Привязку по технологиям мы сделаем множественной и не обязательной. По соображениям безопасности все присылаемые пользователем файлы мы будем архивировать на лету в zip (вдруг пользователь пришлет aspx станицу на которой сможет выполнить свой код), а ограничивать его по расширению файла мы не хотим. Стоит отметить, что в рамках стандартного функционала дистрибутива можно ограничивать загрузку исполняемых файлов в какую-либо директорию, в нашем случае это папка &quot;/upload&quot;. 
<br />
 <b>Немного теории</b> 
<br />
 У каждого элемента инфоблока есть набор стандартных полей (они жестко прописаны в базе данных и не могут быть удалены или добавлены), такие как название элемента, текст описания, дата начала, дата окончания активности и прочее. Так же, мы можем добавлять собственные свойства для каждого инфоблока, с которыми, в последствии, можно будет работать как с полями. Для нашего примера мы будем изменять логику работы контролов, отвечающих за поле (привязка к разделам) и за свойство (загружаемого файла). 
<br />
 <b>Подготовка</b> 
<br />
 1) Создаем инфоблок (с символьным кодом &quot;files&quot;) со свойством типа &quot;Файл&quot; (символьный идентификатор FILE) 
<br />
 2) Добавляем в корень 3 секции: технология (указываем &quot;Символьный код : bytechnology&quot;), язык программирования(указываем &quot;Символьный код : bylang&quot;) и категория(указываем &quot;Символьный код : bycategory&quot;) 
<br />
 3) Заполняем эти три категории подразделами, к которым уже будет привязан каждый загружаемый файл <center><img src="https://site-cloud-files.bitrix24.tech/blog/33e/structure.png" title="" alt="" border="0"style=" width:637px; height:460px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=2596" /></center> 
<br />
 4) Создаем страницу и бросаем на неё наш компонент Формы добавления / редактирования (iblock.element.webform), в настройках убираем вывод таких необязательных полей, как: картинка для привью, детальная картинка, дата начала активности, дата окончания активности и подробный текст. В результате у нас должно получиться следующее: <center><img src="https://site-cloud-files.bitrix24.tech/blog/b41/dhn2qtv9_3gnd7pcgn_b.png" title="" alt="" border="0"style=" width:584px; height:543px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=2598" /></center> 
<br />
 <b>Реализация</b> 
<br />
 Сначала нам нужно добавить свой шаблон компонента, делается это в точности так же как в PHP версии: либо копируем через настройки компонента текущий шаблон компонента в директорию шаблона сайта, 
<br />
 <center><img src="https://site-cloud-files.bitrix24.tech/blog/b97/customize_template.png" title="" alt="" border="0"style=" width:556px; height:315px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=2599" /></center> 
<br />
 либо делаем все то же самое руками. Идем в директорию &quot;/bitrix/templates/%template_name%/components/bitrix/iblock.element.webform&quot;, создаем там папочку, например &quot;new-file&quot; и добавляем в неё два файла: 
<ol> 
  <li>template.ascx - отвечает за генерацию конечного HTML кода, его необходимо скопировать из оригинального шаблона компонента и внести некоторые изменения (для типа поля соответствующего секции и для типа свойства соответствующего файлу).</li>
 
  <li>template.ascx.cs - здесь будет храниться наша &quot;магия&quot;, которая будет заключаться в изменении внешнего вида формы и логики обработки полей формы </li>
 </ol>
 Чтобы было проще ориентироваться по коду, шаблон мы <a href="http://1c-bitrix.ru/upload/examples/dotnet_webform_template_sample.zip">выкладываем здесь</a>.
<br />
 Для того, чтобы сделать свои обработчики полей формы, необходимо создать свой класс шаблона унаследованного от IBlockElementWebFormTemplate, в котором задать свои обработчики для стандартных полей инфоблока и его свойств в методе OnInit: 
<br />
 
<pre class="csharp" style="font-family: monospace;"> <br /><span style="color: rgb(6, 0, 255);">protected</span> <span style="color: rgb(6, 0, 255);">override</span> <span style="color: rgb(6, 0, 255);">void</span> OnInit<span style="color: rgb(0, 0, 0);">(</span>EventArgs e<span style="color: rgb(0, 0, 0);">)</span><br /><span style="color: rgb(0, 0, 0);">{</span><br />        <span style="color: rgb(6, 0, 255);">base</span>.<span style="color: rgb(0, 0, 255);">OnInit</span><span style="color: rgb(0, 0, 0);">(</span>e<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br /> <br />        <span style="color: rgb(6, 0, 255);">if</span> <span style="color: rgb(0, 0, 0);">(</span>Component.<span style="color: rgb(0, 0, 255);">IsPermissionDenied</span><span style="color: rgb(0, 0, 0);">)</span><br />            Bitrix.<span style="color: rgb(0, 0, 255);">Security</span>.<span style="color: rgb(0, 0, 255);">BXAuthentication</span>.<span style="color: rgb(0, 0, 255);">AuthenticationRequired</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />        <span style="color: rgb(0, 128, 128); font-style: italic;">//обработчики полей, таких как название элемента, привязка к секциям и описание. </span><br />        <span style="color: rgb(0, 128, 128); font-style: italic;">//Нас конечно же интересуют секции.</span><br />       Component.<span style="color: rgb(0, 0, 255);">CreateFieldPublicEditor</span> <span style="color: rgb(0, 128, 0);">+=</span> <span style="color: rgb(0, 128, 0);">new</span> EventHandler<span style="color: rgb(0, 128, 0);">&lt;</span>IBlockElementWebFormComponent.<span style="color: rgb(0, 0, 255);">FieldPublicEditorEventArgs</span><span style="color: rgb(0, 0, 0);">(</span>CreateFieldPublicEditor<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />        <span style="color: rgb(0, 128, 128); font-style: italic;">//обработчики пользовательских свойств инфоблока,</span><br />        <span style="color: rgb(0, 128, 128); font-style: italic;">//в нашем случае это необходимо для свойства типа Файл</span><br />        Component.<span style="color: rgb(0, 0, 255);">CreateCustomTypePublicEditor</span> <span style="color: rgb(0, 128, 0);">+=</span> <span style="color: rgb(0, 128, 0);">new</span> EventHandler<span style="color: rgb(0, 128, 0);">&lt;</span>IBlockElementWebFormComponent.<span style="color: rgb(0, 0, 255);">CustomTypePublicEditorEventArgs</span><span style="color: rgb(0, 128, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">(</span>CreateCustomTypePublicEditor<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br /><span style="color: rgb(0, 0, 0);">}</span></pre>
 Как Вы правильно догадались, CreateFieldPublicEditor и CreateCustomTypePublicEditor - это методы, в которых идет обработка полей. Данные методы должны выглядеть примерно следующим образом: 
<br />

<pre class="csharp" style="font-family: monospace;"><span style="color: rgb(0, 128, 128); font-style: italic;">//переопределяем обработчик для поля типа секции</span><br /><span style="color: rgb(6, 0, 255);">protected</span> <span style="color: rgb(6, 0, 255);">void</span> CreateFieldPublicEditor<span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">object</span> component, IBlockElementWebFormComponent.<span style="color: rgb(0, 0, 255);">FieldPublicEditorEventArgs</span> args<span style="color: rgb(0, 0, 0);">)</span><br /><span style="color: rgb(0, 0, 0);">{</span><br />    <span style="color: rgb(0, 128, 128); font-style: italic;">//SECTIONS является идентификатором поля</span><br />    <span style="color: rgb(6, 0, 255);">if</span> <span style="color: rgb(0, 0, 0);">(</span>args.<span style="color: rgb(0, 0, 255);">ID</span>.<span style="color: rgb(0, 0, 255);">ToUpper</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span> <span style="color: rgb(0, 128, 0);">!=</span> <span style="color: rgb(102, 102, 102);">&quot;SECTIONS&quot;</span><span style="color: rgb(0, 0, 0);">)</span><br />         return<span style="color: rgb(0, 128, 0);">;</span><br /> <br />    args.<span style="color: rgb(0, 0, 255);">PublicEditor</span> <span style="color: rgb(0, 128, 0);">=</span> <span style="color: rgb(0, 128, 0);">new</span> FileElementSections<span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br /><span style="color: rgb(0, 0, 0);">}</span><br /> <br /><span style="color: rgb(0, 128, 128); font-style: italic;">//переопределяем обработчик для свойства типа файл</span><br /><span style="color: rgb(6, 0, 255);">protected</span> <span style="color: rgb(6, 0, 255);">void</span> CreateCustomTypePublicEditor<span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">object</span> component, IBlockElementWebFormComponent.<span style="color: rgb(0, 0, 255);">CustomTypePublicEditorEventArgs</span> args<span style="color: rgb(0, 0, 0);">)</span><br /><span style="color: rgb(0, 0, 0);">{</span><br />    <span style="color: rgb(0, 128, 128); font-style: italic;">//FILE является идентификатором свойства</span><br />    <span style="color: rgb(6, 0, 255);">if</span> <span style="color: rgb(0, 0, 0);">(</span>args.<span style="color: rgb(0, 0, 255);">ID</span>.<span style="color: rgb(0, 0, 255);">ToUpper</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span> <span style="color: rgb(0, 128, 0);">!=</span> <span style="color: rgb(102, 102, 102);">&quot;FILE&quot;</span><span style="color: rgb(0, 0, 0);">)</span><br />         return<span style="color: rgb(0, 128, 0);">;</span><br /> <br />    args.<span style="color: rgb(0, 0, 255);">PublicEditor</span> <span style="color: rgb(0, 128, 0);">=</span> <span style="color: rgb(0, 128, 0);">new</span> FileUploadCustomType<span style="color: rgb(0, 0, 0);">(</span>BXCustomTypeManager.<span style="color: rgb(0, 0, 255);">GetCustomType</span><span style="color: rgb(0, 0, 0);">(</span>args.<span style="color: rgb(0, 0, 255);">CustomField</span>.<span style="color: rgb(0, 0, 255);">CustomTypeId</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br /><span style="color: rgb(0, 0, 0);">}</span></pre>
 Класс FileElementSections должен быть унаследован от BXIBlockElementFieldPublicEditor, а класс FileUploadCustomType от BXCustomTypePublicEdit. То есть от стандартных классов редактирования поля элемента и класса редактирования свойства элемента. Теперь поговорим подробнее об этих &quot;родителях&quot;. Родители представляю 4 метода которые отвечают за: 
<ul> 
  <li>подгрузка данных для поля (метод Load)</li>
 
  <li>вывод поля (метод Render)</li>
 
  <li>сохранение данных из поля (метод Save)</li>
 
  <li>проверку входных данных поля (метод Validate)</li>
 </ul>
 Эти методы то нам и нужны. 
<br />
 Итак, давайте рассмотрим класс FileElementSections, он нам более интересен, так как позволяет творить чудеса с внешним видом инпутов формы добавления/редактирования и их содержимым. Рассмотрим методы по порядку: 
<br />
 
<pre style="font-family: monospace;" class="csharp"><span style="color: rgb(6, 0, 255);">public</span> <span style="color: rgb(6, 0, 255);">override</span> <span style="color: rgb(6, 0, 255);">void</span> Load<span style="color: rgb(0, 0, 0);">(</span>BXIBlockElement iblockElement, BXParamsBag<span style="color: rgb(0, 128, 0);">&lt;</span><span style="color: rgb(255, 0, 0);">object</span><span style="color: rgb(0, 128, 0);">&gt;</span> settings<span style="color: rgb(0, 0, 0);">)</span><br /><span style="color: rgb(0, 0, 0);">{</span><br />	required <span style="color: rgb(0, 128, 0);">=</span> settings.<span style="color: rgb(0, 0, 255);">ContainsKey</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(102, 102, 102);">&quot;required&quot;</span><span style="color: rgb(0, 0, 0);">)</span> <span style="color: rgb(0, 128, 0);">?</span> <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">bool</span><span style="color: rgb(0, 0, 0);">)</span>settings<span style="color: rgb(0, 0, 0);">[</span><span style="color: rgb(102, 102, 102);">&quot;required&quot;</span><span style="color: rgb(0, 0, 0);">]</span> <span style="color: rgb(0, 128, 0);">:</span> true<span style="color: rgb(0, 128, 0);">;</span><br />	fieldTitle <span style="color: rgb(0, 128, 0);">=</span> settings.<span style="color: rgb(0, 0, 255);">ContainsKey</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(102, 102, 102);">&quot;fieldTitle&quot;</span><span style="color: rgb(0, 0, 0);">)</span> <span style="color: rgb(0, 128, 0);">?</span> <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">string</span><span style="color: rgb(0, 0, 0);">)</span>settings<span style="color: rgb(0, 0, 0);">[</span><span style="color: rgb(102, 102, 102);">&quot;fieldTitle&quot;</span><span style="color: rgb(0, 0, 0);">]</span> <span style="color: rgb(0, 128, 0);">:</span> <span style="color: rgb(255, 0, 0);">String</span>.<span style="color: rgb(0, 0, 255);">Empty</span><span style="color: rgb(0, 128, 0);">;</span><br />	textBoxSize <span style="color: rgb(0, 128, 0);">=</span> settings.<span style="color: rgb(0, 0, 255);">ContainsKey</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(102, 102, 102);">&quot;textBoxSize&quot;</span><span style="color: rgb(0, 0, 0);">)</span> <span style="color: rgb(0, 128, 0);">?</span> <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">int</span><span style="color: rgb(0, 0, 0);">)</span>settings<span style="color: rgb(0, 0, 0);">[</span><span style="color: rgb(102, 102, 102);">&quot;textBoxSize&quot;</span><span style="color: rgb(0, 0, 0);">]</span> <span style="color: rgb(0, 128, 0);">:</span> <span style="color: rgb(255, 0, 0);">30</span><span style="color: rgb(0, 128, 0);">;</span><br />	iblockId <span style="color: rgb(0, 128, 0);">=</span> settings.<span style="color: rgb(0, 0, 255);">ContainsKey</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(102, 102, 102);">&quot;iblockId&quot;</span><span style="color: rgb(0, 0, 0);">)</span> <span style="color: rgb(0, 128, 0);">?</span> <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">int</span><span style="color: rgb(0, 0, 0);">)</span>settings<span style="color: rgb(0, 0, 0);">[</span><span style="color: rgb(102, 102, 102);">&quot;iblockId&quot;</span><span style="color: rgb(0, 0, 0);">]</span> <span style="color: rgb(0, 128, 0);">:</span> <span style="color: rgb(255, 0, 0);">0</span><span style="color: rgb(0, 128, 0);">;</span><br />	onlyLeafSelect <span style="color: rgb(0, 128, 0);">=</span> settings.<span style="color: rgb(0, 0, 255);">ContainsKey</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(102, 102, 102);">&quot;onlyLeafSelect&quot;</span><span style="color: rgb(0, 0, 0);">)</span> <span style="color: rgb(0, 128, 0);">?</span> <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">bool</span><span style="color: rgb(0, 0, 0);">)</span>settings<span style="color: rgb(0, 0, 0);">[</span><span style="color: rgb(102, 102, 102);">&quot;onlyLeafSelect&quot;</span><span style="color: rgb(0, 0, 0);">]</span> <span style="color: rgb(0, 128, 0);">:</span> false<span style="color: rgb(0, 128, 0);">;</span><br />	maxSectionSelect <span style="color: rgb(0, 128, 0);">=</span> settings.<span style="color: rgb(0, 0, 255);">ContainsKey</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(102, 102, 102);">&quot;maxSectionSelect&quot;</span><span style="color: rgb(0, 0, 0);">)</span> <span style="color: rgb(0, 128, 0);">?</span> <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">int</span><span style="color: rgb(0, 0, 0);">)</span>settings<span style="color: rgb(0, 0, 0);">[</span><span style="color: rgb(102, 102, 102);">&quot;maxSectionSelect&quot;</span><span style="color: rgb(0, 0, 0);">]</span> <span style="color: rgb(0, 128, 0);">:</span> <span style="color: rgb(255, 0, 0);">3</span><span style="color: rgb(0, 128, 0);">;</span><br />	multiple <span style="color: rgb(0, 128, 0);">=</span> maxSectionSelect <span style="color: rgb(0, 128, 0);">&gt;</span> <span style="color: rgb(255, 0, 0);">1</span><span style="color: rgb(0, 128, 0);">;</span><br /> <br />	categories <span style="color: rgb(0, 128, 0);">=</span> GetFileSections<span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(102, 102, 102);">&quot;bycategory&quot;</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />	languages <span style="color: rgb(0, 128, 0);">=</span> GetFileSections<span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(102, 102, 102);">&quot;bylang&quot;</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />	technologies <span style="color: rgb(0, 128, 0);">=</span> GetFileSections<span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(102, 102, 102);">&quot;bytechnology&quot;</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br /> <br />	<span style="color: rgb(6, 0, 255);">if</span> <span style="color: rgb(0, 0, 0);">(</span>iblockElement <span style="color: rgb(0, 128, 0);">!=</span> <span style="color: rgb(6, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">)</span><br />	<span style="color: rgb(0, 0, 0);">{</span><br />		<span style="color: rgb(6, 0, 255);">foreach</span> <span style="color: rgb(0, 0, 0);">(</span>BXIBlockElement.<span style="color: rgb(0, 0, 255);">BXInfoBlockElementSection</span> section <span style="color: rgb(6, 0, 255);">in</span> iblockElement.<span style="color: rgb(0, 0, 255);">Sections</span><span style="color: rgb(0, 0, 0);">)</span><br />			fieldValues.<span style="color: rgb(0, 0, 255);">Add</span><span style="color: rgb(0, 0, 0);">(</span>section.<span style="color: rgb(0, 0, 255);">SectionId</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />	<span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);">}</span></pre>
 В этом методе мы вначале забираем свойства контрола, которые по большей части относятся к свойствам секций инфоблока. В конце метод смотрит - мы редактируем поле или нет, если редактируем, то сохраняем секции. 
<br />
 Наверно, ниже приведен самый вкусный метод, так как позволяет самостоятельно менять внешний вид контрола:
<pre style="font-family: monospace;" class="csharp"><span style="color: rgb(6, 0, 255);">public</span> <span style="color: rgb(6, 0, 255);">override</span> <span style="color: rgb(255, 0, 0);">string</span> Render<span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">string</span> formFieldName, <span style="color: rgb(255, 0, 0);">string</span> uniqueID<span style="color: rgb(0, 0, 0);">)</span><br /><span style="color: rgb(0, 0, 0);">{</span><br />&nbsp;<br />	<span style="color: rgb(0, 128, 128); font-style: italic;">/* задаем вспомогательные перменные, которые нам понадобятся для построения select-ов и чекбоксов */</span><br />	<span style="color: rgb(255, 0, 0);">string</span> fieldHeader <span style="color: rgb(0, 128, 0);">=</span> <span style="color: rgb(102, 102, 102);">@&quot;&lt;tr field field-sections{1}&quot;</span><span style="color: rgb(102, 102, 102);">&quot;&gt;&lt;td align=right width=30% valign=top&gt;&lt;label class=&quot;</span><span style="color: rgb(102, 102, 102);">&quot;field-title&quot;</span><span style="color: rgb(102, 102, 102);">&quot;&gt;{0}&lt;/label&gt;&lt;/td&gt;&lt;td valign=top&gt;&quot;</span><span style="color: rgb(0, 128, 0);">;</span><br />	<span style="color: rgb(255, 0, 0);">string</span> fieldFooter <span style="color: rgb(0, 128, 0);">=</span> <span style="color: rgb(102, 102, 102);">&quot;&lt;/td&gt;&lt;/tr&gt;&quot;</span><span style="color: rgb(0, 128, 0);">;</span><br />	<span style="color: rgb(255, 0, 0);">string</span> dropDownStart <span style="color: rgb(0, 128, 0);">=</span> <span style="color: rgb(102, 102, 102);">@&quot;&lt;select name=&quot;</span><span style="color: rgb(102, 102, 102);">&quot;{0}&quot;</span><span style="color: rgb(102, 102, 102);">&quot; class=&quot;</span><span style="color: rgb(102, 102, 102);">&quot;custom-field-list&quot;</span><span style="color: rgb(102, 102, 102);">&quot;&gt;&quot;</span><span style="color: rgb(0, 128, 0);">;</span><br />	<span style="color: rgb(255, 0, 0);">string</span> dropDownOption <span style="color: rgb(0, 128, 0);">=</span> <span style="color: rgb(102, 102, 102);">@&quot;&lt;option value=&quot;</span><span style="color: rgb(102, 102, 102);">&quot;{0}&quot;</span><span style="color: rgb(102, 102, 102);">&quot;{1}&gt;{2}&lt;/option&gt;&quot;</span><span style="color: rgb(0, 128, 0);">;</span><br />	<span style="color: rgb(255, 0, 0);">string</span> dropDownEnd <span style="color: rgb(0, 128, 0);">=</span> <span style="color: rgb(102, 102, 102);">&quot;&lt;/select&gt;&quot;</span><span style="color: rgb(0, 128, 0);">;</span><br />	<span style="color: rgb(255, 0, 0);">string</span> checkbox <span style="color: rgb(0, 128, 0);">=</span> <span style="color: rgb(102, 102, 102);">@&quot;&lt;input name=&quot;</span><span style="color: rgb(102, 102, 102);">&quot;{0}&quot;</span><span style="color: rgb(102, 102, 102);">&quot; type=&quot;</span><span style="color: rgb(102, 102, 102);">&quot;checkbox&quot;</span><span style="color: rgb(102, 102, 102);">&quot; value=&quot;</span><span style="color: rgb(102, 102, 102);">&quot;{1}&quot;</span><span style="color: rgb(102, 102, 102);">&quot; id=&quot;</span><span style="color: rgb(102, 102, 102);">&quot;{2}&quot;</span><span style="color: rgb(102, 102, 102);">&quot;{3}/&gt; &lt;label for=&quot;</span><span style="color: rgb(102, 102, 102);">&quot;{2}&quot;</span><span style="color: rgb(102, 102, 102);">&quot;&gt;{4}&lt;/label&gt;&lt;BR&gt;&quot;</span><span style="color: rgb(0, 128, 0);">;</span><br />&nbsp;<br />	StringBuilder result <span style="color: rgb(0, 128, 0);">=</span> <span style="color: rgb(0, 128, 0);">new</span> StringBuilder<span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">String</span>.<span style="color: rgb(0, 0, 255);">Empty</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />&nbsp;<br />	<span style="color: rgb(0, 128, 128); font-style: italic;">//Categories</span><br />	<span style="color: rgb(0, 128, 128); font-style: italic;">//формируем список отвечающий за вывод категории в виде DropDown</span><br />	result.<span style="color: rgb(0, 0, 255);">AppendFormat</span><span style="color: rgb(0, 0, 0);">(</span>fieldHeader, <span style="color: rgb(102, 102, 102);">@&quot;Категория&lt;span style=&quot;</span><span style="color: rgb(102, 102, 102);">&quot;color: red;&quot;</span><span style="color: rgb(102, 102, 102);">&quot;&gt;*&lt;/span&gt;&quot;</span>, isCategorySet <span style="color: rgb(0, 128, 0);">?</span> <span style="color: rgb(102, 102, 102);">&quot;&quot;</span> <span style="color: rgb(0, 128, 0);">:</span> <span style="color: rgb(102, 102, 102);">&quot; field-error&quot;</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />	result.<span style="color: rgb(0, 0, 255);">AppendFormat</span><span style="color: rgb(0, 0, 0);">(</span>dropDownStart, HttpUtility.<span style="color: rgb(0, 0, 255);">HtmlEncode</span><span style="color: rgb(0, 0, 0);">(</span>formFieldName<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />	result.<span style="color: rgb(0, 0, 255);">AppendFormat</span><span style="color: rgb(0, 0, 0);">(</span>dropDownOption, <span style="color: rgb(255, 0, 0);">0</span>, <span style="color: rgb(255, 0, 0);">String</span>.<span style="color: rgb(0, 0, 255);">Empty</span>, <span style="color: rgb(102, 102, 102);">&quot;(выберите категорию)&quot;</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />&nbsp;<br />	<span style="color: rgb(6, 0, 255);">for</span> <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">int</span> i <span style="color: rgb(0, 128, 0);">=</span> <span style="color: rgb(255, 0, 0);">0</span><span style="color: rgb(0, 128, 0);">;</span> i <span style="color: rgb(0, 128, 0);">&lt;</span> categories.<span style="color: rgb(0, 0, 255);">Count</span><span style="color: rgb(0, 128, 0);">;</span> i<span style="color: rgb(0, 128, 0);">++</span><span style="color: rgb(0, 0, 0);">)</span><br />	<span style="color: rgb(0, 0, 0);">{</span><br />		SectionTreeItem section <span style="color: rgb(0, 128, 0);">=</span> <span style="color: rgb(0, 0, 0);">(</span>SectionTreeItem<span style="color: rgb(0, 0, 0);">)</span>categories<span style="color: rgb(0, 0, 0);">[</span>i<span style="color: rgb(0, 0, 0);">]</span><span style="color: rgb(0, 128, 0);">;</span><br />&nbsp;<br />		result.<span style="color: rgb(0, 0, 255);">AppendFormat</span><span style="color: rgb(0, 0, 0);">(</span><br />			dropDownOption,<br />			section.<span style="color: rgb(0, 0, 255);">Id</span>,<br />			fieldValues.<span style="color: rgb(0, 0, 255);">Contains</span><span style="color: rgb(0, 0, 0);">(</span>section.<span style="color: rgb(0, 0, 255);">Id</span><span style="color: rgb(0, 0, 0);">)</span> <span style="color: rgb(0, 128, 0);">?</span> <span style="color: rgb(102, 102, 102);">&quot; selected=<span style="color: rgb(0, 128, 128); font-weight: bold;">\&quot;</span>selected<span style="color: rgb(0, 128, 128); font-weight: bold;">\&quot;</span>&quot;</span> <span style="color: rgb(0, 128, 0);">:</span> <span style="color: rgb(255, 0, 0);">String</span>.<span style="color: rgb(0, 0, 255);">Empty</span>,<br />			section.<span style="color: rgb(0, 0, 255);">Name</span><br />		<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />	<span style="color: rgb(0, 0, 0);">}</span><br />&nbsp;<br />	result.<span style="color: rgb(0, 0, 255);">Append</span><span style="color: rgb(0, 0, 0);">(</span>dropDownEnd<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />	result.<span style="color: rgb(0, 0, 255);">AppendFormat</span><span style="color: rgb(0, 0, 0);">(</span>fieldFooter<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />&nbsp;<br />	<span style="color: rgb(0, 128, 128); font-style: italic;">//Languages</span><br />	<span style="color: rgb(0, 128, 128); font-style: italic;">//такой же селект для языков программирования</span><br />	result.<span style="color: rgb(0, 0, 255);">AppendFormat</span><span style="color: rgb(0, 0, 0);">(</span>fieldHeader, <span style="color: rgb(102, 102, 102);">@&quot;Язык программирования&lt;span style=&quot;</span><span style="color: rgb(102, 102, 102);">&quot;color: red;&quot;</span><span style="color: rgb(102, 102, 102);">&quot;&gt;*&lt;/span&gt;&quot;</span>, isCategorySet <span style="color: rgb(0, 128, 0);">?</span> <span style="color: rgb(102, 102, 102);">&quot;&quot;</span> <span style="color: rgb(0, 128, 0);">:</span> <span style="color: rgb(102, 102, 102);">&quot; field-error&quot;</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />	result.<span style="color: rgb(0, 0, 255);">AppendFormat</span><span style="color: rgb(0, 0, 0);">(</span>dropDownStart, HttpUtility.<span style="color: rgb(0, 0, 255);">HtmlEncode</span><span style="color: rgb(0, 0, 0);">(</span>formFieldName<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />	result.<span style="color: rgb(0, 0, 255);">AppendFormat</span><span style="color: rgb(0, 0, 0);">(</span>dropDownOption, <span style="color: rgb(255, 0, 0);">0</span>, <span style="color: rgb(255, 0, 0);">String</span>.<span style="color: rgb(0, 0, 255);">Empty</span>, <span style="color: rgb(102, 102, 102);">&quot;(выберите язык)&quot;</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />&nbsp;<br />	<span style="color: rgb(6, 0, 255);">for</span> <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">int</span> i <span style="color: rgb(0, 128, 0);">=</span> <span style="color: rgb(255, 0, 0);">0</span><span style="color: rgb(0, 128, 0);">;</span> i <span style="color: rgb(0, 128, 0);">&lt;</span> languages.<span style="color: rgb(0, 0, 255);">Count</span><span style="color: rgb(0, 128, 0);">;</span> i<span style="color: rgb(0, 128, 0);">++</span><span style="color: rgb(0, 0, 0);">)</span><br />	<span style="color: rgb(0, 0, 0);">{</span><br />		SectionTreeItem section <span style="color: rgb(0, 128, 0);">=</span> <span style="color: rgb(0, 0, 0);">(</span>SectionTreeItem<span style="color: rgb(0, 0, 0);">)</span>languages<span style="color: rgb(0, 0, 0);">[</span>i<span style="color: rgb(0, 0, 0);">]</span><span style="color: rgb(0, 128, 0);">;</span><br />&nbsp;<br />		result.<span style="color: rgb(0, 0, 255);">AppendFormat</span><span style="color: rgb(0, 0, 0);">(</span><br />			dropDownOption,<br />			section.<span style="color: rgb(0, 0, 255);">Id</span>,<br />			fieldValues.<span style="color: rgb(0, 0, 255);">Contains</span><span style="color: rgb(0, 0, 0);">(</span>section.<span style="color: rgb(0, 0, 255);">Id</span><span style="color: rgb(0, 0, 0);">)</span> <span style="color: rgb(0, 128, 0);">?</span> <span style="color: rgb(102, 102, 102);">&quot; selected=<span style="color: rgb(0, 128, 128); font-weight: bold;">\&quot;</span>selected<span style="color: rgb(0, 128, 128); font-weight: bold;">\&quot;</span>&quot;</span> <span style="color: rgb(0, 128, 0);">:</span> <span style="color: rgb(255, 0, 0);">String</span>.<span style="color: rgb(0, 0, 255);">Empty</span>,<br />			section.<span style="color: rgb(0, 0, 255);">Name</span><br />		<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />	<span style="color: rgb(0, 0, 0);">}</span><br />&nbsp;<br />	result.<span style="color: rgb(0, 0, 255);">Append</span><span style="color: rgb(0, 0, 0);">(</span>dropDownEnd<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />	result.<span style="color: rgb(0, 0, 255);">AppendFormat</span><span style="color: rgb(0, 0, 0);">(</span>fieldFooter<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />&nbsp;<br />	<span style="color: rgb(0, 128, 128); font-style: italic;">//Technologies</span><br />	<span style="color: rgb(0, 128, 128); font-style: italic;">//а технологии сделаем ка мы чек боксами</span><br />	result.<span style="color: rgb(0, 0, 255);">AppendFormat</span><span style="color: rgb(0, 0, 0);">(</span>fieldHeader, <span style="color: rgb(102, 102, 102);">@&quot;Технологии&quot;</span>, <span style="color: rgb(102, 102, 102);">&quot;&quot;</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />&nbsp;<br />&nbsp;<br />	<span style="color: rgb(6, 0, 255);">for</span> <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">int</span> i <span style="color: rgb(0, 128, 0);">=</span> <span style="color: rgb(255, 0, 0);">0</span><span style="color: rgb(0, 128, 0);">;</span> i <span style="color: rgb(0, 128, 0);">&lt;</span> technologies.<span style="color: rgb(0, 0, 255);">Count</span><span style="color: rgb(0, 128, 0);">;</span> i<span style="color: rgb(0, 128, 0);">++</span><span style="color: rgb(0, 0, 0);">)</span><br />	<span style="color: rgb(0, 0, 0);">{</span><br />		SectionTreeItem section <span style="color: rgb(0, 128, 0);">=</span> <span style="color: rgb(0, 0, 0);">(</span>SectionTreeItem<span style="color: rgb(0, 0, 0);">)</span>technologies<span style="color: rgb(0, 0, 0);">[</span>i<span style="color: rgb(0, 0, 0);">]</span><span style="color: rgb(0, 128, 0);">;</span><br />		result.<span style="color: rgb(0, 0, 255);">AppendFormat</span><span style="color: rgb(0, 0, 0);">(</span><br />			checkbox,<br />			HttpUtility.<span style="color: rgb(0, 0, 255);">HtmlEncode</span><span style="color: rgb(0, 0, 0);">(</span>formFieldName<span style="color: rgb(0, 0, 0);">)</span>,<br />			section.<span style="color: rgb(0, 0, 255);">Id</span>,<br />			HttpUtility.<span style="color: rgb(0, 0, 255);">HtmlEncode</span><span style="color: rgb(0, 0, 0);">(</span>formFieldName<span style="color: rgb(0, 0, 0);">)</span> <span style="color: rgb(0, 128, 0);">+</span> section.<span style="color: rgb(0, 0, 255);">Id</span>,<br />			fieldValues.<span style="color: rgb(0, 0, 255);">Contains</span><span style="color: rgb(0, 0, 0);">(</span>section.<span style="color: rgb(0, 0, 255);">Id</span><span style="color: rgb(0, 0, 0);">)</span> <span style="color: rgb(0, 128, 0);">?</span> <span style="color: rgb(102, 102, 102);">&quot; checked=<span style="color: rgb(0, 128, 128); font-weight: bold;">\&quot;</span>checked<span style="color: rgb(0, 128, 128); font-weight: bold;">\&quot;</span>&quot;</span> <span style="color: rgb(0, 128, 0);">:</span> <span style="color: rgb(255, 0, 0);">String</span>.<span style="color: rgb(0, 0, 255);">Empty</span>,<br />			section.<span style="color: rgb(0, 0, 255);">Name</span><br />		<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />	<span style="color: rgb(0, 0, 0);">}</span><br />&nbsp;<br />	result.<span style="color: rgb(0, 0, 255);">AppendFormat</span><span style="color: rgb(0, 0, 0);">(</span>fieldFooter<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />&nbsp;<br />	<span style="color: rgb(6, 0, 255);">return</span> result.<span style="color: rgb(0, 0, 255);">ToString</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br /><span style="color: rgb(0, 0, 0);">}</span><br />&nbsp;</pre>

<br />
Теперь рассмотрим следующий метод, который отвечает за сохранение. Он очищает привязку к секциям для элемента инфоблока и пишет новые: 
<pre style="font-family: monospace;" class="csharp"><span style="color: rgb(6, 0, 255);">public</span> <span style="color: rgb(6, 0, 255);">override</span> <span style="color: rgb(6, 0, 255);">void</span> Save<span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">string</span> formFieldName, BXIBlockElement iblockElement, BXCustomPropertyCollection properties<span style="color: rgb(0, 0, 0);">)</span><br /><span style="color: rgb(0, 0, 0);">{</span><br />	<span style="color: rgb(6, 0, 255);">if</span> <span style="color: rgb(0, 0, 0);">(</span>iblockElement <span style="color: rgb(0, 128, 0);">==</span> <span style="color: rgb(6, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">)</span><br />		return<span style="color: rgb(0, 128, 0);">;</span><br /> <br />	BXIBlockElement.<span style="color: rgb(0, 0, 255);">BXInfoBlockElementSectionCollection</span> sections <span style="color: rgb(0, 128, 0);">=</span> iblockElement.<span style="color: rgb(0, 0, 255);">Sections</span><span style="color: rgb(0, 128, 0);">;</span><br />	sections.<span style="color: rgb(0, 0, 255);">Clear</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />	<span style="color: rgb(6, 0, 255);">foreach</span> <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">int</span> sectionId <span style="color: rgb(6, 0, 255);">in</span> fieldValues<span style="color: rgb(0, 0, 0);">)</span><br />		sections.<span style="color: rgb(0, 0, 255);">Add</span><span style="color: rgb(0, 0, 0);">(</span>sectionId<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br /><span style="color: rgb(0, 0, 0);">}</span></pre>
 Ну и проверка входных данных производится так для нашего элемента: 
<pre style="font-family: monospace;" class="csharp"><span style="color: rgb(6, 0, 255);">public</span> <span style="color: rgb(6, 0, 255);">override</span> <span style="color: rgb(255, 0, 0);">bool</span> Validate<span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">string</span> formFieldName, ICollection<span style="color: rgb(0, 128, 0);">&lt;</span><span style="color: rgb(255, 0, 0);">string</span><span style="color: rgb(0, 128, 0);">&gt;</span> errors<span style="color: rgb(0, 0, 0);">)</span><br /><span style="color: rgb(0, 0, 0);">{</span><br />	postValues <span style="color: rgb(0, 128, 0);">=</span> HttpContext.<span style="color: rgb(0, 0, 255);">Current</span>.<span style="color: rgb(0, 0, 255);">Request</span>.<span style="color: rgb(0, 0, 255);">Form</span>.<span style="color: rgb(0, 0, 255);">GetValues</span><span style="color: rgb(0, 0, 0);">(</span>formFieldName<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />	<span style="color: rgb(6, 0, 255);">if</span> <span style="color: rgb(0, 0, 0);">(</span>postValues <span style="color: rgb(0, 128, 0);">==</span> <span style="color: rgb(6, 0, 255);">null</span> <span style="color: rgb(0, 128, 0);">||</span> postValues.<span style="color: rgb(0, 0, 255);">Length</span> <span style="color: rgb(0, 128, 0);">&lt;</span> <span style="color: rgb(255, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)</span><br />	<span style="color: rgb(0, 0, 0);">{</span><br />		fieldValues.<span style="color: rgb(0, 0, 255);">Clear</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />		errors.<span style="color: rgb(0, 0, 255);">Add</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(102, 102, 102);">&quot;Не указана категория файла&quot;</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />		<span style="color: rgb(6, 0, 255);">return</span> false<span style="color: rgb(0, 128, 0);">;</span><br />	<span style="color: rgb(0, 0, 0);">}</span><br /> <br />	isCategorySet <span style="color: rgb(0, 128, 0);">=</span> false<span style="color: rgb(0, 128, 0);">;</span><br />	isLangSet <span style="color: rgb(0, 128, 0);">=</span> false<span style="color: rgb(0, 128, 0);">;</span><br /> <br />	fieldValues <span style="color: rgb(0, 128, 0);">=</span> <span style="color: rgb(0, 128, 0);">new</span> List<span style="color: rgb(0, 128, 0);">&lt;</span><span style="color: rgb(255, 0, 0);">int</span><span style="color: rgb(0, 128, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">(</span>postValues.<span style="color: rgb(0, 0, 255);">Length</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />	<span style="color: rgb(6, 0, 255);">foreach</span> <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">string</span> value <span style="color: rgb(6, 0, 255);">in</span> postValues<span style="color: rgb(0, 0, 0);">)</span><br />	<span style="color: rgb(0, 0, 0);">{</span><br />		<span style="color: rgb(255, 0, 0);">int</span> sectionId<span style="color: rgb(0, 128, 0);">;</span><br />		<span style="color: rgb(6, 0, 255);">if</span> <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 128, 0);">!</span><span style="color: rgb(255, 0, 0);">int</span>.<span style="color: rgb(0, 0, 255);">TryParse</span><span style="color: rgb(0, 0, 0);">(</span>value, <span style="color: rgb(6, 0, 255);">out</span> sectionId<span style="color: rgb(0, 0, 0);">)</span> <span style="color: rgb(0, 128, 0);">||</span> sectionId <span style="color: rgb(0, 128, 0);">&lt;</span> <span style="color: rgb(255, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)</span><br />			continue<span style="color: rgb(0, 128, 0);">;</span><br /> <br />		<span style="color: rgb(6, 0, 255);">if</span> <span style="color: rgb(0, 0, 0);">(</span>categories.<span style="color: rgb(0, 0, 255);">Contains</span><span style="color: rgb(0, 0, 0);">(</span>sectionId<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><br />		<span style="color: rgb(0, 0, 0);">{</span><br />			isCategorySet <span style="color: rgb(0, 128, 0);">=</span> true<span style="color: rgb(0, 128, 0);">;</span><br />			fieldValues.<span style="color: rgb(0, 0, 255);">Add</span><span style="color: rgb(0, 0, 0);">(</span>sectionId<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />		<span style="color: rgb(0, 0, 0);">}</span><br />		<span style="color: rgb(6, 0, 255);">else</span> <span style="color: rgb(6, 0, 255);">if</span> <span style="color: rgb(0, 0, 0);">(</span>languages.<span style="color: rgb(0, 0, 255);">Contains</span><span style="color: rgb(0, 0, 0);">(</span>sectionId<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><br />		<span style="color: rgb(0, 0, 0);">{</span><br />			isLangSet <span style="color: rgb(0, 128, 0);">=</span> true<span style="color: rgb(0, 128, 0);">;</span><br />			fieldValues.<span style="color: rgb(0, 0, 255);">Add</span><span style="color: rgb(0, 0, 0);">(</span>sectionId<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />		<span style="color: rgb(0, 0, 0);">}</span><br />		<span style="color: rgb(6, 0, 255);">else</span> <span style="color: rgb(6, 0, 255);">if</span> <span style="color: rgb(0, 0, 0);">(</span>technologies.<span style="color: rgb(0, 0, 255);">Contains</span><span style="color: rgb(0, 0, 0);">(</span>sectionId<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><br />		<span style="color: rgb(0, 0, 0);">{</span><br />			fieldValues.<span style="color: rgb(0, 0, 255);">Add</span><span style="color: rgb(0, 0, 0);">(</span>sectionId<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />		<span style="color: rgb(0, 0, 0);">}</span><br />	<span style="color: rgb(0, 0, 0);">}</span><br /> <br />	<span style="color: rgb(6, 0, 255);">if</span> <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 128, 0);">!</span>isCategorySet<span style="color: rgb(0, 0, 0);">)</span><br />		errors.<span style="color: rgb(0, 0, 255);">Add</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">String</span>.<span style="color: rgb(0, 0, 255);">Format</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(102, 102, 102);">&quot;Не указана категория файла&quot;</span>, fieldTitle<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />	<span style="color: rgb(6, 0, 255);">else</span> <span style="color: rgb(6, 0, 255);">if</span> <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 128, 0);">!</span>isLangSet<span style="color: rgb(0, 0, 0);">)</span><br />		errors.<span style="color: rgb(0, 0, 255);">Add</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">String</span>.<span style="color: rgb(0, 0, 255);">Format</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(102, 102, 102);">&quot;Не указан язык программирования&quot;</span>, fieldTitle<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br /> <br />	<span style="color: rgb(6, 0, 255);">return</span> isCategorySet <span style="color: rgb(0, 128, 0);">&amp;&amp;</span> isLangSet<span style="color: rgb(0, 128, 0);">;</span><br /><span style="color: rgb(0, 0, 0);">}</span></pre>
 Вспомогательный класс SectionTreeItem хранит в себе нужную нам информацию о секции. Он есть в архиве с шаблоном
<br />
 Класс FileUploadCustomType построен по тому же принципу, только в нем идет сжатие файла + вызов родительских функций. Рассмотрим только тот метод, где происходит сжатие: 
<br />
 
<pre style="font-family: monospace;" class="csharp"><span style="color: rgb(6, 0, 255);">private</span> BXFile ValidateFile<span style="color: rgb(0, 0, 0);">(</span>HttpPostedFile file, ICollection<span style="color: rgb(0, 128, 0);">&lt;</span><span style="color: rgb(255, 0, 0);">string</span><span style="color: rgb(0, 128, 0);">&gt;</span> errors<span style="color: rgb(0, 0, 0);">)</span><br /><span style="color: rgb(0, 0, 0);">{</span><br />	<span style="color: rgb(255, 0, 0);">bool</span> result <span style="color: rgb(0, 128, 0);">=</span> true<span style="color: rgb(0, 128, 0);">;</span><br />	<span style="color: rgb(6, 0, 255);">if</span> <span style="color: rgb(0, 0, 0);">(</span>maxSize <span style="color: rgb(0, 128, 0);">&gt;</span> <span style="color: rgb(255, 0, 0);">0</span> <span style="color: rgb(0, 128, 0);">&amp;&amp;</span> file.<span style="color: rgb(0, 0, 255);">ContentLength</span> <span style="color: rgb(0, 128, 0);">&gt;</span> maxSize<span style="color: rgb(0, 0, 0);">)</span><br />	<span style="color: rgb(0, 0, 0);">{</span><br />		result <span style="color: rgb(0, 128, 0);">=</span> false<span style="color: rgb(0, 128, 0);">;</span><br />		errors.<span style="color: rgb(0, 0, 255);">Add</span><span style="color: rgb(0, 0, 0);">(</span>HttpUtility.<span style="color: rgb(0, 0, 255);">HtmlEncode</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">string</span>.<span style="color: rgb(0, 0, 255);">Format</span><span style="color: rgb(0, 0, 0);">(</span><br />			<span style="color: rgb(102, 102, 102);">&quot;Размер файла {0} превышает {1}&quot;</span>,<br />			file.<span style="color: rgb(0, 0, 255);">FileName</span>,<br />			BXStringUtility.<span style="color: rgb(0, 0, 255);">BytesToString</span><span style="color: rgb(0, 0, 0);">(</span>maxSize<span style="color: rgb(0, 0, 0);">)</span><br />		<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />	<span style="color: rgb(0, 0, 0);">}</span><br />	<span style="color: rgb(6, 0, 255);">if</span> <span style="color: rgb(0, 0, 0);">(</span>allowedExtensions.<span style="color: rgb(0, 0, 255);">Count</span> <span style="color: rgb(0, 128, 0);">!=</span> <span style="color: rgb(255, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">)</span><br />	<span style="color: rgb(0, 0, 0);">{</span><br />		<span style="color: rgb(255, 0, 0);">string</span> ext <span style="color: rgb(0, 128, 0);">=</span> Path.<span style="color: rgb(0, 0, 255);">GetExtension</span><span style="color: rgb(0, 0, 0);">(</span>file.<span style="color: rgb(0, 0, 255);">FileName</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />		<span style="color: rgb(6, 0, 255);">if</span> <span style="color: rgb(0, 0, 0);">(</span>ext <span style="color: rgb(0, 128, 0);">!=</span> <span style="color: rgb(6, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">)</span><br />			ext <span style="color: rgb(0, 128, 0);">=</span> ext.<span style="color: rgb(0, 0, 255);">TrimStart</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(102, 102, 102);">'.'</span><span style="color: rgb(0, 0, 0);">)</span>.<span style="color: rgb(0, 0, 255);">ToLowerInvariant</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />		<span style="color: rgb(6, 0, 255);">if</span> <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 128, 0);">!</span>allowedExtensions.<span style="color: rgb(0, 0, 255);">Contains</span><span style="color: rgb(0, 0, 0);">(</span>ext<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><br />		<span style="color: rgb(0, 0, 0);">{</span><br />			result <span style="color: rgb(0, 128, 0);">=</span> false<span style="color: rgb(0, 128, 0);">;</span><br />			errors.<span style="color: rgb(0, 0, 255);">Add</span><span style="color: rgb(0, 0, 0);">(</span>HttpUtility.<span style="color: rgb(0, 0, 255);">HtmlEncode</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">string</span>.<span style="color: rgb(0, 0, 255);">Format</span><span style="color: rgb(0, 0, 0);">(</span><br />				<span style="color: rgb(102, 102, 102);">&quot;Тип загружаемого файла {0} не является допустимым ({1})&quot;</span>,<br />				file.<span style="color: rgb(0, 0, 255);">FileName</span>,<br />				<span style="color: rgb(255, 0, 0);">string</span>.<span style="color: rgb(0, 0, 255);">Join</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(102, 102, 102);">&quot;, &quot;</span>, allowedExtensions.<span style="color: rgb(0, 0, 255);">ToArray</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><br />			<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />		<span style="color: rgb(0, 0, 0);">}</span><br />	<span style="color: rgb(0, 0, 0);">}</span><br />	<span style="color: rgb(6, 0, 255);">if</span> <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 128, 0);">!</span>result<span style="color: rgb(0, 0, 0);">)</span><br />		<span style="color: rgb(6, 0, 255);">return</span> null<span style="color: rgb(0, 128, 0);">;</span><br /> <br />	BXFile f <span style="color: rgb(0, 128, 0);">=</span> null<span style="color: rgb(0, 128, 0);">;</span><br />	<span style="color: rgb(255, 0, 0);">string</span> fileName <span style="color: rgb(0, 128, 0);">=</span> Path.<span style="color: rgb(0, 0, 255);">GetFileName</span><span style="color: rgb(0, 0, 0);">(</span>file.<span style="color: rgb(0, 0, 255);">FileName</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />	<span style="color: rgb(6, 0, 255);">if</span> <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 128, 0);">!</span><span style="color: rgb(255, 0, 0);">String</span>.<span style="color: rgb(0, 0, 255);">IsNullOrEmpty</span><span style="color: rgb(0, 0, 0);">(</span>fileName<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><br />	<span style="color: rgb(0, 0, 0);">{</span><br />		<span style="color: rgb(6, 0, 255);">if</span> <span style="color: rgb(0, 0, 0);">(</span>fileName.<span style="color: rgb(0, 0, 255);">EndsWith</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(102, 102, 102);">&quot;.zip&quot;</span><span style="color: rgb(0, 0, 0);">)</span> <span style="color: rgb(0, 128, 0);">||</span> fileName.<span style="color: rgb(0, 0, 255);">EndsWith</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(102, 102, 102);">&quot;.rar&quot;</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><br />			f <span style="color: rgb(0, 128, 0);">=</span> <span style="color: rgb(0, 128, 0);">new</span> BXFile<span style="color: rgb(0, 0, 0);">(</span>file, <span style="color: rgb(102, 102, 102);">&quot;files&quot;</span>, <span style="color: rgb(102, 102, 102);">&quot;iblock&quot;</span>, <span style="color: rgb(255, 0, 0);">string</span>.<span style="color: rgb(0, 0, 255);">Empty</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />		<span style="color: rgb(6, 0, 255);">else</span><br />			<span style="color: rgb(0, 128, 128); font-style: italic;">//сжимаем файл из текущего</span><br />			f <span style="color: rgb(0, 128, 0);">=</span> <span style="color: rgb(0, 128, 0);">new</span> BXFile<span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 128, 0);">new</span> BXZip.<span style="color: rgb(0, 0, 255);">ZipStream</span><span style="color: rgb(0, 0, 0);">(</span>file.<span style="color: rgb(0, 0, 255);">InputStream</span>, fileName, <span style="color: rgb(255, 0, 0);">ushort</span>.<span style="color: rgb(0, 0, 255);">MaxValue</span> <span style="color: rgb(0, 128, 0);">/</span> <span style="color: rgb(255, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">)</span>, fileName <span style="color: rgb(0, 128, 0);">+</span> <span style="color: rgb(102, 102, 102);">&quot;.zip&quot;</span>, <span style="color: rgb(102, 102, 102);">&quot;files&quot;</span>, <span style="color: rgb(102, 102, 102);">&quot;iblock&quot;</span>, <span style="color: rgb(102, 102, 102);">&quot;&quot;</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br /> <br />		<span style="color: rgb(6, 0, 255);">if</span> <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 128, 0);">!</span>BXSecureIO.<span style="color: rgb(0, 0, 255);">CheckUpload</span><span style="color: rgb(0, 0, 0);">(</span>f.<span style="color: rgb(0, 0, 255);">FileVirtualPath</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><br />		<span style="color: rgb(0, 0, 0);">{</span><br />			errors.<span style="color: rgb(0, 0, 255);">Add</span><span style="color: rgb(0, 0, 0);">(</span>HttpUtility.<span style="color: rgb(0, 0, 255);">HtmlEncode</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">string</span>.<span style="color: rgb(0, 0, 255);">Format</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(102, 102, 102);">&quot;Недостаточно прав для загрузки файла {0}&quot;</span>, fileName<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 128, 0);">;</span><br />			<span style="color: rgb(6, 0, 255);">return</span> null<span style="color: rgb(0, 128, 0);">;</span><br />		<span style="color: rgb(0, 0, 0);">}</span><br />	<span style="color: rgb(0, 0, 0);">}</span><br /> <br />	<span style="color: rgb(6, 0, 255);">return</span> f<span style="color: rgb(0, 128, 0);">;</span><br /><span style="color: rgb(0, 0, 0);">}</span><br /> </pre>
В этом методе сначала идет проверка по размеру файла, затем по расширение и пустоту названия файла. Если все хорошо, то мы сжимаем файл и регистрируем его в системе. 
<br />
 Так будет выглядеть наша форма после кастомизации. 
<br />
<center><img src="https://site-cloud-files.bitrix24.tech/blog/4b2/modified-webform.png" title="" alt="" border="0"style=" width:481px; height:526px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=2607" /></center><br /><a href="http://dev.1c-bitrix.ru/community/blogs/net/1952.php">Подробнее...</a>]]></description>
      <link>http://dev.1c-bitrix.ru/community/blogs/net/1952.php</link>
      <guid>http://dev.1c-bitrix.ru/community/blogs/net/1952.php</guid>
      <pubDate>Tue, 08 Jun 2010 18:22:36 +0400</pubDate>
    </item>

    <item>
      <title>1С-Битрикс: Управление Сайтом ASP.NET 5.0</title>
      <description><![CDATA[Всем привет! С момента последнего выпуска (в конце февраля мы выпустили версию 4.6) от нас не было никаких новостей. Но мы не сидели без дела, а сделали много нового функционала. Но обо всем по порядку.<br /><br /><b>1. Новый установщик продукта. Выбор установки готового решения сайта.</b><br /><br />Первое, что изменилось в новом релизе – это полностью новый мастер установки продукта, который предлагает установить на выбор одно из трех решений: персональный сайт, сайт компании и сайт сообщества. <br /><br /><img src="http://dev.1c-bitrix.ru/upload/blog/63b/1.PNG" title="" alt="выбор установки решения" border="0"style=" width:0px; height:0px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=2540" /><br /><br />Мастер больше не устанавливает безусловно демонстрационный сайт, как это было раньше. Теперь пользователь имеет возможность установить готовое решение или оставить продукт с минимальным набором данных для создания сайта с нуля (эта опция для продвинутых разработчиков).<br /><br /><b>2. Персональный сайт</b><br /><br />Выбрав это решение, вы получите готовый сайт для «домашней странички». Персональный блог и фотогалерея с множественной загрузкой – это то, что нужно личного сайта пользователя.<br /><br /><img src="https://site-cloud-files.bitrix24.tech/blog/4e4/2.png" title="" alt="персональный сайт" border="0"style=" width:700px; height:538px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=2541" /><br /><br />Решение идет с 4-мя разными шаблона и 5 цветовыми схемами для каждого шаблона.<br /><br /><b>3. Сайт компании</b><br /><br />Сайт компании представлен двумя примерами: сайтом банка и &nbsp;сайтом мебельной компании. Структура этих решений типичная для корпоративных сайтов: новости, вакансии, каталог продукции и услуг.<br /><br /><img src="https://site-cloud-files.bitrix24.tech/blog/38b/3.png" title="" alt="сайт мебельной компании" border="0"style=" width:700px; height:556px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=2542" /><br /><br /><img src="https://site-cloud-files.bitrix24.tech/blog/b40/4.png" title="" alt="сайт банка" border="0"style=" width:700px; height:536px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=2543" /><br /><br /><br /><b>4. Сайт сообщества</b><br /><br />Примером для этого сайта послужил сайт gotdotnet.ru. Многопользовательские блоги, форумы, персональные сообщения, рейтинги – все это представлено в этом решении.<br /><br /><img src="https://site-cloud-files.bitrix24.tech/blog/55e/5.png" title="" alt="сайт сообщества" border="0"style=" width:700px; height:536px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=2544" /><br /><br /><b>5. Персональные сообщения</b><br /><br />Обмен сообщениями между пользователями - одна из базовых функций всех сайтов сообществ и социальных сетей. И мы просто не могли не добавить подобный функционал в наш продукт. Новая система персональных сообщений позволяет:<br /><ul><li>нескольким участникам общаться в рамках одной темы.<br /><li>группировать переписки в папки<br /><li>устанавливать ограничения на количество писем в «почтовом ящике»<br /><li>получать уведомления на e-mail и на сайте<br /></ul><br /><img src="https://site-cloud-files.bitrix24.tech/blog/aec/6.png" title="" alt="персональные сообщения" border="0"style=" width:700px; height:536px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=2545" /><br /><br /><b>6. Рейтинги и голосования</b><br /><br />Теперь пользователь может оценить любой комментарий и запись в блоге<br /> <br /><img src="https://site-cloud-files.bitrix24.tech/blog/047/8.png" title="" alt="голосование в блогах" border="0"style=" width:700px; height:538px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=2547" /><br /><br />А также сообщение и тему форума<br /><br /><img src="https://site-cloud-files.bitrix24.tech/blog/197/7.png" title="" alt="голосование в форуме" border="0"style=" width:700px; height:538px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=2546" /><br /><br />Результаты голосований, а также активность пользователя на сайте можно аккумулировать в рейтинг пользователя<br /><br /><img src="https://site-cloud-files.bitrix24.tech/blog/061/10.png" title="" alt="настройки рейтинга пользователя" border="0"style=" width:700px; height:554px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=2549" /><br /><br /><b>7. Новые компоненты</b><br /><br /><ul><li>Google Maps – компонент в визуальном режиме позволяет настроить страницу с картой <br />проезда к офису.<br /><br /><img src="https://site-cloud-files.bitrix24.tech/blog/ae3/9.png" title="" alt="Google Maps" border="0"style=" width:700px; height:442px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=2548" /><br /><br /><li>Комплексный компонент однопользовательского блога<br /><li>Регистрация с подтверждением по E-mail<br /><li>Комментарии к элементам инфоблока<br /></ul><br />Качаем <noindex><a href="https://www.1c-bitrix.ru/products/net/demo.php" target="_blank" rel="nofollow" >пробные</a></noindex> и <noindex><a href="https://www.1c-bitrix.ru/support/customers/sources_net.php" target="_blank" rel="nofollow" >коммерческие</a></noindex> &nbsp; &nbsp; дистрибутивы.<br /><br /><br /><a href="http://dev.1c-bitrix.ru/community/blogs/net/1939.php">Подробнее...</a>]]></description>
      <link>http://dev.1c-bitrix.ru/community/blogs/net/1939.php</link>
      <guid>http://dev.1c-bitrix.ru/community/blogs/net/1939.php</guid>
      <pubDate>Thu, 03 Jun 2010 10:21:47 +0400</pubDate>
    </item>

    <item>
      <title>Модуль Рекламы</title>
      <description><![CDATA[Приятная новость для .NET-разработчиков - вышел новый модуль "Рекламы"! Прямо сейчас вы можете его скачать через систему обновлений. <br /><br />Данный модуль позволяет организовать &nbsp;на сайте эффективную баннерную сеть. Сперва необходимо определить в дизайне сайта рекламные области, а затем загрузить для них произвольное число баннеров. Баннеры могут быть графическими, Flash или представлять собой произвольный HTML (например, текстовый баннер в виде таблицы или HTML-код рекламы от Google Adsense).<br /><br /><img src="https://site-cloud-files.bitrix24.tech/blog/8f1/3.png" title="" alt="" border="0"style=" width:603px; height:424px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=1677" /><br /><br />Приоритетность показа баннера для конкретной рекламной области зависит от выбранного режима показа:<br /><br />- По весу. Чем больше вес, тем выше вероятность показа баннера.<br />- С равномерной скоростью. Заданное количество показов баннера будет равномерно распеределено по заданому периоду времени.<br /><br /><img src="https://site-cloud-files.bitrix24.tech/blog/9d3/1.png" title="" alt="" border="0"style=" width:700px; height:486px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=1675" /><br /><br />Кроме этого, для баннера доступны следующие виды таргетинга:<br /><br />1. По времени суток. Рекламные материалы будут показываться только в отведенные часы. Например, только с 9 до 19.00. <br />2. По дня неделям. Баннеры будут показываться только в определенные дни. Например, только в будние дни. <br />3. По разделам сайта. Можно указать, чтобы баннер показывался только в форуме.<br />4. По группам (ролям) пользователей сайта. Для анонимных будет показываться один баннер, а для зарегистрированных - другой.<br /><br /><img src="https://site-cloud-files.bitrix24.tech/blog/bad/2.png" title="" alt="" border="0"style=" width:654px; height:756px;" data-bx-image="http://dev.1c-bitrix.ru/bitrix/components/bitrix/blog/show_file.php?fid=1676" /><br /><br /><br /><a href="http://dev.1c-bitrix.ru/community/blogs/net/1137.php">Подробнее...</a>]]></description>
      <link>http://dev.1c-bitrix.ru/community/blogs/net/1137.php</link>
      <guid>http://dev.1c-bitrix.ru/community/blogs/net/1137.php</guid>
      <pubDate>Thu, 23 Jul 2009 23:44:49 +0400</pubDate>
    </item>

  </channel>
</rss>