<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>iLoveCode.ru</title>
<link>https://ILOVECODE.RU/</link>
<description>Программирование на Swift, настройка Xcode, интеграция 1С с сайтом на Битрикс, настройка unix-сервера, настройка почтового сервера.</description>
<author>Михаил</author>
<language>ru</language>
<generator>E2 (v3849; Aegea)</generator>

<itunes:owner>
<itunes:name>Михаил</itunes:name>
<itunes:email></itunes:email>
</itunes:owner>
<itunes:subtitle>Программирование на Swift, настройка Xcode, интеграция 1С с сайтом на Битрикс, настройка unix-сервера, настройка почтового сервера.</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Как установить свое приложение из XCode на iPhone</title>
<guid isPermaLink="false">11</guid>
<link>https://ILOVECODE.RU/all/kak-ustanovit-svoe-prilozhenie-iz-xcode-na-iphone/</link>
<pubDate>Sat, 22 Oct 2022 12:32:22 +0000</pubDate>
<author>Михаил</author>
<comments>https://ILOVECODE.RU/all/kak-ustanovit-svoe-prilozhenie-iz-xcode-na-iphone/</comments>
<description>
&lt;p&gt;Чтобы первый раз установить свое приложение на реальное устройство под управлением iOS выполнить несколько подготовительных шагов.&lt;/p&gt;
&lt;h2&gt;Перевести iPhone в режим разработчика&lt;/h2&gt;
&lt;p&gt;Для перевода iPhone в режим разработчика переходим в настройках устройства: &lt;b&gt;Настройки -&gt; Конфиденциальность и безопасность -&gt; Режим разработчика&lt;/b&gt; и активируем переключатель «Режим разработчика». iPhone потребует перезагрузки. Соглашаемся.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://ILOVECODE.RU/pictures/kak-ustanovit-svoe-prilozhenie-iz-xcode-na-iphone-1.png" width="400" height="250" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://ILOVECODE.RU/pictures/kak-ustanovit-svoe-prilozhenie-iz-xcode-na-iphone-2.png" width="400" height="250" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;После перезагрузки и разблокировки iPhone попросит подтвердить включение режима разработчика, указав, что уменьшиться уровень защиты. Нажимаем «Включить». Теперь режим разработчика активирован и можно подключать устройство к Xcode.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://ILOVECODE.RU/pictures/kak-ustanovit-svoe-prilozhenie-iz-xcode-na-iphone.png" width="400" height="237" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Если понадобится выключить режим разработчика, то заходим в тот же пункт меню. Деактивируем переключатель и обязательно перезагружаем iPhone, т. к. изменения вступают в силу только после перезагрузки устройства.&lt;br /&gt;
&lt;a href="https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device"&gt;Описание включения режима разработчика в документации от Apple&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Проверяем, что версия iOS, установленная на iPhone не ниже, чем минимальная версия iOS в проекте&lt;/h2&gt;
&lt;p&gt;Это необходимо для того, чтобы в списке симуляторов и устройств появилось наше устройство. Если версия iOS на устройстве ниже, чем минимальная в проекте, то устройства в списке не будет.&lt;/p&gt;
&lt;p&gt;Итак, открываем файл проекта (1), выбираем Target приложения (2), идем во вкладку General (3), ищем раздел Minimum Deployments и проверяем версию iOS (4). При необходимости, меняем ее на версию, не выше, чем на устройстве.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://ILOVECODE.RU/pictures/Snimok-ekrana-2024-11-02-v-20.04.04.png" width="1082" height="431" alt="" /&gt;
&lt;/div&gt;
&lt;h2&gt;Подтверждаем сертификат разработчика на iPhone&lt;/h2&gt;
&lt;p&gt;Подключаем iPhone к своему Mac и устанавливаем наше приложение, чтобы к нам пришел сертификат. iPhone нужно будет разблокировать и нажать «Доверять устройству». После этого в Xcode в списке симуляторов и устройств выбираем наш iPhone и запускаем на нем приложение.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://ILOVECODE.RU/pictures/Snimok-ekrana-2022-10-22-v-14.09.06.png" width="343" height="348" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Через какое-то время приложение установится (бывает нужно подождать пару минут), но не запустится. На iPhone и в Xcode появятся сообщения о том, что разработчик ненадежный. Закрываем эти сообщения. нам нужно активировать сертификат, который у нас уже на iPhone.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://ILOVECODE.RU/pictures/IMG_1127.png" width="399" height="228" alt="" /&gt;
&lt;/div&gt;
&lt;h2&gt;Активируем сертификат на iPhone и снова устанавливаем приложение&lt;/h2&gt;
&lt;p&gt;Для активации сертификата разработчика на iPhone в настройках устройства открываем: &lt;b&gt;Настройки -&gt;  Основные -&gt; VPN и управление устройством&lt;/b&gt; Там в подразделе «ПО Разработчика» будет ваш сертификат.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://ILOVECODE.RU/pictures/IMG_1128.png" width="400" height="399" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Входим в него, нажимаем «Доверять». Появится сообщение, в нем тоже нажимаем «Доверять».&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://ILOVECODE.RU/pictures/IMG_1130.png" width="399" height="586" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;После этого в Xcode снова запускаем приложение. Приложение должно открыться на iPhone.&lt;br /&gt;
Теперь можно устанавливать на ваш iPhone любые приложения подписанные вашим сертификатом разработчика. Для бесплатной записи разработчика одновременно доступно 3 установленных приложения на устройстве.&lt;/p&gt;
</description>
</item>

<item>
<title>Как правильно удалить Main.Storyboard в проекте Swift</title>
<guid isPermaLink="false">10</guid>
<link>https://ILOVECODE.RU/all/kak-pravilno-udalit-main-storyboard-v-proekte-swift/</link>
<pubDate>Wed, 19 Oct 2022 19:31:36 +0000</pubDate>
<author>Михаил</author>
<comments>https://ILOVECODE.RU/all/kak-pravilno-udalit-main-storyboard-v-proekte-swift/</comments>
<description>
&lt;p&gt;При создании нового проекта по умолчанию используется режим работы со &lt;b&gt;Storyboards&lt;/b&gt;. Это значит интерфейс первого экрана приложения будет управляться через &lt;b&gt;Main.Storyboard&lt;/b&gt;. Если мы планируем работать с интерфейсов в коде, то нам нужно, чтобы этого не происходило. Для этого &lt;b&gt;Main.Storyboard &lt;/b&gt;нужно удалить и убрать его подключение.&lt;/p&gt;
&lt;h2&gt;Удаляем файл Main.Storyboard&lt;/h2&gt;
&lt;p&gt;В списке файлов проекта находим файл &lt;b&gt;Main.Storyboard&lt;/b&gt; и удаляем его, нажав bacspace. Подтверждаем удаление&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://ILOVECODE.RU/pictures/Snimok-ekrana-2022-10-19-v-20.45.00.png" width="647" height="403" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;После этого проект перестанет запускаться, говоря, что он не находит &lt;b&gt;Main.Storyboard&lt;/b&gt;. Нужно убрать ссылки на него.&lt;/p&gt;
&lt;h2&gt;Удаляем ссылки на Main.Storyboard из Info.plist&lt;/h2&gt;
&lt;p&gt;Чтобы удалить ссылки на &lt;b&gt;Main.Storyboard&lt;/b&gt; из &lt;b&gt;Info.plist&lt;/b&gt; переходим в настройки проекта. Выбираем &lt;b&gt;Targets&lt;/b&gt;. В ней нам нужна вкладка &lt;b&gt;Info&lt;/b&gt;. Находим параметры &lt;b&gt;Main storyboard file base name — Main&lt;/b&gt; и &lt;b&gt;Storyboard Name — Main&lt;/b&gt;. Удаляем их с помощью Backspace.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://ILOVECODE.RU/pictures/Snimok-ekrana-2022-10-19-v-20.47.40.png" width="1372" height="552" alt="" /&gt;
&lt;/div&gt;
&lt;h2&gt;Создаем вручную окно в SceneDelegate (iOS 13+)&lt;/h2&gt;
&lt;p&gt;Т. к. теперь приложение не использует &lt;b&gt;Storyboard&lt;/b&gt;, то нам вручную нужно создать окно и определить &lt;b&gt;ViewController&lt;/b&gt;, который будет являться точкой входа. Код &lt;b&gt;SceneDelegate&lt;/b&gt; будет выглядеть так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let windowScene = (scene as? UIWindowScene) else { return }
        
        window = UIWindow(windowScene: windowScene)
        window?.windowScene = windowScene
        window?.makeKeyAndVisible()
        window?.rootViewController = ViewController()
    }
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Если приложение должно работать под управлением &lt;b&gt;iOS 12 и ниже&lt;/b&gt;, то похожий код нужно разместить в &lt;b&gt;AppDelegate&lt;/b&gt; вместо &lt;b&gt;SceneDelegate&lt;/b&gt;.&lt;/p&gt;
&lt;h2&gt;Проверяем, что все корректно работает.&lt;/h2&gt;
&lt;p&gt;Переходим во &lt;b&gt;ViewController&lt;/b&gt; и добавляем во &lt;b&gt;viewDidLoad()&lt;/b&gt; строку отвечающую за изменений цвета фона &lt;b&gt;view&lt;/b&gt;:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;view.backgroundColor = .systemTeal&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Загружаем приложение. Оно должно запуститься без ошибок. А мы увидим экран с новым фоном. Это говорит о том, что мы все сделали правильно.&lt;/p&gt;
</description>
</item>

<item>
<title>Как добавить под git изменения, которые были сделаны напрямую на сервере</title>
<guid isPermaLink="false">9</guid>
<link>https://ILOVECODE.RU/all/kak-dobavit-pod-git-izmeneniya-kotorye-byli-sdelany-napryamuyu-n/</link>
<pubDate>Wed, 01 Sep 2021 12:25:23 +0000</pubDate>
<author>Михаил</author>
<comments>https://ILOVECODE.RU/all/kak-dobavit-pod-git-izmeneniya-kotorye-byli-sdelany-napryamuyu-n/</comments>
<description>
&lt;p&gt;На сервере размещен проект под управлением git. Были внесены изменения в файлы не через git, а напрямую (например, через sftp, ftp, ssh и т. п.). Далее инструкция, как эти изменения добавить под git, не потеряв их.&lt;/p&gt;
&lt;p&gt;К примеру, при вводе команды&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git status&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;вы видите, что один или несколько файлов модифицированы:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://ILOVECODE.RU/pictures/Snimok_ekrana_2021-09-01_v_13_20_48.png" width="801" height="160" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;h2&gt;Создаем отдельную ветку и переходим на нее&lt;/h2&gt;
&lt;p&gt;Для этого выполняем команду:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git checkout -b &amp;lt;название ветки&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;В результате мы должны получить сообщение о переходе на новую ветку:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;Switched to a new branch '&amp;lt;название ветки&amp;gt;'&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;h2&gt;Добавляем измененные файлы под git&lt;/h2&gt;
&lt;p&gt;Для этого можно выполнить команду с перечислением файлов, которые нам нужно добавить (необходимо в случае, если есть еще какие-либо локальные файлы, которые не нужно добавлять под git. Это можно понять по команде «git status», например, на скриншоте выше лишних файлов нет). Команда:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git add &amp;lt;путь к файлу 1&amp;gt; &amp;lt;путь к файлу 1&amp;gt; &amp;lt;путь к файлу 3&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Путь к файлам определяется относительно корня репозитория. Его можно взять из первоначальной команды «git status».&lt;/p&gt;
&lt;p&gt;Если же лишних локальных файлов нет, тогда выполняем команду:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git add -A&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Добавятся все файлы, которые были перечислены в ходе вывода команды «git status».&lt;/p&gt;
&lt;p&gt;Если добавили лишний файл, то удалить его из индекса можно командой:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git rm --cached &amp;lt;имя файла&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;h2&gt;Делаем commit и push изменений в удаленную ветку&lt;/h2&gt;
&lt;p&gt;Для commit выполняем команду:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git commit -m &amp;quot;&amp;lt;описание коммита&amp;gt;&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Мы должны получить сообщение об успешном commit. Примерный вид:&lt;br /&gt;
&lt;br&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://ILOVECODE.RU/pictures/Snimok-ekrana-2021-09-01-v-13.58.34.png" width="429" height="29" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Проверяем, что все изменения теперь на ветке:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git status&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Должны получить сообщение вида:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://ILOVECODE.RU/pictures/Snimok-ekrana-2021-09-01-v-14.00.26.png" width="297" height="28" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Выполняем команду для push:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git push origin &amp;lt;название ветки&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Мы должны получить сообщение вида:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://ILOVECODE.RU/pictures/Snimok_ekrana_2021-09-01_v_14_02_09.png" width="791" height="145" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;h2&gt;Делаем merge ветки в master&lt;/h2&gt;
&lt;p&gt;Теперь переходим в ваш удаленный репозиторий. В моем случае это &lt;a href="https://bitbucket.org/"&gt;bitbucket.org&lt;/a&gt;. Создаем pull request из ветки, в которую вы делали push на предыдущем шаге (это необходимо, если у вас merge в master доступен только через pull request), проверяем. что все корректно и делаем merge.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;h2&gt;Возвращаемся на ветку master на сервере&lt;/h2&gt;
&lt;p&gt;Для этого выполняем команду:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git checkout master&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Мы должны получить сообщение о переходе на ветку master.&lt;/p&gt;
&lt;p&gt;Выполняем команду, чтобы «стянуть» с удаленного master актуальные изменения:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git pull origin master&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Получим сообщение об успешном «стягивании». Примерный вид:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://ILOVECODE.RU/pictures/Snimok_ekrana_2021-09-01_v_14_18_55.png" width="711" height="180" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;После этого проверяем, что сейчас локальный репозиторий на сервере актуальный и смотрит на ветку master. Выполняем команду:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;git status&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Мы должны получить следующее сообщение.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://ILOVECODE.RU/pictures/Snimok_ekrana_2021-09-01_v_14_21_52.png" width="415" height="41" alt="" /&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Как отлаживать обмен заказами между 1С и сайтом на Битрикс?</title>
<guid isPermaLink="false">8</guid>
<link>https://ILOVECODE.RU/all/kak-otlazhivat-obmen-zakazami-mezhdu-1s-i-saytom-na-bitrix/</link>
<pubDate>Thu, 19 Aug 2021 19:40:31 +0000</pubDate>
<author>Михаил</author>
<comments>https://ILOVECODE.RU/all/kak-otlazhivat-obmen-zakazami-mezhdu-1s-i-saytom-na-bitrix/</comments>
<description>
&lt;p&gt;Эта статья предназначена для тех, кто уже представляет себе механизм обмена заказами между 1С и Битрикс. Задача: отладить В ней вы найдете этапы отладки обмена заказов, а также в удобном формате приведены запросы, которые можно использовать при отладке, подставляя в них свои значения имени файла и sessid. Если вам необходимо подробное описание механизм обмена, то он есть в &lt;a href="/all/mehanizm-obmena-zakazami-mezhdu-1s-i-saytom-na-bitrix/"&gt;другой статье&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Для отладки обмена заказами между 1С и сайтом на Битрикс необходимо удостоверится, что 1С может авторизоваться на сайте, 1С присылает правильные запросы, запросы корректно обрабатываются на стороне сайта, приходит корректный xml.&lt;/p&gt;
&lt;h2&gt;Проверка авторизации&lt;/h2&gt;
&lt;p&gt;Если 1С присылает запросы на сайт (для этого нужно посмотреть лог запросов), то этот этап можно пропустить.&lt;/p&gt;
&lt;p&gt;Если запросов нет, то обычно причиной этого могут быть проблемы с авторизацией 1С на сайте.&lt;/p&gt;
&lt;p&gt;В настройках обмена внутри 1С последовательно проверяем:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;адрес подключения к сайту. В большинстве случаев адрес будет вида:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;https://&amp;lt;адрес_сайта&amp;gt;/bitrix/admin/1c_exchange.php&lt;/code&gt;&lt;/pre&gt;&lt;ol start="2"&gt;
&lt;li&gt;логин и пароль &lt;b&gt;пользователя битрикс&lt;/b&gt;, под которыми 1С подключается;&lt;/li&gt;
&lt;li&gt;правильность адреса прокси-сервера (если задан).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;В настройках обмена внутри Битрикс проверяем:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;пользователь, под которым 1С осуществляет обмен принадлежит к группе, которая обладает правами на осуществление обмена заказами (для обмена каталогом и заказами права настраиваются отдельно).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;i&gt;Зачастую бывает, что внутри 1С указан пользователь, который является администратором сайта. Рекомендую завести отдельного пользователя и группу для выгрузки 1С, например, 1c_exchange. Во-первых, права группы «администраторы» избыточны для выгрузки. Во-вторых, при дальнейших отладках вы сразу будете видеть, что та или иная сущность (например, элемент инфоблока) была изменена пользователем, который отвечает за обмен. Это очень удобно.&lt;/i&gt;&lt;/p&gt;
&lt;h2&gt;Ошибка «failure Обновите модуль обмена»&lt;/h2&gt;
&lt;p&gt;Если на любой запрос, например, mode=checkauth, 1С получает ответ: «failure Обновите модуль обмена», то самыми распространенными причинами могут быть:&lt;/p&gt;
&lt;h3&gt;Старая 1С стучится по протоколу https&lt;/h3&gt;
&lt;p&gt;Самый простой вариант решения — выделить на сайте отдельный поддомен без https, на который и направить 1С. Что-то вроде подойдет:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;https://1c.&amp;lt;адрес_сайта&amp;gt;/bitrix/admin/1c_exchange.php&lt;/code&gt;&lt;/pre&gt;&lt;h3&gt;В запросе от 1С указан неверный sessid или не указан вообще.&lt;/h3&gt;
&lt;p&gt;Проверяем, что sessid, который отдается в первом запросе блока, используется во всех последующих запросах блока, а также, что он там есть.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Блок запросов всегда начинается с mode=checkauth и заканчивается запросом перед следующим mode=checkauth.&lt;/i&gt;&lt;/p&gt;
&lt;h2&gt;Проверяем, что 1С присылает правильные запросы и что сайт их корректно обрабатывает&lt;/h2&gt;
&lt;p&gt;Чтобы проверить, какие запросы присылает 1С, нужно посмотреть лог запросов к сайту. Например, настроив access-логи на сервере. Для удобства можно 1С направить на отдельный поддомен, на который будет ходить только 1С. Так в файле логов будут только запросы от 1С. Далее открываем файл логов и смотрим. В нем должны быть запросы, которые приведены ниже. Порядок запросов также должен совпадать.&lt;/p&gt;
&lt;p&gt;Для проверки корректности ответов на запросы нужно посмотреть лог выгрузки внутри 1С — там обычно собираются ответы. Либо, выполнить запросы вручную в браузере. Обычно это оказывается наиболее удобным способом. Ответы на любой запрос обычно будут содержать «success», «progress» или «failure» (кроме запроса mode=init — у него ответ выглядит примерно так: zip=yes file_limit=204800). Пустых ответов на запрос быть не должно.&lt;/p&gt;
&lt;h3&gt;Заказы из Битрикс в 1С&lt;/h3&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;https://&amp;lt;адрес_сайта&amp;gt;/bitrix/admin/1c_exchange.php?type=sale&amp;amp;mode=checkauth
https://&amp;lt;адрес_сайта&amp;gt;/bitrix/admin/1c_exchange.php?type=sale&amp;amp;mode=init&amp;amp;sessid=&amp;lt;id_сессии_из_первого_запроса&amp;gt;
https://&amp;lt;адрес_сайта&amp;gt;/bitrix/admin/1c_exchange.php?type=sale&amp;amp;mode=query&amp;amp;sessid=&amp;lt;id_сессии_из_первого_запроса&amp;gt;
https://&amp;lt;адрес_сайта&amp;gt;/bitrix/admin/1c_exchange.php?type=sale&amp;amp;mode=success&amp;amp;sessid=&amp;lt;id_сессии_из_первого_запроса&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;В ответ на запрос 3 должна сформироваться xml со списком заказов, которые были созданы / изменены после последнего обмена (блока таких же запросов). Если новых / измененных заказов нет, то Битрикс отдаст пустую xml со строкой заголовка. Чтобы xml была не пустой нужно перед выполнением запросов изменить текущий заказ или создать новый. Если вы получаете xml в ответ, то сайт обрабатывает запросы корректно.&lt;/p&gt;
&lt;h3&gt;Заказы из 1С в Битрикс&lt;/h3&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;https://&amp;lt;адрес_сайта&amp;gt;/bitrix/admin/1c_exchange.php?type=sale&amp;amp;mode=checkauth
https://&amp;lt;адрес_сайта&amp;gt;/bitrix/admin/1c_exchange.php?type=sale&amp;amp;mode=init&amp;amp;sessid=&amp;lt;id_сессии_из_первого_запроса&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;После этого запроса из папки /upload/1c_exchange/ удаляются файлы предыдущего обмена документами. Если вы проверяете запросы вручную, то после этого запроса вам нужно по указанному адресу положить свой файл (для этого предварительно можно на стороне 1С сделать выгрузку в файл).&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;https://&amp;lt;адрес_сайта&amp;gt;/bitrix/admin/1c_exchange.php?type=sale&amp;amp;mode=file&amp;amp;filename=&amp;lt;имя_файла&amp;gt;&amp;amp;sessid=&amp;lt;id_сессии&amp;gt;
https://&amp;lt;адрес_сайта&amp;gt;/bitrix/admin/1c_exchange.php?type=sale&amp;amp;mode=import&amp;amp;filename=&amp;lt;имя_файла&amp;gt;&amp;amp;sessid=&amp;lt;id_сессии&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Запросы mode=file и mode=import могут повторятся несколько раз до получения ответа от сайта «success», либо до ошибки. Как только на запрос mode=import получен ответ «success», то на сайте должны обновиться заказы, которые были в xml. Это будет говорить о том, что обработка выгрузки заказа на сайте прошла успешно.&lt;/p&gt;
&lt;h2&gt;Проверяем, что XML корректный&lt;/h2&gt;
&lt;p&gt;Если все запросы корректные и проходят без ошибок, но при этом нужных обновлений в 1С или в Битриксе не происходит, то необходимо проверить xml на корректность и на присутствие в нем необходимых данных.&lt;/p&gt;
</description>
</item>

<item>
<title>Механизм обмена заказами между 1С и сайтом на Битрикс</title>
<guid isPermaLink="false">4</guid>
<link>https://ILOVECODE.RU/all/mehanizm-obmena-zakazami-mezhdu-1s-i-saytom-na-bitrix/</link>
<pubDate>Thu, 19 Aug 2021 18:03:23 +0000</pubDate>
<author>Михаил</author>
<comments>https://ILOVECODE.RU/all/mehanizm-obmena-zakazami-mezhdu-1s-i-saytom-na-bitrix/</comments>
<description>
&lt;p&gt;Стандартный обмен заказами между 1С и сайтом на Битрикс всегда инициируется запросами со стороны 1С. Для простоты можно представить, что 1С — это браузер, который делает запросы к сайту на сервере. Какие запросы браузер сделает — такие данные и получит. Когда 1С нужны, к примеру, заказы, 1С делает соответствующий запрос на сайт, а уже Битрикс в ответ отдает xml с заказами, которые обрабатывает модуль обмена на стороне 1С.&lt;/p&gt;
&lt;p&gt;Выгрузку заказов можно распознать по «type=sale» в запросах. В зависимости от направления движения заказов обмен между 1С и сайтом на Битрикс делится на 2 фазы:&lt;br /&gt;
-загрузка заказов в 1С с сайта;&lt;br /&gt;
-выгрузка заказов из 1С на сайт.&lt;/p&gt;
&lt;p&gt;Каждая фаза делится на несколько этапов. Разделение на этапы — исходя из «mode» в запросах, которые посылает 1С. Новый «mode» в запросе — новый этап. Первые 2 этапа (авторизация и инициализация) в обеих фазах дублируются.&lt;/p&gt;
&lt;h2&gt;Заказы из Битрикс в 1С&lt;/h2&gt;
&lt;h3&gt;Этап 1: запрос авторизации (type=sale, mode=checkauth)&lt;/h3&gt;
&lt;p&gt;1C посылает запрос вида:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;http://&amp;lt;адрес_сайта&amp;gt;/bitrix/admin/1c_exchange.php?type=sale&amp;amp;mode=checkauth&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;На этот запрос от сайта 1С получит ответ вида:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;success PHPSESSID jZgq6XX8f4WtGWic7KyLsPzb7VBnUzqP sessid=7a0b69b4b3f10415e17a095cd8edabd8&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Sessid — идентификатор сессии, с которым 1С будет делать все дальнейшие запросы. В ответе идентификатор привожу для примера (у вас будет другой).&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Чтобы получить идентификатор сессий 1С должна быть авторизована под пользователем Битрикс, у которого есть права на обмен заказами (т. е. в модуле обмена внутри 1С заданы корректные логин и пароль пользователя Битрикс).&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;hr&gt;&lt;/p&gt;
&lt;h3&gt;Этап 2: инициализация обмена (type=sale, mode=init)&lt;/h3&gt;
&lt;p&gt;1C посылает запрос вида:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;http://&amp;lt;адрес_сайта&amp;gt;/bitrix/admin/1c_exchange.php?type=sale&amp;amp;mode=init&amp;amp;sessid=&amp;lt;id_сессии&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Битрикс удаляет все файлы из папки /upload/1c_exchange/, оставшийся после предыдущего обмена документами (не обязательно заказами). Сайт отдает ответ вида:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;zip=yes file_limit=204800&lt;/code&gt;&lt;/pre&gt;&lt;ol start="1"&gt;
&lt;li&gt;Zip — это параметр, который говорит, поддерживает ли сайт архивацию (yes — поддерживает, no — не поддерживает). В зависимости от этого 1С будут высылать файл с заказами в виде zip-архива или несжатую xml.&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="2"&gt;
&lt;li&gt;File_limit — максимальный размер загружаемого файла в байтах. Если файл больше, то 1С разобьет его на более мелкие файлы.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;i&gt;Эти параметры настраиваются: Магазин -&gt; Настройки -&gt; Интеграция 1С -&gt; Заказы. Галочка «Использовать сжатие zip, если доступно» и поле «Размер единовременно загружаемой части файла (в байтах)».&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;hr&gt;&lt;/p&gt;
&lt;h3&gt;Этап 3: получение заказов из Битрикс (type=sale, mode=query)&lt;/h3&gt;
&lt;p&gt;1C посылает запрос вида:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;http://&amp;lt;адрес_сайта&amp;gt;/bitrix/admin/1c_exchange.php?type=sale&amp;amp;mode=query&amp;amp;sessid=&amp;lt;id_сессии&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;В ответ Битрикс генерирует xml, в которую попадают все заказы, которые создались / изменились после предыдущего обмена заказами (саму xml здесь не привожу, т. к. это лдинная простыня). После чего помечает заказы в БД как выгруженные.&lt;/p&gt;
&lt;p&gt;Если нет ни одного нового / модифицированного заказа, то сайт в ответе отдаст пустую xml. В ответе на повторный запрос также будет пустая xml (т. к. в БД заказы уже отмечены).&lt;/p&gt;
&lt;p&gt;&lt;hr&gt;&lt;/p&gt;
&lt;h3&gt;Этап 4: завершение обмена (type=sale, mode=success)&lt;/h3&gt;
&lt;p&gt;Когда заказы успешно обработаны в 1С, то 1С посылает запрос:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;http://&amp;lt;адрес_сайта&amp;gt;/bitrix/admin/1c_exchange.php?type=sale&amp;amp;mode=success&amp;amp;sessid=&amp;lt;id_сессии&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Сайт на это отвечает:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;success&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Загрузка заказов в 1С с сайта на Битрикс завершена.&lt;br /&gt;
&lt;hr&gt;&lt;/p&gt;
&lt;h2&gt;Заказы из 1С в Битрикс&lt;/h2&gt;
&lt;p&gt;Этапы 1 и 2 совпадают с предыдущей фазой.&lt;/p&gt;
&lt;h3&gt;Этап 3: загрузка файла в Битрикс (type=sale, mode=file)&lt;/h3&gt;
&lt;p&gt;1C посылает запрос вида:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;http://&amp;lt;адрес_сайта&amp;gt;/bitrix/admin/1c_exchange.php?type=sale&amp;amp;mode=file&amp;amp;filename=&amp;lt;имя_файла&amp;gt;&amp;amp;sessid=&amp;lt;id_сессии&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Он загружает в папку /upload/1c_exchange/ файл обмена, посылая содержимое файла в виде POST-запроса.&lt;/p&gt;
&lt;p&gt;В ответ от сервера могут прийти следующие ответы:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;progress — файл еще загружается;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;1С на этот ответ пришлет еще один такой же запрос (или несколько), пока не получит другой ответ.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;failure &amp;lt;текст ошибки&amp;gt; — ошибка обработки файла с краткой расшифровкой ошибки;&lt;/code&gt;&lt;/pre&gt;&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;success — файл успешно загружен.&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;После ответа «success» 1С перейдет к этапу 5.&lt;/p&gt;
&lt;p&gt;&lt;hr&gt;&lt;/p&gt;
&lt;h3&gt;Этап 4: обработка файла на стороне Битрикс (type=sale, mode=import)&lt;/h3&gt;
&lt;p&gt;1C посылает запрос вида:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;http://&amp;lt;адрес_сайта&amp;gt;/bitrix/admin/1c_exchange.php?type=sale&amp;amp;mode=import&amp;amp;filename=&amp;lt;имя_файла&amp;gt;&amp;amp;sessid=&amp;lt;id_сессии&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Этап на стороне сайта состоит из двух шагов (т. е. со стороны 1С будет минимум 2 одинаковых запроса).&lt;/p&gt;
&lt;p&gt;В ответ на первый запрос должен прийти ответ:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;progress Распаковка архива завершена — распаковка zip-архива завершена (этот ответ будет, даже, если файл передается в виде несжатого xml).&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;В ответ на второй запрос должен прийти ответ:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;success — файл успешно загружен.&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;После получения этого ответа 1С переходит к завершающему этапу.&lt;/p&gt;
&lt;p&gt;Помимо успешных, на этом этапе сайт может отдавать, к примеру, такой ответ:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;failure &amp;lt;текст ошибки&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Например, зачастую встречается вот такая ошибка «failure Файл для импорта пуст» — это значит, что на предыдущем этапе загружен пустой файл или (что чаще) файл не был загружен.&lt;/p&gt;
&lt;p&gt;Выгрузка заказов из 1С в Битрикс завершена.&lt;/p&gt;
</description>
</item>

<item>
<title>Контакты</title>
<guid isPermaLink="false">7</guid>
<link>https://ILOVECODE.RU/all/kontakty-2/</link>
<pubDate>Thu, 19 Aug 2021 14:31:54 +0000</pubDate>
<author>Михаил</author>
<comments>https://ILOVECODE.RU/all/kontakty-2/</comments>
<description>
&lt;p&gt;Если у вас есть вопросы или нужна консультация можете написать мне в &lt;a href="https://t.me/mbagmet" target="_blank"&gt;telegram&lt;/a&gt;.&lt;/p&gt;
</description>
</item>


</channel>
</rss>