<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:betag="https://blogengine.io/schemas/tags">
  <channel>
    <title>Richmedia.us</title>
    <description>Interactive Multimedia Oriented Resource</description>
    <link>http://richmedia.us/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 3.3.8.0</generator>
    <language>ru-RU</language>
    <blogChannel:blogRoll>http://richmedia.us/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.richmedia.us/syndication.axd</blogChannel:blink>
    <dc:creator>Richmedia.us</dc:creator>
    <dc:title>Richmedia.us</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <item>
      <title>Работа с форматом конфигураций 1С:Предприятие</title>
      <description>    &lt;style&gt;
        h2 {
            margin-bottom: 10px !important;
        }
    &lt;/style&gt;
    &lt;p&gt;Опубликован исходный код C# для работы с форматом конфигураций 1С:Предприятие. &lt;/p&gt;
    &lt;p&gt;&lt;a href="https://github.com/elisy/MdInternals"&gt;https://github.com/elisy/MdInternals&lt;/a&gt;&lt;/p&gt;
    &lt;p&gt;Elisy CfProject выгружает файлы в формате, совместимом с CF-файлами 1С:Предприятие, в удобочитаемые Xml и текстовые файлы и загружает обратно. Позволяет программно обращаться к внутренним файлам и свойствам конфигурации.&lt;/p&gt;
    &lt;p&gt;
        Проект состоит из частей:
        &lt;ul&gt;
            &lt;li&gt;MdInternals программно обращается к объектам и свойствам конфигурации&lt;/li&gt;
            &lt;li&gt;CfProject отвечает за сериализацию и десериализацию объектов MdInternals&lt;/li&gt;
            &lt;li&gt;MdInternals.Cil декомпилирует байт-код (OpCode) 1С&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/p&gt;
    &lt;h2&gt;Выгрузка файлов cf, cfu, epf, erf на диск&lt;/h2&gt;
    &lt;div style="background: #ffffff; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"&gt;
        &lt;pre style="margin: 0; line-height: 125%"&gt;&lt;span style="color: #2b91af"&gt;var&lt;/span&gt; cf = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; CfPackage();
&lt;span style="color: #008000"&gt;//или var cf = new EpfPackage();&lt;/span&gt;
&lt;span style="color: #008000"&gt;//или var cf = new ErfPackage();&lt;/span&gt;
&lt;span style="color: #008000"&gt;//или var cf = new CfuPackage();&lt;/span&gt;
cf.Open(&lt;span style="color: #a31515"&gt;@&amp;quot;D:\config.cf&amp;quot;&lt;/span&gt;);
&lt;span style="color: #2b91af"&gt;var&lt;/span&gt; project = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; CfProject();
project.Save(epf, &lt;span style="color: #a31515"&gt;@&amp;quot;D:\Config\Xml\Config.cfproj&amp;quot;&lt;/span&gt;, ProjectType.Xml);
&lt;/pre&gt;
    &lt;/div&gt;
    &lt;p&gt;Распознанные файлы записываются в дерево каталогов по видам объектов. Нераспознанные помещаются в каталог Unresolved:&lt;/p&gt;
    &lt;img style="width:624px;" src="http://www.richmedia.us/image.axd?picture=2019%2f1%2fimage2.png" /&gt;

    &lt;p&gt;Распознанные файлы выгружаются в XML-формате. Выгруженные файлы становятся совместимыми со сторонними программами. Формат позволяет контролировать логическую целостность файлов и обрабатывать файлы сторонними программами. Распознанные свойства перемещаются в соответствующие разделы (атрибуты или тэги) XML-структуры:&lt;/p&gt;

    &lt;img style="width:624px;" src="http://www.richmedia.us/image.axd?picture=2019%2f1%2fimage3.png" /&gt;

    &lt;h2&gt;Чтение из MSSQL-таблицы&lt;/h2&gt;

    &lt;div style="background: #ffffff; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"&gt;
        &lt;pre style="margin: 0; line-height: 125%"&gt;&lt;span style="color: #2b91af"&gt;var&lt;/span&gt; image = ImageReader.ReadImageFromConfig(&lt;span style="color: #a31515"&gt;@&amp;quot;data source=192.168.1.2\SQL2005;user=login;pwd=password;database=Database1C&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
    &lt;/div&gt;

    &lt;h2&gt;Обращение к внутренним файлам&lt;/h2&gt;
    &lt;div style="background: #ffffff; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"&gt;
        &lt;pre style="margin: 0; line-height: 125%"&gt;&lt;span style="color: #2b91af"&gt;var&lt;/span&gt; mp = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; EpfPackage();
mp.Open(file);
&lt;span style="color: #2b91af"&gt;var&lt;/span&gt; root = mp.MetadataObjects.Where(m =&amp;gt; m.ImageRow.FileName == &lt;span style="color: #a31515"&gt;&amp;quot;root&amp;quot;&lt;/span&gt;).FirstOrDefault();
&lt;span style="color: #2b91af"&gt;var&lt;/span&gt; rp = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; RootPointer(root.ImageRow);
&lt;span style="color: #2b91af"&gt;var&lt;/span&gt; part = mp.MetadataObjects.Where(m =&amp;gt; m.ImageRow.FileName == rp.MetadataPackageFileName.ToString()).FirstOrDefault();
&lt;/pre&gt;
    &lt;/div&gt;

    &lt;h2&gt;Создание файла из выгруженного xml-формата&lt;/h2&gt;

    &lt;div style="background: #ffffff; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"&gt;
        &lt;pre style="margin: 0; line-height: 125%"&gt;&lt;span style="color: #2b91af"&gt;var&lt;/span&gt; project = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; CfProject();
&lt;span style="color: #2b91af"&gt;var&lt;/span&gt; mp = project.Load(&lt;span style="color: #a31515"&gt;@&amp;quot;D:\Config\Xml\Config.cfproj&amp;quot;&lt;/span&gt;);
mp.Save(&lt;span style="color: #a31515"&gt;@&amp;quot;D:\config.cf&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
    &lt;/div&gt;

    &lt;h2&gt;Описание Cf-Формата&lt;/h2&gt;

    &lt;p&gt;Cf-файл состоит из заголовка образа (ImageHeader) и следующими за ним страницами (ImagePage1-ImagePageN). Заголовок образа состоит из 4х байт сигнатуры, которая равна 0xFF 0xFF 0xFF 0x7F, 4х байт размера страницы и 8 зарезервированных байт. После заголовка файла идут по порядку страницы с данными. Каждая предыдущая страница ссылается на последующую.&lt;/p&gt;

    &lt;img style="max-width:624px;" src="http://www.richmedia.us/image.axd?picture=2019%2f1%2fimage1.png" /&gt;

    &lt;p&gt;Каждая страница (ImagePage) состоит из заголовка страницы (ImagePageHeader), группы указателей на записи ImageRowPointers и области ImageRows.&lt;/p&gt;

    &lt;img style="max-width:624px;" src="http://www.richmedia.us/image.axd?picture=2019%2f1%2fimage4.png" /&gt;

    &lt;p&gt;Заголовок страницы ImagePageHeader содержит в себе: зарезервированные 2 байта 0x0D 0x0A, 27 байт текстовой информации и еще зарезервированные 2 байта 0x0D 0x0A. Текстовая информация содержит 3 шестнадцатеричных числа: общий размер данных всех страниц (FullSize), размер текущей страницы (PageSize) и адрес следующей страницы в файле (NextPageAddress). FullSize проставляется только для первой страницы цепочки страниц. Для остальных страниц цепочки это значение 0. Для последней страницы цепочки NextPageAddress принимается равным 0xFF 0xFF 0xFF 0x7F.&lt;/p&gt;
    &lt;p&gt;Блок указателей ImageRowPointers занимает размер, указанный в значении PageSize страницы. Каждый указатель состоит из 4х байт адреса заголовка HeaderAddress и 4х байт адреса тела BodyAddress. В конце каждого указателя помещается сигнатура 0xFF 0xFF 0xFF 0x7F. Адреса указывают на расположения внутри текущей страницы на область ImageRows.&lt;/p&gt;
    &lt;p&gt;Заголовок ImageRowHeader начинается с блока заголовка страницы ImagePageHeader, который сообщает, сколько байт отведено под заголовок. Далее идут 20 зарезервированных байт, UTF-16 строка идентификатора данных (Id) и 4 зарезервированных байт.&lt;/p&gt;
    &lt;p&gt;Тело ImageRowBody начинается с блока заголовка страницы ImagePageHeader, который сообщает, сколько байт отведено под тело данных. Если тело данных начинается на 0xEF 0xBB 0xBF (сигнатура UTF8), то тело содержит UTF-8 строку. Иначе тело данных содержит упакованные данные. Если распакованные данные начинаются на 0xFF 0xFF 0xFF 0x7F, то содержимое – последовательность объектов, и они записаны в CF-формате. Иначе содержимое – это строка сериализации.&lt;/p&gt;

    &lt;h2&gt;Что не реализовано&lt;/h2&gt;
    &lt;ul&gt;
        &lt;li&gt;Утилита распознает только объекты конфигурации 1го уровня, помещая по подкаталогам. Не распознает остальное: формы, макеты, помещая в каталог Unresolved&lt;/li&gt;
        &lt;li&gt;В каталоге Unresolved не распаковываются составные объекты с расширением img&lt;/li&gt;
        &lt;li&gt;MdInternals распознает ограниченное числа свойств объектов&lt;/li&gt;
    &lt;/ul&gt;
</description>
      <link>http://richmedia.us/post/2019/01/02/mdinternals-source-code</link>
      <comments>http://richmedia.us/post/2019/01/02/mdinternals-source-code#comment</comments>
      <guid>http://richmedia.us/post.aspx?id=5a36d0bc-484e-4a98-8b03-059eb90a58d9</guid>
      <pubDate>Wed, 2 Jan 2019 08:20:00 +0600</pubDate>
      <category>1С:Предприятие</category>
      <category>C#</category>
      <dc:publisher>Elisy</dc:publisher>
      <pingback:server>http://richmedia.us/pingback.axd</pingback:server>
      <pingback:target>http://richmedia.us/post.aspx?id=5a36d0bc-484e-4a98-8b03-059eb90a58d9</pingback:target>
      <slash:comments>11</slash:comments>
      <trackback:ping>http://richmedia.us/trackback.axd?id=5a36d0bc-484e-4a98-8b03-059eb90a58d9</trackback:ping>
      <wfw:comment>http://richmedia.us/post/2019/01/02/mdinternals-source-code#comment</wfw:comment>
      <wfw:commentRss>http://richmedia.us/syndication.axd?post=5a36d0bc-484e-4a98-8b03-059eb90a58d9</wfw:commentRss>
    </item>
    <item>
      <title>Обработка быстрой пометки на удаление прямым доступом к MSSQL</title>
      <description>&lt;p&gt;Обработка полезна при обрезке баз с большим числом документов. Обработка работает быстрее в 80-100 раз по сравнению с типовой групповой обработкой справочников и документов. Требует .Net framework 4 и Elisy .Net Bridge. Разработана на основе обработки &lt;a href="http://www.linq-demo.1csoftware.com/"&gt;LinqTo1C&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Тестировалась в режиме совместимости 8.2.16.&lt;/p&gt;
&lt;p&gt;Достоинства&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Работает отбор по периоду&lt;/li&gt;
&lt;li&gt;Работает отбор по видам документов&lt;/li&gt;
&lt;li&gt;Помечает документы на удаление&lt;/li&gt;
&lt;li&gt;Удаляет движения в регистрах накопления, сведений, бухгалтерии&lt;/li&gt;
&lt;li&gt;Помечает документы в журналах документов&lt;/li&gt;
&lt;li&gt;Код открыт&lt;/li&gt;
&lt;li&gt;Работает в транзакции&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Недостатки:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Игнорирует документы, где запрещено проведение, например, корректировка записей регистров.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Результат не отражается в планах обмена. Решается одновременным запуском в связанных базах.&lt;/li&gt;
&lt;li&gt;Не затрагивает таблицы итогов. Решается пересчетом итогов через Конфигуратор- -Тестирование и Исправление.&lt;/li&gt;
&lt;li&gt;Поставляется &amp;laquo;Как есть&amp;raquo; без каких-либо гарантий и с вероятными негативными эффектами.&lt;/li&gt;
&lt;li&gt;Требует сторонний компонент Elisy .Net Bridge 4.0.6 и .Net framework 4. Работоспособна на ознакомительной версии .Net bridge.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="http://richmedia.us/file.axd?file=2015%2f8%2f%d0%9f%d0%be%d0%bc%d0%b5%d1%82%d0%ba%d0%b0%d0%a3%d0%b4%d0%b0%d0%bb%d0%b5%d0%bd%d0%b8%d1%8f%d0%9f%d1%80%d1%8f%d0%bc%d1%8b%d0%bc%d0%97%d0%b0%d0%bf%d1%80%d0%be%d1%81%d0%be%d0%bc.epf"&gt;ПометкаУдаленияПрямымЗапросом.epf (13,77 kb)&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://richmedia.us/post/2015/08/11/direct-document-removing-1c</link>
      <comments>http://richmedia.us/post/2015/08/11/direct-document-removing-1c#comment</comments>
      <guid>http://richmedia.us/post.aspx?id=9e318ddb-1f00-49bc-8933-9b3984f00f8a</guid>
      <pubDate>Tue, 11 Aug 2015 05:38:00 +0600</pubDate>
      <category>1C.Net</category>
      <category>1С:Предприятие</category>
      <dc:publisher>Elisy</dc:publisher>
      <pingback:server>http://richmedia.us/pingback.axd</pingback:server>
      <pingback:target>http://richmedia.us/post.aspx?id=9e318ddb-1f00-49bc-8933-9b3984f00f8a</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://richmedia.us/trackback.axd?id=9e318ddb-1f00-49bc-8933-9b3984f00f8a</trackback:ping>
      <wfw:comment>http://richmedia.us/post/2015/08/11/direct-document-removing-1c#comment</wfw:comment>
      <wfw:commentRss>http://richmedia.us/syndication.axd?post=9e318ddb-1f00-49bc-8933-9b3984f00f8a</wfw:commentRss>
    </item>
    <item>
      <title>Продукт "Сбор цен конкурентов 2.0" на основе Elisy .Net Bridge</title>
      <description>&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px;"&gt;Команда Одинэскин выпустила программный продукт "&lt;strong style="font-size: 17.1359996795654px;"&gt;&lt;span style="color: #ff0000;"&gt;&lt;span style="font-size: 17px;"&gt;Одинескин: Парсинг сайтов -&amp;nbsp;сбор цен конкурентов 2.0&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;" на основе Elisy .Net Bridge&lt;/p&gt;
&lt;p&gt;&lt;iframe src="https://www.youtube.com/embed/AqN3e-0zEfg" frameborder="0" width="420" height="315"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px;"&gt;&lt;span style="color: #666666; font-family: Lato, sans-serif;"&gt;&lt;span style="font-size: 14px; line-height: 25px;"&gt;&lt;a href="http://www.odineskin.ru/index.php/razrabotki/parsing-sajtov-sbor-dannykh"&gt;http://www.odineskin.ru/index.php/razrabotki/parsing-sajtov-sbor-dannykh&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px;"&gt;Программный продукт&amp;nbsp;&lt;small style="font-size: 11.8999996185303px;"&gt;&lt;big&gt;&lt;big&gt;&lt;span style="font-size: 12px;"&gt;&lt;strong&gt;&amp;laquo;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;&lt;span style="font-size: 17px;"&gt;Одинескин: Парсинг сайтов -&amp;nbsp;сбор цен конкурентов 2.0&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12px;"&gt;&lt;strong&gt;&amp;raquo;&lt;/strong&gt;&lt;/span&gt;&lt;/big&gt;&lt;/big&gt;&lt;span style="color: #ff0000;"&gt;&lt;span style="font-size: 12px;"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/small&gt;представляет собой подсистему для типовых конфигураций фирмы 1С таких как:&lt;/p&gt;
&lt;ul style="padding: 0px; margin: 0px 0px 10px 25px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify;"&gt;
&lt;li style="line-height: 20px; padding-left: 15px;"&gt;&lt;span style="font-weight: bold;"&gt;Бухгалтерия предприятия&lt;/span&gt;&amp;nbsp;(версии 1.6 и 2.0);&lt;/li&gt;
&lt;li style="line-height: 20px; padding-left: 15px;"&gt;&lt;span style="font-weight: bold;"&gt;Управление торговлей&lt;/span&gt;&amp;nbsp;(версии 10.2, 10.3, 11);&lt;/li&gt;
&lt;li style="line-height: 20px; padding-left: 15px;"&gt;&lt;span style="font-weight: bold;"&gt;Управление производственным предприятием&lt;/span&gt;&amp;nbsp;(версии 1.1, 1.2,1.3);&lt;/li&gt;
&lt;li style="line-height: 20px; padding-left: 15px;"&gt;&lt;span style="font-weight: bold;"&gt;Комплексная автоматизация&lt;/span&gt;&amp;nbsp;(1.0,1.1);&lt;/li&gt;
&lt;li style="line-height: 20px; padding-left: 15px;"&gt;&lt;strong&gt;УТП 1.2 для Украины&lt;/strong&gt;&lt;/li&gt;
&lt;li style="line-height: 20px; padding-left: 15px;"&gt;&lt;strong&gt;Розница 1, 2&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify;"&gt;Кто владеет информацией - тот владеет всем! Больше не нужны обзвоны/обходы конкурентов, с целью узнать цену на продукцию. Внедрив данную настройку у вас всегда под рукой будут цены конкурентов онлайн.&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; padding-left: 30px;"&gt;&lt;strong&gt;Назначение программы&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333339691162px; line-height: 19.5px;"&gt;- Периодический мониторинг цен и ассортимента конкурентов с целью расчета собственных цен&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333339691162px; line-height: 19.5px;"&gt;- Анализ ассортимента конкурентов&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333339691162px; line-height: 19.5px;"&gt;- Получение сравнительной отчётности по ценам и ассортименту между собственной номенклатурой и номенклатурой конкурентов&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify; padding-left: 30px;"&gt;&lt;strong&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333339691162px; line-height: 19.5px;"&gt;Стратегия использования программы&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333339691162px; line-height: 19.5px;"&gt;1-ый этап. Настройка на считывание нужных сайтов конкурентов. (&lt;span style="font-size: 13.3333339691162px;"&gt;Данная процедура выполняется один раз&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333339691162px; line-height: 19.5px;"&gt;2-ой этап. Сопоставление собственной номенклатуры и номенклатуры конкурентов (Данная процедура выполняется один раз)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify;"&gt;&amp;nbsp;3-ий этап. Периодический мониторинг цен и ассортимента конкурентов.&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify; padding-left: 30px;"&gt;&lt;strong&gt;Основные характеристики продукта:&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify;"&gt;- 90% типовых интернет - магазинов считываются без проблем. Настройка на парсинг одного сайта занимает от 15 минут&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify;"&gt;- Универсальность решения. Подходит для любой предметной области.&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify;"&gt;- Возможность анализа только товара, который есть "в наличии".&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify;"&gt;- Считывание изображений&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify;"&gt;- Помощник автоматической синхронизации. Помощник помогает значительно ускорить поиск соответствий, с помощью : поиска по вхождениям в наименование, процентному вхождению в наименование, поиск по различным комбинациям полей, поиск производителей/количества в наименовании и тд &amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify;"&gt;- Рабочее место оператора для ручной синхронизации. В том числе сравнение по картинкам, поиск по заданным словам, поиск только по отдельным характеристикам&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify;"&gt;- Обход защиты сайтов включает в себя настройку таймаута запросов к сайту, маскировка под поисковую систему&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify;"&gt;- Возможность использования куки при парсинге&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify;"&gt;-функция "докачки"&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify;"&gt;&amp;nbsp;&lt;strong&gt;Техническая поддержка&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px;"&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13.3333339691162px; line-height: 19.5px;"&gt;Программа постоянно совершенствуется. Все изменения направлены на улучшения работы программы, удобства ее использования и дополнение новых функций по требованию покупателей.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; box-sizing: border-box; font-size: 13.3333339691162px; line-height: 19.5px;" align="justify"&gt;После покупки Вы получаете техническую поддержку и бесплатные обновления в течение 2 месяцев, далее на условиях продления.&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify;"&gt;&amp;nbsp;Процесс встраивания данной подсистемы&amp;nbsp;в конфигурацию не требует специализированных знаний в области программирования. Весь процесс описан в технической документации по шагам. При этом ваша конфигурация останется на поддержке и вы сможете без проблем в дальнейшем обновлять её.&lt;/p&gt;
&lt;p style="margin: 0px 0px 10px; color: #666666; font-family: Lato, sans-serif; font-size: 14px; line-height: 25px; text-align: justify;"&gt;&lt;a style="text-align: start;" href="http://www.odineskin.ru/index.php/razrabotki/parsing-sajtov-sbor-dannykh"&gt;http://www.odineskin.ru/index.php/razrabotki/parsing-sajtov-sbor-dannykh&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://richmedia.us/post/2015/03/11/odineskin-parser</link>
      <comments>http://richmedia.us/post/2015/03/11/odineskin-parser#comment</comments>
      <guid>http://richmedia.us/post.aspx?id=f4e7591f-9c34-4788-9730-e29f8c5e9508</guid>
      <pubDate>Wed, 11 Mar 2015 07:45:00 +0600</pubDate>
      <category>1C.Net</category>
      <category>1С:Предприятие</category>
      <dc:publisher>Elisy</dc:publisher>
      <pingback:server>http://richmedia.us/pingback.axd</pingback:server>
      <pingback:target>http://richmedia.us/post.aspx?id=f4e7591f-9c34-4788-9730-e29f8c5e9508</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://richmedia.us/trackback.axd?id=f4e7591f-9c34-4788-9730-e29f8c5e9508</trackback:ping>
      <wfw:comment>http://richmedia.us/post/2015/03/11/odineskin-parser#comment</wfw:comment>
      <wfw:commentRss>http://richmedia.us/syndication.axd?post=f4e7591f-9c34-4788-9730-e29f8c5e9508</wfw:commentRss>
    </item>
    <item>
      <title>XmlProject – интеллектуальная обработка XML-выгрузки 1С:Предприятие 8.3</title>
      <description>&lt;p style="margin-top: 0px; margin-bottom: 5px; text-align: justify; color: #333333; font-family: 'Times New Roman'; font-size: medium;"&gt;Утилита Elisy XmlProject подготавливает xml-выгрузку 1С к публикации в системах версионирования, отличных от хранилища конфигурации 1С. Для ускорения работы применена многопоточность. Требует для работы установленный .Net Framework и Elisy .Net Bridge.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-bottom: 5px; text-align: justify; color: #333333; font-family: 'Times New Roman'; font-size: medium;"&gt;Пример публикации конфигурации на основе старых обновлений БСП четырехлетней давности (с 1.0.7.5 по 1.1.3.1) можно посмотреть по адресу&lt;a style="text-decoration: none;" href="https://github.com/elisy/ssl"&gt;https://github.com/elisy/ssl&lt;/a&gt;. Таким же образом можно делать публикацию в других системах версионирования: SVN, Mercurial.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-bottom: 5px; text-align: justify; color: #333333; font-family: 'Times New Roman'; font-size: medium;"&gt;Для запуска необходимо выбрать файл выгрузки Configuration.xml и указать файл проекта в новом каталоге, куда будут скопированы файлы, например Configuration.xmlproj.&lt;/p&gt;
&lt;p style="margin-top: 0px; margin-bottom: 5px; text-align: justify; color: #333333; font-family: 'Times New Roman'; font-size: medium;"&gt;Технология более подробно описана здесь:&lt;a style="text-decoration: none;" href="http://www.richmedia.us/post/2015/02/23/1c-83-xml-github.aspx"&gt;http://www.richmedia.us/post/2015/02/23/1c-83-xml-github.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://richmedia.us/file.axd?file=2015%2f3%2fElisy.XmlProject.epf"&gt;Elisy.XmlProject.epf (14,93 kb)&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://richmedia.us/post/2015/03/10/xmlproject-download</link>
      <comments>http://richmedia.us/post/2015/03/10/xmlproject-download#comment</comments>
      <guid>http://richmedia.us/post.aspx?id=dbed8809-e1d3-4286-81e2-d71dee32057c</guid>
      <pubDate>Tue, 10 Mar 2015 03:17:00 +0600</pubDate>
      <category>1C.Net</category>
      <category>1С:Предприятие</category>
      <dc:publisher>Elisy</dc:publisher>
      <pingback:server>http://richmedia.us/pingback.axd</pingback:server>
      <pingback:target>http://richmedia.us/post.aspx?id=dbed8809-e1d3-4286-81e2-d71dee32057c</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://richmedia.us/trackback.axd?id=dbed8809-e1d3-4286-81e2-d71dee32057c</trackback:ping>
      <wfw:comment>http://richmedia.us/post/2015/03/10/xmlproject-download#comment</wfw:comment>
      <wfw:commentRss>http://richmedia.us/syndication.axd?post=dbed8809-e1d3-4286-81e2-d71dee32057c</wfw:commentRss>
    </item>
    <item>
      <title>Публикация конфигурации 1С на GitHub</title>
      <description>    &lt;h1&gt;Публикация конфигурации 1С на GitHub&lt;/h1&gt;
    &lt;p&gt;Статья показывает, как можно подготовить конфигурацию 1С к публикации в системах версионирования, отличных от хранилища конфигурации 1C. В операции задействован .Net framework и C#, позволяющий аккуратно распределить проект 1С по папкам.&lt;/p&gt;
    &lt;p&gt;Пример публикации конфигурации на основе старых обновлений БСП четырехлетней давности (с 1.0.7.5 по 1.1.3.1) можно посмотреть по адресу &lt;a href="https://github.com/elisy/ssl"&gt;https://github.com/elisy/ssl&lt;/a&gt; . Таким же образом теоретически можно публиковать конфигурации в другие системы версионирования.&lt;/p&gt;
    &lt;h2&gt;Этап 1: выгрузка конфигурации 1С 8.3 в файлы XML&lt;/h2&gt;
    &lt;p&gt;Начиная с версии 8.3, 1С может выгружать конфигурацию в виде XML-файлов.&lt;/p&gt;
    &lt;p&gt;Делается это через Конфигурация – Выгрузить конфигурацию в файлы… Нужно указать каталог и нажать ОК. Конфигурация будет выгружена в набор файлов xml, txt, html. &lt;/p&gt;
    &lt;p&gt;Через командную строку выгрузить файлы можно с параметром /DumpConfigToFiles &lt;i&gt;каталог выгрузки&lt;/i&gt;, где &lt;i&gt;каталог выгрузки&lt;/i&gt; — каталог, в который будет выгружена конфигурация.&lt;/p&gt;
    &lt;p&gt;На этом можно было бы закончить подготовку конфигурации к публикации, но возникает одна проблема. Все файлы конфигурации будут находиться в одном каталоге. Например, для УТ 11.0.7 файлов будет около 10000 (десяти тысяч) размером примерно 430 Мбайт. Удобней было бы иметь эти файлы разложенными по каталогам, где каждая папка отвечает за файлы одного типа.&lt;/p&gt;
    &lt;p&gt;Разложить файлы по каталогам поможет специально написанная программа. В данном случае на C#.&lt;/p&gt;
    &lt;h2&gt;Этап 2: распределение файлов XML по папкам&lt;/h2&gt;
    &lt;p&gt;Суть помещения файлов по каталогам сводится к следующему: на основании имени файла, разложенного с разделителем «точка», получается его полный путь с тем же расширением. Так первое слово до точки определяет каталог типа объекта, следующее слово определяет каталог названия объекта внутри типа. И так далее – каждое слово за точкой – новый каталог.&lt;/p&gt;
    &lt;p&gt;Есть исключения: формы, макеты и помощь. К ним дополнительно в каталог переносится xml с определением формы/макета или помощи из родительского каталога. Подсистемы отличаются тем, что внутри подсистем есть определения подчиненных подсистем. Файлы, начинающиеся на «Configuration.» помещаются в корень.&lt;/p&gt;
    &lt;p&gt;Код по получению относительного пути будет следующим:&lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;private string GetRelativePath(string id)
{
    var nameParts = Path.GetFileNameWithoutExtension(id).Split(&amp;#39;.&amp;#39;);
    string newPath = id;
    if (String.Compare(nameParts[0], &amp;quot;Configuration&amp;quot;, true) == 0)
        //Configuration.ManagedApplicationModule.txt
        newPath = id;
    else if (nameParts.Length == 2)
        //AccumulationRegister.ВыручкаИСебестоимостьПродаж.xml
        newPath = Path.Combine(nameParts[0], nameParts[1], nameParts[1] + Path.GetExtension(id));
    else if (nameParts.Length == 4 &amp;amp;&amp;amp; String.Compare(nameParts[0], &amp;quot;CommonPicture&amp;quot;, true) == 0 &amp;amp;&amp;amp; String.Compare(nameParts[2], &amp;quot;Picture&amp;quot;, true) == 0 &amp;amp;&amp;amp; String.Compare(nameParts[3], &amp;quot;Picture&amp;quot;, true) == 0)
    {
        //CommonPicture.BCGВопросы.Picture.Picture.png
        newPath = Path.Combine(nameParts[0], nameParts[1], nameParts[3] + Path.GetExtension(id));
    }
    else if (nameParts.Length == 4 &amp;amp;&amp;amp; String.Compare(nameParts[0], &amp;quot;CommonForm&amp;quot;, true) == 0 &amp;amp;&amp;amp; String.Compare(nameParts[2], &amp;quot;form&amp;quot;, true) == 0 &amp;amp;&amp;amp; String.Compare(nameParts[3], &amp;quot;module&amp;quot;, true) == 0)
    {
        //CommonForm.АвтоматическийОбменСПодключаемымОборудованиемOffline.Form.Module.txt
        newPath = Path.Combine(nameParts[0], nameParts[1], nameParts[3] + Path.GetExtension(id));
    }
    else if (nameParts.Length == 4 &amp;amp;&amp;amp; String.Compare(nameParts[2], &amp;quot;form&amp;quot;, true) == 0)
    {
        //AccumulationRegister.ДенежныеСредстваБезналичные.Form.ФормаСписка.xml
        newPath = Path.Combine(nameParts[0], nameParts[1], nameParts[2], nameParts[3], nameParts[3] + Path.GetExtension(id));
    }
    else if (nameParts.Length == 6 &amp;amp;&amp;amp; String.Compare(nameParts[4], &amp;quot;form&amp;quot;, true) == 0 &amp;amp;&amp;amp; String.Compare(nameParts[5], &amp;quot;module&amp;quot;, true) == 0)
    {
        //Catalog.АвансовыйОтчетПрисоединенныеФайлы.Form.ФормаСписка.Form.Module.txt
        newPath = Path.Combine(nameParts[0], nameParts[1], nameParts[2], nameParts[3], nameParts[5] + Path.GetExtension(id));
    }
    else if (nameParts.Length == 4 &amp;amp;&amp;amp; String.Compare(nameParts[2], &amp;quot;template&amp;quot;, true) == 0)
    {
        //Catalog.Банки.Template.КлассификаторБанков.xml
        newPath = Path.Combine(nameParts[0], nameParts[1], nameParts[2], nameParts[3], nameParts[3] + Path.GetExtension(id));
    }
    else if (String.Compare(nameParts[nameParts.Length - 1], &amp;quot;help&amp;quot;, true) == 0)
    {
        //AccumulationRegister.ТоварыПереданныеНаКомиссию.Help.xml
        //SettingsStorage.ХранилищеВариантовОтчетов.Form.ФормаЗагрузки.Help.xml
        //Subsystem.Маркетинг.Subsystem.МаркетинговыеМероприятия.Help.xml
        List&amp;lt;string&amp;gt; pathParts = new List&amp;lt;string&amp;gt;();
        pathParts.AddRange(nameParts.Take(nameParts.Length));
        pathParts.Add(nameParts[nameParts.Length - 1] + Path.GetExtension(id));
        newPath = Path.Combine(pathParts.ToArray());
    }
    else if (nameParts.Length &amp;gt; 3 &amp;amp;&amp;amp; String.Compare(nameParts[nameParts.Length - 2], &amp;quot;Subsystem&amp;quot;, true) == 0)
    {
        //Subsystem.Маркетинг.Subsystem.МаркетинговыеМероприятия.xml
        List&amp;lt;string&amp;gt; pathParts = new List&amp;lt;string&amp;gt;();
        pathParts.AddRange(nameParts.Take(nameParts.Length));
        pathParts.Add(nameParts[nameParts.Length - 1] + Path.GetExtension(id));
        newPath = Path.Combine(pathParts.ToArray());
    }
    else if (nameParts.Length &amp;gt; 2)
    {
        List&amp;lt;string&amp;gt; pathParts = new List&amp;lt;string&amp;gt;();
        pathParts.AddRange(nameParts.Take(nameParts.Length - 1));
        pathParts.Add(nameParts[nameParts.Length - 1] + Path.GetExtension(id));
        newPath = Path.Combine(pathParts.ToArray());
    }
    return newPath;
}
        &lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;Копирование файла сопровождается проверкой на наличие каталога, куда он копируется (если каталога нет - создается) и проверкой наличия конечного файла (если файл есть – перед копированием удаляется).&lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;string fullPath = Path.Combine(destinationDirectory, file.Path);
if (File.Exists(fullPath))
    File.Delete(fullPath);
string fullPathDirectory = Path.GetDirectoryName(fullPath);
if (!Directory.Exists(fullPathDirectory))
    Directory.CreateDirectory(fullPathDirectory);
File.Copy(Path.Combine(sourceDirectory, file.Id), fullPath);
&lt;/code&gt;&lt;/pre&gt;
    &lt;h2&gt;Этап 3: публикация на GitHub&lt;/h2&gt;
    &lt;p&gt;После регистрации на GitHub нужно создать репозитарий. В данном случае репозитарий называется ssl.&lt;/p&gt;
    &lt;p&gt;Для синхронизации локального каталога с сайтом GitHub нужно скачать Windows-клиент с веб-сайта github.com. После установки приложения запускается файл GitHub.exe.&lt;/p&gt;
    &lt;p&gt;Через настройки (плюс сверху слева приложения) локальный каталог необходимо связать с репозитарием. После этого запущенный клиент GitHub.exe начнет отслеживать изменения каталога автоматически. Выдаст добавленные или измененные файлы.&lt;/p&gt;
    &lt;p&gt;Отсылка изменений на сервер или получение измененных файлов выполняется через команду Sync – кнопка справа сверху приложения.&lt;/p&gt;
    &lt;h2&gt;Выводы&lt;/h2&gt;
    &lt;p&gt;В истории были примеры публикации конфигураций, выгруженных из cf-файлов. Но представление файлов во внутреннем формате 1С не обладает наглядностью. Более привлекательным представляется формат XML, выгрузка в котором появилась только в 1С 8.3.&lt;/p&gt;
    &lt;p&gt;Опыт публикации конфигурации на GitHub добавил в арсенал средств 1С еще один мощный инструмент. Преимущества GitHub по сравнению с хранилищем конфигураций 1С очевидны: ветвления, встроенный багтрэккер, возможность ревизии и обсуждения кода, исправление кода в браузере, отчеты и графики, открытый API.&lt;/p&gt;
    &lt;p&gt;Не смотря на кажущуюся привлекательность, только практика работы сможет доказать жизнеспособность методики. Хранилище 1С, не смотря на критику, худо-бедно работает годами. Какие сложности скрывает переход на другие системы версионирования можно только догадываться. Возможно, в версиях может быть неудобно отслеживать изменения XML файлов из-за специфики этого формата (&lt;a href="https://github.com/elisy/ssl/blob/master/CommonTemplate/%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0%D0%9F%D0%BE%D0%B4%D1%87%D0%B8%D0%BD%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8/Template.xml"&gt;см. макет&lt;/a&gt;).&lt;/p&gt;</description>
      <link>http://richmedia.us/post/2015/02/23/1c-83-xml-github</link>
      <comments>http://richmedia.us/post/2015/02/23/1c-83-xml-github#comment</comments>
      <guid>http://richmedia.us/post.aspx?id=e2933054-41cb-4b1f-90e9-54435775cfd6</guid>
      <pubDate>Mon, 23 Feb 2015 09:21:00 +0600</pubDate>
      <category>1C.Net</category>
      <category>1С:Предприятие</category>
      <category>C#</category>
      <dc:publisher>Elisy</dc:publisher>
      <pingback:server>http://richmedia.us/pingback.axd</pingback:server>
      <pingback:target>http://richmedia.us/post.aspx?id=e2933054-41cb-4b1f-90e9-54435775cfd6</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://richmedia.us/trackback.axd?id=e2933054-41cb-4b1f-90e9-54435775cfd6</trackback:ping>
      <wfw:comment>http://richmedia.us/post/2015/02/23/1c-83-xml-github#comment</wfw:comment>
      <wfw:commentRss>http://richmedia.us/syndication.axd?post=e2933054-41cb-4b1f-90e9-54435775cfd6</wfw:commentRss>
    </item>
    <item>
      <title>Visual Studio + Roslyn = конфигуратор для 1С:Предприятие</title>
      <description>    &lt;h1&gt;Visual Studio + Roslyn = конфигуратор для 1С:Предприятие&lt;/h1&gt;
    &lt;p&gt;Roslyn позволяет C# проект преобразовать в открытый XML-формат конфигурации 1С:Предприятие. C#-проект при поддержке Visual Studio автоматически снабжается Intellisense, интерактивной проверкой синтаксиса и типов, рефакторингом, расширенным поиском по проекту, поддержкой XmlDoc. Настраиваемое расположение документов проекта на диске и более выразительный и экономный  формат делает C#-проект на Visual Studio лучшим выбором в системах версионирования.&lt;/p&gt;
    &lt;p&gt;Понятно, что от чистой теории до реализации всех особенностей 1С очень далеко. Приведенный в статье пример обладает следующими ограничениями. В примере реализована поддержка нескольких типов объектов и нескольких часто встречающихся свойств. Атрибуты объектов могут быть одного типа, хотя 1С допускает составной тип. Трансляция кода в код 1С не поддерживается. Реализованы англоязычные наименования.&lt;/p&gt;
    &lt;h2&gt;XML-выгрузка конфигурации 1С&lt;/h2&gt;
    &lt;p&gt;Начиная с версии 8.3 1С научилась выгружать/загружать конфигурацию в/из открытый формат XML. Делает она это в своей самобытной манере. Выгрузка, например, УТ 11.0.7 займет примерно 6 минут. При этом все файлы конфигурации будут свалены в единый каталог. Файлов будет около 10K (десяти тысяч) размером примерно 430 Мбайт. Такая выгрузка считается огромным достижением в области открытости, потому что ранее конфигурация запаковывалась в закрытый cf-формат, распознать который можно было только специализированными средствами: через .Net-совместимый cfProject или v8unpack.&lt;/p&gt;
    &lt;p&gt;Так выглядит один из файлов XML Language.Русский.xml&lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;MetaDataObject xmlns=&amp;quot;http://v8.1c.ru/8.3/MDClasses&amp;quot; xmlns:app=&amp;quot;http://v8.1c.ru/8.2/managed-application/core&amp;quot; xmlns:cfg=&amp;quot;http://v8.1c.ru/8.1/data/enterprise/current-config&amp;quot; xmlns:cmi=&amp;quot;http://v8.1c.ru/8.2/managed-application/cmi&amp;quot; xmlns:ent=&amp;quot;http://v8.1c.ru/8.1/data/enterprise&amp;quot; xmlns:lf=&amp;quot;http://v8.1c.ru/8.2/managed-application/logform&amp;quot; xmlns:style=&amp;quot;http://v8.1c.ru/8.1/data/ui/style&amp;quot; xmlns:sys=&amp;quot;http://v8.1c.ru/8.1/data/ui/fonts/system&amp;quot; xmlns:v8=&amp;quot;http://v8.1c.ru/8.1/data/core&amp;quot; xmlns:v8ui=&amp;quot;http://v8.1c.ru/8.1/data/ui&amp;quot; xmlns:web=&amp;quot;http://v8.1c.ru/8.1/data/ui/colors/web&amp;quot; xmlns:win=&amp;quot;http://v8.1c.ru/8.1/data/ui/colors/windows&amp;quot; xmlns:xen=&amp;quot;http://v8.1c.ru/8.3/xcf/enums&amp;quot; xmlns:xpr=&amp;quot;http://v8.1c.ru/8.3/xcf/predef&amp;quot; xmlns:xr=&amp;quot;http://v8.1c.ru/8.3/xcf/readable&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;
	&amp;lt;Language uuid=&amp;quot;7a630662-cf14-44d7-a01c-08006bb5bffa&amp;quot;&amp;gt;
		&amp;lt;Properties&amp;gt;
			&amp;lt;Name&amp;gt;Русский&amp;lt;/Name&amp;gt;
			&amp;lt;Synonym/&amp;gt;
			&amp;lt;Comment/&amp;gt;
			&amp;lt;LanguageCode&amp;gt;ru&amp;lt;/LanguageCode&amp;gt;
		&amp;lt;/Properties&amp;gt;
	&amp;lt;/Language&amp;gt;
&amp;lt;/MetaDataObject&amp;gt;&lt;/code&gt;&lt;/pre&gt;

    &lt;h2&gt;Замена XML-конструкций на определения C#&lt;/h2&gt;
    &lt;p&gt;В проекте C# за каждый объект 1С отвечает класс. Если это справочник, то класс наследуется от класса Catalog, перечисление наследуется от класса Enum. Свойства объектов и атрибутов обозначаются через C#-атрибуты.&lt;/p&gt;
    &lt;p&gt;В результате XML-определение язык Русский примет такой вид Русский.cs&lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;
using System;
using Elisy.Configuration.DataAnnotations;
using Elisy.Configuration;
namespace Test.Languages
{
    [Uuid("7a630662-cf14-44d7-a01c-08006bb5bffa")]
    [LanguageCode("ru")]
    public class Русский : Language
    {
    }
}&lt;/code&gt;&lt;/pre&gt;

    &lt;p&gt;Ссылки на объекты определяются через типы вида CatalogRef&lt;&gt;. Например, так&lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;
[Uuid("e140b824-c8f9-4155-87e6-d408e73ccc69")]
[Synonym("ru", "Рубрика")]
public CatalogRef&amp;lt;рубрики&amp;gt; Рубрика;
        &lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;Табличная часть определяется как TabularSection&amp;lt;строкатабличнойчасти&amp;gt;&lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;[Uuid(&amp;quot;bb2c088e-8fb3-4469-abd7-ba6b4104ae88&amp;quot;)]
[GeneratedTypeAttribute(GeneratedTypeCategory.TabularSection, &amp;quot;8ef1c35e-8b55-488f-8e24-61f73d287458&amp;quot;, &amp;quot;b300dc36-fe12-41d5-a462-792716a1e508&amp;quot;)]
[GeneratedTypeAttribute(GeneratedTypeCategory.TabularSectionRow, &amp;quot;92e3cead-a61b-474c-8515-56e4911339c7&amp;quot;, &amp;quot;dfa007ab-4185-443f-8d11-f7468a7c195e&amp;quot;)]
[Synonym(&amp;quot;ru&amp;quot;, &amp;quot;Рубрики&amp;quot;)]
public TabularSection&amp;lt;РубрикаИзображения&amp;gt; Рубрики;
        &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;События модуля объекта и модуля менеджера реализуются как override-методы. Могут выглядеть так:&lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;public override void BeforeWrite(ref bool cancel)
{
    var ДубликатПоНаименованию = Catalog.FindByDescription&amp;lt;Изображения&amp;gt;(Description, true);
    if (!IsFolder &amp;amp;&amp;amp; IsNew() &amp;amp;&amp;amp; G.ValueIsFilled(ДубликатПоНаименованию))
    {
        G.Message(&amp;quot;Найден дубликат изображения с наименованием: &amp;quot; + Description + &amp;quot;. Запись не производится&amp;quot;);
        cancel = true;
        return;
    }
    if (!IsFolder)
        Рубрики.GroupBy(&amp;quot;Рубрика&amp;quot;);
	
    //Убрать ненужные рубрики, обработанные групповой обработкой
    var НайденнаяСтрока = Рубрики.Find(Catalogs.Рубрики.УдалитьРубрику, &amp;quot;Рубрика&amp;quot;);
    if (G.ValueIsFilled(НайденнаяСтрока))
        Рубрики.Delete(НайденнаяСтрока);
}&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;Следует отметить, что методы сейчас никак не транслируются в код 1С. Не понятным остается, что делать с директивами препроцессора 1С и нужно ли множественное наследование основных объектов 1С. G-обозначает глобальный контекст, так как вызов функций в C# может выполняться только в привязке к классу.&lt;/p&gt;
&lt;h2&gt;Компилирование проекта CSPROJ&lt;/h2&gt;
    &lt;p&gt;В прошлой статье &lt;a href="http://habrahabr.ru/post/245453/"&gt;http://habrahabr.ru/post/245453/&lt;/a&gt; была описана возможность компилирования одного файла CS. Чаще требуется скомпилировать целый проект - несколько файлов.&lt;/p&gt;
    &lt;p&gt;В Roslyn есть встроенные классы, отвечающие за обработку sln-решений и csproj-проектов Visual Studio. Проблема состоит в том, что они ссылаются на отдельные сборки, поставляемые в составе MSBuild Tools. Последняя версия Roslyn ссылается на сборки MSBuild Tools 2014, которые отдельно скачать не получится. Инсталляция сейчас входит в состав дистрибутива Visual Studio 14 CTP.&lt;/p&gt;
    &lt;p&gt;Оказалось, что в состав .Net framework входит сборка Microsoft.Build.dll v.4. В ней есть реализация чтения файла проекта C#. Можно самостоятельно реализовать состыковку этой сборки с логикой Roslyn и получить изоляцию от MSBuild Tools. Реализация будет примерно такой:&lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;
var project = new Project(projectFilePath);
List&amp;lt;string&amp;gt; references = new List&amp;lt;string&amp;gt;();
List&amp;lt;SyntaxTree&amp;gt; trees = new List&amp;lt;SyntaxTree&amp;gt;();
foreach(var item in project.Items)
{
    if (item.ItemType == &amp;quot;Reference&amp;quot;)
    {
        references.Add(item.EvaluatedInclude);
    }
    else if (item.ItemType == &amp;quot;Compile&amp;quot;)
    {
        string filePathToCompile = System.IO.Path.Combine(project.DirectoryPath, item.EvaluatedInclude);
        var text = System.IO.File.ReadAllText(filePathToCompile);
        trees.Add(CSharpSyntaxTree.ParseText(text));
    }
}
var assemblyName = project.GetProperty(&amp;quot;AssemblyName&amp;quot;).EvaluatedValue;
var compilation = CSharpCompilation.Create(assemblyName)
    .WithOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary))
    .AddReferences(new MetadataFileReference(typeof(Elisy.Configuration.Configuration).Assembly.Location))
    .AddReferences(new MetadataFileReference(typeof(object).Assembly.Location))
    .AddSyntaxTrees(trees.ToArray());        &lt;/code&gt;&lt;/pre&gt;

    &lt;p&gt;Если потребуется реализовать больше свойств проекта, то их можно подсмотреть &lt;a href="http://source.roslyn.codeplex.com/#Microsoft.CodeAnalysis.CSharp.Workspaces.Desktop/MSBuild/CSharpProjectFileLoader.CSharpProjectFile.cs,197"&gt;в проекте Roslyn&lt;/a&gt;&lt;/p&gt;
    &lt;h2&gt;Получение XML-файлов совместимых с 1С:Предприятие&lt;/h2&gt;
    &lt;p&gt;При генерации XML-файлов работа большей частью ведется с типами, их членами и атрибутами. Оказалось, что объекты Roslyn CSharpCompilation очень ограничены в средствах. Через них нельзя выйти на типы System.Type, нельзя получить список атрибутов с учетом наследования. Поэтому для полноценного анализа лучше создать сборку средствами Roslyn и загрузить ее для Reflection-анализа:&lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;MemoryStream ms = new MemoryStream();
compilation.Emit(ms);
var assembly = Assembly.Load(ms.ToArray());
&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;Странно, что не удалось загрузить сборку как ReflectionOnlyLoad из-за ошибки «missing api-ms-win-core-l1-2-0.dll». Ошибка возникала при попытке прочитать входящие в состав сборки типы. Тем не менее, сборка нормально загружается и работает через обычный вызов Load.&lt;/p&gt;
    &lt;p&gt;Генерация XML-файлов сводится к перебору всех типов, наследованных от Configuration и основных объектов, к перебору свойств объектов и атрибутов. &lt;/p&gt;
    &lt;p&gt;XML строится средствами XML LINQ, например, так:&lt;/p&gt;
    &lt;pre&gt;&lt;code&gt;XElement configurationElement = new XElement(Compiler.MdClasses + "Language",
    language.GetUuidXml(),
    new XElement(Compiler.MdClasses + "Properties",
        new XElement(Compiler.MdClasses + "Name", language.Name),
        language.GetSynonimXml(),
        language.GetCommentXml(),
        new XElement(Compiler.MdClasses + "LanguageCode", language.GetAttribute&lt;languagecodeattribute&gt;().Value)
        )
    );
var document = CreateMetadataObjectDocument(configurationElement);
document.Save(Path.Combine(outFolder, String.Format("Language.{0}.xml", language.Name)));
&lt;/code&gt;&lt;/pre&gt;
    &lt;p&gt;Удалось выяснить, что 1С лояльно относится к отсутствию многих тегов, заменяя их значениями по умолчанию. Поэтому пустые значения в XML-файлах можно пропустить, тем самым сократив занимаемый размер на диске. Размер экономии может быть весьма значительным – до 40 процентов. Использование же cs-файлов вместо XML дает еще большую экономию места – до 60%.&lt;/p&gt;
&lt;h2&gt;Выводы&lt;/h2&gt;
    &lt;p&gt;Средствами Visual Studio теоретически возможно создать альтернативный конфигуратор 1С. Для дальнейшего продвижения идеи нужно принять соглашения относительно всех основных объектов, хранения форм, трансляции языка C# в 1С, директив препроцессора 1С, обычных макетов и макетов СКД;&lt;/p&gt;
    &lt;p&gt;Текущая XML-выгрузка от 1С неудобна для анализа, потому что все файлы собраны в единый каталог;&lt;/p&gt;
    &lt;p&gt;Текущая XML-выгрузка 1С избыточна, и ее размер может быть уменьшен без потери данных до 40%, а хранение исходных кодов в виде C# позволит экономить до 60 процентов дискового пространства;&lt;/p&gt;
    &lt;p&gt;Чтение csproj-проектов и sln-решений Visual Studio встроенными средствами Roslyn непросто реализуемо из-за сложной доступности MSBuild Tools 2014. Компенсировать сейчас можно классами .Net Framework 4 и собственной инициализацией Roslyn.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://richmedia.us/file.axd?file=2015%2f1%2fElisy.Configuration.zip"&gt;Elisy.Configuration.zip (2,19 mb)&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://richmedia.us/post/2015/01/12/roslyn-visual-studio-1c-configurator</link>
      <comments>http://richmedia.us/post/2015/01/12/roslyn-visual-studio-1c-configurator#comment</comments>
      <guid>http://richmedia.us/post.aspx?id=ac117de9-b7d9-4b68-82e5-8b6fd9bdbeea</guid>
      <pubDate>Mon, 12 Jan 2015 10:50:00 +0600</pubDate>
      <category>1C.Net</category>
      <dc:publisher>Elisy</dc:publisher>
      <pingback:server>http://richmedia.us/pingback.axd</pingback:server>
      <pingback:target>http://richmedia.us/post.aspx?id=ac117de9-b7d9-4b68-82e5-8b6fd9bdbeea</pingback:target>
      <slash:comments>124</slash:comments>
      <trackback:ping>http://richmedia.us/trackback.axd?id=ac117de9-b7d9-4b68-82e5-8b6fd9bdbeea</trackback:ping>
      <wfw:comment>http://richmedia.us/post/2015/01/12/roslyn-visual-studio-1c-configurator#comment</wfw:comment>
      <wfw:commentRss>http://richmedia.us/syndication.axd?post=ac117de9-b7d9-4b68-82e5-8b6fd9bdbeea</wfw:commentRss>
    </item>
    <item>
      <title>Опыты с автоматическим переводом кода C# в 1С-код через Roslyn</title>
      <description>&lt;p&gt;Появилась идея посмотреть, как будет выглядеть объектно-ориентированный подход в 1С, язык которой очень ограничен в средствах и не предусматривает определение классов. Программа по автоматическому переводу определений классов C# в другой язык позволила бы менять генерируемый код по мере появления новых идей. Поиски средств реализации привели к проекту Roslyn &amp;ndash; открытому компилятору C#.&lt;br /&gt; &lt;br /&gt; Roslyn &amp;ndash; это открытая платформа компиляции C# и Visual Basic. Roslyn выполняет два основных действия: строит синтаксическое дерево (парсинг) и компилирует синтаксическое дерево. Дополнительно позволяет анализировать исходный код, рекурсивно обходить его, работать с проектами Visual Studio, выполнять код на лету.&lt;br /&gt; &lt;br /&gt; Обратите внимание, что на данный момент Roslyn в стадии Бета. Исходя из этого, со временем в компиляторе может что-то поменяться.&lt;/p&gt;
&lt;h2&gt;Roslyn &amp;ndash; открытый компилятор C#&lt;/h2&gt;
&lt;p&gt;&lt;br /&gt; &lt;br /&gt;Подключить Roslyn в проект можно через Nuget:&lt;/p&gt;
&lt;pre&gt;&lt;code class="cs"&gt;Install-Package Microsoft.CodeAnalysis &amp;ndash;Pre &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt; Для удобства в коде лучше сразу подключить три пространства имен&lt;/p&gt;
&lt;pre&gt;&lt;code class="cs"&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; Microsoft.CodeAnalysis.CSharp;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="cs"&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; Microsoft.CodeAnalysis.CSharp.Syntax;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="cs"&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; Microsoft.CodeAnalysis; &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt; Получить синтаксическое дерево кода из строки (или файла) можно так:&lt;/p&gt;
&lt;pre&gt;&lt;code class="cs"&gt;SyntaxTree tree = CSharpSyntaxTree.ParseText(codeString); &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt; Синтаксическое дерево представляет из себя иерархию объектов, наследованных от SyntaxNode. Объекты созданы на все случаи жизни. Примеры: ClassDeclarationSyntax &amp;mdash; определение класса, NamespaceDeclarationSyntax &amp;ndash; определение пространства имен, PropertyDeclarationSyntax &amp;ndash; определение свойства, AccessorDeclarationSyntax &amp;ndash; определение метода доступа к свойству (get/set), BlockSyntax &amp;ndash; содержимое блока (между фигурными скобками), ExpressionStatementSyntax &amp;ndash; выражение и т.д.&lt;br /&gt; &lt;br /&gt; Если есть задача рекурсивно пройти все элементы дерева, можно создать свой класс Walker и наследовать его от CSharpSyntaxWalker. Базовый класс позволяет переопределять общий метод Visit(SyntaxNode node) или большое множество специализированных, вида: void VisitNamespaceDeclaration(NamespaceDeclarationSyntax node), void VisitClassDeclaration(ClassDeclarationSyntax node), void VisitConstructorDeclaration(ConstructorDeclarationSyntax node) и т.д. Не забывайте вызвать в каждом переопределенном методе базовый метод, чтобы не останавливать рекурсии.&lt;br /&gt; &lt;br /&gt; Вызов рекурсивного обхода можно запустить следующим образом:&lt;/p&gt;
&lt;pre&gt;&lt;code class="cs"&gt;&lt;span class="keyword"&gt;var&lt;/span&gt; walker = &lt;span class="keyword"&gt;new&lt;/span&gt; Walker(); walker.Visit(tree.GetRoot()); &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt; В синтаксическом дереве нет информации о типах. Информация об используемых типах появляется после вызова:&lt;/p&gt;
&lt;pre&gt;&lt;code class="cs"&gt;&lt;span class="keyword"&gt;var&lt;/span&gt; compilation = CSharpCompilation.Create(&lt;span class="string"&gt;"1ccode"&lt;/span&gt;).WithOptions(&lt;span class="keyword"&gt;new&lt;/span&gt; CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)).AddReferences(&lt;span class="keyword"&gt;new&lt;/span&gt; MetadataFileReference(&lt;span class="keyword"&gt;typeof&lt;/span&gt;(&lt;span class="keyword"&gt;object&lt;/span&gt;).Assembly.Location)).AddSyntaxTrees(tree); &lt;span class="keyword"&gt;var&lt;/span&gt; Model = compilation.GetSemanticModel(tree); &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt; После этого вызова можно получать информацию об используемых типах, вызывая, например для класса&lt;/p&gt;
&lt;pre&gt;&lt;code class="cs"&gt;&lt;span class="keyword"&gt;var&lt;/span&gt; classSymbol = Model.GetDeclaredSymbol(classDeclarationSyntax); &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt; Теперь, имея информацию, о типе, можно узнать какой класс унаследовал данный тип:&lt;/p&gt;
&lt;pre&gt;&lt;code class="cs"&gt;&lt;span class="keyword"&gt;var&lt;/span&gt; type = type.BaseType; &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt; Или получить все члены типа через type.GetMembers()&lt;/p&gt;
&lt;h2&gt;Автоматический перевод кода C# в код 1С&lt;/h2&gt;
&lt;p&gt;&lt;br /&gt; &lt;br /&gt; Код не претендует на полноту и правильность, так как имеет цель получить общее представление об ООП-подходе в 1С.&lt;br /&gt; &lt;br /&gt; Для перевода C#-кода в код 1С был создан класс Walker, наследованный от CSharpSyntaxWalker. Walker перебирает все определения и строит на выходе 1С-код.&lt;br /&gt; &lt;br /&gt; Класс производит следующие преобразования.&lt;br /&gt; &lt;br /&gt; Пространство имен переводится методом VisitNamespaceDeclaration в модуль 1С, где точки в названии заменены на знаки подчеркивания.&lt;br /&gt; &lt;br /&gt; Понятия класс в 1С нет, поэтому определение класса в методе VisitClassDeclaration пропускается. Имя класса будет присутствовать в названии каждой функции и процедуры 1С, чтобы обозначить принадлежность к одному типу. Присутствующие в базовых классах методы, но отсутствующие в текущем классе через DeclareBaseClassMethodsToImplement и DeclareBaseClassPropertiesToImplement определяются с вызовом &amp;laquo;базовых&amp;raquo; функций/процедур 1С.&lt;br /&gt; &lt;br /&gt; Конструкторы в VisitConstructorDeclaration переводятся в определения функций 1С с именем класса, первым параметром _this и списком параметров. Если нет вызова другого конструктора этого класса, происходит инициализация всех полей класса в структуре. Определяется вызов других конструкторов.&lt;br /&gt; &lt;br /&gt; Определение свойств в VisitPropertyDeclaration пропускаются. Важны определения их методов доступа. &lt;br /&gt; &lt;br /&gt; Методы доступа свойств в VisitAccessorDeclaration переводятся в определения с именами &amp;lt;название класса&amp;gt;_Получить_&amp;lt;имя свойства&amp;gt; и &amp;lt;название класса&amp;gt;_Установить_&amp;lt;имя свойства&amp;gt;. Если они авто-реализованные (auto-implemented), то генерируется код доступа к переменной _this._private_&amp;lt;название класса&amp;gt;_&amp;lt;имя свойства&amp;gt;.&lt;br /&gt; &lt;br /&gt; Для методов в VisitMethodDeclaration генерируются определения 1С-процедур.&lt;br /&gt; &lt;br /&gt; Выражения и &amp;laquo;возвраты&amp;raquo; в VisitExpressionStatement и VisitReturnStatement комментируются через // и вставляются в текст как есть.&lt;br /&gt; &lt;br /&gt; &lt;strong class="spoiler_title"&gt;Исходный код Walker.cs&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;a href="http://richmedia.us/file.axd?file=2014%2f12%2fWalker.cs"&gt;Walker.cs (12,20 kb)&lt;/a&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h2&gt;Результат работы&lt;/h2&gt;
&lt;p&gt;&lt;br /&gt; &lt;br /&gt; В итоге код&lt;br /&gt; &lt;br /&gt; &lt;strong class="spoiler_title"&gt;Исходный код на C#&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;          namespace ПространствоИмен1.ПИ2
{
    public class А
    {
        public А()
        {
            Свойство1 = "Конструктор А";
        }
        private int _поле1 = 10;        
        public int Поле1 {get {return _поле1;} set {_поле1 = value;}}        
        public string Свойство1 {get; set;}
        public void Метод1()
        {
            Свойство1 = "Метод1";
        }
    }
    public class Б : А
    {
        private int _поле1 = 20;        
        public Б() : base()
        {
            Свойство1 = "Конструктор Б";
            Метод1();
        }
        public Б(int i) : this()
        {
            Свойство1 = "Конструктор Б(int i)";
            Метод1();
        }
    }
}    &lt;/pre&gt;
&lt;p&gt;&lt;br /&gt; &lt;br /&gt; Будет переведен в код 1С: Предприятие&lt;br /&gt; &lt;br /&gt; &lt;strong class="spoiler_title"&gt;Исходный код 1С:Предприятие&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;Модуль ПространствоИмен1_ПИ2
//Класс А
Функция А(_this) Экспорт
    //Инициализация полей
    _this.Вставить("_поле1", 10)
    _this.Вставить("__type", "ПИ2.А")
    //Свойство1 = "Конструктор А";
    Возврат _this;
КонецФункции; //А(_this) Экспорт
Функция А_Получить_Поле1(_this)
    //return _поле1;
КонецФункции;
Процедура А_Установить_Поле1(_this, value)
    //_поле1 = value;
КонецПроцедуры;
Функция А_Получить_Свойство1(_this)
    Возврат _this._private_А_Свойство1;
КонецФункции;
Процедура А_Установить_Свойство1(_this, value)
    _this._private_А_Свойство1 = value;
КонецПроцедуры;
Процедура А_Метод1(_this)
    //Свойство1 = "Метод1";
КонецПроцедуры;
//Класс Б
Функция Б(_this) Экспорт
    //Инициализация полей
    _this.Вставить("_поле1", 20)
    //Вызов конструктора базового класса
    А(_this);
    _this.Вставить("__type", "ПИ2.Б")
    //Свойство1 = "Конструктор Б";
    //Метод1();
    Возврат _this;
КонецФункции; //Б(_this) Экспорт
Функция Б(_this, i) Экспорт
    //Вызов другого конструктора
    Б(_this);
    _this.Вставить("__type", "ПИ2.Б")
    //Свойство1 = "Конструктор Б(int i)";
    //Метод1();
    Возврат _this;
КонецФункции; //Б(_this, i) Экспорт
Функция Б_Получить_Поле1(_this)
    Возврат А_Получить_Поле1(_this);
КонецФункции;
Процедура Б_Установить_Поле1(_this, value)
    А_Установить_Поле1(_this);
КонецПроцедуры;
Функция Б_Получить_Свойство1(_this)
    Возврат А_Получить_Свойство1(_this);
КонецФункции;
Процедура Б_Установить_Свойство1(_this, value)
    А_Установить_Свойство1(_this);
КонецПроцедуры;
Процедура Б_Метод1(_this)
    А_Метод1(_this);
КонецПроцедуры;&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://richmedia.us/file.axd?file=2014%2f12%2fWalker.cs"&gt;Walker.cs (12,20 kb)&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://richmedia.us/post/2014/12/26/roslyn-csharp-classes-to-1c</link>
      <comments>http://richmedia.us/post/2014/12/26/roslyn-csharp-classes-to-1c#comment</comments>
      <guid>http://richmedia.us/post.aspx?id=097b4ea3-b7ee-4210-bf3e-8687161ad2cf</guid>
      <pubDate>Fri, 26 Dec 2014 10:18:00 +0600</pubDate>
      <category>1C.Net</category>
      <category>1С:Предприятие</category>
      <category>C#</category>
      <dc:publisher>Elisy</dc:publisher>
      <pingback:server>http://richmedia.us/pingback.axd</pingback:server>
      <pingback:target>http://richmedia.us/post.aspx?id=097b4ea3-b7ee-4210-bf3e-8687161ad2cf</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://richmedia.us/trackback.axd?id=097b4ea3-b7ee-4210-bf3e-8687161ad2cf</trackback:ping>
      <wfw:comment>http://richmedia.us/post/2014/12/26/roslyn-csharp-classes-to-1c#comment</wfw:comment>
      <wfw:commentRss>http://richmedia.us/syndication.axd?post=097b4ea3-b7ee-4210-bf3e-8687161ad2cf</wfw:commentRss>
    </item>
    <item>
      <title>Elisy Busihess Connector v1.1 поддерживает 1С:Предприятие 8.2.19.80</title>
      <description>&lt;p&gt;Тестирование показало, что&amp;nbsp;Elisy Busihess Connector v1.1 поддерживает 1С:Предприятие 8.2.19.80. На обновленной платформе все тесты прошли успешно.&lt;/p&gt;</description>
      <link>http://richmedia.us/post/2014/11/21/elisy-business-connector-supports-1c-8-2-19-80</link>
      <comments>http://richmedia.us/post/2014/11/21/elisy-business-connector-supports-1c-8-2-19-80#comment</comments>
      <guid>http://richmedia.us/post.aspx?id=bc9a4ea0-21c0-4e36-bc99-0cb8176c5295</guid>
      <pubDate>Fri, 21 Nov 2014 07:58:00 +0600</pubDate>
      <category>1C.Net</category>
      <category>1С:Предприятие</category>
      <category>C#</category>
      <dc:publisher>Elisy</dc:publisher>
      <pingback:server>http://richmedia.us/pingback.axd</pingback:server>
      <pingback:target>http://richmedia.us/post.aspx?id=bc9a4ea0-21c0-4e36-bc99-0cb8176c5295</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://richmedia.us/trackback.axd?id=bc9a4ea0-21c0-4e36-bc99-0cb8176c5295</trackback:ping>
      <wfw:comment>http://richmedia.us/post/2014/11/21/elisy-business-connector-supports-1c-8-2-19-80#comment</wfw:comment>
      <wfw:commentRss>http://richmedia.us/syndication.axd?post=bc9a4ea0-21c0-4e36-bc99-0cb8176c5295</wfw:commentRss>
    </item>
    <item>
      <title>ZKtechnology CR10MW RFID reader/writer SDK cpp example ported to visual studio 2013</title>
      <description>&lt;p&gt;The VC++6 example was ported to Visual Studio 2013 and unicode character set.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://richmedia.us/file.axd?file=2014%2f11%2fcr10mw-vs2013-cpp-example.zip"&gt;cr10mw-vs2013-cpp-example.zip (134,59 kb)&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://richmedia.us/post/2014/11/12/ZKtechnology-CR10MW-RFID-readerwriter-SDK-cpp-example-ported-to-visual-studio-2013</link>
      <comments>http://richmedia.us/post/2014/11/12/ZKtechnology-CR10MW-RFID-readerwriter-SDK-cpp-example-ported-to-visual-studio-2013#comment</comments>
      <guid>http://richmedia.us/post.aspx?id=9adb107d-fb9f-42b3-b7bd-4018e85f3b09</guid>
      <pubDate>Wed, 12 Nov 2014 10:56:00 +0600</pubDate>
      <category>1С:Предприятие</category>
      <category>General</category>
      <category>rfid</category>
      <dc:publisher>Elisy</dc:publisher>
      <pingback:server>http://richmedia.us/pingback.axd</pingback:server>
      <pingback:target>http://richmedia.us/post.aspx?id=9adb107d-fb9f-42b3-b7bd-4018e85f3b09</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://richmedia.us/trackback.axd?id=9adb107d-fb9f-42b3-b7bd-4018e85f3b09</trackback:ping>
      <wfw:comment>http://richmedia.us/post/2014/11/12/ZKtechnology-CR10MW-RFID-readerwriter-SDK-cpp-example-ported-to-visual-studio-2013#comment</wfw:comment>
      <wfw:commentRss>http://richmedia.us/syndication.axd?post=9adb107d-fb9f-42b3-b7bd-4018e85f3b09</wfw:commentRss>
    </item>
    <item>
      <title>Обновление CfProject 1.2</title>
      <description>&lt;h1&gt;&lt;span style="color: #333333; font-size: 14px; line-height: 20px;"&gt;Выпущено обновление CfProject v.1.2&amp;nbsp;&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span style="color: #333333; font-size: 14px; line-height: 20px;"&gt;Добавлено распознавание форматов epf/erf/cfu дополнительно к cf&amp;nbsp;&lt;/span&gt;&lt;br style="box-sizing: border-box; color: #333333; font-size: 14px; line-height: 20px;" /&gt;&lt;span style="color: #333333; font-size: 14px; line-height: 20px;"&gt;В объекте Configuration поддерживаются свойства BriefInformation, DetailedInformation, Copyright, VendorInformationAddress, ConfigurationInformationAddress, разделение по видам объектов&amp;nbsp;&lt;/span&gt;&lt;br style="box-sizing: border-box; color: #333333; font-size: 14px; line-height: 20px;" /&gt;&lt;span style="color: #333333; font-size: 14px; line-height: 20px;"&gt;Распознавание объекта Enum без расшифровки свойств&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://richmedia.us/file.axd?file=2014%2f11%2fElisy.CfProject.epf"&gt;Elisy.CfProject.epf (66,58 kb)&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://richmedia.us/post/2014/11/05/cfproject-1-2-update</link>
      <comments>http://richmedia.us/post/2014/11/05/cfproject-1-2-update#comment</comments>
      <guid>http://richmedia.us/post.aspx?id=3b71e465-840c-4d89-b1a6-540c5068b1aa</guid>
      <pubDate>Wed, 5 Nov 2014 05:45:00 +0600</pubDate>
      <category>1C.Net</category>
      <category>1C:Enterprise</category>
      <category>1С:Предприятие</category>
      <category>C#</category>
      <dc:publisher>Elisy</dc:publisher>
      <pingback:server>http://richmedia.us/pingback.axd</pingback:server>
      <pingback:target>http://richmedia.us/post.aspx?id=3b71e465-840c-4d89-b1a6-540c5068b1aa</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://richmedia.us/trackback.axd?id=3b71e465-840c-4d89-b1a6-540c5068b1aa</trackback:ping>
      <wfw:comment>http://richmedia.us/post/2014/11/05/cfproject-1-2-update#comment</wfw:comment>
      <wfw:commentRss>http://richmedia.us/syndication.axd?post=3b71e465-840c-4d89-b1a6-540c5068b1aa</wfw:commentRss>
    </item>
  </channel>
</rss>