<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <language>ru</language>
    <title>1C-Bitrix</title>
    <description/>
    <link>https://tproger.ru/tag/1c-bitrix</link>
    <atom:link href="https://tproger.ru/tag/1c-bitrix/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Tue, 29 Sep 2026 07:27:41 GMT</lastBuildDate>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>12</sy:updateFrequency>
    <image>
      <title>1C-Bitrix</title>
      <link>https://tproger.ru</link>
      <url>https://tproger.ru/apple-touch-icon.png</url>
    </image>
    <item>
      <title>Смена подрядчика на Битрикс-проекте: чек-лист для CTO, чтобы не потерять полгода и миллионы</title>
      <link>https://tproger.ru/articles/smena-podryadchika-na-bitriks-proekte--chek-list-dlya-cto--chtoby-ne-poteryat-polgoda-i-milliony</link>
      <comments>https://tproger.ru/articles/smena-podryadchika-na-bitriks-proekte--chek-list-dlya-cto--chtoby-ne-poteryat-polgoda-i-milliony?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Александр Нефёдов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/smena-podryadchika-na-bitriks-proekte--chek-list-dlya-cto--chtoby-ne-poteryat-polgoda-i-milliony</guid>
      <description><![CDATA[<p>Система оценки состояния проекта, методика расчёта реальной стоимости перехода и готовый чек-лист из 25 пунктов для приёмки</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/smena-podryadchika-na-bitriks-proekte--chek-list-dlya-cto--chtoby-ne-poteryat-polgoda-i-milliony">Смена подрядчика на Битрикс-проекте: чек-лист для CTO, чтобы не потерять полгода и миллионы</a>»</p>]]></description>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 11 Jan 2026 11:10:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>По нашей статистике, около 40% проектов на 1С-Битрикс меняют подрядчика в первые два года после запуска. Причины разные: студия закрылась, ключевой разработчик ушёл, качество работы упало, цены выросли. Но результат один — вам нужно передать проект новой команде, и сделать это так, чтобы бизнес не встал.</p><p>Смена подрядчика — это всегда стресс. Предыдущая команда уносит с собой знания о проекте, документация (если она вообще была) устарела, а новые разработчики смотрят на код и задают неудобные вопросы. В худшем случае вы теряете месяцы на разбор чужого кода вместо развития продукта.</p><p>В этой статье мы предложим конкретный алгоритм, как провести передачу проекта с минимальными потерями. Вы получите систему оценки состояния проекта, методику расчёта реальной стоимости перехода и готовый чек-лист из 25 пунктов для приёмки. Материал будет полезен CTO и CEO, которые уже меняют подрядчика или планируют это сделать в ближайшее время.</p><h2>Почему это больно: типичные сценарии</h2><p>Давайте рассмотрим историю, которая случается регулярно. Назовём её «Кейс интернет-магазина электроники» — это собирательный образ из десятков похожих ситуаций.</p><h2>Кейс: как 2 недели превратились в 4 месяца</h2><p>Компания N — интернет-магазин бытовой электроники с оборотом 200+ млн рублей в год. Сайт на Битрикс, интеграция с 1С:Управление торговлей, около 50 000 SKU. Предыдущий подрядчик — небольшая студия из трёх человек — работал с проектом 4 года.</p><p>В какой-то момент студия сообщила, что закрывается. Дали месяц на передачу дел. Казалось бы, достаточно — ведь всё должно быть задокументировано за 4 года?</p><p>Реальность оказалась другой:</p><ul><li>Документации не было вообще. Ни схемы архитектуры, ни описания бизнес-логики, ни даже списка кастомных доработок.</li><li>Комментариев в коде — ноль. 200+ файлов кастомных компонентов без единого пояснения, зачем они нужны.</li><li>Интеграция с 1С — на костылях. Стандартный обмен «доработан» на стороне Битрикс на 70%, логика разбросана по 15 файлам, часть — в обработчиках событий, часть — в агентах, часть — в кронах.</li><li>Доступы — у разработчика на ноутбуке. Root-пароль от сервера знал только один человек, и он уже нашёл новую работу.</li></ul><p>Результат: новая команда потратила 4 месяца только на то, чтобы разобраться в проекте и стабилизировать его. Бюджет на «передачу» вырос в 3 раза от первоначальной оценки. Два критичных бага в интеграции с 1С «стреляли» ещё полгода.</p><h2>Красные флаги при приёмке проекта</h2><p>Если вы видите хотя бы 3 пункта из этого списка — готовьтесь к сложной передаче:</p><ul><li>Код не в Git (или в Git, но без осмысленной истории коммитов)</li><li>Нет тестового сервера — все изменения катятся сразу на прод</li><li>Деплой через FTP вручную</li><li>Бэкапы «делает хостинг» (а вы ни разу не проверяли)</li><li>Пароли хранятся «в голове» или, ещё хуже, в чате</li><li>Предыдущий подрядчик не может объяснить, как работает интеграция с внешней системой (например, 1С)</li><li>На вопрос «где документация?» отвечают «код — лучшая документация»</li><li>Обновления Битрикса не ставились больше года</li><li>В папке /local/ — хаос из десятков файлов без структуры</li></ul><h2>Система оценки проекта: 5 уровней зрелости</h2><p>Прежде чем считать стоимость перехода, нужно понять, с чем вы имеете дело. Мы используем простую систему из 5 уровней — она позволяет за один день оценить состояние проекта и спрогнозировать трудозатраты.</p><p><b>Таблица уровней зрелости</b></p><figure><img src="https://media.tproger.ru/user-uploads/135094/2025-12-18/fabd85a5-568a-4a92-851b-9e04c652bab1.png" alt="" /></figure><p>Риск-множитель — это коэффициент, на который нужно умножить базовую оценку трудозатрат. Если вы оцениваете задачу в 100 часов, а проект на уровне 2, реально уйдёт 250–300 часов.</p><h2>Как определить уровень за 1 день: экспресс-аудит</h2><p>Вот чек-лист из 15 пунктов. Каждый «да» — это 1 балл. Посчитайте сумму и определите уровень.</p><p>Инфраструктура (5 пунктов):</p><ol><li>Все доступы (хостинг, домены, сервисы) задокументированы и переданы</li><li>Есть Git-репозиторий с историей коммитов за последний год</li><li>Существует тестовый сервер (dev или stage)</li><li>Бэкапы настроены и проверены (вы восстанавливали хотя бы раз)</li><li>Есть мониторинг (хотя бы uptime и базовые метрики)</li></ol><p>Код и архитектура (5 пунктов):</p><ol><li>Структура /local/ соответствует стандартам Битрикс ( <a href="https://docs.1c-bitrix.ru/">https://docs.1c-bitrix.ru/</a> )</li><li>Кастомные компоненты имеют понятные названия и лежат в правильных папках</li><li>Нет хардкода паролей и ключей в коде</li><li>Composer/npm используются для управления зависимостями</li><li>Обновления ядра Битрикс ставились в последние 6 месяцев</li></ol><p>Документация и процессы (5 пунктов):</p><ol><li>Есть описание архитектуры (хотя бы схема)</li><li>Задокументирована бизнес-логика нетривиальных модулей</li><li>Есть инструкция по деплою</li><li>Ведётся трекер задач с историей</li><li>Проводятся код-ревью (хотя бы для критичных изменений)</li></ol><p>Интерпретация результатов:</p><ul><li>0–3 балла → Уровень 1 (Хаос)</li><li>4–6 баллов → Уровень 2 (Базовый)</li><li>7–10 баллов → Уровень 3 (Управляемый)</li><li>11–13 баллов → Уровень 4 (Зрелый)</li><li>14–15 баллов → Уровень 5 (Передаваемый)</li></ul><p>Из практики: 80% проектов, которые к нам приходят на поддержку — это уровни 1–2. Уровень 4–5 встречается только у компаний с собственной in-house командой или у тех, кто изначально выстраивал процессы.</p><h2>Методика расчёта стоимости перехода</h2><p>Теперь переведём всё в деньги. Вот формула, которую мы используем:</p><p>Стоимость перехода = (Базовая оценка × Риск-множитель) + Скрытые затраты</p><h2>Компоненты базовой оценки</h2><p>1. Технический аудит — 40–80 часов</p><ul><li>Анализ кодовой базы</li><li>Проверка безопасности</li><li>Оценка технического долга</li><li>Документирование текущего состояния</li></ul><p>2. Восстановление/создание документации — 20–100 часов</p><ul><li>Схема архитектуры</li><li>Описание интеграций</li><li>Бизнес-логика кастомных модулей</li><li>Инструкции по деплою и обслуживанию</li></ul><p>3. Настройка инфраструктуры — 16–40 часов</p><ul><li>Развёртывание dev/stage-окружения</li><li>Настройка CI/CD</li><li>Перенос репозитория и настройка процессов</li><li>Настройка мониторинга и алертов</li></ul><p>4. Онбординг команды — 40–80 часов на разработчика</p><ul><li>Изучение проекта</li><li>Разбор кастомных решений</li><li>Погружение в бизнес-логику</li><li>Первые задачи под присмотром</li></ul><h2>Скрытые затраты (о которых часто забывают)</h2><p>Простой бизнеса во время передачи В переходный период скорость разработки падает в 2–3 раза. Новые фичи откладываются, баги фиксятся медленнее. Если ваш бизнес зависит от скорости изменений — закладывайте это в расчёт.</p><p>Юридические расходы</p><ul><li>Права на код: кому принадлежит то, что написал подрядчик?</li><li>NDA и передача данных</li><li>Расторжение договора с предыдущим подрядчиком</li></ul><p>Потеря данных и конфигураций Если доступы не были переданы корректно — часть данных может быть утеряна. Восстановление конфигураций внешних сервисов (платёжки, доставка, CRM) может занять недели.</p><p>Технический долг, который вскроется позже После передачи обязательно всплывут проблемы, которые не были видны на этапе аудита. Закладывайте буфер 20–30% на неожиданности.</p><figure><img src="https://media.tproger.ru/user-uploads/135094/2025-12-18/197ce5a1-3f87-4ff5-81d9-11a5f8eeccbe.png" alt="" /><figcaption>Важно: Это стоимость именно передачи проекта, а не его поддержки. Дальнейшая поддержка будет оцениваться отдельно, но если передача проведена качественно — стоимость поддержки будет ниже на 30–50%.</figcaption></figure><h2>Чек-лист приёмки проекта: 25 пунктов</h2><p>Этот чек-лист можно использовать как акт приёма-передачи. Пройдитесь по каждому пункту вместе с предыдущим подрядчиком и зафиксируйте статус.</p><h2>Блок A: Доступы и инфраструктура</h2><p>1. <b>Хостинг/сервер </b>— root-доступ, панель управления</p><p>2. <b>Домены</b> — доступ к регистратору, DNS-записи</p><p>3. <b>SSL-сертификаты </b>— где выпущены, когда истекают</p><p>4. <b>Почтовые сервисы</b> — SMTP, транзакционные письма</p><p>5. <b>CDN</b> — доступ и настройки (если используется)</p><p>6. <b>Внешние API </b>— платёжные системы, доставка, CRM</p><p>7. <b>Мониторинг</b> — доступы к сервисам мониторинга</p><p>8. <b>Бэкапы</b> — где хранятся, как восстанавливать</p><h3>Блок B: Кодовая база</h3><p>9. <b>Git-репозиторий</b> — полная история коммитов</p><p>10. <b>Ветки</b> — структура веток (prod, dev, feature)</p><p>11. <b>Лицензия Битрикс</b> — ключ, срок действия, на кого оформлена</p><p>12. <b>Сторонние модули </b>— лицензии, исходники, контакты разработчиков</p><p>13. <b>Composer/npm</b> — зависимости актуальны, lock-файлы в репозитория</p><p>14. <b>Кастомные компоненты</b> — список с кратким описанием</p><p>15. <b>Интеграции</b> — 1С, CRM, ERP: схема обмена, расписание, логи</p><h3>Блок C: Документация</h3><p>16. <b>Архитектура</b> — схема компонентов и их взаимосвязей</p><p>17. <b>Бизнес-логика </b>— описание нетривиальных модулей</p><p>18. <b>Инструкция по деплою </b>— шаги для выкатки изменений</p><p>19. <b>Известные проблемы</b> — workarounds, костыли, технический долг</p><p>20. <b>Контакты</b> — ключевые люди (разработчики, менеджеры, заказчики)</p><h3>Блок D: Данные и безопасность</h3><p>21. <b>Бэкап БД</b> — актуальный дамп базы данных</p><p>22. <b>Выгрузка контента</b> — медиафайлы, документы</p><p>23. <b>Логи</b> — логи за последние 3–6 месяцев</p><p>24. <b>Аудит безопасности </b>— результаты последнего сканирования</p><p>25. <b>Смена паролей </b>— все пароли изменены после передачи</p><p><b>Из практики: </b>Пункт 25 критически важен. Мы видели случаи, когда бывший подрядчик (или его уволенный сотрудник) заходил на сервер спустя месяцы после передачи. Меняйте ВСЕ пароли: сервер, база данных, админка Битрикс, FTP, панель хостинга, внешние сервисы.</p><h2>Переходный период: как не уронить прод</h2><p>Даже идеальная передача документов не гарантирует, что новая команда сразу начнёт работать на полную мощность. Нужен переходный период — и его тоже надо правильно организовать.</p><h2>Параллельная работа двух команд</h2><p>Оптимальный вариант — 2–4 недели параллельной работы. Старая команда ещё доступна для вопросов, новая уже погружается в проект.</p><p>Как это организовать:</p><ul><li>Выделите конкретные часы для созвонов (например, ежедневный стендап в 11:00)</li><li>Фиксируйте все ответы в письменном виде (Telegram, Битрикс24)</li><li>Новая команда ведёт «дневник» — записывает всё неочевидное, что узнаёт</li><li>Старая команда не берёт новых задач, только отвечает на вопросы и фиксит критичные баги</li></ul><h2>Заморозка крупных изменений</h2><p>На время передачи (и ещё 2–4 недели после) — никаких больших релизов. Только:</p><ul><li>Критичные баги, влияющие на продажи</li><li>Баги безопасности</li><li>Мелкие правки контента</li></ul><p>Всё остальное — в бэклог. Это болезненно для бизнеса, но попытка делать крупные изменения на незнакомом проекте заканчивается ещё большими проблемами.</p><h2>Приоритеты переходного периода</h2><ol><li>Первые 2 недели: стабилизация. Понять, как всё работает, не сломать ничего критичного.</li><li>Недели 3–4: поддержка. Начать закрывать текущие баги и мелкие задачи.</li><li>Недели 5–8: нормализация. Выйти на плановую скорость разработки.</li><li>Месяц 3+: развитие. Начать закрывать технический долг и делать улучшения.</li></ol><h2>Эскалационная матрица</h2><p>Договоритесь заранее, что делать в критических ситуациях:</p><figure><img src="https://media.tproger.ru/user-uploads/135094/2025-12-18/6fa994a9-29fa-4768-bca5-b66da227a0e6.png" alt="" /></figure><h2>KPI для новой команды на первые 90 дней</h2><p>Не требуйте сразу подвигов. Разумные KPI для переходного периода:</p><p>Месяц 1:</p><ul><li>Все критичные баги закрываются в течение 24 часов</li><li>Uptime не ниже 99%</li><li>Документация текущего состояния готова</li></ul><p>Месяц 2:</p><ul><li>Время реакции на задачи — не более 4 часов</li><li>Закрыто 80% бэклога багов</li><li>Dev-окружение полностью настроено</li></ul><p>Месяц 3:</p><ul><li>Скорость разработки — 70–80% от плановой</li><li>Первые улучшения инфраструктуры (CI/CD, мониторинг)</li><li>План по закрытию технического долга</li></ul><h2>Заключение</h2><p>Смена подрядчика — это не катастрофа, а управляемый процесс. Да, он требует времени и денег. Но правильный подход позволяет:</p><ul><li>Сократить время адаптации с месяцев до недель</li><li>Снизить риски потери данных и простоя</li><li>Сэкономить бюджет за счёт точной оценки вместо «примерно»</li></ul><p><b>Главное правило</b>: инвестиция в качественную передачу окупается в 3–5 раз на последующей поддержке. Проекты, принятые «на скорую руку», потом годами тянут за собой проблемы и перерасход бюджета.</p><p>Если вы сейчас в процессе смены подрядчика или планируете это сделать — используйте чек-лист и методику из этой статьи. А если нужна помощь с аудитом или приёмкой проекта — мы проведём экспресс-оценку за 1–2 дня и дадим честную картину того, с чем вы имеете дело.</p>]]></content:encoded>
    </item>
    <item>
      <title>Разделение оплаты между юридическими лицами на Битрикс: пошаговая инструкция</title>
      <link>https://tproger.ru/articles/oplata-ot-dvuh-yuridicheskih-lic-na-bitriks--powagovaya-instrukciya</link>
      <comments>https://tproger.ru/articles/oplata-ot-dvuh-yuridicheskih-lic-na-bitriks--powagovaya-instrukciya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дмитрий Талызин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/oplata-ot-dvuh-yuridicheskih-lic-na-bitriks--powagovaya-instrukciya</guid>
      <description><![CDATA[<p>Оптимизируйте процесс приема платежей, улучшите взаимодействие с клиентами и сделайте свою платформу более удобной для бизнеса. Простой и понятный подход к реализации двусторонних расчетов на Битрикс.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/oplata-ot-dvuh-yuridicheskih-lic-na-bitriks--powagovaya-instrukciya">Разделение оплаты между юридическими лицами на Битрикс: пошаговая инструкция</a>»</p>]]></description>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 10 Sep 2024 14:20:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Бизнес, работающий с физическим товаром покупает его, хранит и продает от конкретного юридического лица. Однако бывает необходимость делать все это от нескольких юридических лиц.</p><p>В классическом интернет-магазине техническая реализация предполагает продажу товара только от одного юрлица, но это бы означало с точки зрения бухгалтерии необходимость переместить товар с одного юрлица на другое, что является не только головной болью бухгалтера, но и предполагает денежные потери на такой транзакции.</p><h3>Важность реализации функционала разделения оплаты</h3><p><b>1. Упрощение бухгалтерского учета</b></p><p>Разделение платежей между двумя юридическими лицами позволяет более четко отслеживать финансовые потоки. Каждое юридическое лицо может вести отдельный бухгалтерский учет, что упрощает процесс отчетности и минимизирует риски ошибок. Это особенно актуально для компаний, работающих в разных регионах, где налоговые правила могут значительно отличаться.</p><p><b>2. Снижение налоговых рисков  </b></p><p>Разделение оплат позволяет более эффективно управлять налоговыми обязательствами. Каждое юридическое лицо может оптимизировать свои налоговые расходы в соответствии с действующим законодательством. Это снижает риск налоговых проверок и штрафов, так как каждая компания отвечает только за свои финансовые операции.</p><p><b>3. Гибкость в управлении финансами</b></p><p>Разделение платежей дает возможность более гибко управлять финансами. Например, одно юридическое лицо может заниматься продажами одних групп товаров, а другое — других групп товаров, к примеру от разных поставщиков.</p><p><b>4. Легкость в масштабировании бизнеса</b></p><p>При расширении бизнеса или выходе на новые рынки наличие нескольких юридических лиц может стать значительным преимуществом. Каждое из них может адаптироваться к специфике нового рынка, что позволяет легче и быстрее реагировать на изменения и потребности клиентов.</p><figure><img src="https://media.tproger.ru/user-uploads/72001/2024-08-20/8084383b-7874-4a4c-8a2c-04a6a608483d.png" alt="" /></figure><h4>Настройка функционала разделения оплаты</h4><p>Теперь поговорим о том, как же всю эту красоту настроить технически на платформе Bitrix.</p><p>В настройках платежных систем мы добавили два способа оплаты. В нашем случае это платежные системы с ID 10 и 11:</p><figure><img src="https://media.tproger.ru/user-uploads/72001/2024-08-20/5eb23fb3-fd89-41da-b965-6b74817a84ee.jpg" alt="" /></figure><p>Обработчик, название и описание у них одинаковые:</p><figure><img src="https://media.tproger.ru/user-uploads/72001/2024-08-20/9460931f-ecb0-4c99-905d-4078a90ce642.jpg" alt="" /></figure><p>Отличаются только настройки платежной системы, которые были предоставлены Paykeeper:</p><figure><img src="https://media.tproger.ru/user-uploads/72001/2024-08-20/9cca70c1-bfe3-4445-87e9-91df974bd76b.jpg" alt="" /></figure><p>Затем мы внесли изменения в шаблон страницы оформления заказа, в нашем случае это компонент sale.order.ajax. Мы сделали, чтобы для пользователя отображалась всегда одна из платежный систем.</p><figure><img src="https://media.tproger.ru/user-uploads/72001/2024-08-20/cf640bc6-8966-49ae-a735-e8f467bba1f0.jpg" alt="" /></figure><p>То есть, если в корзине есть товары, которые принадлежат только первому складу или обоим складам одновременно, то в этом случае отображалась платежная система с ID 10.</p><p>В остальных случаях c ID 11.</p><p>Таким образом, если у пользователя в корзине были товары только с первого или только со второго склада, то алгоритм оформления заказа никак не менялся с точки зрения пользователя. Ему автоматически подставлялась необходимая платежная система, и далее он оформлял заказ, проходя штатный механизм Битрикс.</p><p>Вся магия начиналась, когда у пользователя в корзине были товары с обоих складов. Так как Битрикс при оформлении заказа всегда создает одну оплату, то нам необходимо сразу после оформления заказа разделять ее на две отдельных оплаты.</p><p>Для этого мы в файле init.php на событие OnSaleOrderSaved создаем обработчик, в котором все изменения делаем для только для новых заказов:</p><p>Далее получаем заказ, товары из него и коллекцию оплат:</p><p>Товары складываем в массив $arBasketItems, чтобы потом с ним было проще работать:</p><p>Затем проверяем, на каких складах содержатся товары из массива $arBasketItems  , и сохраняем итоговую сумму товаров по складам в массиве $arBillSum:</p><p>Ключами массива $arBillSum являются ID складов, хранящиеся в Битрикс. В нашем случае есть два склада с ID 1 и 2.</p><p>Мы проверяем, если в заказе есть товары с обоих складов, то в этом случае делаем разбиение на два счета:</p><p>Из текущей суммы оплаты вычитаем стоимость товаров, принадлежащих ко второму складу. Данная стоимость хранится в переменной $arBillSum[2]:</p><p>Теперь создаем вторую оплату. ID 11 — это идентификатор второй платежной системы в Битрикс:</p><p>Сохраняем заказ:</p><p>После этого пользователь попадает в личный кабинет на страницу данного заказа, которая реализована через стандартный компонент sale.personal.order.detail:</p><figure><img src="https://media.tproger.ru/user-uploads/72001/2024-08-20/e865ad38-d1f6-4021-ab67-5cf0519b8b8a.jpg" alt="" /></figure><p>Вверху мы выводим сообщение, в котором подробно описываем, почему у данного заказа две оплаты.</p><p>Ниже у него выводится две кнопки на оплату, а в правой части отображаются товары данного заказа, разбитые на две части.</p><p>Оплату мы принимаем через <a href="https://marketplace.1c-bitrix.ru/solutions/ooopaykeeperprocessing.paykeeperpayment/">систему</a> PayKeeper и на сайте используем ее модуль. Этот модуль, к сожалению, не поддерживает корректную работу при оплате двух счетов, поэтому нам пришлось его немного кастомизировать.</p><p>Для этого необходимо внести изменения в файле /bitrix/modules/ooopaykeeperprocessing.paykeeperpayment/install/bitrix/</p><p>modules/sale/handlers/paysystem/paykeeper/handler.php :</p><ul><li>в методе initiatePay(), чтобы сумма оплата бралась не как сумма заказа, а как сумма конкретной платежки,</li><li>в методе cart(), который формирует данные для чека — в него мы добавили проверку, чтобы он также возвращал не все товары, а только те, которые относятся к конкретной платежке.</li></ul><p>После установки модуля этот файл будет скопирован в папку /bitrix/modules/sale/handlers/paysystem/paykeeper/handler.php  — через нее он будет подключаться при оплате.</p><figure><img src="https://media.tproger.ru/user-uploads/72001/2024-08-20/ff121dac-20ae-41f5-9801-97230eed6c6c.png" alt="" /></figure><p><i>Если у вас остались вопросы, с удовольствием ответим на них в комментариях! </i></p>]]></content:encoded>
    </item>
    <item>
      <title>Онлайн-платформа для обучения и совершенствования на 1С</title>
      <link>https://tproger.ru/articles/onlajn-platforma-dlya-obucheniya-i-soverwenstvovaniya-v-programmirovanii-na-1s-250247</link>
      <comments>https://tproger.ru/articles/onlajn-platforma-dlya-obucheniya-i-soverwenstvovaniya-v-programmirovanii-na-1s-250247?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[El Coan]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/onlajn-platforma-dlya-obucheniya-i-soverwenstvovaniya-v-programmirovanii-na-1s-250247</guid>
      <description><![CDATA[<p>Тренировка и обучение языку программирования 1С в онлайн-системе. Решайте алгоритмические задачи, повышайте свой навык и обучайтесь.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/onlajn-platforma-dlya-obucheniya-i-soverwenstvovaniya-v-programmirovanii-na-1s-250247">Онлайн-платформа для обучения и совершенствования на 1С</a>»</p>]]></description>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 13 Apr 2024 13:10:01 GMT</pubDate>
      <content:encoded><![CDATA[<p>Представляю свой хобби-проект: площадку для решения алгоритмических задач на языке программирования 1С.</p><p>В мире разработки ПО существует множество платформ, предназначенных для тренировки и совершенствования навыков программирования. Но до текущего момента ни на одной из них не было возможности решать задачи на 1С. Теперь такая платформа существует.</p><p>Если же вас интересуют вакансии Java-разработчика, ознакомьтесь с этим предложением от Сбера по ссылке → <a href="https://tproger.ru/jobs/java-razrabotchik-5?utm_source=site&amp;utm_medium=blog&amp;utm_campaign=jobs-sber&amp;utm_content=8">Java-разработчик</a>.</p><figure><img src="https://media.tproger.ru/user-uploads/99482/2024-04-12/8dcfb972-9fde-477f-a21c-ce78ec4a012a.png" alt="" /><figcaption>Список заданий</figcaption></figure><h2>Функционал</h2><ol><li>Платформа предлагает широкий спектр задач для решения на языке программирования 1С для разного уровня сложности. Это позволяет как начинающим, так и опытным разработчикам проверить и улучшить свои навыки.</li><li>Редактор кода: удобный онлайн-редактор кода с подсветкой синтаксиса позволяет комфортно работать над решением задач. Вам не нужно устанавливать дополнительное ПО, для того, чтобы начать.</li><li>Тестирование решений: система автоматически проверяет ваш код на корректность и эффективность, а также информирует об ошибках.</li><li>Статистика и рейтинг: пользователи могут отслеживать свой прогресс, просматривать статистику прохождения задач и сравнивать свои результаты с другими участниками.</li></ol><figure><img src="https://media.tproger.ru/user-uploads/99482/2024-04-12/758d7c57-62bd-4446-9d25-ac0eb3cbfc5c.png" alt="" /><figcaption>Решения других участников</figcaption></figure><h2>Преимущества</h2><ol><li><b>Уникальность</b>: платформа специализируется на языке 1С, что делает ее уникальной и ценной для специалистов, работающих с этим языком.</li><li><b>Обучение и развитие</b>: решение задач по программированию на 1С помогает улучшить понимание языка, умение использовать его особенности и повысить профессиональный свой уровень.</li><li><b>Сообщество</b>: платформа объединяет сообщество разработчиков, где можно обсудить задачи, делиться опытом и учиться у других.</li></ol><figure><img src="https://media.tproger.ru/user-uploads/99482/2024-04-12/771fecb8-c30b-47e0-be7a-89bec688e354.png" alt="" /><figcaption>Профиль участника</figcaption></figure><p>В целом, система будет интересна всем, кто интересуется программированием на языке 1С и стремится к развитию своих навыков. Начинающий разработчик или опытный специалист, здесь всегда есть место для обучения, практики и роста! <a href="https://xexod.ru/" rel="nofollow">Присоединяйтесь, будет интересно</a>!</p>]]></content:encoded>
    </item>
    <item>
      <title>Почему стоит выучить 1С в 2024 году</title>
      <link>https://tproger.ru/articles/pochemu-stoit-vyuchit-1s-v-2024-godu</link>
      <comments>https://tproger.ru/articles/pochemu-stoit-vyuchit-1s-v-2024-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/pochemu-stoit-vyuchit-1s-v-2024-godu</guid>
      <description><![CDATA[<p>Блогер Alek OS рассказал в своём блоге на YouTube, почему в 2024 стоит присмотреться к 1С и выучить этот язык программирования. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/pochemu-stoit-vyuchit-1s-v-2024-godu">Почему стоит выучить 1С в 2024 году</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 24 Jan 2024 14:02:44 GMT</pubDate>
      <content:encoded><![CDATA[<p>Блогер Alek OS рассказал в своём блоге на YouTube, почему в 2024 стоит присмотреться к 1С и выучить его.</p><p>Вот краткое саммари по видео:</p><ol><li>1С – это не только бухгалтерия и игры, но и язык программирования, автоматизация бизнес-процессов и платформа для различных видов бизнеса.</li><li>Платформа 1С включает типовые и нетиповые конфигурации, а разработка ведется на встроенном языке программирования.</li><li>Продукция 1С охватывает практически все функции бизнеса и государственных организаций, что обеспечивает постоянный спрос на 1С-разработчиков.</li><li>Разработчики 1С занимаются внедрением и сопровождением программ в организациях, а их вакансии разнообразны и требуют сертификации.</li><li>Зарплата 1С-разработчиков зависит от квалификации и опыта, их обязанности включают не только программирование, но и работу с клиентами.</li><li>Для устройства на работу 1С-программистом требуются технические знания, понимание бухгалтерского учета и бизнес-процессов.</li><li>Несмотря на стереотипы, 1С-разработчики могут успешно переходить в другие области программирования, такие как DevOps.</li></ol><p>Ниже представлена текстовая версия ролика, выполненная нейросетью.</p><p>Что первое приходит на ум при упоминании 1С? Компания, бухгалтерия, игры. Да, все так, только еще это язык программирования, автоматизация бизнес-процессов и сама платформа, на которой все это работает, включая десятки программ для различных видов бизнеса.</p><h2>История 1С</h2><p>С момента появления компании в 1991 году изменилось многое. Сейчас 1С это не про бухгалтеров, это про полноценную разработку. А такие вакансии, как 1С-разработчик или 1С-аналитик, стали привычными вакансиями …на рынке труда. Чтобы понять задачи, которые таким программистам предстоит решать, нужно внести немного ясности и разобраться с тем, как в 1С вообще всё устроено. Во-первых, есть сама компания под названием 1С, а есть платформа 1С с точно таким же названием.</p><p>Это программа с закрытым исходным кодом, в которой работают другие программы от 1С, называемые конфигурациями. Бывают они типовые и нетиповые.</p><h2>Типовые и нетиповые конфигурации 1С</h2><p>Типовые — это конфигурации, разработанные самой компанией 1С. Она сама их поддерживает и сама выпускает новые версии. Например, сюда относятся бухгалтерия, зарплата и управление персоналом, управление торговлей и множество других.</p><p>Нетиповые — это конфигурации, созданные другими компаниями или программистами. Но, как правило, программисты берут уже готовое типовое решение и дорабатывают его для нужд конкретного предприятия. Вся эта разработка ведется на встроенном в платформу из их с точно таким же названием — 1С. Несмотря на то, что синтаксис этого по языка на русском, что выглядит довольно странно для всего рынка программирования в целом, он лучше других подходит для решения бизнес-задач, так как изначально под них адаптирован. То есть он, например, изначально работает с такими видами объектов, как справочники, документы, отчеты и так далее.</p><h2>Почему 1С популярен в России</h2><p>Хорошо, но почему вообще 1С смог стать таким востребованным и популярным в России и СНГ? Дело в том, что продукция компании 1С охватывает практически все функции бизнеса и государственных организаций. Что порождает огромное количество клиентов, которые никогда не оставят 1С разработчика без дела.</p><p>На каждом предприятии ведется учет, начиная от подсчета продукции, зарплаты и налогов, заканчивая документооборотом и отчетами. Продукция компании 1С подходит как для очень крупных организаций, так и для розничных магазинов, ИП, оптовых складов, госструктуры и так далее.</p><p>Можно сколько угодно говорить, что это слишком узкоспециализированное направление в программировании, где еще и код на русском языке. Но если мы посмотрим на рынок в целом, то заметим, что очень многие направления уже давно стали точно такими же узкоспециализированными областями со своим стеком инструментов.</p><p>Например, верстка, базы данных, Data Science со своими фреймворками и так далее. Каждое из этих направлений не является универсальным, и перейти из одного в другое, не переучиваясь, конечно же, невозможно. То же самое касается и разработчиков 1С. Как и во многих направлениях, программисты в 1С не столько создают новые продукты, сколько работают с уже готовыми. Они занимаются внедрением и сопровождением программ 1С в организации, то есть совмещают в себе обязанности программиста и системного администратора.</p><p>Они устанавливают, настраивают, дорабатывают, обновляют и даже консультируют пользователей и клиентов. Только если раньше к ним приходилось ездить физически, то сейчас всё это делается удалённо, что сильно упрощает весь процесс. Это позволяет работать как в компаниях-партнёрах 1С или на крупных производствах, так и на фрилансе, обслуживая малые предприятия. Все вакансии 1С-программиста тоже делятся на множество специализаций.</p><h2>Специализации 1С-программистов</h2><p>Кто-то работает с бухгалтерией, кто-то занимается связкой 1С с интернет-магазинами, а кто-то настраивает мобильные приложения для кладовщиков и курьеров. Чтобы устроиться работать 1С программистом, нужно выучиться и подтвердить свою квалификацию как специалиста. Осуществляется это с помощью сертификаций, которые сама компания 1С и проводит. Выдавая сертификат, она ручается перед своими заказчиками, что специалист достаточно обучен и умеет работать с продуктами. Дают эти сертификаты преимущественно при приеме на работу.</p><p>Делятся они на два типа. Это 1С профессионал и 1С специалист. Первый проверяет теоретические знания программиста. Знания самой платформы и одной из типовых конфигураций, например, бухгалтерии. Второй проверяет практические знания после получения сертификата профессионал.</p><h2>Зарплаты 1С-программистов</h2><p>Что касается зарплат, то здесь, как и заработок любого программиста, зависит от его квалификации и опыта. Согласно статистике, стажёры получают зарплату от 40 до 70 тысяч рублей, программисты с опытом до 3 лет имеют возможность получать до 180 тысяч, а ведущие разработчики с опытом от 3 лет …выше могут рассчитывать на 200-300 тысяч и больше.</p><p>Эти зарплаты сопоставимы с любым другим языком программирования, вроде того же JavaScript, PHP и так далее. Что нужно знать, чтобы устроиться таким специалистом?</p><p>Во-первых, это техническая база. Кроме знаний платформы и конфигурации самого языка 1С, требуются знания по работе с базами данных, знания языка SQL и знания языка запросов к базе данных 1С.</p><p>Во-вторых, кроме технических знаний, нужно разбираться в основном бухгалтерского и налогового учёта в области законодательства и финансов, ну и понимать бизнес-процессы на самом предприятии.</p><p>Хоть 1С это действительно довольно замкнутая система со своим набором инструментов и знаний, это не значит, что 1С-разработчики не смогут при желании уйти в другое направление в программировании.</p><p>Практика показывает, что 1С разработчики при необходимости без проблем меняют как языки программирования, так и целое направление своей работы, уходя, например, в DevOps. Все сложности строятся только на стереотипах и неуверенности в себе.</p><p>https://www.youtube.com/@AlekOS</p>]]></content:encoded>
    </item>
    <item>
      <title>Тестирование ПО: виды, подходы и 1С-проекты</title>
      <link>https://tproger.ru/articles/testirovanie-po-vidy-podhody-i-1s-proekty</link>
      <comments>https://tproger.ru/articles/testirovanie-po-vidy-podhody-i-1s-proekty?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Окулов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/testirovanie-po-vidy-podhody-i-1s-proekty</guid>
      <description><![CDATA[<p>Рассказали, что такое тестирование, какие виды тестирования существуют и какое тестирование уместно в мире 1С.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/testirovanie-po-vidy-podhody-i-1s-proekty">Тестирование ПО: виды, подходы и 1С-проекты</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 14 Nov 2023 13:12:27 GMT</pubDate>
      <content:encoded><![CDATA[<p>В данном материале я сделал попытку подробнее остановиться на вопросе о месте и значении такого вида работ, как тестирование в рамках внедрения программного обеспечения, в частности, во вселенной 1С.  Очень подробно на описании видов тестирования и спорах, какой из них лучше или сильнее, я останавливаться не буду. Целью данной заметки является попытка по-новому отнестись к самому понятию «тестирование» в нашей повседневной работе.</p><ol><li><a href="https://tproger.ru/#one">Альфа-тестирование</a></li><li><a href="https://tproger.ru/#two">Бета-тестирование</a></li><li><a href="https://tproger.ru/#three">Сценарное и исследовательское тестирование</a></li><li><a href="https://tproger.ru/#four">Дымовое тестирование</a></li><li><a href="https://tproger.ru/#five">Тестирование в мире 1С</a></li><li><a href="https://tproger.ru/#six">Тестирование и комплексные проекты</a></li></ol><p>Самой трудоемкой частью работы по созданию нового ПО является вовсе не написание кода, а процесс его отладки и исправления ошибок. Код пишут люди, а люди не могут не ошибаться. По статистике, на каждую тысячу строк кода приходится от 5 до 15 ошибок, и вот отлавливание этих ошибок и занимает львиную долю времени. Именно для этого и существует отладка. Что такое альфа- и бета-тестирование, мы сейчас и узнаем.</p><p>Первичная отладка кода идет параллельно с его написанием, и занимаются ею сами программисты. По мере готовности отдельные программные модули поступают к штатным тестировщикам компании разработчика, которые начинают их проверять при помощи специальных систем автоматизированного тестирования. Обычно на входе программного модуля задается определенный набор параметров, при этом известно, что должно быть на выходе при правильной работе программы. Если на выходе окажутся другие результаты, тестировщик начинает поиск ошибок при помощи <a href="https://myblaze.ru/pogovorim-ob-oshibkah-chto-takoe-bag/">багтрекеров и дебаггеров</a>.</p><figure><img src="https://media.tproger.ru/user-uploads/92813/2023-11-13/1fd64b1b-af90-4665-8145-9d98131698fd.png" alt="" /></figure><p>После того, как отдельные программные модули готовы, они объединяются в некое единое целое. Это еще не полнофункциональная программа, но она уже способна работать и выполнять, хотя бы частично, свои главные задачи. Такой вариант программы называют альфа-версией.</p><h2>Альфа-тестирование</h2><p>Альфа-тестирование — это этап отладки и проверки альфа-версии программы, а люди, которые будут заниматься ее тестированием — альфа-тестерами. Это могут быть штатные тестировщики компании или люди, которые работают по договору, но это квалифицированные специалисты, умеющие работать со специализированным ПО и пользоваться специальными методиками.</p><p>По окончании работы с альфа-версией выпускается бета-версия. Она представляет собой реально работающую версию программы с полным функционалом. И задача бета-тестов – оценить возможности и стабильность работы программы с точки зрения ее будущих пользователей. Поэтому на роль бета-тестеров приглашаются просто люди, имеющие опыт работы с программами такого типа или, что еще лучше, с предыдущей версией этой же программы. Обычно у компаний уже есть определенный круг лиц, с которыми они постоянно сотрудничают.</p><h2>Бета-тестирование</h2><p>Бета-тестирование — это этап отладки и проверки бета-версии программы, то есть практически рабочей версии, которую увидят конечные пользователи.</p><p>И наконец, может быть объявлено открытое бета-тестирование (ОБТ), когда на роль бета-тестеров приглашают всех желающих. Чтобы подключиться к этому процессу, обычно достаточно оставить заявку на сайте производителя и заполнить анкету.</p><p>Некоторое отклонение от изложенного порядка допускают компании, выпускающие онлайн-игры. Они нередко начинают привлекать к тестированию своих будущих пользователей еще на стадии альфа-тестов. Связано это с особенностями программирования онлайн-игр. Игровой мир состоит из огромного количества карт, персонажей, оружия, предметов, но «играбельность» нового мира можно проверить и при минимальном наборе всего перечисленного. Это и позволяет привлекать к работе геймеров на ранних стадиях проекта.</p><p>Надо сказать, что разработчики не испытывают недостатка в желающих принять участие в такой работе – геймеры народ азартный и каждый желает первым познакомиться с новой игрой (кстати, почему могут тормозить игры читайте <a href="https://myblaze.ru/pochemu-tormozyat-igryi-kak-ubrat-lagi-i-tormoza/">здесь</a>). Такого рода сотрудничество приносит пользу обеим сторонам, ведь исправления проще сделать в процессе работы, а не когда она уже завершена, а замечания и пожелания пользователей позволяют сделать игру лучше и интересней.</p><p>А уж когда дело доходит до открытого бета-тестирования, там и вообще нет отбоя от желающих. Помимо всего прочего, производитель обычно сохраняет бета-тестерам после перехода на финальную версию их достижения и регалии, заработанные при тестировании. В результате они <a href="https://myblaze.ru/testirovanie-chto-takoe-alfa-i-beta-test/">имеют немалую фору по сравнению с другими игроками</a>, не говоря уже о заработанном игровом опыте.</p><h2>Сценарное и исследовательское тестирование</h2><p>Также существуют и другие классификации тестирования: сценарное (scripted) и исследовательское (exploratory).</p><p>Основная особенность сценарного тестирования в том, что вы начинаете с того, что делите задачу на этапы (подготовка, выполнение, завершение и пр.) и затем стараетесь производить все действия согласно этим этапам. То есть этот подход можно охарактеризовать как «я думаю на этим заранее и затем выполняю».</p><p>Исследовательское тестирование подразумевает совершенно иной подход – разработка процесса тестирования происходит непосредственно во время работы. Тестирование начинается с некой важной точки, в процессе появляются другие важные точки тестирования, и каждый раз специалист решает, какая из них наиболее важна и в каком направлении двигаться дальше. То есть продумывание и запуск тестов происходят в постоянном взаимодействии.</p><p>Некоторые люди полностью полагаются на сценарное тестирование и считают исследовательское тестирование опасным. Другие, наоборот, используют исследовательское тестирование и считают сценарное чем-то из прошлого. Я думаю, правы и неправы и те, и другие. Оба подхода могут иметь ценность, но это зависит от ситуации.</p><p>Однако эти два подхода к тестированию – не единственные. Кроме них существуют другие подходы, которые находятся где-то между ними.</p><p>Почему я расположил их в таком порядке? Исследовательское тестирование практически не требует подготовки, а к сценарному тестированию нужно серьезно готовиться. А, например, сессионное находится где-то посередине – оно требует подготовки, но не столь большой.</p><p>Профессиональный тестировщик <a href="https://habr.com/ru/companies/jugru/articles/341852/">должен знать о каждом из этих подходов и понимать</a>, какой из них лучше всего подойдет в каждом конкретном случае.</p><h2>Дымовое тестирование</h2><p>Еще выделяют такой вид тестирования, как «дымовое».</p><p>Smoke-тестирование можно назвать «проверкой сборки», т.к. с помощью дымовых тестов мы проверяем работоспособность и стабильность сборки.</p><p>Преимущества Smoke-тестирования:</p><ul><li>простота выполнения тестирования;</li><li>обнаружение дефектов на ранних этапах;</li><li>повышение качества системы;</li><li>экономия времени и ресурсов при тестировании;</li><li>минимизация рисков интеграции.</li></ul><h3>Чем различаются Smoke, Sanity и регрессионное тестирование</h3><p>Smoke проверяет рабочее состояние новой сборки. Sanity-тестирование проверяет изменения, которые были сделаны в текущей сборке. Регресс проводится для проверки всего функционала, который был затронут в ходе изменения в текущей сборке.</p><p>Дымовое тестирование можно выполнить на любой сборке. Sanity и Регресс выполняются только на стабильных сборках.</p><p>Smoke-тестирование может выполняться как разработчиками, так и тестировщиками. Sanity и Регресс выполняются только тестировщиками.</p><p>Smoke-тестирование обязательно проводится для каждой новой сборки. Sanity-тестирование делают, только если нет времени на более глубокое регрессионное тестирование. Регрессионное тестирование выполняется всегда, когда нет ограничения во времени.</p><h3>Как выполняется смоук-тестирование</h3><p>Smoke-тестирование выполняется при каждой новой сборке. Для этого специалисты определяют минимальный набор тест-кейсов для критически важного функционала. На этапе написания тест-кейсов выделяют приоритетность и серьёзность кейса. В Smoke-прогон входят кейсы с Priority High и Severity Critical — как правило, это основные пользовательские сценарии, набор кейсов для проверок интеграционных модулей.</p><p>К примеру, у нас в системе используются сторонние модули для скачивания документов, отображения карт, отправки писем, регистрации через интеграционную систему. Эти кейсы добавлены в Smoke-прогон. Тестировщики должны убедиться, что все критически важные функции работают правильно: подключены ли модули, выполняют ли они свою основную функцию. К примеру, <a href="https://qualitica.ru/blog/smoke-testirovanie">при проверке модуля скачивания документов нужно убедиться, что документ скачивается</a>, а что конкретно в нем отображено – уже задача для регресса.</p><h2>Тестирование в мире 1С</h2><p>Как можно заключить из сказанного, тестирование – это очень сложный и, зачастую, процесс поиска без гарантированного результата в силу объективной сложности современных информационных систем, а не рутинное дело, как может показаться на первый взгляд. В мире 1С используется весь спектр технологий тестирования. В последние годы все чаще и чаще упор делается на автоматизированное тестирование, для вымещения «человеческого фактора» и повышения скорости выхода релизов программных продуктов.</p><p>На мой взгляд, в практике внедрений продуктов 1С в фирмах-партнерах все же недостаточно внимания уделяется человеческому тестированию и тестированию в широком толковании данного процесса. Под термином «тестирование» обычно понимается процесс проверки функциональности программы после внесения изменений в ее конфигурации на уровне кода. То есть программист внес изменения в программу на основании прописанной аналитиком задачи, которая, в свою очередь, ставится на основе пользовательских требований, собранных в ходе анализа. Я еще пропустил стадию проектирования, но она происходит не всегда.</p><p>На первый взгляд, все предельно просто и тривиально, однако в современной практике разработки и доработки приложений для бизнеса, в частности, на линейке 1С производятся параллельные доработки кода по разным направлениям. Так, например, одновременно могут вноситься изменения в структуру справочников и механизмы работы регистров, очевидно, что риски возникновения противоречий и конфликтов в коде между доработками очень высок. И делается это осознанно в угоду сокращения сроков комплексных внедрений.</p><p>Таким образом, повышается роль технологий тестирования, в т.ч. для снижения фактора «дружественного огня». Также нужно понимать, что тестирование – это всегда проблема репрезентативности и ресурса, также как в социологических опросах. Невозможно опросить всех людей, всегда делается максимально репрезентативная выборка, и чем она меньше и репрезентативнее – тем лучше результат.</p><h2>Тестирование и комплексные проекты</h2><p>Однако процесс тестирования имеет более глубокий смысл, в особенности в проектной сфере комплексной автоматизации. Давайте вернемся к этапам классического проектного внедрения:</p><ol><li>анализ и сбор требований к ПО;</li><li>проектирование и моделирование;</li><li>разработка технического решения;</li><li>подготовка в опытной эксплуатации ПО;</li><li>опытная эксплуатация.</li></ol><p>Бывает опытную эксплуатацию заменяют терминов «опытно-промышленная», но мы не будем придираться к мелочам, сейчас для нас это незначительный момент. Если подходить к процессу тестирования узко, то данный процесс зашит в этапе 3, т.е. после каждой разработки или доработки кода аналитики, ставившие задачи программистам, должны оттестировать выполнение задач. Тем не менее тестирование ведь проводится не только проектной командой, тестирование проводится и на следующих этапах уже самими пользователями, на этапах 4 и 5. Что следует из их названия. Причем организация данного расширенного тестирования приобретает высокое значение, потому как с одной стороны решает ресурсную проблему, он повышает степень «неприятия изменений» со стороны пользователей. Это процесс влияния негативных социальных настроений при внедрении новых бизнес-приложений и учетных систем. Найти баланс между этими двумя факторами жизненно важно.</p><p>Более того, не только 3, 4, 5 этапы содержат в себе значительный объем работ по тестированию. На этапе анализа и сбора требований проектная команда также занимается по сути тестированием, проверкой тех же требований на соответствие будущей технической конфигурации. На этапе анализа бизнес-логики удобнее всего фиксировать требования сценарным методом. Другими словами, нужно выстроить описание бизнес-логики в сценарий по максимально возможно мелко нарезанным шагам, это дает повышенный уровень точности и снижает долю неопределенности.</p><p>Так, грамотная проектная команда уже на этапе сбора требований, выстраивает все требования к новой информационной системе в сценарном виде (по шагам рабочего процесса). Это дает более системную картинку и привносит наглядность по местам возможных потенциальных противоречий, что бывает крайне часто, т.к. разные функции не обращают внимание на работу своих смежников.</p><p>Далее такой сценарий дорабатывается уже на этапе проектирования будущего технического решения и становится основой для приемочного тестирования, как отдельных доработок конфигурации, так и в целом приемочны испытаний всей системы. По этому же сценарию можно производить нагрузочные испытания, а затем и разработать автоматизированные тесты.</p><p>В итоге, если использовать сценарный подход, в проектном внедрении приобретается содержательная целостность и кристаллизуется ядро проектного решения будущей информационной системы, и процесс тестирования в частном прочтении становится более прозрачным и системным.</p>]]></content:encoded>
    </item>
    <item>
      <title>Сервисы вокруг 1С: как выйти за рамки типовых возможностей программы</title>
      <link>https://tproger.ru/articles/servisy-vokrug-1s-kak-vyjti-za-ramki-tipovyh-vozmozhnostej-programmy-245356</link>
      <comments>https://tproger.ru/articles/servisy-vokrug-1s-kak-vyjti-za-ramki-tipovyh-vozmozhnostej-programmy-245356?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Матвей Серегин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/servisy-vokrug-1s-kak-vyjti-za-ramki-tipovyh-vozmozhnostej-programmy-245356</guid>
      <description><![CDATA[<p>Как разнообразить работу сервисов на 1С и какие фичи «прикрутить» к базовому софту, рассказал системный архитектор «1С:БухОбслуживание».</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/servisy-vokrug-1s-kak-vyjti-za-ramki-tipovyh-vozmozhnostej-programmy-245356">Сервисы вокруг 1С: как выйти за рамки типовых возможностей программы</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 30 Aug 2023 13:05:31 GMT</pubDate>
      <content:encoded><![CDATA[<p>1С по праву считается монополистом на рынке бухгалтерских услуг. По итогам 2021 года он <a href="https://vc.ru/tribuna/406570-sap-uydet-a-biznes-dolzhen-ostatsya">занимал 45% ERP рынка</a>, а с уходом SAP из России аналитики прогнозировали, <a href="https://www.cnews.ru/news/line/2022-12-20_prognoz_edit_pro_2023_stanet">рост</a> доли до 70-75 % к 2023 году. Не стоит забывать, что 1С — не только система управления бизнесом, но и <a href="https://znantrend.ru/navyki-skills/programmist/">популярный full-stack язык</a>, в который разработчики постоянно добавляют новые возможности. Во многом это заслуга активного сообщества 1С-программистов, которые ищут нестандартные подходы к решению обыденных задач.</p><p>Как разнообразить работу уже существующих программ на 1С и какие фичи «прикрутить» к базовому софту — рассказал Матвей Серёгин, системный архитектор сервиса «1С:БухОбслуживание», «1С», автор курса «1С-программист: с нуля до middle» и преподаватель Нетологии.</p><h2>Типовые и нетиповые решения 1С</h2><p>Под «типовыми» решениями обычно понимают универсальные приложения для управления предприятиями, ведения регламентированного учета, управления кадрами, внутренними документами и т.д. Что такое «нетиповые» решения в этой связи понять тоже довольно просто: это все те конфигурации, которые были разработаны бизнесом с нуля самостоятельно под свои потребности, либо на «голой» платформе, либо с использованием библиотек. Также существуют тиражные решения для конкретных отраслей (например, сельского хозяйства) или стран, с учетом специфики местного законодательства (например, бухгалтерия Казахстана).</p><p>На практике «типовое» решение почти всегда кастомизируют, добавляя в него новые объекты, методы, функции, подсистемы. Поэтому на большинстве предприятий используют стандартные решения с несколькими дополнительными или модифицированными нетиповыми функциями. В этой связи сложно сказать, стало ли решения «нетиповым» после того, как предприятие, например, взяло разработанную 1С типовую бухгалтерию и подкрутило пару элементов кода.</p><h2>Внешние компоненты 1С</h2><p>Чтобы адаптировать сервисы 1С под задачи конкретного бизнеса, разработчики выходят за рамки типовых возможностей. Одно из распространенных решений — подключение внешних компонентов. Это библиотеки на системных языках, через которые платформа может взаимодействовать с операционной системой. Они позволяют автоматизировать технологические и бизнес-процессы — интеграцию кассового или промышленного оборудования, сбор лидов, обработку данных клиентов с помощью методов машинного обучения.</p><p>Отличный пример практически полной автоматизации с помощью 1С и внешних компонентов можно найти в такой тривиальной процедуре, как взвешивание КАМАЗА на промышленных весах перед выездом. Часто этот процесс полностью завязан на человеке: машина заезжает, оператор вводит цифру весов и ее номер в 1С. Здесь автоматизации ноль и есть риск ошибок. Но если через внешнюю компоненту запрограммировать 1С считывать показания весов и через алгоритмы машинного обучение подключить сервис, который будет по камерам считывать номер машины и ее расположение на весах (верное или неверное), заводить данные в систему, то человека-оператора из этого процесса можно будет вообще убрать.</p><p>Для достижения подобной автоматизации потребуется работа со встроенным языком платформы 1С. Например, Python помогает интегрировать алгоритмы машинного обучения и ИИ, C++ задействуют для обеспечения максимальной скорости процессов. Расширяемая среда разработки <a href="https://edt.1c.ru/">1С:EDT</a> также поддерживает язык программирования Java, который позволяет прописывать плагины, обеспечивая еще большую гибкость в выборе инструментов. А взаимодействие между внешними сервисами и 1С осуществляется по сетевым протоколам.</p><h2>Протоколы, которые поддерживает 1С</h2><p>Самый востребованный сетевой протокол, поддерживаемый 1С — HTTP. Если же планируется большая нагрузка на приложение, приходится дополнительно задействовать брокеры сообщений. Раньше разработчики использовали сторонние решения (RabbitMQ, Apache Kafka). Но теперь у 1С появился свой брокер — 1С:Шина, поэтому в большинстве случаев использование сторонних продуктов не требуется.</p><p>Интеграция с мобильными приложениями в большинстве случаев происходит через HTTP, что позволяет обмениваться данными напрямую. А для быстрой отправки пушей прямо в приложение используются промежуточные решения на PHP или Python. Для решения задач по расширению интерфейса внутри платформы используются веб-приложения, написанные на JavaScript. Это позволяет создавать внутри 1С отдельные формы, которые не только выглядят графически привлекательно, но и обеспечивают функциональную гибкость.</p><p>Кроме того, по HTTP работают интеграции с ботами (ChatGPT) и Алисой от Яндекса. Также HTTP предпочитают мессенджеры (тот же Telegram или WhatsApp, «ВКонтакте»).</p><p>Но иногда приходится задействовать WebSocket – это протокол связи поверх TCP-соединения, предназначенный для обмена сообщениями между браузером и веб-сервером. Пока у 1С нет полноценной поддержки этого протокола, хотя это и <a href="https://wonderland.v8.1c.ru/blog/obnovlen-plan-zadach-na-versiyu-8-3-25-platformy-1s-predpriyatie/">планируется</a> в одной из следующих версий, так что приходится использовать промежуточный код — например, на PHP, Golang или Python.</p><p>Еще один протокол, который используют для интеграции 1С с брокерами сообщений (ПО для связи между приложениями, системами и службами, помогающее им обмениваться информацией друг с другом) – это AMQP. Протокол использует термин “vhost”, поэтому для каждого обмена данными между несколькими очередями создается отдельный виртуальный хост в брокере.</p><p>Брокер гарантирует надежность доставки сообщений путем использования подтверждений. Если отправитель подтверждает отправку сообщения, то оно попадает в очередь. Это означает, что можно быть уверенным, что сообщение не потеряется или не будет отправлено неправильно.</p><h2>Безграничные возможности для интеграций</h2><p>Да, 1С создан для решения проблем предприятий в промышленных масштабах: заказывать недостающий товар, фиксировать отклонения от целевых показателей, направлять заказы на определенные станки и т.д. Но это ПО в совокупности с внешними компонентами способно точно так же организовывать и абсолютно бытовые элементы жизни, например, управлять умным домом. В этом случае вся логика работы домашних интеллектуальных устройств будет настроена прямо в 1С. Как для домохозяйки, так и для занятого руководителя это просто гениальное решение. Человек сможет, находясь в системе, не только поставить задачи заварить кофе, выжать сок по дороге домой, но и работать на домашнем компьютере при помощи ИИ-бот.</p><p>Можно даже интегрировать с 1С умную колонку “Алису” и отдавать распоряжения системе голосом. Условно вы просыпаетесь, включаете кофеварку и говорите: «Алиса, расскажи мне о ключевых показателях». Алиса обращается к 1С и, пока вы пьете кофе, рассказывает о том, что происходит в вашем бизнесе. Если в каком-то показателе есть отклонение, вы можете попросить Алису рассказать о нем подробнее.</p><p>Другим инструментом, интеграция которого в 1С становится все более популярна и о котором мы писали выше, становится искусственный интеллект. Многие фичи платформа может предложить уже сейчас, а какие-то возможности появятся в ближайших релизах. Но уже сейчас понятно, что с помощью ИИ в системе 1С можно будет (или уже можно) решать следующие задачи:</p><ul><li><a href="https://portal.1c.ru/applications/1C-Document-Recognition">Распознавание текста.</a> В контексте 1С речь, разумеется, о распознавании первичных документов (сканы накладных, актов и т.п.). Раньше этим занимались менеджеры и бухгалтеры и делали это вручную. Теперь эту заботу берет на себя сервис на базе машинного обучения, который распознает документ и передает его в 1С. А человеку остается только проверить некоторые важные части, где ИИ мог ошибиться.</li></ul><ul><li><a href="https://portal.1c.ru/applications/1C-Speech-Recognition">Распознавание</a> и <a href="https://wonderland.v8.1c.ru/blog/generatsiya-rechi/">синтез речи.</a> Уже сейчас с 1С можно интегрировать облачный продукт с функциями потокового и файлового распознавания, который преобразует речь на русском и английском языках в текст. А скоро в 1С появится возможность полноценной интеграции голосовых помощников на основе ИИ, что позволит пользователям взаимодействовать с программой голосом. Это сделает использование 1С еще более удобным: например, менеджер по продажам, заполняя договор, может попросить у программы голосом открыть реквизиты клиента. Или бухгалтер, составляя отчет, попросит статистику за определенный период. Для слаженной работы двух сервисов — распознавания и синтеза речи — разработчик должен написать алгоритм, который по ключевым словам будет понимать характер запроса, «доставать» из базы данных нужную информацию, преобразовывать ее в нужный вид и передавать механизму синтеза речи.</li></ul><ul><li><a href="https://www.youtube.com/watch?v=103gGuvQSbw">Прогнозирование спроса</a> — еще один полезный инструмент на базе ИИ, который интегрируется в 1С. С помощью математических моделей и ML сервис на основе данных прогнозирует, что и когда в предстоящем году будут покупать. Это позволяет освободить от рутинных расчетов маркетологов, которые могут сосредоточиться на проработке стратегии продаж.</li></ul><p>Перечисленное выше — это фактически типовые решения 1С, которые реализуются с помощью встроенного языка. То есть сегодня их можно внедрить силами своих программистов, а ведь еще пару лет назад для этого пришлось бы отдельно писать код на Python или Go. Так что у 1С-разработчиков теперь масса возможностей для инноваций и огромный потенциал для роста. Ведь даже то, что корпорация уже внедрила или внедрит в ближайшее время — далеко не предел, особенно если принять во внимание, что информационные технологии развиваются стремительно.</p><p>Например, сейчас в тренде генеративные нейросети. В будущем кажется логичным добавить интеграцию с Chat GPT, Midjourney или аналогами. Она значительно облегчит задачу тем, кто занимается составлением писем, рассылок и прочей документации. Чтобы не тратить время на обращение к сервисам самостоятельно и получить текст или картинку от нейросети всего за несколько секунд, запрос можно будет направить непосредственно в 1С.</p><h2>Как стать разработчиком 1С</h2><p>Учитывая потенциал программных решений 1С, умеющие работать с этими продуктами специалисты всегда будут востребованы. Статистика неумолима: <a href="https://habr.com/ru/articles/680200/">спрос на таких сотрудников растет</a> каждый месяц. И если год назад количество вакансий превышало 8 тысяч, то сейчас их <a href="https://pskov.hh.ru/search/vacancy?text=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82+1C&amp;salary=&amp;ored_clusters=true&amp;enable_snippets=true">уже больше 11 тысяч</a>.</p><p>Чтобы стать одним из таких разработчиков, для начала нужно освоить саму платформу и научиться применять базовые инструменты 1С. После этого уже можно говорить о специализации и прикладном программировании. Например, специалист интеграции 1С с мобильными приложениями должен знать, как отправлять пуши, как сделать микро-сервис, как работает WebSocket и HTTP. У того, кто занимается интеграцией решений машинного обучения, уже совсем другие компетенции — он должен владеть Python с его библиотеками и фреймворками, SQL для операций с большими объемами данных, хорошо ориентироваться в различных средах разработки.</p><p>Начинающим специалистам можно посоветовать не учить язык ради языка, а выбрать конкретную область, которой хочется заниматься в рамках 1С. Это может быть автоматизация продаж или бухгалтерского учета, построение архитектуры информационной системы, техническая экспертиза, интеграция мобильных приложений, алгоритмов машинного обучения или генеративного ИИ — вариантов много. Как только вы определите для себя прикладную область — углубляйтесь в инструментарий, освоение 1С на базовом уровне не представляет труда, а потому особенно ценятся специалисты, которые умеют решать узкопрофильные задачи.</p>]]></content:encoded>
    </item>
    <item>
      <title>«Hello World» на эзотерических языках программирования — от 1С до YoptaScript</title>
      <link>https://tproger.ru/articles/hello-world-na-ezotericheskih-yazykah-programmirovaniya</link>
      <comments>https://tproger.ru/articles/hello-world-na-ezotericheskih-yazykah-programmirovaniya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/hello-world-na-ezotericheskih-yazykah-programmirovaniya</guid>
      <description><![CDATA[<p>Мы наткнулись на репозиторий GitHub, в котором собраны программы Hello World на эзотерических языках, и решили показать их вам.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/hello-world-na-ezotericheskih-yazykah-programmirovaniya">«Hello World» на эзотерических языках программирования — от 1С до YoptaScript</a>»</p>]]></description>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Юмор]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 16 Aug 2023 11:26:11 GMT</pubDate>
      <content:encoded><![CDATA[<p>Эзотерические языки программирования – это языки, которые созданы для развлечения и исследования концепций программирования, а не для решения практических задач. Они часто имеют нестандартный синтаксис и необычные функциональные возможности.</p><p>Эзотерические языки привлекают разработчиков своей оригинальностью, креативностью и часто юмористическим подходом. Эти языки могут использовать необычные символы, слова или концепции для написания программного кода.</p><p>Мы наткнулись на <a href="https://github.com/Erghel/Esoteric-HelloWorld/tree/main">репозиторий GitHub</a>, в котором собраны программы Hello World на разных эзотерических ЯП, и решили показать их вам в этой подборке.</p><h2>Squirrel</h2><p>Это код на языке программирования Squirrel, который был создан в 2003 году. Squirrel — динамический, высокоуровневый интерпретируемый язык, разработанный для встраиваемых систем и видеоигр.</p><h2>1C</h2><p>Язык программирования 1С основан на высокоуровневом языке запросов, который легко понять и использовать.</p><p>Он поддерживает объектно-ориентированную парадигму программирования, что упрощает создание и поддержку сложных информационных систем и позволяет создавать гибкие и масштабируемые приложения.</p><p>Вот, почему автор включил 1С в свою подборку:</p><blockquote>Да, он считается рабочим, и не эзотерическим, но нам нем так мало пишут (в плане работает людей), что он уже как эзотиреческий xD</blockquote><h2>ArnoldC</h2><p>ArnoldC – это необычный язык программирования, в котором синтаксис и ключевые слова основаны на фразах Арнольда Шварценеггера из его фильмов.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/eda7e5c5-9826-4909-ac8a-c7b7fb94d626.png" alt="" /></figure><p>ArnoldC предлагает ограниченный набор функций и возможностей, но специально разработан для развлечения. Он не предназначен для серьезного использования.</p><h2>Brainfuck</h2><p>Brainfuck – это экстремально минималистичный, тьюринг-полный, интерпретируемый язык программирования, который был создан для вызова трудностей и обучения программированию.</p><p>Он использует всего лишь 8 команд, которые представляют простейшие операции, такие как перемещение по памяти, увеличение/уменьшение значения ячейки памяти и ввод/вывод данных.</p><h2>Chef</h2><p>Chef – это необычный и шуточный язык программирования, который имитирует написание рецептов для приготовления блюд.</p><p>Код на языке Chef структурирован в виде рецептов с ингредиентами, шагами приготовления и кулинарными терминами. Использование языка требует понимания кулинарных терминов и общей структуры приготовления блюд.</p><h2>Doge</h2><p>Язык программирования Doge – это шутливый и неформальный язык, вдохновленный интернет-мемом с изображением пса породы шиба-ину.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/820617b7-75fe-4301-ad96-0439480158f6.png" alt="" /></figure><p>Он использует нестандартный синтаксис, основанный на фразах и выражениях из популярных мемов.</p><h2>Emoji</h2><p>Язык программирования Emoji – это экспериментальный язык, в котором используются символы эмодзи вместо традиционных кодовых конструкций. Каждый эмодзи представляет определенную операцию или значение.</p><h2>L33t</h2><p>Язык программирования L33t (или Leet) – это неформальный язык, основанный на замене букв на числовые или специальные символы, чтобы создать эффект “хакерского” стиля. Он используется в основном в сообществах хакеров и геймеров для шифрования и сокрытия кода.</p><p>L33t не является популярным языком для разработки, но может быть интересным для создания прикольных эффектов или шуток внутри сообществ.</p><h2>Rockstar</h2><p>Язык программирования Rock (или Rockstar) – это необычный и шутливый язык, вдохновленный рок-музыкой и знаменитыми рок-исполнителями.</p><p>Вместо традиционных ключевых слов и операторов, в Rock используются песенные стили и фразы, чтобы написать программный код.</p><h2>ShinobiScript</h2><p>Это — язык программирования от автора репозитория, операции в котором переименованы на манер японского языка и отсылают к аниме.</p><h2>TeaScript</h2><p>Ещё один язык программирования от автора репозитория. По всей видимости, он подражает британской вежливости во время чаепития в пять часов вечера.</p><h2>YoptaScript</h2><p>YoptaScript – это юмористический и пародийный язык, созданный с целью подражать языку гопников и подчеркнуть связанные с ними стереотипы.</p><p>Он содержит множество шуток, карикатурных синтаксических конструкций и абсурдных функций.</p><h2>Zombie</h2><p>Вместо обычных команд и операторов, Zombie использует слова и фразы, связанные с зомби-апокалипсисом, чтобы создать легко узнаваемый и запоминающийся синтаксис.</p><h2>DuckyScript</h2><p>Язык программирования, который используется для написания скриптов для устройств Rubber Ducky.</p><p>Rubber Ducky – это USB-устройство, которое может эмулировать клавиатуру и выполнять автоматические действия на компьютере. DuckyScript позволяет записать последовательность нажатий клавиш и команд, которые могут быть автоматически выполнены на целевом компьютере при подключении Rubber Ducky.</p><h2>LOLCODE</h2><p>LOLCODE – это эзотерический язык программирования, который использует фразы из интернет-мемов и популярных шуток для написания кода.</p><p>Вместо стандартных ключевых слов LOLCODE использует фразы вроде “HAI” (приветствие), “KTHXBYE” (прощание), и “VISIBLE” (для вывода на экран).</p><h2>Заключение</h2><p>Если вам понравилась подборка, <a href="https://github.com/Erghel/Esoteric-HelloWorld/tree/main">зайдите на репозиторий и оцените его</a>.</p><p>И обязательно напишите в комментариях, какие ещё эзотерические языки вы знаете, которые не были упомянуты в статье — мы их изучим и, может быть, напишем про них отдельную статью. ?</p>]]></content:encoded>
    </item>
    <item>
      <title>Интеграция «1С-Битрикс» с Google Sheets на примере сайта агрегатора недвижимости</title>
      <link>https://tproger.ru/articles/integraciya-1s-bitriks-s-google-sheets-na-primere-sajta-agregatora-nedvizhimosti</link>
      <comments>https://tproger.ru/articles/integraciya-1s-bitriks-s-google-sheets-na-primere-sajta-agregatora-nedvizhimosti?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дмитрий Талызин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/integraciya-1s-bitriks-s-google-sheets-na-primere-sajta-agregatora-nedvizhimosti</guid>
      <description><![CDATA[<p>Рассказываем, как настроить интеграцию Google Sheets и сайта на Битрикс, чтобы данные из таблицы выгружались на сайт.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/integraciya-1s-bitriks-s-google-sheets-na-primere-sajta-agregatora-nedvizhimosti">Интеграция «1С-Битрикс» с Google Sheets на примере сайта агрегатора недвижимости</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 03 Aug 2023 09:48:45 GMT</pubDate>
      <content:encoded><![CDATA[<p>К нам обратился клиент с интересной задачей: разработать портал, показывающий инновационный подход к продаже, покупке, строительству и благоустройству загородного жилья.</p><p>Гипермаркет загородной жизни «Новый дом» состоит из двух частей. Первая часть посвящена покупке загородной недвижимости. Вторая — продаже услуги строительства домов по готовым проектам.</p><p>Остановимся на первой части. На сайте можно купить участки, коттеджи, таунхаусы, дуплексы. Продавцами являются компании-застройщики.</p><p><b>Клиенту было важно автоматизировать работу с продавцами недвижимости и загрузку объектов на сайт.</b></p><h2>Схема автоматизации</h2><p>Данные по объектам вносятся продавцами в Google-форму. Далее информация об объекте недвижимости складывается в таблицу с функцией редактирования. Менеджеры агентства недвижимости проверяют, дополняют информацию об объекте и разрешают его выгрузку на сайт.</p><p>У клиента есть несколько категорий объектов: поселки; участки; дома, таунхаусы, дуплексы. Каждая вкладка — это набор объектов определенной категории со своими параметрами. Символом * клиент отмечает в таблице поля, которые необходимо вывести на сайт. Поля без этого символа используются для внутренних нужд и на сайт не выгружаются.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/6e513efa-864f-472f-ba36-8882090d1500.png" alt="" /><figcaption>На примере представлена категория объектов «Участки в поселках FEED»</figcaption></figure><p>Объекты из каждой категории перемещаются в соответствующие категории на сайте.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/3b2ff09e-78c2-40a4-b700-f56865e7911b-autoconverted.jpeg" alt="" /></figure><p>После отметки «Да» в столбце «Поселок проверен и готов к размещению» парсер заберет объект и выгрузит на сайт.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/b2f8d00d-c89a-4537-9904-050d68f1d4f0.png" alt="" /></figure><p>Каждую ночь парсер забирает данные из Google Таблиц и загружает на сайт.</p><p>После продажи объекта, в Google Таблицах менеджер обновляет статус на «Продан». Потом парсер обновляет данные в справочнике сайта, и объект остается на сайте со статусом «Продан» и не выводится в доступных для покупки.</p><h2>Как работает парсер</h2><p>Парсер позволяет работать с Google Таблицами <a href="https://developers.google.com/sheets/api/reference/rest/">посредством их API</a>.</p><p>Через него происходит прием данных из Google Таблиц на сторону Битрикс.</p><p>Для выгрузки данных из Google Таблиц через функционал «именованные диапазоны» столбцам мы назначили уникальные символьные коды, определяющие их категорию (поселки, участки, дома/таунхаусы/дуплексы) и свойство.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/d21bcf36-612b-40d9-9cc2-ba36b59e3514.png" alt="" /><figcaption>Выгрузка данных из Google Таблиц через функционал «именованные диапазоны»</figcaption></figure><p>Далее через скрипт получили столбцы, у которых существуют «именованные диапазоны» и провели их обработку.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/1266a816-9c2a-4f6c-b2e3-a557df4854e4.png" alt="" /></figure><p>Каждое значение ячейки столбца идет в аналогичное его коду в «именованном диапазоне» свойство на сайте.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/042e56f3-8bdb-40d5-8b4a-23947c73cadd.png" alt="" /></figure><p>Например, столбец с кодом именованного диапазона WATERPOOL подтягивается в свойство WATERPOOL («Бассейн») на сайте.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/76046458-db6c-4e98-89fe-113db6955561.png" alt="" /></figure><p>Еще одна особенность — возможность загрузки фотографий через Google Таблицы. Для этого код в «именованном диапазоне» должен быть вида «PHOTO_#КОД_СВОЙСТВА#», а само значение ячейки — ссылкой на Google Диск.</p><p>На этом уровне мы использовали API Google Диска для получения загруженных на Google Диск фотографий.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/e125e24a-6b7f-4502-9219-866cebbf574f.png" alt="" /><figcaption>Код, показывающий использование API Google Диска для получения загруженных на Google Диск фотографий</figcaption></figure><h2>Как хранятся данные на стороне «1С-Битрикс»</h2><p>1. Разделы в каталоге — это поселки, которые идут из отдельной категории «Поселки» таблицы Google Docs.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/871205f6-a0ef-4fd6-9084-e75a6ca09f14.png" alt="" /></figure><p>2. Все элементы — это внутреннее наполнение поселков: участки, коттеджи, дома, таунхаусы. Получается, каждый элемент принадлежит какому-либо поселку.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/abf59129-43b1-488b-abf9-9f9fa72aff01.png" alt="" /></figure><p>3. Свойства элементов и объектов — это столбцы из таблицы Google Docs.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/7f68e378-eb59-4390-ba2e-ee1b0f7789c6.png" alt="" /></figure><p>Для поиска по объектам используется модуль elasticsearch. Запросы к нему идут через внешнюю оболочку, предназначенную для работы с «1С-Битрикс».</p><p>Хранение данных elasticsearch происходит в специальной карте индекса для инфоблока каталога.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/49843074-d067-4094-a817-fb90c28d3a28.png" alt="" /></figure><p>После выполнения парсинга сырые данные элементов через метод $indexer-&gt;put попадают в наш индекс.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/4818b0d4-cd9c-4460-8c1c-8f2b7f294736.png" alt="" /></figure><p>Соответственно, для дальнейшей фильтрации по данному индексу, вместо стандартных запросов «1С-Битрикс» по API «1С-Битрикс», также необходимо пользоваться конструкцией $indexer-&gt;search со своими параметрами.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/2864d68a-ea83-4181-8e3e-f64278bed229.png" alt="" /></figure><p>Разработанный функционал позволяет клиенту экономить время менеджеров, исключить ошибки при переносе данных и заниматься более творческими и сложными задачами.</p><p>Если есть вопросы, пишите в комментариях.</p>]]></content:encoded>
    </item>
    <item>
      <title>Bitrix. Обновить PHP до версии 8.2 и не поседеть</title>
      <link>https://tproger.ru/articles/bitrix-obnovit-php-do-versii-8-2-i-ne-posedet</link>
      <comments>https://tproger.ru/articles/bitrix-obnovit-php-do-versii-8-2-i-ne-posedet?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алина Полевая]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/bitrix-obnovit-php-do-versii-8-2-i-ne-posedet</guid>
      <description><![CDATA[<p>Как перевести CMS Bitrix на PHP 8.2, получить новые возможности и улучшить производительность. Советы по безопасному обновлению.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/bitrix-obnovit-php-do-versii-8-2-i-ne-posedet">Bitrix. Обновить PHP до версии 8.2 и не поседеть</a>»</p>]]></description>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 28 Jun 2023 11:42:16 GMT</pubDate>
      <content:encoded><![CDATA[<p>Рассказываем, как перевести CMS Bitrix на PHP 8.2, получить новые возможности и улучшить производительность. Советы по безопасному обновлению ядра и модулей от веб-разработчиков.</p><p>В админке «1С-Битрикс» на странице обновления есть такое сообщение:</p><figure><img src="https://media.tproger.ru/uploads/2023/06/0a669e02-3110-4524-bf42-0d1df73ff3a4.png" alt="" /><figcaption>Сообщение об ошибке в админке «1С-Битрикс»</figcaption></figure><p>Для CMS Bitrix версия PHP 7.Х устарела. Исправления функциональных ошибок и ошибок безопасности Bitrix для этой версии больше не выпускает. Компания предлагает всем своим клиентам обновиться.</p><p>Это сообщение расстроило разработчиков. Переход на новую версию PHP очень болезненно воспринимается для легаси кода, так как есть важные обновления синтаксиса PHP, ломающие обратную совместимость. Многие модули из маркетплейса давно заброшены и не адаптированы под новые версии PHP.</p><h2>Готовимся к обновлению</h2><p>Ориентировочно на обновление ядра с большим прыжком в версиях PHP закладывается от 15-20 часов. Если проект «запущен», их может не хватить. Добавляем страховочный запас 10-15 часов исходя из объема легаси.</p><p>Составляем полный чеклист проверки функционала сайта, чтобы не забыть протестировать.</p><p>Рядовые шаги для обновления «1С-Битрикс»:</p><ol><li>Обновить Bitrix локально, исправить баги после обновления.</li><li>Обновить версию PHP локально, исправить баги.</li><li>Обновить на тестовом стенде, если первые два пункта не выполнялись сразу на тесте.</li><li>Исправить баги после тестирования.</li><li>Обновить на бою.</li><li>Исправить баги после обновления на бою.</li></ol><h3>Несколько важных деталей, которые нужно учесть перед началом обновления:</h3><p>— До версии 22.500.700 ядра Bitrix можно спокойно обновляться на PHP 7.4, проблем с обратной совместимостью внутри ядра не найдено.</p><p>— Шаг 6 почти неизбежен, потому что на 100% проверить тестовый стенд не удастся. Чаще всего есть какой-то код, который отрабатывает в процессе интеграции с боевой площадкой. Если тестовой площадки для интеграции вовсе нет, тогда можно проверить ее только фиктивно, например, через Postman. Все равно придется проверить работоспособность на бою.</p><p>— В 9 из 10 случаев проект развернут не в Docker, следовательно нет возможности проставить нужные параметры PHP при обновлении с помощью версионного контроля или обновления утилит для него. Можно только фиксировать его отдельно в копии конфигурационных файлов или в списке утилит для установки.</p><h2>Шаг 1. Обновляем Bitrix на локальном хосте</h2><p>Начинаем обновление Bitrix на локальном хосте или на удаленном тестовом сервере.</p><p>Базы данных (БД) и ядро должны быть свежими, чтобы исключить ошибки, не связанные с обновлением Bitrix. На локальный хост или тест накатываем свежий бэкап ядра с БД через restore.php, публичная часть не обязательна. Если бэкап сгенерировать не удается, помогут утилиты mysqldump и rsync с опцией delete.</p><p>В административной части на странице /bitrix/admin/site_checker.php?lang=ru в разделе «Тестирование базы данных» ошибок быть не должно.</p><p>Обновление ядра и модулей мы оставляем на плечи системы обновления Bitrix, исправление кода проекта — на версионный контроль.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/0c422be6-1406-42ef-9722-a2b10042fa48.png" alt="" /><figcaption>Жмем кнопку установить</figcaption></figure><h3>Проблемы, которые могут возникнуть в процессе обновления:</h3><p><b>1. Ошибка в синтаксисе PHP.</b> При обновлении может зацепиться какой-нибудь обработчик события, чаще всего для построения кастомного типа свойства инфоблока.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/b86cbcc1-c158-4df8-8157-2240bb611594.png" alt="" /><figcaption>Пример ошибки синтаксиса</figcaption></figure><p><b>Решение. </b>Лезть в код и фиксить ошибку. Каждую такую ошибку фиксировать у себя в доке, чтобы можно было быстро сделать исправление при обновлении на тесте и на бою. Как только ошибка будет исправлена, можно продолжить обновление.</p><p><b>2. Ошибка в MySQL. </b>Пользователю БД может не хватать прав для обновления таблиц или выполнения команд типа set innodb_strict_mode=ON. Либо конфигурация сервера может не соответствовать боевому.</p><p><b>Решение. </b>Выполнить нужные конфигурации БД, например, выделить для БД больше буферной памяти или расширить права доступа пользователя под которым общается Bitrix с БД. Перезапустить обновление.</p><p><b>3. Заблокирована система обновлений. </b>Ошибка частая, так как тестовые хосты имеют открытый доступ из интернета. Bitrix обнаруживает такие хосты и блокирует систему обновления не по лицензии.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/d855eec9-6377-480e-adb3-fbea795e3b75.png" alt="" /><figcaption>Пример сообщения об ошибке после нажатия на кнопку «Обновить»</figcaption></figure><p><b>Решение. </b>На время обновления на тестовые хосты повесить базовую авторизацию или вовсе выключить их. Написать в техподдержку Bitrix запрос на удаление ошибки обновления. После этого — продолжить обновление.</p><p><b>4. Не хватает прав на изменение файлов.</b> Распространенная проблема Linux, когда у пользователя сервера не хватает прав, чтобы создать или изменить нужные файлы ядра. Это особенно заметно при обновлении ядра.</p><p><b>Решение. </b>Настроить конфигурацию сервера, чтобы он работал от имени текущего пользователя, не рутом. Выполнить рекурсивную смену прав в ядре командой chown -R. После таких операций проблема должна уйти и можно продолжить обновление.</p><p>Как только обновление прошло успешно, переходим наобновление модулей потомуже принципу.</p><p>Если модуль платный и лицензия истекла, ее нужно продлить. Если ошибка после обновления модуля не пропала, то модуль необходимо удалить. Если править модуль, то в дальнейшем его нельзя будет корректно обновить.</p><p>Если модуль очень старый и давно не обновляется, его придется перенести в локальную область и содержать самостоятельно.</p><p>После успешного обновления Bitrix и модулей переходим в публичную часть, проверяем основной важный функционал сайта, фиксим ошибки PHP или конфликты с API Bitrix и модулей.</p><p>Приступаем к обновлению версии PHP после обновления Bitrix и проверки работы проекта.</p><p>Здесь может возникнуть больше всего сложностей, так как кодовая база ссылалась на «помощь» со стороны PHP 7.4. Код, который раньше выполнялся на PHP 7.4 с предупреждениями, на PHP 8.2 будет падать с фатальной ошибкой. Это позволит определить нерабочий функционал.</p><h3>Основные критичные для Bitrix ошибки, которые вылезают после обновления версии PHP:</h3><p><b>1. Нестатические методы для обработчиков событий. </b>В PHP 8.2 больше нельзя вызывать нестатические методы через статический синтаксис. Это касается обработчиков событий. Если они находятся внутри класса в виде функции, то, чтобы ошибка ушла, в каждую такую функцию нужно будет добавить public static.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/d5cfd1f6-7f4a-4b9d-b5d4-ab0936534d37.png" alt="" /><figcaption>Пример корректировки обработчика события</figcaption></figure><p><b>2. Статический вызов нестатических методов. </b>Ряд модулей в проекте были перенесены в локальную область уже очень давно, синтаксис сильно устарел. Было много методов через чистый function, поэтому нужно добавлять к каждому методу public static.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/88a8a01a-c02c-4857-83bf-ba718dc01246.png" alt="" /><figcaption>Пример методов, которые могут вызывать ошибку</figcaption></figure><p><b>3. Строгая типизация при работе с стандартными функциями PHP.</b> В PHP 8.2 нельзя передавать в функцию count() значения типа null или string. В нашем случае компонент Menu был построен на вложенных массивах внутри параметра ADDITIONAL_LINKS. Так делать нельзя, так как в ядре Bitrix проверка выполняется через Rel2Abs — она принимает на вход строку, но не массив. Этот функционал был переписан через дополнительные параметры.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/a99bc996-de61-4b9f-b7bd-e7c75dec290c.png" alt="" /><figcaption>Пример обработки ошибки с несуществующим элементом массива</figcaption></figure><p><b>4. Обращение к строке как к массиву. </b>В шаблонах часто возникают старые ошибки с ключом VALUE для вывода значения свойств. Оно не у всех есть, поэтому страница падает.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/7179d7fd-e376-4842-8bfe-7954b594944d.png" alt="" /><figcaption>Пример обработки ошибки с несуществующим элементом массива</figcaption></figure><p><b>5. Старые обработчики событий Bitrix, которые ссылаются на несуществующие классы/методы. </b>Обработчики событий модуля регистрируются не через код, а записываются в таблицу b_module_to_module в БД. Если когда-то был использован кастомный модуль, который меняли так, что доступа к обработчикам нет; или модуль был удален на уровне кодовой базы, а из БД ничего не стиралось — здесь это проявится, возникнут фатальные ошибки при попытке их исполнения. Решение простое: корректируем эти обработчики события в БД или удаляем строки вовсе. Можно это сделать сразу на бою/тестовом хосте, чтобы после обновления не натыкаться на такие проблемы.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/e9bed0ba-6d96-41ce-8a76-9420dd763eff.png" alt="" /><figcaption>Таблица b_module_to_module в Bitrix</figcaption></figure><p>В процессе исправления ошибок очень важно не забывать, что главная задача — обновление ядра и версии PHP. Рефакторить код на этом этапе <b>НЕ НУЖНО.</b></p><h2>Шаг 2. Проверяем на тестовом контуре</h2><p>Автотестов и каких-либо тестов на написанный код в Bitrix чаще всего нет. А разработчик может обнаружить только столько проблем, на сколько он наткнется. Поэтому обязательно нужно делать проверку на доступном заказчику/тестировщику тестовом хосте.</p><p>Выполняем обновление на тестовом хосте, если проблем на локальном больше найти не можем:</p><ul><li>собираем в версионный контроль все изменения кодовой базы проекта,</li><li>на тесте выполняем обновление ядра, смену версии PHP, подтягиваем через версионный контроль исправления кода,</li><li>отдаем сайт на проверку тестировщику или заказчику.</li></ul><p>При тестировании важно отсеивать только ошибки, связанные с обновлением.</p><ol><li>Если ошибка воспроизводится и на бою, выносим в отдельную задачу.</li><li>Если ошибка связана с тем, что проект развернут на тестовом хосте, игнорируем, так как настройка тестового стенда будет отдельной задачей.</li><li>Если наблюдаются просадки по производительности, это нормально — тестовый хост на несколько порядков медленнее прода.</li></ol><p>Проверка на тестовом хосте не даст гарантии, что на тесте новых проблем не будет, так как часто нет возможности проверить интеграции или обмен с «1С-Битрикс».</p><p>На тесте необходимо также тщательно проверять весь функционал, как илокально. Обычно натесте появляются новые ошибки, которые неудалось обнаружить локально.</p><p>Если на проекте есть тестировщик, то ему нужно проверить весь функционал сайта, включая формирование фидов. А при наличии тестовых площадок — еще и общение с внешними системами.</p><p>На практике возникали проблемы с интеграциями, в частности с генерацией фидов разной степени важности, ошибками в обработчиках событий при интеграции с внешними площадками. Их обнаруживали только на бою, что очень расстроило заказчика. Поэтому важно проявлять проактивность и следить за выполнением агентов на тесте или cron-скриптов. Скорее всего после смены версии PHP поменялась версия и PHP CLI. Поэтому необходимо проверить работу всех cron-скриптов.</p><h2>Шаг 3. Обновляем Bitrix на бою</h2><p>Мы успешно проделали предыдущие этапы, багов больше не видим, понимаем, что все в порядке.</p><p>На проде обновление Bitrix занимает от 1 до 5 часов. Многое зависит от объема проекта и потенциальных багов, на которые можно наткнуться после, даже с учетом проверок на тесте.</p><p>Предварительно проверяем работу системы обновлений Bitrix на бою, так как в нужное время она может заблокироваться и придется переносить время обновления. Техподдержка работает с 10:00 до 19:00.</p><p>Обновляем систему в неактивные часы в начале или в середине рабочей недели.</p><p>Обычно обновление планируют в 20:00-21:00, чтобы было меньше пользователей., т.к. сайт в это время будет недоступен.</p><h3>Выполняем стандартные шаги обновления Bitrix:</h3><ol><li>Закрываем публичную часть. В настройках главного модуля жмем кнопку «Закрыть доступ для посетителей». У всех пользователей, кроме админов, будет заблокирован доступ к публичной части. Это делается для того, чтобы в процессе подготовки бэкапа не появились новые заказы или отзывы, которые потеряются, если придется восстанавливаться из бэкапа.</li><li>Делаем полный бэкап сайта. Чтобы ускорить процесс, рекомендуем исключить из бэкапа папку Upload, а также разделы с кэшем Bitrix и другими бэкапами сайта.</li><li>Обновляем Bitrix и модули по аналогии с локальной и тестовой версией. Проверяем результат в публичной части.</li><li>Обновляем версию PHP, тянем через версионный контроль исправления кода, выполняем проверку в течении 10-15 минут на наличие ошибок PHP. Важно их быстро обнаружить и исправить. Для быстрого деплоя таких «хотфиксов» рекомендуем настроить удаленный деплой через IDE, например, PHPStorm. Это позволит править файлы не через файловую систему, а быстро находить проблемные места и вносить корректировки через развернутый проект. После окончания работ все изменения можно будет собрать на бою через версионный контроль и залить в репозиторий.</li><li>Открываем публичную часть, проверяем работу сайта, запускаем тесты и проводим ручное тестирование критичного функционала, правим ошибки, следим за логами Bitrix на наличие скрытых ошибок. На этом этапе можно сказать, что обновление успешно завершено. В течении суток может что-то всплыть, поэтому оставляем сайт на ночь. На следующий день смотрим на логи ошибок, правим.</li></ol><p>Важно не забывать, что ошибки рано или поздно закончатся, поэтому относиться к ним нужно спокойно и размеренно. Ведь код, который раньше выполнялся с предупреждениями, скорее всего был построен неверно или интерпретировался не явно, поэтому функционал мог сбоить или не работать. А теперь часть легаси может актуализироваться и возобновить работу.</p><p>Если всплыла ошибка катастрофических масштабов на бою, то останавливаем обновление, закрываем публичную часть, разворачиваем резервную копию Bitrix, которую мы сделали перед обновлением. Если есть изменения, ломающие обратную совместимость, откатываем исправления кода.</p><h2>Основные подводные камни при обновлении до PHP 8.2</h2><p>У Bitrix есть остроспецифические проблемы, кроме очевидных для каждого этапа:</p><p><b>1. Обмен с 1С.</b> При обновлении или создании товаров из 1С могут «посыпаться» товары с неверно объявленными свойствами. Например, для типа строка передается массив. Это видно в логах PHP, но исправлять нужно либо на уровне Bitrix, либо на уровне 1С. Чаще исправляем на стороне сайта, внесение изменений в 1С чревато серьезными последствиями.</p><p><b>2. Плавающие ошибки. </b>Часто функционал отрабатывает через раз — то ли в count() передается массив, то ли просто значение null. Это классический пример небезопасного программирования. Для понимания обычно хватает проверки на тип данных.</p><p><b>3. Нестандартное обращение с API Bitrix. </b>У нас все расписано на примере компонента меню Bitrix, файл меню был дополнен руками для создания вложенных массивов. Это только одна из возможных проблем, когда приходится переписывать работу компонента через что-то, что не отваливается при запуске.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/3ba44dd5-41fa-4f12-a0bd-88efa139ec05.png" alt="" /><figcaption>Пример исправленного меню Bitrix</figcaption></figure><p><b>4. Обмен с интегрируемыми системами. </b>Чаще всего интеграция Bitrix с внешней системой реализуется модулем с маркетплейса, который обновляет создавшая его команда. Обновление интеграции сводится к обновлению модуля Bitrix из админки. Бывает, что интеграцию пишет команда разработки для определенной задачи, тогда и ее обновление в идеале должна сделать команда перед обновлением Bitrix.</p><blockquote>С какими ошибками вы сталкивались при обновлении? И как их решали? Пишите в комментариях.</blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Карьерный путь: из 1C специалиста в Тимлида разработки на Python</title>
      <link>https://tproger.ru/articles/karernyj-put-iz-1c-specialista-v-timlida-razrabotki-na-python</link>
      <comments>https://tproger.ru/articles/karernyj-put-iz-1c-specialista-v-timlida-razrabotki-na-python?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Nikolay Nagorniy]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/karernyj-put-iz-1c-specialista-v-timlida-razrabotki-na-python</guid>
      <description><![CDATA[<p>Как стать тимлидом разработчиков на Python после 7 лет опыта работы 1C-специалистом в разных компаниях. История разработчика.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/karernyj-put-iz-1c-specialista-v-timlida-razrabotki-na-python">Карьерный путь: из 1C специалиста в Тимлида разработки на Python</a>»</p>]]></description>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[История IT]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 01 Jun 2023 10:53:40 GMT</pubDate>
      <content:encoded><![CDATA[<p>До того момента, как я захотел стать Python-программистом, я около 7 лет работал 1C специалистом в разных компаниях.</p><p>Я выполнял различные задачи от поддержки сервисов горнолыжного комплекса Лаура до внедрения автоматизированной системы учета сети рознично-оптового цветочного бизнеса, в конечном счете дорос до главного разработчика 1С. В это время я постоянно развивался, готовился к сдаче разных экзаменов.</p><p>В итоге успешно окончил окончил международные курсы по CISCO, в итоге я получил 7 сертификатов профессионала и  2 сертификата специалиста по 1С, которые, честно признаюсь, дались мне нелегко.</p><p>Было вложено много моих сил в то, чтобы стать специалистом 1С и казалось бы, желаемого я достиг.</p><h2>Переезд в пандемию</h2><p>Я не из тех, кто остается на достигнутом, когда я понял, что дошел предела в 1 С, то решил что-то поменять и  идти дальше. В конце 2019  я пошел на переподготовку в онлайн-школу GeekBrains, я хотел погрузится в программирование глубже, систематизировать свои знания в языке python. На тот момент я работал в компании НАО “Красная поляна” как ведущий разработчик 1С.</p><p>Через какое-то время пришел к выводу, что для моего развития необходим еще и переезд. Летом 2020 года я переехал в Санкт-Петербург из Сочи и устроился в компанию ТИТАН-2 как программист 1С в разгар пандемии ковид-19. Это был крупный международный проект по строительству атомной станции в Турции, несомненно, этот опыт для меня был развивающим и еще раз показал, что всегда есть куда расти.</p><h2>Как ушел в Python</h2><p>Работая в Санкт-Петербурге, я продолжал проходить курсы по Python. Обучение проходило в дистанционном формате, но все равно требовало моего времени и усилий, конечно, я изучал и дополнительную литературу, задавал вопросы, старался дойти до сути и глубокого изучать проходимые темы. В конечном счете я сдал итоговую работу и получил диплом о переподготовке.  Параллельно я искал работу и проходил довольно много собеседований в поиске места для души и развития.</p><h2>Как стал Тимлидом разработки на Python</h2><p>Я проработал не в одном проекте в качестве разработчика на Python. В какой-то момент перешел в компанию “РОСБАНК” на должность разработчика, тогда я зарабатывал намного меньше возможного и желаемого.</p><p>Спустя несколько месяцев работы в компании случился переломный момент, в который я взял на себя ответственность и повел за собой команду.  В дальнейшем я стал тимлидом разработки, на данный момент в моей команде: 4 разработчика, 1 девопс инженер, 1 дизайнер и 2 тестировщика. Недавно наш продукт: “Инвестиционная платформа Advisors’ Axiom” занял 3 место в номинации “Кейс года” от премии Ruward Award 2023.</p><h2>Совет от меня</h2><p>Часто людям бывает страшно начинать что-то новое, кажется, что не получится/ неохото выходить из зоны комфорта. В таком случае, вы скорее всего не имеете цели или оно вам действительно пока не нужно. Но если вам кажется, что вы уже достигли желаемого, значит дошли до конца и стоит выбрать другую дорогу, пусть это будет другой язык программирования, должность или еще что-то. В новой дороге  много интересного и мой опыт это подтверждает. Я уверен, что и к этой моей истории будет продолжение, так как нет предела совершенству. А вам я желаю начать писать свое продолжение прямо сейчас и принимать шаги для его исполнения.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как продать в интернете 0,5 метров ткани или 0,35 кг гвоздей</title>
      <link>https://tproger.ru/articles/kak-prodavat-tovary-s-drobnym-kolichestvom-v-internete</link>
      <comments>https://tproger.ru/articles/kak-prodavat-tovary-s-drobnym-kolichestvom-v-internete?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дмитрий Талызин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-prodavat-tovary-s-drobnym-kolichestvom-v-internete</guid>
      <description><![CDATA[<p>Как использовать дробное количество товаров в «1С-Битрикс» для продажи, к примеру, тканей или сыпучих материалов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-prodavat-tovary-s-drobnym-kolichestvom-v-internete">Как продать в интернете 0,5 метров ткани или 0,35 кг гвоздей</a>»</p>]]></description>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 11 May 2023 13:38:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Разработка интернет-магазинов — профильное направление нашей студии.</p><p>В своей работе мы постоянно ищем интересные и нужные решения. Одно из них — использование дробного количества товара в «1С-Битрикс» для продажи, к примеру, тканей или сыпучих материалов.</p><h2>Преимущества продажи дробного количества</h2><ol><li>Экономия. Особенно важно для клиентов, которые работают над небольшими проектами или имеют ограниченный бюджет, либо когда товар стоит дорого (ткани бывают очень дорогие).</li><li>Сокращение отходов. Клиенты могут заказывать материалы в точных количествах.</li><li>Повышение удовлетворенности и лояльности клиентов. Клиенты получают больше контроля над своими покупками.</li></ol><h2>Процесс внедрения</h2><p>Расскажем, как мы внедрили функцию продажи дробного количества на сайте Manders (интернет-магазин красок, обоев, тканей, лепнины, популярный поставщик декоративных материалов ведущих мировых брендов на российском рынке).</p><p>При разработке интернет-магазина необходимо было предусмотреть возможность использования дробного количества товара при добавлении в корзину.</p><figure><img src="https://media.tproger.ru/uploads/2023/05/b6957912-6cfd-42c7-aa96-e957a845d35b.png" alt="" /><figcaption>Дробное количество ткани при добавлении в корзину на сайте Manders</figcaption></figure><p>Это потребовало изменение кода. В «1С-Битрикс» есть встроенная возможность использования коэффициента единицы измерения для дробного количества через поле ‘RATIO’ у товара, но выгрузка этого поля из «1С» на момент разработки интернет-магазина не поддерживалась. По официальной информации, на данный момент некоторые последние версии «1С» данный функционал уже поддерживают.</p><h2>Как решить проблему с RATIO</h2><p>Проблему с выгрузкой поля ‘RATIO’ у товара из «1С» решили следующим образом.</p><p>В разделе административной части «Магазин → Настройки → Единицы измерения» выгружаются отдельные единицы измерения для разных видов товаров. Также единица измерения импортируется из «1С» в поле товара CML2_BASE_UNIT.</p><figure><img src="https://media.tproger.ru/uploads/2023/05/0c76b44d-1106-4605-8051-bc518fc13b9a.jpg" alt="" /><figcaption>Единицы измерения для разных видов товаров</figcaption></figure><p>Нам требовался дробный коэффициент единицы измерения только при использовании единицы измерения «метр погонный» у товара.</p><p>При добавлении/обновлении товара обработчики (OnAfterIBlockElementAdd/OnAfterIBlockElementUpdate) перехватывают товары с определенной единицей измерения в поле CML2_BASE_UNIT.</p><p>После этого мы получали текущий коэффициент запросом:</p><p>В случае, если он отличался/не был создан, мы обновляли/создавали свой коэффициент через:</p><p>и:</p><p>соответственно.</p><p>При желании коэффициент можно передавать в отдельном свойстве каждого товара, а после — перехватывать при добавлении/обновлении товара.</p><p>Таким образом можно изменять коэффициент единицы измерения товара в случае невозможности его передачи из «1С».</p><figure><img src="https://media.tproger.ru/uploads/2023/05/66564230-e997-41a9-9caf-2700bb48abce.png" alt="" /><figcaption>Карточка ткани с возможностью заказа дробного количества на сайте Manders</figcaption></figure><p>Внедрение функции продажи дробного количества товара было успешным. Она не только улучшила пользовательский опыт на сайте, но и помогла выделить сайт нашего клиента среди конкурентов и повысить лояльность клиентов. Как веб-студия, мы стремимся постоянно совершенствовать сайты наших клиентов и предоставлять им инструменты, необходимые для успеха на конкурентном онлайн-рынке.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как мы реализовали подпись документов с помощью ЭЦП для площадки на Bitrix</title>
      <link>https://tproger.ru/articles/kak-my-s-pomoshh-yu-ecp-realizovali-podpisanie-dokumentov-dlya-elektronnoj-torgovoj-ploshhadki</link>
      <comments>https://tproger.ru/articles/kak-my-s-pomoshh-yu-ecp-realizovali-podpisanie-dokumentov-dlya-elektronnoj-torgovoj-ploshhadki?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дмитрий Талызин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-my-s-pomoshh-yu-ecp-realizovali-podpisanie-dokumentov-dlya-elektronnoj-torgovoj-ploshhadki</guid>
      <description><![CDATA[<p>Как мы внедрили инструмент для заверения документов электронной подписью на сайте с движком Bitrix. Код — внутри.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-my-s-pomoshh-yu-ecp-realizovali-podpisanie-dokumentov-dlya-elektronnoj-torgovoj-ploshhadki">Как мы реализовали подпись документов с помощью ЭЦП для площадки на Bitrix</a>»</p>]]></description>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 20 Feb 2023 13:00:12 GMT</pubDate>
      <content:encoded><![CDATA[<p>В этой статье подробно расскажем, как мы технически реализовали возможность подписания документов для проведения аукционов на онлайн-площадке в сфере недропользования. И, конечно, поделимся фрагментами кода.</p><p>Наша команда INDEXIS в 2022 году выпустила проект NEDRARU.RU на системе «1С-Битрикс». Эта онлайн-площадка позволяет купить, продать, сдать в аренду участок недр или месторождение, а также найти надежных поставщиков и подрядчиков.</p><h2>Как работает система подписания документов на портале</h2><p>На портале во время проведения аукционов участвуют 3 стороны: портал, создатель аукциона и участник аукциона. У любого пользователя, который зарегистрировался на сайте как владелец объекта, есть возможность создать аукцион по опубликованному им объекту на продажу или аренду.</p><p>Для юридического проведения аукционов между площадкой, создателем аукциона и участниками аукциона необходимо, чтобы все стороны подписали документы посредством электронной цифровой подписи (ЭЦП). Создателю и участнику аукциона необходимо заранее самостоятельно оформить ЭЦП в любом аккредитованном удостоверяющем центре.</p><p>Документы для аукциона подписываются на сайте аккредитованного удостоверяющего центра (далее — «Сервис»).</p><h2>Как мы выбирали удостоверяющий центр</h2><p>Мы обратились в несколько аккредитованных удостоверяющих центров. Как оказалось, не все центры готовы заниматься интеграцией своего инструментария во внешние сервисы, так как это не их профильная услуга. Нашим предложением заинтересовались коллеги в «Инфотекс Интернет Траст». Для сотрудничества с нами сервис выделил опытного специалиста. Мы остались довольны, смогли оперативно и качественно реализовать все задачи:</p><ol><li>Автоматическая регистрация пользователя в сервисе «Инфотекс Интернет Траст» с передачей данных о нем с портала.</li><li>Передача документов на подпись с портала и формирование ссылки на подпись для участников.</li><li>Получение статуса подписи (прошла успешно / не подписан) с сервиса «Инфотекс Интернет Траст» на портал.</li></ol><h2>Описание технической части процесса</h2><p>Мы провели интеграцию с сервисом через создание клиентской части на PHP в «1С-Битрикс». Клиентская часть взаимодействует с сервисом по API.<br />Работа с сервисом «Инфотекс Интернет Траст» состоит из двух частей:</p><ol><li>Взаимодействие с API саморегистрации пользователей для проверки и регистрации новых пользователей на портале «Инфотекс Интернет Траст».</li><li>Взаимодействие с API передачи документов.</li></ol><p>Оба API выполнены в архитектурном стиле REST и описаны по спецификации OpenAPI. Отличие между ними — в типе аутентификации. В первом случае для проверки запросов используется идентификатор вашей организации, выданный сервисом. Во втором — полноценный токен, возвращаемый с сервера «Инфотекс Интернет Траст» посредством передачи пары логин-пароль.</p><p>Сервис предоставляет разработчикам краткие сценарии использования <a href="https://b2b.iitrust.ru/docs">основных функций</a>, <a href="https://b2b.iitrust.ru/api/docs/">описание API</a>, а также адрес dev-площадки для тестирования.</p><p>Для обмена с API в рамках PHP можно использовать клиентскую библиотеку curl. В «1С-Битрикс» мы использовали <a href="https://dev.1c-bitrix.ru/api_d7/bitrix/main/web/httpclient/">встроенный класс httpclient</a>.</p><p>Рассмотрим процесс поэтапно.</p><h2>Регистрация пользователей с портала в сервисе «Инфотекс Интернет Траст»</h2><p>Первоначально наша задача состояла в регистрации пользователей с портала в сервисе «Инфотекс Интернет Траст».</p><p>Регистрация происходит посредством создания заявки на регистрацию путем передачи персональных данных пользователя и открытой части ключа электронной подписи.</p><p>Формируем на /api/v2/b2b-requests post-запрос вида:</p><p>Где sourceId — уникальный идентификатор нашей организации, выдаваемый «Инфотекс Интернет Траст», а certificateBase64 — открытая часть ключа подписи пользователя в формате Base64.</p><p>В requestSourcesIds аналогично передаем наш идентификатор, чтобы зарегистрированный пользователь сразу появился в нашем списке контрагентов на сайте «Инфотекс Интернет Траст».</p><p>Остальные поля — это просто соответствующие данные пользователя.</p><p>При корректно заполненной информации в ответе в поле ["data"]["orderId"]; получаем id нашей заявки по регистрации.</p><h2>2. Проверка заявки на регистрацию</h2><p>Далее мы можем проверить статус нашей заявки на регистрацию через get-запрос вида:</p><p>Где orderId — это id нашей заявки, полученной на предыдущем шаге.</p><p>После успешной регистрации пользователя можно приступать к работе с документами через второе API.</p><h2>3. Работа с документами через API: получение токена</h2><p>Здесь наша задача состоит в получении токена, который потребуется для всех дальнейших операций, передав пару логин-пароль по адресу /api/auth/login/.</p><p><b>Для этого формируем запрос к серверу:</b></p><p>В ответе с сервера в поле token получаем токен. Далее ставим его в заголовок всех наших будущих запросов:</p><h2>4.Работа с документами через API: отправка документов на подпись</h2><p>Чтобы отправить документы на подпись, нам необходимо получить уникальный идентификатор пользователя, зарегистрированного нами в «Инфотекс Интернет Траст».</p><p>Он входит в список наших контрагентов, поэтому мы можем получить этот идентификатор запросом поиска по контрагентам:</p><p>Где $searchStirng — это ИНН нашего пользователя.</p><p><b>Теперь отправляем документы на подпись запросом на</b> /api/workflow.</p><p>Документы, как и открытая часть ключа, передаются в формате base64.</p><p>Дополнительно нам понадобится параметр contractorRecipients. Параметр представляет собой массив с идентификаторами пользователей, которым отправляются документы.</p><p>Используем наш идентификатор, полученный на предыдущем шаге.</p><p>В результате получаем id операции в поле id.</p><p>По id мы формируем ссылку на сайт вида https://b2b.iitrust.ru/workflow/#ID_Операции#.</p><p>По этой ссылке будет происходить подписание документов в сервисе «Инфотекс Интернет Траст».</p><p>Основная работа завершена.</p><h2>5. Работа с документами через API: подпись документов</h2><p>Теперь мы можем передать эту ссылку стороне, отправляющей документы на подпись (в нашем случае — оператору ).</p><p>В интерфейсе «Инфотекс Интернет Траст» по нажатию кнопки «Отправить на подписание» происходит передача документов принимающей стороне (пользователю, которого мы зарегистрировали).</p><p>Страница подписания для нее также становится доступна по используемой ранее ссылке https://b2b.iitrust.ru/workflow/#ID_Операции#.</p><p>Отслеживать состояние процесса подписания со стороны сайта (подписано, аннулировано, отправлено и др.) мы можем запросом на /api/workflow/.</p><p>Где $operationID — это id нашей операции. В поле state вернется ее текущий статус.</p><p>На этом техническая часть по настройке подписания документов при помощи ЭЦП завершена.</p><p>Наш клиент получил реализованный под ключ проект. Теперь проводить сделки по купле-продаже и аренде участков недр или месторождений стало удобнее и проще.</p><p>Если есть вопросы, пишите в комментариях.</p>]]></content:encoded>
    </item>
    <item>
      <title>Нестандартный подход в разработке: как мы интегрировали React с «Битрикс»</title>
      <link>https://tproger.ru/articles/nestandartnyj-podhod-v-razrabotke-kak-my-integrirovali-react-s-bitriks</link>
      <comments>https://tproger.ru/articles/nestandartnyj-podhod-v-razrabotke-kak-my-integrirovali-react-s-bitriks?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дмитрий Талызин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/nestandartnyj-podhod-v-razrabotke-kak-my-integrirovali-react-s-bitriks</guid>
      <description><![CDATA[<p>Как интегрировать фронтендную часть на React в сайт, построенный на Bitrix, с использованием Next.js и AJAX.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/nestandartnyj-podhod-v-razrabotke-kak-my-integrirovali-react-s-bitriks">Нестандартный подход в разработке: как мы интегрировали React с «Битрикс»</a>»</p>]]></description>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 03 Feb 2023 11:35:39 GMT</pubDate>
      <content:encoded><![CDATA[<p>Наша команда сталкивается с самыми разными ситуациями при решении задач клиента. И вот одна из них.</p><p>Клиент попросил сделать апгрейд сайта, который мы разработали несколько лет назад — профессиональный ресурс для диджеев JesteiPool. Сервис позволяет диджеям скачивать сеты для своей профессиональной деятельности. Сайт был написан на «1С-Битрикс».</p><p>Заказчик решился на глобальные изменения:</p><ol><li>Полностью изменить дизайн.</li><li>Добавить элементы соцсети — ленту новостей; функцию подписки на обновления различных исполнителей и плейлисты; отображение порядка треков и плейлистов должно автоматически меняться в зависимости от предпочтений, выбранных пользователем.</li><li>Сделать беспрерывное воспроизведение плейлистов пользователей.</li></ol><p>Важное условие — все изменения необходимо было реализовать на «1С-Битрикс». Это связано со следующими факторами:</p><ul><li>На сайте накопилось много контента.</li><li>Заказчик привык к интерфейсу админки «1С-Битрикс».</li></ul><p>Однако в процессе изучения требований заказчика стало понятно, что реализовать изменения на сайте, разработанном на «1С-Битрикс», проблематично. Трудности оказались связаны с технологией работы классических монолитных сайтов.</p><h2>Как работают монолитные сайты</h2><p>Пользователь при клике по ссылке отправляет через браузер запрос на сервер. На сервере запрос обрабатывается, формируется HTML-страница и возвращается ответом пользователю. После каждого запроса происходит перезагрузка страницы.</p><p>Нас данный механизм не устраивал. Было важно, чтобы пользователь при серфинге по сайту мог непрерывно слушать различные треки без перезагрузок страницы.</p><p>Поэтому мы поняли, что нам нужно двигаться в сторону SPA (Single Page Application).</p><p>SPA – это веб-приложение, которое использует единственный HTML-документ в качестве оболочки для всех веб-страниц. Благодаря этому взаимодействие с пользователем организуется через динамически подгружаемые HTML, CSS, JavaScript, как правило, посредством AJAX.</p><p>Для создания такого веб-приложения мы решили бэк оставить на Битриксе, просто создав удобное REST API на его базе, а фронт же писать на React или Vue.</p><h2>React или Vue</h2><p>React — библиотека JavaScript. Это профессиональный продукт, который постоянно развивается. Vue — JavaScript-фреймворк с открытым исходным кодом для создания пользовательских интерфейсов, разрабатывался любительским сообществом. Но React популярнее и имеет более интересные перспективы.</p><p>Мы решили остановиться на React. Тем более всегда полезно получить опыт, который наверняка пригодится в дальнейшей работе.</p><h2>Плюсы технологии React</h2><ol><li>Высокая скорость работы высоконагруженных систем. Благодаря технологии Single Page Application вместо перезагрузки всей страницы контент меняется точечно. Сервер возвращает пользователю легкий JSON вместо тяжеловесного HTML. Благодаря этому возможна непрерывная работа плеера.</li><li>Разделены роли фронтенд- и бэкенд-разработчиков. Клиентские и серверные приложения взаимодействуют посредством технологии Rest API.</li><li>Модульность React, которая позволяет просто, быстро и дешево обслуживать сайт.<br />Но мы выделили один огромный минус сайтов с технологией Single Page Application — они не подходят для SEO-оптимизации. Для пользователя с сервера подгружаются данные в формате JSON, в браузере формируется сама страница, и когда поисковик заходит на такую страницу, он видит не HTML, а Java-скрипт.</li></ol><h2>Надстройка Next.js над React для SEO</h2><p>Чтобы решить эту задачу, мы использовали надстройку Next.js над React для SEO. При этом используется серверный рендеринг. Когда пользователь заходит на сайт в первый раз, страница формируется на сервере и возвращается. Но потом страницы формируются в браузере. А так как поисковики получают информацию с сервера, SEO в этом случае отлично работает.</p><h2>Результат работы</h2><p>Мы еще работаем над новой версией сервиса, но некоторыми результатами готовы поделиться уже сейчас, в том числе фрагментами кода.</p><h3>1. Главная страница</h3><p>Она же лента новинок, в которой публикуются все обновления артистов и плейлистов, на которые подписан пользователь.</p><figure><img src="https://media.tproger.ru/uploads/2023/01/2e659dc7-3de9-4ed6-92ab-eb6a2ca93d25.png" alt="" /></figure><p>2. Редактирование своих плейлистов в личном кабинете.</p><p>В личном кабинете, помимо подписки на готовые плейлисты, можно создавать и свои собственные. На скриншоте ниже показано, как можно менять порядок отображения плейлистов простым перетаскиванием прямо в браузере.</p><figure><img src="https://media.tproger.ru/uploads/2023/01/4d5544dc-6efc-4500-b942-d0d5202d941a.png" alt="" /></figure><p>3. Поп-ап с настройками плеера.</p><p>Во время воспроизведения трека доступно такое окошко. С его помощью можно скачать трек, добавить его в избранное или свой плейлист, а также настроить внешний вид виджета плеера.</p><p>Для работы на React необходима более высокая квалификация разработчика. Это не просто верстка, а работа в отдельном приложении. Проект пишет фронтенд-разработчик, а не верстальщик.</p><p>В целом использование технологии React — новый виток развития веб-индустрии. Особенно это важно для высоконагруженных сайтов и проектов с большим количеством товаров. Но выбор в пользу React должен быть осмысленным, с учетом особенностей проекта. Внедрять эту технологию повсеместно мы полагаем излишним.</p>]]></content:encoded>
    </item>
    <item>
      <title>Интеграция 1С в Cloud: выгоды, проблемы и сроки</title>
      <link>https://tproger.ru/articles/integracija-1s-v-cloud-vygody-problemy-i-sroki</link>
      <comments>https://tproger.ru/articles/integracija-1s-v-cloud-vygody-problemy-i-sroki?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[EAE-Консалт]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/integracija-1s-v-cloud-vygody-problemy-i-sroki</guid>
      <description><![CDATA[<p>Рассказываем, как интегрировать 1C в Cloud — ex SberCloud — в 2023 году. Cloud заменяет серверы, которые почти не поставляются с 2022 года.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/integracija-1s-v-cloud-vygody-problemy-i-sroki">Интеграция 1С в Cloud: выгоды, проблемы и сроки</a>»</p>]]></description>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Организация разработки]]></category>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Облачные технологии]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 25 Jan 2023 08:28:56 GMT</pubDate>
      <content:encoded><![CDATA[<p>Актуальность проблемы интеграции 1C в Cloud (ex SberCloud) возникла в ушедшем году. Как известно, многие вендоры, если не сказать все, просто отказались поставлять оборудование, в частности, серверное. Параллельный импорт дорог, скидки от вендора и «партнёрские прайсы» получить невозможно.</p><p>Кроме того, коммерческие накрутки поставляющих компаний, отсутствие поддержки и обновлений делают стоимость железа, если не катастрофическим, то очень критичным фактором для бизнеса.</p><p>Альтернатив не много, либо российские производители, с поставками у которых, говоря мягко, не всё гладко, либо облачные платформы, которые сегодня выглядят самым простым, быстрым и адекватным по стоимости вариантом для размещения цифровой бизнес-инфраструктуры, в частности, 1С.</p><p>Мы уже писали о миграции 1C в Яндекс.Облако. Ещё одним из наиболее подходящих вариантов для развертывания 1С мы видим в использовании Cloud.</p><p>В этом посте мы хотим описать наш опыт работы и достоинства размещения 1С в этом облаке, его достоинствах и сложностях развертывания. Автор — статьи Илья Александрович Кадышев, начальник управления общесистемной инфраструктуры ЕАЕ-Консалт.</p><h2>Ресурсы</h2><p>Cloud обладает хорошо оптимизированными вычислительными ресурсами, что подтверждается популярными в 1С комьюнити тестами Гилёва. В зависимости от конфигурации ландшафта 1С Cloud выдаёт до 40 баллов из 60 возможных.</p><p>Так у одного из наших клиентов при развертывании 1С в другом облаке получалось 19 баллов, при использовании Cloud для идентичной инфраструктуры мы получили 39 без какого-либо «тюнинга» с базовыми возможностями сервиса.</p><p>Ещё одним преимуществом Cloud является то, что они последний облачный провайдер в России, сохраняющий легальную возможность использования некоторых западных лицензий.</p><h2>Практические цели и сравнение затрат</h2><p>Самым критичным при использовании Cloud, равно как и других облачных сервисов для развертывания 1С, является скорость. Так, базовую бизнес-инфраструктуру в подобном облаке можно подготовить за несколько дней. Более сложную за 2-3 недели.</p><p>Это не идёт ни в какое сравнение с поставками и инсталляцией серверного оборудования по параллельному импорту, либо от российских вендоров.</p><p>Ресурсы в облаке можно менять несколько раз в день.</p><p>С физическим оборудованием обратная ситуация — нужно на несколько лет вперед просчитывать необходимость в той или иной вычислительной мощности, заранее представлять себе тот зоопарк устройств и ПО, который понадобится для ЦОДа. Иначе можно «попасть» на апгрейде, и в случае с большими предприятиями — это могут оказаться многомиллионные затраты. Также можно перестраховаться и купить излишне мощные сервера для тривиальных, лёгких задач. Облака исключают такие риски.</p><p>Несмотря на то, что работа с облаком не исключает планирование и прогнозирование, ошибки в них не столь критичны и могут легко исправляться. Фактически, можно запланировать ресурсные расходы на год вперёд, но ближе к концу года скорректировать объём закупаемых мощностей, заложить скорректированные параметры на следующий период. И, что главное, быстро, одной заявкой за несколько минут нарастить производительность.</p><p>Стоимость облачных решений, например Cloud для развертывания 1С, сопоставима, но, на первый взгляд выше, чем у физического оборудования при равных вычислительных характеристиках. Однако при сопоставлении совокупных затрат в реальных проектах облако получается дешевле.</p><p>Затраты на облака используют операционный, а не инвестиционный бюджет, с которым значительно проще работать, кроме того, облачные решения в качестве сервиса предоставляют высокую доступность, т.е. снижают риски отказов.</p><p>Для реализации отказоустойчивости и высокой доступности при использовании частного ЦОДа, нужно покупать второй идентичный сервер, чтобы объединить их в кластер. Это удваивает расходы на оборудование.</p><p>Облако со старта поставляется провайдером с высокой доступностью и, в случае отказа оборудования провайдера, данные в облаке бесшовно переносятся и остаются доступными. Аналогичная ситуация с резервным копированием.</p><p>Компания-пользователь платит за занимаемый объём один раз. В случае с частным сервером необходимо покупать систему хранения данных, что ещё больше увеличивает затраты. Кроме того, на итоговую стоимость владения собственным сервером влияют затраты на электроэнергию, аренду серверной, каналы связи, поддержку со стороны персонала.</p><p>Облачные сервисы взимают плату за каналы связи, но эти затраты гарантированно ниже, чем при использовании частного или арендованного сервера.</p><p>В Cloud, например, гарантированный 100 мб канал стоит около 1500 рублей, при аренде стойки оплата за каналы связи будет в 10 раз выше, для частного ЦОДа ещё больше.</p><p>При бюджетировании затрат на сервер 20% закладывают на поддержку, даже при отсутствии саппорта вендора, в enterprise-решении она остается необходимой. Т.е. речь может идти или о российском сервере или о стороннем саппорте. В любом случае, меньше она стоить не будет.</p><p>В облачных сервисах сервис провайдера входит в базовую стоимость. Дополнительная поддержка может тарифицироваться отдельно, но её стоимость будет в любом случае меньше 20%.</p><figure><img src="https://media.tproger.ru/uploads/2023/01/Snimok-jekrana-ot-2023-01-25-11-22-35.png" alt="" /></figure><h2>Немного об RDS и Postgre или ложка дёгтя</h2><p>Затраты на администраторов баз данных и в целом на администрирование 1С не отличаются на земле и в облаке. При этом в облаке доступны такие решения как PaaS (DBaS), т.е. возможность развернуть базы данных как сервис. В этом случае развертывание происходит в автоматическом режиме за 10 — 15 минут.</p><p>С физическим оборудованием установка и настройка баз занимает несколько часов. В Cloud — этот сервис называется как RDS (Relational Database Service), он поддерживает MySQL, MS SQL и, что главное, PostgreSQL, особенно востребованные сегодня в России по понятным причинам.</p><p>Но тут есть проблема, на данный момент 1С не работает в стандартном варианте с т.н. ванильным Postgre. Необходима установка дополнения, которое устраняет этот недостаток. А RDS для PostgreSQL от Cloud к работе 1C на текущий момент не готов. Т.е. при использовании этих баз данных установку в автоматическом режиме провести не выйдет.</p><p>В данный момент мы с коллегами работаем над этим вопросом. Как партнеры Cloud, мы заинтересованы в том, чтобы RDS был адаптирован для использования с 1C и PostgreSQL. В частности, занимаемся подготовкой эталонного образа, чтобы его можно было использовать для доработки сервиса.</p><h2>Сроки развертывания</h2><p>Нам часто задают вопросы о сроках, но это крайне индивидуально. Тут всё зависит от заказчика, его требований к системе, его виденья, в частности, от глубины технической документации проекта. Мы уже наработали несколько типовых архитектурных решений для предприятий различного масштаба.</p><p>Главные критерии — количество пользователей, объемы баз и количество систем, которые планирует установить заказчик, эти данные влияют на архитектуру решения. Она, в свою очередь, определяет времязатраты на развёртывание.</p><p>У нас были кейсы, где коллеги хотели перенести только ERP, как наиболее загруженную часть. Были ситуации, когда требовалось развернуть в облаке также продуктивный контур. Как правило, на физическом оборудовании оставляют тестовый контур, чтобы уязвимый старенький корпоративный сервер не работал с критическими данными и функциями. Были компании, которые настаивали на том, чтобы перенести в облако вообще всё.</p><h2>В сухом остатке</h2><p>Подводя итог написанного выше, можно говорить, что Cloud, как среда для развертывания продуктов 1С, превосходит физические сервера. Главными достоинствами подобного решения станут:</p><ul><li>меньшая совокупная стоимость владения;</li><li>высокая скорость развертывания;</li><li>оптимизированные вычислительные ресурсы;</li><li>гибкое управление производительностью;</li><li>возможность использования баз данных, как сервис.</li></ul><p>Мы старались объективно подойти к вопросу, даже учитывая, что речь в посте идёт о продуктах и услугах наших партнеров, и продемонстрировать максимально ценные для потенциальных пользователей преимущества предложенного подхода. Надеюсь у нас получилось. Мы будем признательны за ваши комментарии и вопросы, т.к. описать всё, что касается этой интеграции в рамках одного поста достаточно тяжело.</p>]]></content:encoded>
    </item>
    <item>
      <title>Курс молодого бойца: ускоряем проекты на Битрикс, повышаем их отказоустойчивость</title>
      <link>https://tproger.ru/articles/kurs-molodogo-bojca-uskorjaem-proekty-na-bitriks-povyshaem-ih-otkazoustojchivost</link>
      <comments>https://tproger.ru/articles/kurs-molodogo-bojca-uskorjaem-proekty-na-bitriks-povyshaem-ih-otkazoustojchivost?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[AGIMA]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kurs-molodogo-bojca-uskorjaem-proekty-na-bitriks-povyshaem-ih-otkazoustojchivost</guid>
      <description><![CDATA[<p>Для проджектов и джуниор-разработчиков подготовили гайд по тому, как ускорить работу проектов на Битрикс и повысить их отказоустойчивость.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kurs-molodogo-bojca-uskorjaem-proekty-na-bitriks-povyshaem-ih-otkazoustojchivost">Курс молодого бойца: ускоряем проекты на Битрикс, повышаем их отказоустойчивость</a>»</p>]]></description>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Высокие нагрузки]]></category>
      <category><![CDATA[Гостевая публикация]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 13 Sep 2022 07:42:48 GMT</pubDate>
      <content:encoded><![CDATA[<p>Привет! На связи Данила Соловьев, руководитель направления PHP в AGIMA. Для проджект-менеджеров и джуниор-разработчиков я подготовил небольшой гайд по тому, как ускорять работу крупных проектов на Битрикс и повышать их отказоустойчивость. Здесь вы не найдете сложных кейсов или сногсшибательных решений. Но зато найдете простые и применимые советы.</p><h2>Как читать эту статью</h2><p>Речь пойдет о проектах на Битриксе уровня Enterprise. Некоторые рекомендации будут справедливы и для других PHP-фреймворков и стеков веб-разработки.</p><p>Но самое главное: все мы понимаем, что проект в первую очередь нужно реализовать. Уже на этом этапе разработчики продумывают, насколько быстро будет работать система и что ей в этом поможет. Но предусмотреть абсолютно всё невозможно. Эта статья поможет разобраться, как ускорить уже запущенный проект.</p><p>Каждый раздел этого текста — это архитектурный блок. Чтобы приложение летало, поработать можно со всеми сразу или с одним из них. Я выделил 5 блоков:</p><ol><li>Сам Битрикс и всё, что написано на PHP/HTML/CSS/JS поверх.</li><li>Базы данных: из коробки в Битриксе это MySQL.</li><li>Кэш.</li><li>Интеграция с другими системами.</li><li>Файловая система.</li></ol><p>Внутри каждого блока чек-лист с комментариями или просто список советов. Прочитаете — будете лучше понимать своего тимлида. А может, при случае и подскажете ему что-нибудь.</p><h2>Как ускорить проект на уровне Битрикс и PHP/HTML/CSS/JS</h2><h3>1. PHP</h3><h4>а. Использовать готовые библиотеки</h4><p>Все библиотеки под решение конкретных задач отлаживаются и версионируются разработчиками не за час и не за неделю. Это большой труд, и все решения прорабатываются годами. У них есть команда поддержки. Поэтому их нужно использовать — это повысит отказоустойчивость проекта.</p><p>Для работы с библиотеками и зависимостями используйте <a href="https://getcomposer.org/">composer</a>.</p><h4>b. Профилировать код в серьезных проектах</h4><p>Профилировщик собирает данные о том, с какой скоростью и какая функциональность на странице выполняется. Эти данные помогают разработчику и тимлиду на конкретной странице находить узкие места — те, что замедляют общее время загрузки.</p><h4>c. Пропускать самописный код через статические анализаторы</h4><p>Какой бы крутой ни была команда разработчиков, ошибки бывают у всех. Анализаторы страхуют всю команду от опечаток или мелких ошибок, которые бы серьезно сказывались на работе всего проекта.</p><h3>2. HTML/CSS/JS</h3><h4>a. Верстку и фронтовую часть делать на сборщике</h4><p>Если верстка изначально оптимизирована и сжата, изъяны искать будет проще. Скорее всего, они будут на стороне Backend-разработчиков. <a href="https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&amp;LESSON_ID=12435">Полезная ссылка</a>.</p><h3>3. Тестирование</h3><h4>a. Не забывать о тестировании</h4><p>Если проект реально большой, то без тестировщиков никуда. Важно, чтобы они внедряли смоки, регрессы и отлаживали процесс тестирования. Благодаря этому в прод уйдет меньше багов. И значит, у разработчиков будет больше времени, чтобы заниматься ускорением проекта и повышением отказоустойчивости.</p><h3>4. Bitrix</h3><h4>a. Помнить про ресайз картинок</h4><p>Представим сайт с инфоблоком «Новости». В одну из них загрузили картинку на 15 Мб. Без ресайза сеть будет подтягивать ее полностью, страница будет грузиться долго. Это скажется на индексации. Конечный пользователь получит очень долгий рендер.</p><h4>b. Использовать d7 и ORM</h4><p>Менеджерам сложно это проконтролировать, но знать полезно. Эти две технологии ускоряют проект примерно в 5 раз — моя личная статистика.</p><h4>c. Переносить как можно больше с инфоблоков на HLB</h4><p>Переносить на HighLoad-блоки нужно всё, что возможно. Особенно, если вам не нужен какой-то очень удобный контент-менеджмент из админки. А лучше вообще проектировать свои таблицы и решения. Особенно это касается автоматизированных интеграций.</p><h4>d. Кэшировать одинаковые данные на одном хите</h4><p>Объясню на примере. Допустим, на страницу выводятся баллы из системы лояльности. Выводятся они как в начале страницы, так и в конце. Чтобы не делать два запроса в процессе загрузки, можно сделать только первый. Дальше баллы нужно закэшировать на уровне PHP, а потом из кэша в оперативной памяти достать и отобразить в нижней части страницы. Так мы урезаем запрос и уменьшаем время рендера страницы.</p><h4>e. Архивировать устаревшие данные</h4><p>Если у вас хранятся данные 2015 года, а вы живете в 2022, то возможно, эти данные устарели. Желательно унести их куда-то в другое место и доставать только при необходимости.</p><h4>f. Учитывать агенты и их ограничение по времени</h4><p>Агенты — фоновые задачи. У них есть ограничение по времени — 10 минут. Поэтому, если тимлид говорит: «Мы будем вот эту выгрузку выполнять на агенте, которая содержит миллионы строк данных», — это плохая идея. Как сделать, чтобы выгрузка постоянно не падала, расскажу дальше.</p><h2>Как ускорить на уровне баз данных</h2><h3>1. Разносить базы данных и приложение на разные «машины»</h3><p>В идеальном мире работа Битрикс и PHP не связана с ресурсами, которые используют базы данных. Так вы распределите нагрузку на эти части системы.</p><h3>2. Использовать в базах индексы</h3><p>Индексы — это данные из таблиц, отсортированные по конкретным столбцам, по которым построен индекс. Благодаря им в базе работает бинарный поиск. Проще говоря, поиск идет не по каждой строчке. Вместо этого система делит таблицу на две равные части. Смотрит влево, смотрит вправо. Если влево не найдено — то вправо. Правая часть тоже делится пополам и т. д.</p><p>Если данные в таблице обновляются/создаются/удаляются намного чаще, чем выполняется их чтение, то использовать индексы не стоит. Этот вариант подходит в случае, если на сайте есть новости с фильтрацией. Фильтрация с помощью индексов будет работать быстрее.</p><h3>3. Использовать репликации</h3><p>Репликация — это механизм создания копий базы данных, которые синхронизируются с оригиналом. Копии бывают двух типов: Master и Slave. Если копия Master, то мы в ней можем и писать, и читать. А если Slave — только читать. Изменения с Master тиражируются на все копии. Реализуется этот механизм на стороне СУБД, ничего программировать не надо.</p><p>Полезно применять в случаях, когда у вас на стороне заказчика есть аналитики или системы, которые хотят читать данные в вашей базе. Вы можете сделать отдельную Slave-реплику только для аналитиков. Они будут делать сложные запросы, которые могут уронить всю базу. Но упадет она только для них.</p><h3>4. Использовать партиции</h3><p>Партиции помогут, если у вас одна большая таблица на проекте. Партиция — это принцип деления таблицы на основании какого-то фильтра. Например, по дате. Когда таблица очень большая, это поможет разделить нагрузку и повысить отказоустойчивость. Этот механизм тоже реализуется на стороне СУБД.</p><figure><img src="https://media.tproger.ru/uploads/2022/09/unnamed.png" alt="" /></figure><h3>5. Применять шардирование</h3><p>В этом случае нужна работа программиста. Шардирование — это вариант распределения нагрузки. Он похож на партиции: тоже деление таблиц по какой-то логике.</p><p>Например, можно шардировать фотографии пользователей. Все фотографии нечетных пользователей уходят в одну шарду, четных — в другую.</p><h2>Как ускорить проект на уровне кэша</h2><p>Кэш нужен, чтобы снять нагрузку с баз данных. В Битриксе «из коробки» разные типы кэша. Я перечислю плюсы и минусы самых популярных. Но отдельно подчеркну: все эти решения разгружают базу данных. Это их основная функция.</p><h3>1. Файловый кэш</h3><h4>Плюсы</h4><ul><li>Объем не ограничен: если ваш жесткий диск на терабайт, он будет наполняться кэшем, пока вы полностью его не забьете.</li><li>Персистентный: если у вас падает какая-то «машина», закэшированные данные не теряются — как лежали на диске, так и продолжают лежать.</li></ul><h4>Минусы</h4><ul><li>Самый медленный из всех типов.</li><li>Генерирует нагрузку на ту же файловую систему, потому что лежит на жестком диске.</li></ul><h3>2. Memcached</h3><h4>Плюсы</h4><ul><li>Очень быстрый.</li></ul><h4>Минусы</h4><ul><li>Не персистентный: работает в оперативной памяти — если «машина» упала, то кэш потерян.</li><li>Ограничен объемом выделенной под него оперативной памяти.</li></ul><h3>3. Redis</h3><h4>Плюсы</h4><ul><li>Быстрый.</li><li>Может быть персистентным: его можно сконфигурировать как персистеным, так и не персистентным. Но если персистентный, то работает медленнее.</li></ul><h4>Минусы</h4><ul><li>Небольшой объем.</li></ul><h3>Еще один способ — прогрев кэша</h3><p>Он подходит в случаях, когда на проекте могут собираться большие объемы кэша. Допустим, он собирается по городам — на каждый город свой кэш. Это увеличивает его объем. Когда вы задеплоили что-то, для чего потребуется его сброс, можно внедрить ручной или автоматизированный прогрев кэша.</p><p>Ручной: после сброса кэша запускаете тестировщика, и он меняет города; можно менять только основные, потому что с них будет больше всего потока и нагрузки.</p><p>Автоматизированный: это можно повесить на CI/CD и просто написать какие-то функциональные тесты, которые будут после деплоя ходить и медленно переключать города и собирать кэш.</p><h2>Как ускорить на уровне интеграций с другими системами</h2><p>В первую очередь я говорю о интеграциях типа «точка — точка»: REST, SOAP. Они работают просто и понятно: одна система отправила запрос, ждет. Вторая система приняла запрос, обработала, отдала ответ. Отправляющая система ждать перестала, обработала ответ, пошла дальше.</p><p>Более важная тема — брокеры сообщений и менеджеры очередей. Их мы можем применить вместо REST и SOAP. Примеры брокеров сообщений — Kafka, RabbitMQ. Вот чего они позволяют добиться:</p><h3>1. Асинхронность</h3><p>Система отправляет запрос в брокер и дальше занимается своими делами — ответ она заберет в фоновом режиме. Система не забивает память этим запросом: на ее стороне есть обработчик, он же консьюмер, который читает и обрабатывает ответы по одному.</p><h3>2. Гарантия доставки</h3><p>В случае с REST, когда ваша система отправляет запрос, а вторая система лежит, пользователь получает 500 ошибку. В случае с брокерами вы всегда дождетесь ответа от другой системы. Кроме тех случаев, когда ваш брокер лежит. Но это критическая проблема — сейчас речь не об этом.</p><h3>3. Уменьшение нагрузки на отправляющей и на принимающей стороне</h3><p>Когда у вас «точка — точка», системе тяжелее. Например, 5 млн пользователей одновременно зашли на сайт и вызвали одно и то же интеграционное действие. Ваша система ждет 5 млн ответов. Другая система обрабатывает 5 млн запросов. Брокер же принимает запросы и отдает ответы быстро. Он записывает запрос, отдает в другую систему. Там консьюмер читает и обрабатывает по одному сообщению в фоне. Всё это не занимая ресурсов на 5 млн запросов.</p><h3>4. Ускорение постоянных и многочисленных однотипных фоновых действий</h3><p>Если у вас на проекте много логирования, количество посетителей и файлов записей растет, всё это можно перевести на брокер. Система такая: ваш лог сначала пишется в брокер, а дальше в вашей же системе имеется консюмер, который читает из брокера и записывает в хранилище с логами, но не генерирует такого количества нагрузки.</p><h3>5. Решение продолжительных фоновых задач</h3><p>Например, если на проекте генерируется больше событий, чем агент успевает обработать за 1 раз, агент падает. В лучшем случае просто не успевает обрабатывать очередь поступающих заявок. С брокерами проще: заявки передаются им, а потом обрабатываются в другом месте без ограничения по времени.</p><h2>Как ускорить на уровне файловой системы</h2><p>Файловая система работает как база знаний: в ней есть операции чтения и записи. За этим показателем важно следить и уменьшать его на каждой конкретной «машине». Вот два параметра, на которые стоит обращать внимание:</p><h3>1. Статика минимизирована и оптимизирована</h3><p>Статический контент — то, что запрашивается при каждом запросе, если он не был закэширован в браузере. К такому контенту относится CSS, JS, дефолтные картинки типа логотипов компаний. В идеале они должны быть минимизированы, оптимизированы и куда-нибудь убраны — например, в CDN.</p><h3>2. Динамический контент и медиа в S3-хранилище</h3><p>S3-хранилище — это облачное хранилище, которое гарантирует, что ваши данные будут отдаваться, храниться, не пропадать и т. д. С помощью него вы разгрузите файловую систему: файлы при рендере страницы в браузере будут подтягиваться из хранилища, а не с вашего сервера.</p><p>Эти рекомендации сделают вашу систему более быстрой и отказоустойчивой. Разработчики применяют их в работе — но знать о них полезно всей команде. В следующий раз, когда покажется, что ваш проект на Битриксе работает медленно, спросите у тимлида, все ли способы ускорения он использовал.</p><p>Если есть вопросы, задавайте в комментариях. Я по-прежнему на связи!</p>]]></content:encoded>
    </item>
    <item>
      <title>Применение 1С ERP УХ для автоматизации проектной организации</title>
      <link>https://tproger.ru/video/primenenie-1s-erp-uh-dlja-avtomatizacii-proektnoj-organizacii-2</link>
      <comments>https://tproger.ru/video/primenenie-1s-erp-uh-dlja-avtomatizacii-proektnoj-organizacii-2?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Мария Кривоченко]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/video/primenenie-1s-erp-uh-dlja-avtomatizacii-proektnoj-organizacii-2</guid>
      <description><![CDATA[<p>Рассказали, как организовать эффективный проектный учёт с помощью 1С ERP УХ. Делимся записью митапа и объясняем, как мы настроили систему</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/video/primenenie-1s-erp-uh-dlja-avtomatizacii-proektnoj-organizacii-2">Применение 1С ERP УХ для автоматизации проектной организации</a>»</p>]]></description>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Аналитика]]></category>
      <category><![CDATA[Управление проектами]]></category>
      <category><![CDATA[Видео]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 26 May 2022 12:46:08 GMT</pubDate>
      <content:encoded><![CDATA[<p>Задача организовать эффективный проектный учёт часто встаёт перед специалистами. Нужно собирать аналитику по проектам, и в то же время быстро выгружать всю информацию о них — чтобы принимать верные решения. Для этого обычно требуются доработки.</p><p>Юля Килина и Лада Евтюкова, эксперты департамента бизнес-приложений КРОК, смогли решить задачу с помощью инструментов блока бюджетирования «коробочной» версии 1С. И провели по этой теме митап, где рассказали, как быстро формировать нужные документы и эффективно организовать учёт по краткосрочным бизнес-проектам, используя базовые инструменты 1С ERP УХ.</p><p>Делимся записью митапа и важной информацией из него: что важно учитывать в работе, как формировать отчёты, как использовать инструменты 1C ERP УХ. А также кратко описываем, как настроили свою систему.</p><h2>Что учитывать при организации проектного учёта</h2><h3>Бэкграунд компании</h3><p>Проектные компании ведут несколько внешних проектов одновременно. Искомый учёт должен адекватно это отражать, и процесс установки и внедрения системы для каждой компании требует индивидуального подхода.</p><p>Кроме того, перед началом работы стоит решить методологические задачи и зафиксировать их в учётной политике. Обычно они касаются:</p><ul><li>формирования структуры прямых затрат;</li><li>распределения накладных расходов между проектами;</li><li>разработки методики трансфертного ценообразования — при работе над проектами разных подразделений;</li><li>учёта коммерческих затрат, формирующихся перед началом проекта и направленных на него.</li></ul><p>Чем точнее будут описаны методики, тем лучше будет оценка рентабельности и финансовой эффективности проекта.</p><h3>Отчёты</h3><p>Кроме стандартных отчётов: по доходам и расходам, по движению денежных встреч, финансовые результаты, управленческий баланс — стоит формировать дополнительные.</p><p>Среди них отчёт по маржинальной стоимости в разрезе проектов, отчёт о рентабельности по проектам, распределение денежных средств по проектам, план-факт БДР и план-факт БДДС.</p><p>Чтобы сделать дополнительные отчёты, сперва нужно сформировать требования. Они должны исходить от потребителя: собственника, акционера, инвестора, менеджера или исполнителя. Форма и аналитика также могут меняться в зависимости от пользователя.</p><p>Формировать отчеты нужно в два этапа.</p><p>Сперва задаём структуру строк и колонок, уровни детализации статей доходов и расходов. И определяем состав проекта: что приносит доход, а что требует расходов. Получаем отчётность, удобную для использования, — таблицу данных, опираясь на которую сможем принимать решения по проекту.</p><p>Дальше создаём методологию.</p><ul><li>Определяем источники данных, которые будем использовать для ведения проектного учёта и формирования отчётов. Обычно это набор ресурсов, уникальный для каждой компании.</li><li>Определяем варианты использования данных, решаем, какую сумму отразить в отчёте, где и как отражать операции, какую аналитику выгружать и так далее. То есть определяем состав отчётных форм.</li></ul><p>Итогом всех наших усилий становится распределение всех доходов и расходов и создание дополнительных отчётов.</p><h2>Как мы управляем скоупом проекта с помощью 1С ERP УХ</h2><ol><li>Определяем функциональные блоки системы: регламентированный учёт, блок закупок, блок продаж, склад, доставка, расчёты с персоналом и так далее.</li><li>Выделяем характерные для каждого блока бизнес-процессы. Среди них авансовые отчёты, расчёты по заработной плате, заключение договора с поставщиком, приобретение товаров, инвентаризация.</li><li>В процессе моделирования собираем требования к шагам и ранжируем их по типам: стандартная функциональность, настройка, кастомизация.</li><li>Далее мы определяем, где нужна кастомизация, объединяем доработки в блоки, оцениваем и переходим к проектированию.</li><li>Когда система разработана, проводим локальное, функциональное и интеграционное тестирование.</li><li>Пишем инструкцию для пользователей.</li></ol><p>Для всей работы у нас есть инструмент — интегрированный стенд разработки, который помогает снизить нагрузку и отслеживать все процессы. Как он работает:</p><ul><li>Сначала мы в системе прикладных решений регистрируем все бизнес-процессы и функциональные блоки. Далее описываем процесс по шагам, привязываем требования, которые система ранжирует.</li><li>Затем формируется функциональный дизайн расширения, и разработчику поступает документ с прописанными объектами метаданных. Это позволяет ему исключить ошибки. Дальше разработчик делает проект, который мы тестируем, превращаем бизнес-процесс и передаём заказчику.</li><li>Наконец, бизнес-процесс превращается в инструкцию. Мы дополняем её скриншотами — и всё готово.</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Управление общим списком баз 1С на терминальном сервере</title>
      <link>https://tproger.ru/articles/upravlenie-obshhim-spiskom-baz-1s-na-terminalnom-servere</link>
      <comments>https://tproger.ru/articles/upravlenie-obshhim-spiskom-baz-1s-na-terminalnom-servere?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Alexander Rudnitsky]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/upravlenie-obshhim-spiskom-baz-1s-na-terminalnom-servere</guid>
      <description><![CDATA[<p>Как добавить пользователям терминального сервера параметры баз для запуска 1С, не подключаясь к сеансу пользователя и не зная его пароля.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/upravlenie-obshhim-spiskom-baz-1s-na-terminalnom-servere">Управление общим списком баз 1С на терминальном сервере</a>»</p>]]></description>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Пост пользователя]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 19 Jan 2022 11:51:01 GMT</pubDate>
      <content:encoded><![CDATA[<p>Допустим, вам нужно добавить пользователям терминального сервера параметры информационных баз для запуска 1С, не подключаясь к сеансу пользователя и не зная пароля пользователя. Рассказываем, как это сделать.</p><p>В 1С все данные о списках баз хранятся в обычных текстовых, читаемых файлах с расширениями .cfg и .v8i, в кодировке utf-8. Как правило, у пользователей на компьютере 1С 8 хранит файлы списков баз в каталогах Профиль всех пользователей: C:\ProgramData\1C\1CEStart\ и Профиль пользователя: С:\Documents and Settings\%username%\Application Data\1C\1CEstart\ (или C:\Users\%username%\AppData\Roaming\1C\1CEStart\).</p><p>Содержимое профиля пользователя — два файла: 1CEStart.cfg и ibases.v8i. Содержимое директории профиля всех пользователей — только один 1CEStart.cfg.</p><p>При запуске 1С берёт список баз к представлению в файле пользователя, но предварительно читает настройки сначала из профиля всех пользователей C:\ProgramData\1C\1CEStart\1CEStart.cfg, а потом и из профиля пользователя C:\Users\%username%\AppData\Roaming\1C\1CEStart\1CEStart.cfg, и если в них есть ссылки на конфигурационные базы в сети, то добавляет их в этот файл.</p><p>Например, нам нужно, чтобы на терминальном сервере Windows Server 2012 R2 Standard обеспечивалась работа около 100 пользователей.</p><p>Создаём список баз:</p><figure><img src="https://media.tproger.ru/uploads/2022/01/1S_22_1.png" alt="" /></figure><p><b>Копируем созданный список баз в общую, доступную для всех пользователей, директорию </b>– тот самый список баз в директории %AppData%\1C\1CEStart с именем ibases.V8I</p><figure><img src="https://media.tproger.ru/uploads/2022/01/1C_22_2_1.png" alt="" /></figure><p><b>Третьим шагом будет добавление в файл “C:\ProgramData\1C\1CEStart\1CEStart.cfg” пути к общему списку баз: CommonInfoBases=E:\BaseList\ibases.v8i</b></p><figure><img src="https://media.tproger.ru/uploads/2022/01/1S_22_3-1.png" alt="" /></figure><p>Готово. Теперь при входе в систему у пользователя будет одинаковый список баз. Не нужно объяснять пользователю, как добавить базу, уточнять параметры и ставить галочки — всё уже есть.</p><p>Если требуется массово изменить имя базы или имя сервера, или другой параметр базы, это делается в одном файле ibases.V8I один раз. В случае, когда принципиально нужно поставить на рабочий стол список баз, это можно сделать следующим образом:</p><ul><li>Открыть командную строку от имени администратора, запустить редактор локальной групповой политики: gpedit.</li><li>В дереве выбрать «Конфигурация пользователя –&gt; Конфигурация Windows –&gt; Административные шаблоны –&gt; Система –&gt; Вход в систему –&gt; Выполнять эти программы при входе в систему».</li><li>Указать команду или путь к bat-файлу:</li></ul><p>@echo off</p><p>mkdir %UserProfile%\Desktop</p><p>copy E:\BaseList\ibases.V8I %UserProfile%\Desktop\ibases.V8I</p><figure><img src="https://media.tproger.ru/uploads/2022/01/WhatsApp-Image-2022-01-20-at-13.43.53.jpeg" alt="" /></figure><ul><li>И далее обновить политику: gpupdate /force.</li></ul><figure><img src="https://media.tproger.ru/uploads/2022/01/1S_22_5.png" alt="" /></figure><p>Если нужно, чтобы список баз отображался в виде дерева (иерархией), действия следующие:</p><ul><li>Настраиваем список на отображение в виде дерева.</li><li>Копируем файл %UserProfile%\AppData\Roaming\1C\1cv8\1cv8strt.pfl в общую директорию, например, туда же: E:\BaseList\1cv8strt.pfl.</li><li>Открываем командную строку от имени администратора, запускаем редактор локальной групповой политики: gpedit.</li><li>В дереве выбрать «Конфигурация пользователя –&gt; Конфигурация Windows –&gt; Административные шаблоны –&gt; Система –&gt; Вход в систему –&gt; Выполнять эти программы при входе в систему».</li><li>Указать команду или путь к bat-файлу:</li></ul><p>@echo off</p><p>mkdir %UserProfile%\AppData\Roaming\1C\1cv8</p><p>copy E:\BaseList\1cv8strt.pfl %UserProfile%\AppData\Roaming\1C\1cv8\1cv8strt.pfl</p><p>Если же требуется лишь заменить строчку с настройкой дерева в указанном файле, то указать путь к bat-файлу:</p><p>@echo off</p><p>setlocal enabledelayedexpansion</p><p>Set infile=%UserProfile%\AppData\Roaming\1C\1cv8\1cv8strt.pfl</p><p>Set find={"B",0},"AutoSortIBs",</p><p>Set replace={"B",1},"AutoSortIBs",</p><p>@echo off</p><p>setlocal enabledelayedexpansion</p><p>set COUNT=0</p><p>for /F "tokens=* delims=," %%n in (!infile!) do (</p><p>set LINE=%%n</p><p>set TMPR=!LINE:%find%=%replace%!</p><p>Echo !TMPR!&gt;&gt;TMP.TXT</p><p>)</p><p>del %infile%</p><p>move TMP.TXT %infile%</p><p>Примечание: если сервер находится в домене, то локальная политика не сработает, нужно прописывать доменную политику.</p>]]></content:encoded>
    </item>
    <item>
      <title>Не олдскул, а перспективы: почему 1С по-прежнему отличный выбор для начинающих специалистов</title>
      <link>https://tproger.ru/articles/ne-oldskul-a-perspektivy-pochemu-1s-po-prezhnemu-otlichnyj-vybor-dlja-nachinajushhih-specialistov</link>
      <comments>https://tproger.ru/articles/ne-oldskul-a-perspektivy-pochemu-1s-po-prezhnemu-otlichnyj-vybor-dlja-nachinajushhih-specialistov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Виктория Соколова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/ne-oldskul-a-perspektivy-pochemu-1s-po-prezhnemu-otlichnyj-vybor-dlja-nachinajushhih-specialistov</guid>
      <description><![CDATA[<p>Системный архитектор «Сберлогистики» рассказал том, почему 1С — перспективный язык программирования и отличный выбор для начинающих.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/ne-oldskul-a-perspektivy-pochemu-1s-po-prezhnemu-otlichnyj-vybor-dlja-nachinajushhih-specialistov">Не олдскул, а перспективы: почему 1С по-прежнему отличный выбор для начинающих специалистов</a>»</p>]]></description>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Гостевая публикация]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 14 Jan 2022 13:35:38 GMT</pubDate>
      <content:encoded><![CDATA[<p>«Все деньги сейчас в IT». Более того, даже самим подсчётом денег уже давно занимаются айтишники, ведь объёмы современных бизнесов никак не поместятся на бумаге, тетрадках и счётах. К тому же, всё больше и больше требуется автоматизации процессов внутри компаний. Именно поэтому, симбиоз «бизнеса» и «софта» приобрёл такую важность, и на рынке появилось понятие «бизнес-софт» или «корпоративный софт». Безусловным лидером в этом сегменте давно стали программы на базе решений 1С.</p><p>Сегодня в России и странах СНГ почти не существует бизнеса, который бы не использовал хотя бы одной программы 1С. Да, на этом языке вы не напишете 3D-игру класса ААА или новую социальную сеть, но 1С-программистам всего этого и не нужно, потому что их главная цель — помогать предприятиям зарабатывать деньги с помощью автоматизации процессов. А благодаря своему расположению «возле бизнеса» из специалистов по 1С получаются не только прекрасные программисты, но и высококлассные аналитики, и руководители команд разработки.</p><p>О том, почему 1С — перспективный язык программирования и отличный выбор для начинающих подробно рассказывает Андрей Овсянкин, системный архитектор «Сберлогистики» и преподаватель курса «1С-программист» в Нетологии.</p><h2>Кому, а главное зачем нужны 1С-программисты?</h2><p>Специалисты по 1С нужны всем у кого есть бизнес, то есть буквально всем на рынке. Разработчики графики нужны производителям игр, создатели алгоритмов сжатия видео — стриминговым платформам, низкоуровневые программисты — компаниям, создающим «железо». Но и тем, и другим, и третьим нужны 1С-ники, потому что все это — бизнесы, которым необходимо считать деньги, платить зарплаты, автоматизировать производство и так далее.</p><p>Если представить себе бизнес, который продает улучшение качества фотографий онлайн, то сама его платформа, наверняка, будет построена на одном из низкоуровневых языков программирования, но всё, что вокруг: обслуживание клиента, оплата, выставление счета, расчёт и выплата зарплат сотрудникам — могут быть полностью реализованы на базе 1С.</p><p>Язык программирования 1С — это так называемый «предметно-ориентированный язык», заточенный под конкретные задачи. С самого начала он был придуман для работы с определённой платформой, а именно «1С: Предприятие». На базе этой платформы создаются решения для автоматизации бизнес-процессов: учёта товаров, расчёта заработной платы, налогов и других операций. И все они пишутся на едином коде, который, за неимением оригинального названия от разработчиков, стали обозначать как «язык программирования 1С».</p><p>Сегодня системы вроде «1С: Предприятия» часто называют модным словом low-code, оно обозначает среду программирования с низкой потребностью писать код самостоятельно и в большом количестве. Главная функция таких платформ сводится к тому, чтобы быстро создавать работоспособные приложения для решения бизнес-целей с помощью множества готовых решений и инструментов из «коробки». Ключевое слово здесь — быстро. Чем быстрее бизнес выйдет со своей идеей на рынок, тем лучше. Чем дольше бизнес будет ждать, пока программисты все напишут, тем выше шанс, что его опередят.</p><h2>Почему 1С — отличный старт для новичков?</h2><p>Во-первых, у 1С низкий порог вхождения. Он очень простой. Во-вторых, он позволяет быстро получать конечный результат. За счет концепции low-code и огромного количества готовых компонентов даже новичок начинает приносить работодателю выгоду практически сразу после трудоустройства. Джуниор в 1С полезен бизнесу гораздо больше, чем джуниор, скажем, в Java, за которым старшие коллеги первое время вынуждены постоянно присматривать, чтобы не натворил бед.</p><p>В экосистеме «1С: Предприятие» есть все для разработки простых алгоритмов: готовые экранные формы, библиотеки данных, стандартные отчеты и понятный язык программирования. Специалисту не нужно писать масштабные модули стандартных операций. Все составные части, которые требуются, уже готовы — остается только собрать механизм.</p><p>Специалист по 1С очень быстро окупается и имеет широкое пространство карьерного маневра. Можно писать код, а можно анализировать бизнес и предлагать решения проблем, то есть расти в сторону бизнес-архитектора и бизнес-аналитика. Переключение между этими ипостасями для «1С-ника» происходит гладко, так как он по умолчанию владеет обеими предметными областями.</p><p>Еще одна особенность 1С заключается в том, что он поддерживает два языка программирования — английский и русский. И, как правило, если мы говорим о российском рынке, то «1С-ники» пишут именно на русском. Так вот, писать логику на языке, на котором ты думаешь, гораздо удобнее, особенно, если до этого ты не занимался программированием вообще. Потому что то, что думаешь, то и пишешь в код. Именно поэтому «порог вхождения» в программирование легче переступить, начиная с 1С. Тебе не придётся заниматься лишними задачами и корпеть над переводом.</p><p>Многие программисты, специализирующиеся на других языках, хихикают и говорят: «Ха, смотрите! Они пишут “если”, а мы пишем “if”». Ну так их иностранные коллеги пишут как раз «если», поскольку именно это слово и думают. А наши вынуждены мучиться с трудностями перевода. Я всегда смеюсь, когда вижу в коде на C# или Java переменные SchetOplachen и Sklad. Бедные авторы, бедные те, кто это сопровождает потом.</p><h2>Всем нужны «решатели» проблем: задачи 1С-программиста</h2><p>Главная задача любого программиста (не только «1С-ника») — приносить компании пользу, именно за это специалист получает деньги. Для бизнеса программист — хоть и ценный, но всё же, ненужный посредник между прибыльной идеей и её реализацией. Именно поэтому, бизнесу вообще не важно, на каком языке ты программируешь. А важно другое — как скоро и насколько качественно ты сможешь решить проблему автоматизации того или иного процесса. Вот почему системы low-code так востребованы, они решают проблемы с минимальным участием программистов и меньшими финансовыми и временными затратами.</p><p>Работа 1С-программиста построена просто: сначала он анализирует входящие требования клиента и определяет что нужно сделать и какой у задачи смысл. Например, ему нужно настроить для интернет-магазина систему выгрузки данных о том, какие товары остались на сайте и загрузки информации о заказах (цене, количестве, номенклатуре).</p><p>Сначала 1С-программист воплощает идею в виде модели данных (решает, какие объекты будут создаваться — заказы, пользователи, товары, счета и тому подобное), а затем пишет алгоритм, как именно эти объекты будут взаимодействовать между собой, создает экранные формы и отчетность под решение конкретной задачи. То есть, один человек решает проблему целиком. Вот и получается, что 1С-ник — это «решатель проблем» и «достигатель бизнес-цели», а не только «программист». И это гораздо ценнее.</p><p>В других технологических стеках обычно есть разделение: одна команда разработчиков занимается базой данных и объектами, вторая — рисует экранные формы и так далее. При такой схеме нужно уделять дополнительное внимание процессам внутри компании и тому, корректно ли построена работа между сотрудниками. В противном случае придется тратить не только деньги, но и время на коммуникацию и многоуровневые согласования.</p><p>Только представьте, задача «сделать кнопку “Заказать” недоступной, если не внесена предоплата» у 1С-ника занимает 2 минуты. На другом стеке двум командам разработки: фронтенда и бэкенда нужно будет договориться о том, как две части программы будут взаимодействовать и в каком формате одна команда передаст данные другой. Это занимает примерно неделю обсуждений, разработки и тестирования, и эту неделю бизнес будет ждать своего готового решения.</p><h2>Какие навыки и знания нужны программисту 1С?</h2><p>Как и любому другому разработчику, «1С-нику» важно обладать аналитическим складом ума, чтобы понимать, в чём заключается задача, из каких компонентов она состоит и как «шестерёнки» должны закрутиться, чтобы всё заработало. Не менее важны коммуникативные навыки и умение находить общий язык с клиентом. Часто бывает, что заказчик приходит с какой-то идеей, но сам не может чётко выразить, чего хочет на самом деле. Чтобы понять его цели и эффективно сделать свою работу, программисту просто необходимо уметь общаться.</p><p>На каком языке ни пиши, всегда приходится упираться в особенности работы «железа» и настройки операционной системы, поэтому потребуются и «общеайтишные» знания: как работают диски, процессор, память или, например, как функционируют базы данных и почему в одном случае они выполняют запрос медленно, а в другом — быстро.</p><p>Важно понимать, какие есть средства разработки, как писать код, знать, что такое алгоритмы и переменные, какие существуют типы данных, что такое циклы, процедуры, функции и прочая кухня, свойственная всем языкам программирования. Но в случае с 1С огромную долю работы на себя берёт платформа, поэтому в сложности работы компьютера «1С-нику» на начальных этапах карьеры погружаться не приходится.</p><p>Если говорить о «хардовых» навыках, то постепенно программисту придется изучить блоки и компоненты самой 1С, систему зарплатных регистров, периодические расчёты. Не менее важно уметь создавать разные виды справочников и документов, работать с запросами, а также применять языки разметки XML и JSON, сервисы HTTP и SOAP. Опытные 1С-программисты должны понимать не только, как адаптировать и дорабатывать готовые решения, но и как с нуля создавать конфигурации и веб-сервисы под нужды бизнеса, поскольку запросы каждого предприятия уникальны.</p><p>Из «непрограммистских» навыков полезными, но не обязательными являются знания учёта и основ бизнеса: как и чем компании вообще живут. Например, в Нетологии студентам преподают ещё и основы бухгалтерского учета.</p><h2>Будет ли легче учить другие языки программирования со знанием 1С?</h2><p>Сегодня отраслей и предметных областей, которые так или иначе затрагивает IT — очень много, поэтому знание нескольких языков для программиста это норма. Даже, если ты пишешь на JavaScript, тебе на компьютер ставится Python и C++, потому что node.js их себе требует. Знание нескольких технологий и широкий кругозор сегодня почти обязательны.</p><p>В этом тоже, кстати, преимущество 1С. Если ты не знаешь фронтенда, то твоему начальнику придется привлекать к команде разработки веб-программистов. Однако, если ты разбираешься в 1С, то можешь долгое время работать, обходясь только этим языком программирования и быть, при этом, успешным специалистом. В других же стеках, если ты знаешь только одну технологию, то ты со связанными руками, потому что ни одной серьезной задачи бизнеса ты не сможешь сделать целиком.</p><p>Если у человека есть желание кодить и осваивать новые языки, то, с одной стороны, после 1С ему будет легче — не придётся заново запоминать, что такое переменная, условие и цикл, потому что это общие концепции, которые есть и в других языках. С другой стороны, будут и сложности: придётся переключаться на кодинг на английском языке, а также привыкать, что под рукой нет решений из «коробки» и все низкоуровневые вещи, вроде миграции полей в базе данных и рисования интерфейса, нужно писать самому.</p><p>В целом, будет нетрудно переключиться на Java Script, потому что это стандартная разработка для веба, или освоить Python — язык, который в принципе создавался для того, чтобы быть простым. Поэтому, ответ — да. Если никогда не программировал, то после изучения 1С будет легче изучить что-то ещё.</p><h2>Где учиться на 1С-программиста?</h2><p>Знания, достаточные для погружения в профессию, дают очные и интернет-курсы. Многие из них рассчитаны именно на новичков, поскольку опытные специалисты нарабатывают навыки на реальных кейсах.</p><p>В Нетологии на первом этапе обучения реализован метод «программирования без кода». Сначала студенты учатся создавать решения нажатием кнопок мыши вообще без кода. И они, даже не написав ни строчки кода, видят результат своей работы — готовое работающее приложение. Можно ввести необходимые данные (клиент, заказ, склад) и посмотреть на результат. Это даёт первичное понимание процесса работы «1С-ника».</p><p>После освоения базовых навыков, наступает этап детального изучения самой программы. Здесь студенты не только оттачивают мастерство работы с блоками и компонентами 1С, но, главным образом, учатся понимать, как <a href="https://tproger.ru/video/primenenie-1s-erp-uh-dlja-avtomatizacii-proektnoj-organizacii-2/">автоматизировать бизнес-процессы</a> так, чтобы это помогало предприятиям развиваться и приносить прибыль. Если погружение в обучение было последовательным и тщательным, выпускники курсов без труда устраиваются на работу уже в новом качестве — 1С-программистов.</p>]]></content:encoded>
    </item>
    <item>
      <title>Расследование ошибки нехватки памяти на сервере 1С</title>
      <link>https://tproger.ru/articles/rassledovanie-oshibki-nehvatki-pamjati-na-servere-1s</link>
      <comments>https://tproger.ru/articles/rassledovanie-oshibki-nehvatki-pamjati-na-servere-1s?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Alexander Rudnitsky]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/rassledovanie-oshibki-nehvatki-pamjati-na-servere-1s</guid>
      <description><![CDATA[<p>Ошибки нехватки памяти в «1С: Предприятие 8.3» возникают на сервере и требуют диагностики причин на примере конкретного эпизода.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/rassledovanie-oshibki-nehvatki-pamjati-na-servere-1s">Расследование ошибки нехватки памяти на сервере 1С</a>»</p>]]></description>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Гостевая публикация]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 23 Nov 2021 14:00:37 GMT</pubDate>
      <content:encoded><![CDATA[<p>Ошибка системы «1С: Предприятие 8.3» из-за нехватки памяти — постоянный спутник администратора 1С. Разбираемся, из-за чего они возникают, и рассматриваем пример диагностики одного подобного эпизода из практики администрирования сервера 1С.</p><h2>Природа проблемы</h2><p>Сообщение «Недостаточно памяти» — одна из самых часто встречающихся ошибок при работе с 1С: Предприятие версии 8.3 и выше. Она происходит по самым разным причинам — от обработки системой нескольких массивных файлов и загрузки больших объёмов данных, до обновления ПО и перегрузки ресурсов при формирования сложных отчётов.</p><p>Она не так критична при возникновении на клиентском компьютере, а вот если сообщение об ошибке выдает сервер 1С, нужно отнестись к этому максимально внимательно. Это тот самый случай, когда очень важно установить правильный «диагноз» — то есть решения не будет, пока ответственный администратор не распознает источник проблемы, не поймёт её природу.</p><p>Проблема может заключаться в несвоевременном завершении процессов, запускаемых различным ПО. Они накапливаются и перегружают доступный объём памяти на сервере. Также может иметь место интенсивная работа различных программ с постоянным резервированием и освобождением ресурсов памяти.</p><p>Приведу пример расследования одной подобной ошибки из своей практики.</p><h2>Инцидент</h2><p>Поступило обращение со следующей ошибкой:</p><figure><img src="https://media.tproger.ru/uploads/2021/11/1S_1.png" alt="" /></figure><p>Смотрим журнал регистрации, там так же выводится ошибка с пояснением о нехватке памяти на сервере:</p><figure><img src="https://media.tproger.ru/uploads/2021/11/1S_2.png" alt="" /></figure><p>Настроив технологический журнал (ТЖ) системы 1С с событием EXCP — EXCPCNTX обнаруживаем запись:</p><p>Ошибка СУБД out of memory for query result</p><p>То есть, обе ошибки сообщают о проблеме объёма памяти, на основании чего нашим главным подозреваемым становится код конфигурации (возможно наличие неоптимальных запросов).</p><p>Находим код конфигурации, вызывающий ошибку.</p><p>В журнале регистрации указан следующий код:</p><p>Открываем конфигуратор и переходим в указанный модуль к указанному номеру строки кода:</p><figure><img src="https://media.tproger.ru/uploads/2021/11/1S_4.png" alt="" /></figure><p>Строка, на которой произошла ошибка:</p><p>Смотрим тип объекта (константы), к которой идёт обращение:</p><figure><img src="https://media.tproger.ru/uploads/2021/11/1S_5.png" alt="" /></figure><p>Итак, в конфигурации есть константа:</p><p>Она хранит в базе что-то неструктурированное (двоичные данные), что может занимать значительный объём памяти.</p><p>Проверяем, какой объем данных фактически занимает константа. Для этого узнаем имя таблицы хранения в базе PostgreSQL — таблица «_Const10013», индекс «_Const10013_ByKey».</p><figure><img src="https://media.tproger.ru/uploads/2021/11/1S_6.png" alt="" /></figure><p>Узнаем размер таблиц «Const10013», «_Const10013_ByKey» на диске:</p><figure><img src="https://media.tproger.ru/uploads/2021/11/1S_7.png" alt="" /></figure><p>На диске таблица занимает всего 4688 Кб = 4,6 Мб. Размер является незначительным, значит, причина не в константе.</p><p>Обнаруживаем, что кластер 1С является 32-разрядным:</p><figure><img src="https://media.tproger.ru/uploads/2021/11/1S_8.png" alt="" /></figure><p>32-разрядный кластер 1С имеет ограничение примерно в 3.8 Гб, при достижении которого происходит падение процесса. В режиме отсутствия нагрузки rphost занял 3,2 Гб, что близко к порогу падения. Подобные инциденты будут происходить в любой момент времени.</p><h3>Внесены изменения:</h3><ul><li>В кластере серверов 1С «Интервал превышения допустимого объёма памяти процессов» = 300. Настройка не избавляет от ошибки, но необходима для снижения частоты возникновения ошибки.</li><li>В планировщике Windows настроен перезапуск службы 1С; такими образом освобождается виртуальное адресное пространство в памяти, создаётся новый рабочий процесс.</li></ul><p>Настройка также не гарантирует от ошибки, но снижает вероятность её возникновения.</p><figure><img src="https://media.tproger.ru/uploads/2021/11/1S_9.png" alt="" /></figure><h3>Для предотвращения повторной ошибки следует:</h3><ul><li>Сменить 32-разрядный кластер серверов 1С на 64-разрядный.</li><li>Так как на сервере используется 14 ядер процессора, необходимо осуществить переход на платформенные лицензии 1С КОРП для снятия ограничений по настройкам и обеспечения возможностей для гибкой настройки распределения памяти сервера.</li></ul><h3>Другие варианты</h3><p>Зачастую, особенно в ситуации, когда нужно срочно вернуть систему в работоспособное состояние при возникновении подобной ошибки, можно попробовать такие «дедовские» способы, как перезагрузка сервера 1С или перезапуск рабочих процессов 1С, что приведёт к уменьшению объёма используемой памяти.</p><p>Источником проблемы также может быть недостаток пространства на жестком диске сервера. Здесь решение будет зависеть от устройство сервера или кластера, но здесь также могут помочь и перезапуск сервера, и наращивание ёмкости диска (или освобождение существующего пространства), а также оптимизация запросов или обновление версии ПО системы.</p>]]></content:encoded>
    </item>
    <item>
      <title>17 мгновений 1С: история разработчика</title>
      <link>https://tproger.ru/articles/17-mgnovenij-1s-istorija-razrabotchika</link>
      <comments>https://tproger.ru/articles/17-mgnovenij-1s-istorija-razrabotchika?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Solvery.io]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/17-mgnovenij-1s-istorija-razrabotchika</guid>
      <description><![CDATA[<p>Опыт программиста 1С показывает особенности карьеры и содержит советы для тех, кто хочет освоить профессию и работать с платформой.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/17-mgnovenij-1s-istorija-razrabotchika">17 мгновений 1С: история разработчика</a>»</p>]]></description>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Гостевая публикация]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 22 Oct 2021 15:33:16 GMT</pubDate>
      <content:encoded><![CDATA[<p>Так уж сложилось, что я работаю в 1С более 17 лет, и у меня вышло 17 примеров использования 1С в связке с другими системами, поэтому и статью я решил назвать «17 мгновений 1С».</p><p>Распространено мнение, что платформа 1С Предприятие — это в основном про бухгалтерию и зарплату. Что 1С-ники — это такие продвинутые бухгалтеры, которые научились кодить. И в этой статье я хотел бы развеять часть мифов и показать, какое 1С на самом деле может занимать место в IT-ландшафте компании.</p><p>Я не претендую на полноту информации, а просто приведу некоторые кейсы интеграций, в которых мне доводилось участвовать. Про всякие скучные вещи вроде выгрузки товаров на сайт интернет-магазина или обмены между двумя 1С базами говорить не будем. Начнём с чего-нибудь привычного.</p><p>1С Бухгалтерия и… Стоп, я же только что писал, что 1С — это не только бухгалтерия, так почему же я решил начать именно с неё? Смотрите, тут какая штука. Все привыкли, что 1С-ник должен знать бухгалтерию, проводки и баланс лучше любого главбуха. Но я глубоко убежден, что каждый должен быть компетентен именно в своей нише и разбираться именно в своих задачах.</p><h2>Какие же задачи стоят пред 1С разработчиком для Бухгалтерии?</h2><p>Кейс 1. Интеграция с сервисом Smartway для автоматической загрузки командировочных документов. Убираем рутину и дублирование ввода данных разными пользователями.</p><p>Кейс 2. Бесшовная интеграция с документооборотом. Возможность настроить сквозные бизнес-процессы согласования, подписания, использование ЭЦП, автоматическое прикрепление печатных форм.</p><h3>Следующий классический случай — 1С Зарплата и управление персоналом</h3><p>Что же здесь может быть интересного для разработчика 1С, если у него душа не лежит к планам расчётов и разбору ошибок учёта?</p><p>Кейс 3. Интеграция с рекрутинговыми сервисами, например Huntflow. Загрузка резюме, работа с подбором персонала, анкетами, кандидатами, вакансиями в тесной связке с 1С.</p><p>Кейс 4. Интеграция с СКУД. Активация карточек доступа, контроль учёта рабочего времени, дашборды и аналитика трудовой дисциплины (грубо говоря, как часто сотрудник выходит покурить.</p><p>Кейс 5. Интеграция с ActiveDirectory. Создание, блокирование, обновление данных учетных записей. Упрощаем работу системным администраторам и отделу информационной безопасности.</p><p>Кейс 6.  Переход на кадровый электронный документооборот. Тут пространство для маневра очень велико — можно интегрироваться со сторонними сервисами (Сбер Корус, СБИС, HRLink) или же использовать свою инфраструктуру на базе сертификатов Microsoft и 1С Документооборота. Помним про бесшовную интеграцию.</p><p>Кейс 7. Процессинг, интеграция с банковскими шинами данных, зарплатные проекты и всё с ними связанное.</p><p>Кейс 8. Внедрение системы рассылок уведомлений. Уведомления на почту о начале отпуска, работе в выходной, расчётные листки, приемы на работу и увольнения, памятки новым сотрудникам и так далее. Меньше рутины для кадровиков — больше информированности у всех задействованных лиц.</p><h3>А вот и он — 1С Документооборот! И на его примере у меня есть очень много кейсов интеграции с различными системами</h3><p>Кейс 9. Интеграция с MS Exchange. Синхронизация мероприятий, создание мероприятий в Outlook прямо из 1С, обновление списков участников, времени и места проведения, и так далее.</p><p>Кейс 10. Интеграция с системой обработки заявок OTRS. Создание, отслеживание, обновление заявок непосредственно из 1С, с привязкой к объектам базы данных — документам, проектам, различным справочникам.</p><p>Кейс 11. Интеграция с корпоративным порталом. Отображение на портале статуса сотрудника (в отпуске, в командировке, работает дистанционно, отсутствует), отображение дней рождений, и многое другое</p><p>Кейс 12. Встраивание веб-клиента в сайт и интеграция с онлайн-чатом/ассистентом.</p><p>Кейс 13. Не устали? Да, 1С — это не только бухгалтерия.  Итак, интеграция с MS Project Server. Разработка API для формирования бюджетов, планирования занятости ресурсов на разных проектах, синхронизация сведений в карточке ресурсов с 1С.</p><p>Кейс 14. Интеграция с MS Dinamics CRM. Синхронизация финансовых показателей проектов, подходящих под определенные условия. Для синхронизации использовалось консольное приложение от субподрядчика.</p><h3>Ну и в завершение немного экзотики</h3><p>Кейс 15. Реализация экспертной медицинской системы по расшифровке результатов анализов. Система в виде веб-кабинета позволяет сотруднику загрузить PDF-файл с анализом, а далее на основе процентных соотношений различных показателей выдаёт рекомендации и интерпретацию этих анализов. Из интересных технологий, которые были задействованы — отображение PDF в 1С в виде html документа с пагинацией, для сравнения исходного файла и распознанных показателей.</p><p>Кейс 16. Автоматизация учёта финансовых инструментов. Акции, облигации, сделки РЕПО, котировки, купонный доход, вот это вот всё. Загрузка отчетов брокера в 1С из Excel файлов произвольных форматов, загрузка котировок и данных по финансовым инструментам с биржи ММВБ, формирование аналитики по сделкам.</p><p>Теперь об использованных технологиях. Чаще всего на помощь приходят  классические веб-сервисы, http-сервисы, работа с json, xml, xdto. Также часто используются средства работы с табличными документами — как при помощи com-объектов, так и средствами объектов 1С «ТабличныйДокумент».</p><p>Не обойтись зачастую и без смежных знаний — навыки веб-разработки вполне можно применять совместно с 1С. Приходится сталкиваться и со скриптами, консольными приложениями, да много с чем. Смежные навыки позволяют решать многие задачи не в лоб средствами 1С, а выбирать наиболее подходящие инструменты.</p><h3>На закуску</h3><p>Кейс 17. Использование 1С в качестве бэкэнда для server-side rendering.</p><p>Пришла мне в голову идея упростить жизнь себе и коллегам, собрав все данные по использующимся http-сервисам в виде сайта-справки. Сказано — сделано! Вся информация хранится в отдельном расширении. Http-сервис собирает данные из справочника с описанием сервиса, формирует готовый html-документ и возвращает браузеру.</p><p>И ещё один вариант использования 1С для бэкэнда. Выше я писал про интеграцию 1С и системы обработки заявок OTRS. У рядовых пользователей, которые эти самые заявки создают, доступа к системе нет, и всё можно отслеживать только в почте по номеру тикета. Чтобы немного упростить навигацию по заявкам, я сделал небольшой веб-сайт, который получает из 1С JSON, в котором содержатся данные о заявках текущего пользователя в OTRS.</p><p>Используя доменную авторизацию, можно отфильтровать только заявки, к которым пользователь имеет доступ, и вернуть их в формате JSON. А дальше просто в более-менее красивом виде, используя bootstrap4 и fathgrid, выводим пользователю его заявки с возможностью просмотра деталей.</p><p>Надеюсь, мне удалось немного развеять миф, что 1С — это только бухгалтерия. В настоящий момент 1С прочно занимает свое место в IT-инфраструктуре, эффективно интегрируется с самыми различными внешними системами, и позволяет решать не только учетные задачи, но и находит множество других сфер применения.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как выявить повышенную загрузку процессора на сервере 1С</title>
      <link>https://tproger.ru/articles/kak-vyjavit-povyshennuju-zagruzku-processora-na-servere-1s</link>
      <comments>https://tproger.ru/articles/kak-vyjavit-povyshennuju-zagruzku-processora-na-servere-1s?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Alexander Rudnitsky]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-vyjavit-povyshennuju-zagruzku-processora-na-servere-1s</guid>
      <description><![CDATA[<p>Сервер 1С с повышенной загрузкой процессора требует диагностики. Ключевые аспекты: способы выявить причину, предупредить проблему и снизить нагрузку.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-vyjavit-povyshennuju-zagruzku-processora-na-servere-1s">Как выявить повышенную загрузку процессора на сервере 1С</a>»</p>]]></description>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Гостевая публикация]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 24 Sep 2021 11:06:29 GMT</pubDate>
      <content:encoded><![CDATA[<p>Стандартный вызов при администрировании систем 1С – проблема отношений между процессором сервера (CPU) и рабочим процессом rphost.exe, который обслуживает клиентские обращения и взаимодействует с сервером базы данных. Нередко они становятся причиной перегрузок CPU, что приводит к замедлению и сбоям работы. Разбираемся, как выявлять такие случаи и что делать для их профилактики и устранения.</p><p>Начнём с того, что rphost представляет собой ключевое звено всей архитектуры 1С, забирая на себя большую аппаратную нагрузку. Процессов rphost может быть много по разным машинам внутри корпоративной системы 1C. При этом rphost.exe часто «съедает память» и перегружает процессор. К примеру, это может выглядеть так:</p><p>Дано</p><ul><li>сервер 1С: Wndows Server 2016 Standard, 32 Гб ОЗУ, 12-ядерный процессор 2.7 ГГц;</li><li>платформа 1С — 8.3.15.1565 с настройками по умолчанию;</li><li>60 баз, лицензия платформы ПРОФ.</li></ul><p>Проблема</p><p>Процессор загружен постоянно на 85-100% (и каждое ядро, и суммарно). Требуется выявить причину такой загрузки и разгрузить процессор.</p><p>Решение</p><p>Начинаем с самого простого и очевидного. Откроем диспетчер задач Windows, вкладку Details и отсортируем список процессов по колонке CPU.</p><p>Если видим один или несколько процессов rphost.exe в топе – значит, процессор загружен 1С. Если процессор загружен, значит какие-то задачи выполняются. А так как процессор загружен слишком часто, то задачи выполняются либо слишком долго, либо слишком быстро и часто.</p><p>Но что именно может суммарно выполняться настолько долго в 1С, что это становится проблемой? Находим топ суммарно длительных серверных вызовов. Для этого нам понадобится выполнить сбор технологического журнала (ТЖ). Это специальный механизм платформы 1С 8.3, который позволяет протоколировать все события, происходящие в системе, в том числе системные ошибки.</p><p>Настройка его сбора выглядит так:</p><p>Далее необходимо провести парсинг собранного для выявления возможных источников проблемы. В этом поможет следующий скрипт:</p><p>С помощью GitBash в директории ТЖ запускаем скрипт. Получаем следующий результат:</p><figure><img src="https://media.tproger.ru/uploads/2021/09/1_s_1.png" alt="" /></figure><p>В топе оказались регламентные задания. Заходим в базы и проверяем периодичность каждого регламентного задания. Периодичность высокая.<br /><a href="https://media.tproger.ru/uploads/2021/09/1_s_2.png"></a></p><h3>Что поможет справиться с загрузкой процессора?</h3><p>1. Если в работе системы 1С компании есть период нерабочего времени, переносим время запуска на него.</p><p>2. В случае, когда нерабочего времени нет (система всегда работает), уточняем, пользуются ли пользователи полнотекстовым поиском. Если нет — отключаем регламентные задания. Если да — уточняем допустимый предел актуальности данных (например, на вчерашний день, двухчасовая актуальность). И меняем периодичность запуска соответственно.</p><p>3. Проблему это не решает, если пользователь отвечает, что порога актуальности быть не должно или он должен быть слишком мал, как в примере. Тогда полнотекстовый поиск требуется выполнять только по определённым таблицам, полям. В таком случае для остальных полей требуется отключить свойство использования полнотекстового поиска.</p><p>4. Наконец, самый сложный случай, когда полнотекстовый поиск требуется для всех полей, а данные меняются часто. Тогда для решения потребуется либо произвести увеличение количества ядер (и желательно их частоты), либо выполнить перенос сервиса полнотекстового поиска на отдельный сервер.</p><p>5. Также иногда проблему загрузки процессора решают довольно банальные шаги: перезагрузка сервера и обновление платформы. Работа с актуальными версиями платформы имеет смысл по многим причинам, одна из которых — постоянный поиск разработчиками путей по снижению системных требований для работы 1С.</p>]]></content:encoded>
    </item>
    <item>
      <title>Публикация базы 1С на веб-сервере</title>
      <link>https://tproger.ru/articles/publikacija-bazy-1s-na-veb-servere</link>
      <comments>https://tproger.ru/articles/publikacija-bazy-1s-na-veb-servere?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Alexander Rudnitsky]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/publikacija-bazy-1s-na-veb-servere</guid>
      <description><![CDATA[<p>Разбираем, как публиковать базу 1С на веб-сервере и что делать, когда служба 1С и веб-служба должны располагаться на разных серверах?</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/publikacija-bazy-1s-na-veb-servere">Публикация базы 1С на веб-сервере</a>»</p>]]></description>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Гостевая публикация]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 22 Jul 2021 12:46:37 GMT</pubDate>
      <content:encoded><![CDATA[<p>Массовый переход на удалённые модели работы, задачи импортозамещения в области ПО и необходимость масштабировать ИТ-ресурсы бизнеса вызвали к жизни несколько новых тенденций. Так, сумма перечисленных факторов актуализировала роль удаленного веб-доступа к базам данных служб 1С.</p><h2>Веяния времени</h2><p>Обычно веб-сервер устанавливают на том же «железе», что и систему 1С — подобная архитектура покрывала потребности компании-пользователя этого решения.</p><p>Однако сегодня всё меняется: цифровые бизнес-модели масштабируются с ростом объемов операций, меняются модели доступа к ИТ-системам компаний, требования к их производительности и так далее.</p><p>Отдельный веб-сервер, на котором публикуется база данных 1С, позволяет избавиться от необходимости установки дополнительных компонентов 1С.</p><p>Это значительно ускоряет работу всего решения даже при большом количестве пользователей, обращающихся системе удалённо. Подобная архитектура позволяет создавать кэш данных, обеспечивая доступ к необходимой информацию по запросу в максимально короткий промежуток времени без излишней загрузки системы.</p><figure><img src="https://media.tproger.ru/uploads/2021/07/1S_2.png" alt="" /></figure><p>Для доступа достаточно иметь веб-браузер, и устройство с доступом к сети интернет.</p><p>Служба 1С — отдельно, БД — отдельно: простой принцип, обеспечивающий необходимую производительность.</p><p>В Интернете нет недостатка в инструкциях по публикации обоих элементов в единой физической локации – то есть, в рамках старой парадигмы. Это довольно просто: запускаем 1С от имени Администратора, затем в конфигураторе <i>«Администрирование»</i> выбираем <i>«Публикация на веб-сервере»</i>. И, собственно, готово.</p><p>Но что делать, когда служба 1С и веб-служба должны располагаться на разных серверах?</p><p>Организовать веб-сервер для 1С можно с помощью двух решений: Internet Information Server (IIS), который включён в операционную систему Windows, а также с помощью Apache-сервера.</p><p>Обе утилиты распространяются бесплатно и предлагают все необходимые функции для настройки удаленных серверов.</p><h2>Для IIS</h2><p>Для публикации базы на веб-сервере IIS необходимо сначала установить требуемые компоненты IIS и платформу 1С с компонентой <i>«Модули расширения веб-сервера»</i>.</p><figure><img src="https://media.tproger.ru/uploads/2021/07/IIS_1.png" alt="" /></figure><p>При установке IIS обязательно устанавливаются следующие компоненты.</p><h3>Общие функции HTTP (Common HTTP Features)</h3><ul><li>статическое содержимое (Static Content);</li></ul><ul><li>документ по умолчанию (Default Document);</li></ul><ul><li>обзор каталогов (Directory Browsing);</li></ul><ul><li>ошибки HTTP (HTTP Errors).</li></ul><h3>Разработка приложений (Application Development)</h3><ul><li>ASP;</li></ul><ul><li>ASP.NET. 3.5;</li></ul><ul><li>Расширения ISAPI (ISAPI Extensions);</li></ul><ul><li>Расширяемость .NET 3.5 (.NET Extensibility 3.5);</li></ul><ul><li>Фильтры ISAPI (ISAPI Filters).</li></ul><h3>Исправление и диагностика (Health and Diagnostics)</h3><ul><li>Ведение журнала HTTP (HTTP Logging);</li></ul><ul><li>Монитор запросов (Request Monitor);</li></ul><ul><li>Средства управления (Management Tools);</li></ul><ul><li>Консоль управления IIS (IIS Management Console).</li></ul><p>После установки платформы 1С и компонентов IIS пользователю (или группе IIS_USRS), от имени которого запущена служба веб-сервера, необходимо предоставить права на каталог с платформой 1С для возможности запуска компонентов.</p><p>Включение компонентов веб-сервера IIS в операционной системе Windows 10 выполняется достаточно просто. Для начала нужно открыть раздел <i>«Программы и компоненты»</i> <b>(Programs and Features)</b> в панели управления <b>(Control panel)</b>. Когда откроется окно <i>«Компоненты Windows» </i><b>(Windows features)</b> в нём необходимо проставить флажки для следующих элементов:</p><h3>Службы IIS</h3><ul><li>Службы интернета;</li><li>Компоненты разработки приложений;</li></ul><p>и далее:</p><ul><li>Расширение ISAPI;</li><li>Фильтры ISAPI.</li></ul><h3>Средства управления веб-сайтом</h3><ul><li>Консоль управления IIS.</li></ul><p>Затем нажимаем «OK», ждём завершения выполнения операции. После того как включение компонент будет выполнено, можно переходить к публикации информационной базы.</p><p>Настройка компонент производятся в диспетчере серверов <b>(Server Manager)</b>. Необходимо выбрать <i>«Управление» — «Добавить роли и компоненты»</i> <b>(Manage — Add Roles and Features)</b>. В <b>Add Roles and Features</b> нужно два раза нажать <i>«Далее»</i> (<b>Next)</b> пока мастер не переключится на страницу ролей сервера (<b>Server Roles)</b>.</p><p>Во вкладке роли сервера <b>(Server Roles</b>) установите флажок <b>Web Server IIS</b>. Данная роль зависит от другой (<b>[Tools] IIS Management Console</b>), она устанавливается через <i>«Добавить компоненты»</i> (<b>Add Features</b>) в открывшемся окне.</p><p>После чего нажимаем кнопку <i>«Далее»</i> (<b>Next</b>) пока мастер не дойдёт до вкладки <i>«Роль веб-сервера IIS»</i> (<b>Web Server Role IIS</b>).На этой вкладке — <i>«Далее» </i>(<b>Next)</b> и попадете на вкладку <i>«Служба ролей» </i>(<b>Role Services</b>).</p><p>Во вкладке нужно найти пункт <b>Application Development </b>и выбрать в нем с помощью флажков пункты <b>ISAPI Extensions</b> и <b>ISAPI Filters</b>. После установки флажков — <i>«Далее»</i> (<b>Next</b>) и <i>«Установить»</i> (<b>Install)</b>. На этом установка веб-сервера завершена.</p><p><i>Пример: </i></p><p>"C:\Program Files\1cv8\8.3.16.1224\bin\webinst.exe" -iis -wsdir base1 -dir "C:\inetpub\wwwroot\base1" -connStr "Srvr="Srv1C";Ref="base1"</p><h2>Для Apache</h2><p>Если в качестве веб-сервера выбран Apache, нередко много времени приходится тратить на поиск корректной <a href="https://www.apachelounge.com/download/">ссылки</a> для скачивания актуального дистрибутива Apache.</p><figure><img src="https://media.tproger.ru/uploads/2021/07/1C_3.png" alt="" /></figure><p>Архив с сервером скачивается и разархивируется в любую удобную папку, например, C:\Apache24. В названии папки указан номер версии Apache, например Apache 2.4.</p><p>При публикации информационной базы из командной строки стоит обращать на номер версии для того, чтобы выбрать корректную библиотеку веб-компонент, поставляемую с платформой.</p><p>После разархивирования в командной строке от имени администратора (меню <i>«Пуск»</i> и ввод cmd) открываем приложение через пункт меню <i>«Запустить от имени Администратора»</i> (<b>Run as Administrator</b>).</p><p>В командной строке переходим в директорию распакованного Apache с помощью команды cd</p><p>cd C:\Apache24</p><p>и директории Apache вводим команду:</p><p>httpd.exe -k install</p><p>Это установит Apache, которым можно далее управлять в окне служб.</p><p>Далее нужно только опубликовать информационную базу и указать файлы сертификата в настройках Apache.</p><p>Для публикации базы нужно открыть конфигуратор конкретной базы от имени администратора и перейти в пункт меню <i>«Администрирование»</i>. После этого выбрать <i>«Публикация информационной базы»</i>. В окне публикации указываются имя публикации и каталог, где будут находиться ее настройки. После этого нажать <i>«Опубликовать»</i> и дождаться окончания операции</p><p><i>Синтаксис:</i></p><p>webinst [-publish] | -delete &lt;веб-сервер&gt; -wsdir &lt;виртуальный каталог&gt;</p><p>-dir &lt;физический каталог&gt;</p><p>-connstr &lt;строка соединения&gt;</p><p>-confpath &lt;путь к файлу httpd.conf&gt;</p><p>-descriptor &lt;путь к файлу default.vrd&gt;</p><p>[-osauth]</p><p><i>Пример:</i></p><p>"C:\Program Files\1cv8\8.3.16.1063\bin\webinst.exe" -apache24 -wsdir base2 -dir</p><p>"C:\Apache24\w\base2" -connStr "Srvr="Srv1C:2541"; Ref="base2";" -confPath</p><p>"C:\Apache24\conf\httpd.conf"</p><p>Для проверки корректной публикации базы нужно открыть ссылку, которая состоит из двух частей:</p><ul><li>Имени сервера;</li><li>Имя публикации базы, указанное в окне настройки публикации.</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Как автоматизация операций помогает сделать сервис удобным для клиентов и сотрудников</title>
      <link>https://tproger.ru/articles/kak-avtomatizacija-operacij-pomogaet-sdelat-servis-udobnym-dlja-klientov-i-sotrudnikov</link>
      <comments>https://tproger.ru/articles/kak-avtomatizacija-operacij-pomogaet-sdelat-servis-udobnym-dlja-klientov-i-sotrudnikov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Vadim Atamanenko]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-avtomatizacija-operacij-pomogaet-sdelat-servis-udobnym-dlja-klientov-i-sotrudnikov</guid>
      <description><![CDATA[<p>Опыт разработки и запуска корпоративного проекта, который помог автоматизировать рутинные операции и очень обрадовал бухгалтера.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-avtomatizacija-operacij-pomogaet-sdelat-servis-udobnym-dlja-klientov-i-sotrudnikov">Как автоматизация операций помогает сделать сервис удобным для клиентов и сотрудников</a>»</p>]]></description>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Пост пользователя]]></category>
      <category><![CDATA[Автоматизирование]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 21 Jul 2021 08:34:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>В один из суетливых дней на пороге отдела разработки появился технический директор с горящими глазами и предложением нового проекта, который нужно разработать и внедрить. Желательно не «через год», а в разумные сроки.</p><p>По результатам обсуждений собрали основной бриф:</p><ul><li>Разработать систему по регистрации новых абонентов и созданию бизнес-процессов по их подключению с проведением процесса по всем нужным отделам в компании.</li><li>Разработать систему по отключению существующих абонентов и созданию бизнес-процессов по их отключению с проведением процесса по всем нужным отделам в компании.</li><li>Разработать систему оповещения о плановом проведении ремонтных работ на линиях.</li><li>Разработать систему регистрации поступающих заявок от абонентов.</li><li>Автоматизировать систему расчётов для абонентов телекоммуникационных услуг.</li><li>Провести интеграцию с банковским ПО для приёма и обработки платежей от абонентов в системе бухгалтерского учёта.</li></ul><p>За основу был взят следующий стек технологий и инструментов:</p><ul><li>Система бухгалтерского учёта на платформе 1С Бухгалтерия, Управляемые формы.</li><li>1С Битрикс24 – как инструмент для использования механизма бизнес-процессов и уведомлений для абонентов.</li><li>IIS (Internet Information Services), встроенный компонент серверных ОС на платформе Windows Server, – как инструмент для того, чтобы развернуть внешний web-сервис.</li><li>Postman – как инструмент для тестирования запросов.</li></ul><h2>Приступаем к реализации</h2><p>Первым делом в системе бухгалтерского учёта создаём новый вид  – учёт коммуникационных услуг. Он содержит в себе необходимое количество документов, справочников, регистров. Совмещаем его с существующей системой через систему расширений конфигурации, чтобы в дальнейшем не сталкиваться с проблемами в обновлениях и соответствовать правилам разработки.</p><p>Процесс занял некоторое время. От согласования с отделом бухгалтерии до финальной реализации прошло около двух недель.</p><p>Далее переходим к настройке документооборота и CRM-системы на платформе Битрикс24. Тут начинается самое интересное:</p><ul><li>При подключении нового абонента оператор со стороны 1С заполняет заявку на подключение, далее эта заявка попадает по протоколу REST в систему Битрикс24 и инициирует запуск бизнес-процесса, по которому задействуются нужные отделы и сотрудники (определение необходимости закупа оборудования, контроль оплат, распределение по командам монтажных бригад, финальный монтаж и подписание документов о передачи оборудования абоненту). После закрытия заявки абоненту приходит SMS-уведомление об успешном подключении к сервису. Заявка закрывается.</li><li>При поступлении заявки от абонента об отключении от услуги или подключении к другому тарифу оператор вносит эти данные со стороны 1С. Далее заявка попадает в Битрикс24 на контроль в отдел бухгалтерского учёта и при отсутствии задолженности происходит распределение по монтажным бригадам, которая производит демонтаж и подписывает необходимые документы.</li><li>Аналогичным образом настроены механизмы оповещений и обработки входящих заявок от абонентов. Автоматизированный расчёт стоимости происходит на стороне 1С. Если рассказать кратко, то при групповом формировании документов начисления для абонентов из базы 1С данные в Битрикс24 поступают через протокол RESTAPI. Далее  запускается бизнес-процесс системы оповещений через SMS о необходимости внесения оплат с контролем оплаты. В том случае, если от абонента не поступает реакции, разработана система уведомлений и, как крайний шаг, задача на отключение.</li></ul><p>Далее переходим к интеграции с банковском ПО. После недолгих переговоров с местным отделением банка, в котором открыт счёт, пришли к соглашению. Банк<br />добавляет в приложение нашу компанию в список сервисов. При переходе абонент вводит свой ИИН и получает текущую сумму, которую нужно оплатить.</p><h2>Запускаем web-сервис</h2><p>На стороне 1С разработали HTTP-сервис, имеющий в себе два основных метода:</p><p><b>PostCustomersInfo</b> – получает методом POST от банка информацию о успешной транзакции и вводе в базу 1С входящего платёжного поручения.</p><p>Содержание обработчика <b>GetCustomerInfo </b>в 1С:</p><figure><img src="https://media.tproger.ru/uploads/2021/07/2-2.png" alt="" /></figure><p>Публикация web-сервиса ничем особым не примечательна, да и прошла без особых проблем. Вуаля, сервис работает.</p><p>Логика получилась следующая:</p><ol><li>Абоненту поступило SMS-уведомление о необходимости оплаты.</li><li>Он переходит в приложение банка, вводит свой ИИН, получает сумму для оплаты, производит оплату.</li><li>В базу 1С попадет уже полностью заполненное платёжное поручение.</li></ol><p>В логику проведения платёжного поручения внесён дополнительный исполняющий код, использующий фишку WebHooks от Битрикс24, позволяющую сместить стадию сделки в статус «Оплачено» и, соответственно, прекратить контроль оплаты по выставленной квитанции.</p><p>Когда пошли первые платежи от абонентов, бухгалтер по банковским операциям был очень удивлён тому, что больше не нужно разносить операции вручную. Вроде простой механизм, реализация которого заняла не такое большое время, но функционал оказался крайне полезным.</p><p>В итоге у нас есть:</p><ol><li>Автоматизированная обработка поступающих заявок от абонентов.</li><li>Автоматизированный расчёт стоимости услуг и контроль оплат по ним.</li><li>Автоматизированная система приёма и разноски оплат в системе 1С Бухгалтерия.</li></ol><h3>А как вы автоматизируете процессы?</h3>]]></content:encoded>
    </item>
    <item>
      <title>Как выбрать технологию для большого и не очень большого веб-проекта</title>
      <link>https://tproger.ru/articles/which-technology-to-choose</link>
      <comments>https://tproger.ru/articles/which-technology-to-choose?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Alexey Gorshkov]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/which-technology-to-choose</guid>
      <description><![CDATA[<p>Никита Семенов, CEO SECL Group, объясняет, почему технологии чаще выбирают по субъективным причинам и что нужно знать для объективного выбора.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/which-technology-to-choose">Как выбрать технологию для большого и не очень большого веб-проекта</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Scala]]></category>
      <category><![CDATA[WordPress]]></category>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[Magento]]></category>
      <category><![CDATA[OpenCart]]></category>
      <category><![CDATA[Материалы от друзей Tproger]]></category>
      <category><![CDATA[Django]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 20 Nov 2016 15:23:25 GMT</pubDate>
      <content:encoded><![CDATA[<p>Рассказывает Никита Семенов, CEO SECL Group</p><p>За годы работы я часто слышал вопросы о выборе технологий для того или иного веб-проекта. Кто-то спрашивает у нас, как у разработчиков, как правильно, а кто-то приходит и просит сделать на какой-то конкретной технологии.</p><p>Проблема в том, что большинство выбирают технологии по субъективным причинам и пока я не слышал достойного и внятного рассуждения, которое позволит выбрать технологию объективно, основываясь на фактах, а не желаниях. Даже немногие IT-шники могут правильно выбрать технологию, ведь для этого нужно: понимать специфику проекта, иметь многолетний опыт разработки на нескольких языках, знать, как устроены подобные проекты и т.д.</p><p>Но прежде, чем что-то выбирать, давайте посмотрим, какие технологии бывают, чем они отличаются и в каких случаях какую технологию выбрать.</p><h3>Как чаще всего выбирают технологию сейчас:</h3><p>1. Она мне нравится<br />2. Знакомый посоветовал<br />3. Прочитал в Интернете<br />4. На этой технологии сделан аналогичный сайт</p><h4>В чем тут проблема:</h4><p>1. Нравится. Очень субъективно. А что, если по требованиям она не подходит? Или на ней очень дорогие и редкие специалисты? Или она вообще умирает?</p><p>2. Знакомый. Обычно это тот знакомый, который «чуть лучше» разбирается в ИТ, чем тот, кому он советует. И даже если он программист с опытом, он не может знать всех решений на всех популярных языках. Ведь никто не спрашивает, по каким критериям выбирал этот знакомый. Если этот знакомы не CTO Google, я бы так просто не доверял такой рекомендации.</p><p>3. Прочитал. Тут уже лучше, можно найти разные сравнения и аргументацию. Но опять же, чтобы разобраться во всех решениях человеку, пусть даже с крепкими знаниями в разработке, нужно время. А без знаний в разработке все прочитанные технические обзоры ничего не стоят.</p><p>4. Аналог. Большинство популярных сайтов написаны на тех или иных технологиях потому, что так «исторически сложилось» . Если бы Facebook сейчас выбирал технологию для себя, я сомневаюсь, что он взял бы за основу PHP. А еще может быть, что технология уже устарела, её продавили на основе прошлых 3х пунктов, выбрали какую-то разрекламированную технологию, а не действительно эффективную и т.д. Вы вряд ли можете знать реальные причины выбор технологий в других проектах. Оптимальные технологии используются крайне редко в аналогичных проектах.</p><p>Таким образом, ни один из вышеперечисленных методов выбора технологий разработки не отвечает критериям объективности. Поэтому стоит сначала определить эти критерии, а уже потом подбирать по ним техническую платформу. Ниже я попытаюсь выделить действительно важные для проекта критерии, на которым мы и будем основываться.</p><h4>Важные критерии при выборе технологий:</h4><ol><li>Размер и тип проекта</li><li>Сложность проекта</li><li>Скорость разработки</li><li>Стоимость специалистов</li><li>Доступность специалистов</li><li>Доступные инструменты разработки</li><li>Наличие готовых решений</li><li>Гибкость решения</li><li>Наличие широкого сообщества</li><li>Отказоустойчивость решения</li><li>Тренд его развития</li><li>Наличие подробной документации</li><li>Стоимость поддержки</li><li>Требования к нагрузкам</li><li>Требования к безопасности</li><li>Кроссплатформенность</li><li>Возможности интеграции с другими решениями</li></ol><p>Выбирая технологию по таким критериям мы сможем добиться объективного выбора и тем самым сэкономить себе время и деньги.</p><h3>Какие бывают проекты</h3><p>К технологиям мы еще вернемся, а пока давайте разберемся, какие бывают проекты. Часто тип проекта говорит сам за себя и можно сразу сказать, что подойдет: либо уже готовое решение, либо хотя бы в какую сторону нужно двигаться.</p><h4>Сложность проекта</h4><ol><li>Простые (визитки, лендинги, простые интернет-магазины, простые приложения) — такие решения обычно делаются на тематических коробочных решениях, CMS или шаблонах.</li><li>Средние (сложные интернет-магазины и маркетплейсы, порталы национального масштаба, разнообразные сервисы, продвинутые приложения) — такие решения обычно делаются на фреимворках.</li><li>Сложные (огромные порталы, социальные сети, инновационные и нетиповые решения) — ядро таких проектов обычно разрабатываются на чистом (нативном) языке программирования.</li></ol><p>По тематике: интернет-магазины, доски объявлений, социальные сети и т.д. Для большинства популярных тематических решений уже давно есть коробочные продукты и, если мы не пытаемся сделать какого-то монстра, то правильнее будет выбрать именно их. Решений очень много, все в одной статье описать невозможно.</p><h4>Языки программирования</h4><p>В технологиях я бы выделил 3 уровня абстракции:</p><ol><li>Чистый язык — это материал, из которого можно сделать все, что угодно. Ограничивают нас только возможности языка. На чистом языке сделаны все крупнейшие сайты мира с посещаемостью в сотни миллионов и миллиарды пользователей, такие как: Instagram, YouTube, Pinterest, Tumblr, Dropbox, Twitter, Facebook, Amazon, Digg, LinkedIn и другие. Более того, крупнейшие проекты в мире даже создают новые технологии для себя, так как уже существующие их не устраивают.</li><li>Фреимворк — это некая среда разработки для программиста с готовыми правилами и инструментами. Фреимворк с одной стороны помогает и ускоряет разработку, а с другой накладывает определенные ограничения. На фреимворках делаются проекты средней сложности с посещаемостью в миллионы.</li><li>CMS — это уже готовое решения, конструктор, в котором мы по частям собираем нужный проект. Его скорее не программируют, а настраивают. Ограничений тут огромное количество, выйти за границы коробки сложно и неэффективно. На CMS делаются простые сайты с посещаемостью до миллиона пользователей в месяц.</li></ol><p>Чаще всего один уровень абстракции базируется на другом. То есть на чистом языке делают фреимворки, а на фреимворках делают CMS. Для каждого популярного языка есть много разных фреимворков и CMS, но об этом позже.</p><p>Сегодня есть огромное количество разных языков программирования, на которых делают сайты. И, более того, на всех популярных языках есть примеры огромных сайтов. Если 10 лет назад, говоря о технологиях больших сайтов, все говорили преимущественно про Java, то сегодня это может быть почти любой язык и утверждать, что сайты делаются на каком-то конкретном языке — стереотип. Это связанно с развитием самих языков, за последнее десятилетие многие сильно продвинулись в развитии и получили широкие возможности. Конечно, каждый язык чем-то отличается и выбирая мы опять же должны руководствоваться объективными критериями с оглядкой на задачи проекта.</p><p>На чистом языке, без использования фреимворков и коробочных решений, пишутся огромные проекты с повышенными требованиями по гибкости, нагрузкам и безопасности. Для таких огромных проектов часто бюджет не играет такого значения, как эффективность. Чем больше проект, тем больше будет требований по гибкости и нагрузкам, а значит, проще писать все с нуля, выделяя на это лучших специалистов, чем если брать какие-то готовые решения, которые непонятно кем писались и непонятно какие проблемы в них скрыты. К примеру, когда речь про небольшой проект с посещаемостью в 10 тыс. человек в день, то нам будет дешевле сделать его на CMS, которая будет потреблять в 3 раза больше ресурсов сервера, поставить дополнительный сервер за 50$ / мес. и оно будет работать. Когда же мы говорим про сайт с посещаемостью в 100 млн. пользователей в день, стоимость добавления серверов у нас будет просто космической, поэтому нам проще и дешевле вложить деньги в разработку решения на чистом языке, которое будет оптимальным именно для конкретного проекта.</p><p>Чем больше проект, тем больше стек технологий, который в нем используется. В огромных порталах может использоваться сразу несколько языков программирования. Опять же, мы приходим к объективным критериям выбора технологий. Часто один язык может хорошо делать одну задачу, а другой — другую. Такие проекты могут быть на столько огромными, что его части могут работать на разных серверах, с разными доменами (поддоменами) и разными технологиями. Не следует боятся винегрета технологий в большом проекте, хотя и допускать его нужно только когда это действительно необходимо, а также помнить, что далеко не все технологии совместимы. Самый яркий пример использования разных технологий — Google. Он на столько большой, что разные его части написаны на C/C++, Java, Python, JS и других языках. Более того, Google активно создает новые технологии, как, например, популярный нынче AngularJS.</p><p>Попробую дать краткую характеристику каждому из популярных языков:</p><ol><li>PHP — его используют в основном для простых и средних проектов. Очень много коробочных решений. Относительно дешевые программисты. Антитренд последних лет, хотя с выходом последней версии языка под номером 7, он получил действительно мощные возможности.</li><li>Python — современный язык, разработка на нем быстрая и качественная. Используют его для средних и больших проектов. Программистов найти проблематично и стоят они не дешево.</li><li>Ruby — современный язык, разработка на нем так же быстрая. Его используют в основном для разработки простых и средних проектов, часто разрабатывают стартапы. Программистов также мало и они дорогие.</li><li>Java — разработка на нем очень долгая и дорогая. Его используют в основном для больших проектов со специфическими требованиями. Однако является самым популярным языком программирования <a href="https://tproger.ru/news/tiobe-march-2016/">в рейтинге TIOBE</a> по состоянию на март 2016.</li><li>C# — аналог Java, также используют для больших проектов, часть в сфере FinTech.</li><li>JavaScript — очень быстро развивается, тренд последних лет и самый популярный язык программирования <a href="https://tproger.ru/news/redmonk-language-ranking-6-16/">в рейтинге Redmonk</a> по состоянию на июнь 2016. Огромное количество наработок и можно писать все, что угодно, даже игры. Его используют для средних и больших проектов, но действительно мощные возможности этот язык получит недавно, потому примеров больших проектов пока мало, специалисты самые дорогие и найти их сложнее всего.</li></ol><p>Я описал самые популярные языки, которые сегодня используются под веб. Есть много новых языков, которые очень быстро растут, в частности Scala и некоторые другие. Но пока они довольно молодые и сырые. Я бы не рекомендовал бежать за модой и писать на них, пока они не разовьются во что-то большее.</p><p>Примеры больших сайтов:</p><ul><li>PHP: Facebook, Вконтакте, КиноПоиск</li><li>Python: Instagram, Pinterest, Reddit</li><li>Ruby: 500px, Groupon, Airbnb</li><li>Java: Ebay, Amazon, Alibaba</li><li>C#: Guru, Stack Overflow, Bank of America</li><li>JS: LinkedIn, Walmart, PayPal</li></ul><p>Эти примеры отлично показывают, что большие сайты могут быть написаны на разных языках, и это нормально. Опять же, приходим к тому, что выбирать технологию нужно под требования, руководствуясь объективными причинами.</p><h4>Фреймворки и платформы</h4><p>Это некая среда разработки для программистов, где есть готовая инфраструктура и ряд готовых функций со стандартными решениями типичных задач. Такой себе полуфабрикат, из которого можно сделать конфетку. На каждом языке есть много разных фреймворков. Есть как общие, которые создавались для разработки любых решений, так и специализированных, под узкие задачи. Например, Sylius — специализированный E-commerce фреймворк на основе Symfony. Также есть те, на которых делаются большие и сложные решения, а другие для этого не предназначены. Ниже я опишу популярные фреймворки для каждого из языков, на которых можно писать большие и сложные решения.</p><p>На фреймворках разрабатываются довольно большие и сложные сайты с уникальным функционалом. Это значительно быстрее и дешевле, чем на чистом языке, но при этом такое решение позволяет разрабатывать действительно сложные вещи и оптимизировать все это под нагрузки. Кроме того, это почти всегда более безопасно, чем любая коробочная CMS. Если вы хотите узнать об этом больше, посмотрите <a href="https://tproger.ru/translations/web-frameworks-how-to-get-started/">материал про веб-фреймворки для начинающих</a>.</p><p>Популярные фреймворки и платформы:</p><ol><li>PHP: Symfony, Laravel</li><li>Python: Django</li><li>Ruby: Ruby On Rails</li><li>Java: Spring</li><li>C#: .NET</li><li>JS: Node.js, AngularJS</li></ol><p>Больше всего фреймворков на PHP и на этом языке есть, из чего выбирать, но действительно функциональных не так много. Меньше на других языках, а на некоторых действительно качественных фреймворков вообще всего один, как у языка Ruby. У Java вообще очень много разных фреймворков для разных целей, и не только для сайтов. Все эти фреймворки ежегодно развиваются, выходят все новые и новые версии, одни фреймворки обгоняют другие. Например, Laravel только в последние несколько лет вышел на первое место по популярности, хотя самые сложные сайты до сих пор делаются на Symfony.</p><p>.NET и Node.js — это целые самостоятельные платформы, которые базируются на определенных языках, но имеют очень широкие возможности.</p><h4>CMS и CMF</h4><p>Это готовое программное обеспечение, которое нужно только настроить, реже — дописать / переписать какую-то из частей. Таких решений очень много на любом языке, но исторически так сложилось, что в основном все популярные CMS сделаны на PHP. Тут дело в развитие языков, раньше простые сайты, для которых и создавались CMS, писались на PHP. Я еще застал те времена, когда CMS почти не было, были скрипты — отдельные готовые части разных сайтов. Позже эти скрипты собирали в коробочный продукт, который был призван решить потребности 90% простых сайтов. Так и получилось, что основные CMS сделаны на PHP. Сегодня CMS на других языках развиваются слабо, потому, что уже есть сильные конкуренты на PHP, а простому сайту язык не играет большой роли, поэтому все смотрят на возможности этих готовых продуктов.</p><p>CMF — если говорить простым языком, это что-то среднее между CMS и фреймворком по возможностям. Обычно CMF используют для самых сложных сайтов из этой категории. Этот подход позволяет избавиться от лишних частей CMS, которые не нужны конкретному проекту.</p><p>CMS бывают разные по назначению: общие, для интернет-магазинов, для блогов и т.д. Разные по условиям использования: платные и бесплатные. Для каждой популярной CMS есть куча разных платных и бесплатных модулей, которые легко подключать и использовать.</p><p>Маленькие сайты, которые в основном нужны для малого бизнеса, почти всегда используют CMS. Это позволяет очень сильно экономить время на разработку. Кроме того, для настройки таких решений не нужны дорогие программисты, обычно это могут делать новички в программировании, по крайней мере саму настройку, если уже нужно писать код, тут сложнее.</p><p>Именно в работе с CMS возникает больше всего непонимание среди конечных заказчиков таких решений. Любая CMS — это тонны готового программного кода, на все случае жизни. В коробочной поставке идут десятки и сотни модулей. Все это очень сильно ограничивает специалистов. Такие решения сильно «тормозят» , они абсолютно не гибкие, их очень легко взломать, особенно бесплатные CMS. Еще часто взламывают CMS через модули сторонних разработчиков, в которых есть критические уязвимости, потому что мы никогда не знаем, какого уровня программист писал тот или иной модуль. То есть любая CMS НЕ рассчитана для большого и сложного сайта. Она не могут выдержать большие нагрузки. Это решение не безопасно, чтобы не говорили разработчики конкретной CMS.</p><p>Я видел решения почти на всех популярных CMS, с многими за более, чем 10 лет работы, пришлось поработать лично. Часть из них популярна в рунете, а часть знают в основном на западе. На используемые в них языки CMS разбивать нет смысла, по причинам, описанным выше. Лучше сказать несколько слов про каждую популярную CMS:</p><ol><li>WordPress — некогда блоговый движок, сейчас на ней делаются почти любые сайты, включая магазины. Одна из самых популярных CMS в мире, есть примеры довольно посещаемых сайтов. На ней часто делают информационные сайты, в том числе разные СМИ. Система бесплатная.</li><li>Joomla! — CMS общего назначения. Качеством особо не отличается, на ней делают очень маленькие сайты и обычно дешевле всех других вариантов, так как именно с этой CMS начинают учиться многие начинающие программисты. Система бесплатная.</li><li>Drupal — это уже CMF для общего назначения, с недавнего времени поставляется со встроенных фреймворком Symfony. Довольно мощная, на ней есть известные сайты, например, официальный сайт Белого Дома. Система бесплатная.</li><li>Magento — самая популярная система управления для интернет-магазинов в мире. Довольно мощная и сложная. В рунете используется редко, в основном на западе.</li><li>PrestaShop — одна из самых популярных CMS для магазинов в мире. Тоже довольно мощная, используют в основном на западе. Система бесплатная.</li><li>OpenCart — еще одна популярная система для интернет-магазинов, но её, наоборот, больше используют в рунете, чем на западе. В основном для маленьких и несложных магазинов. Система бесплатная.</li><li>1С-Битрикс — очень распиаренная CMS общего назначения, номер 1 в рунете. Возможности очень широкие. На ней часто пытаются делать большие и сложные сайты, а после определенного порога в посещаемости переписывают их на других технологиях. Многие считают, что только эта CMS может интегрироваться с 1С, что не является правдой, поскольку все перечисленные CMS из этого списка могут интегрироваться с 1С, для этого у всех CMS есть специальные модули. Система платная.</li></ol><p>Со всеми перечисленными CMS я работал. В основном со стороны разработчика. Точно НЕ рекомендую — Joomla, с остальными можно работать. Для магазинов лучше выбирать специализированные, а не общие CMS. Кроме 1С-Битрикс в рунете есть еще аналогичные коммерческие CMS, они во многом схожи. У каждой из систем есть свои особенности, но все они не предназначены для больших и сложных проектов, главное это не забывать.</p><h4>Шаблоны</h4><p>В последние 5 лет очень активно развивают шаблонные решения. Это еще на одну ступеньку выше, чем CMS. Если CMS — это конструктор и его нужно настраивать, то шаблоны — это уже готовые решения под типовые случаи. Например, в каждом городе есть свои рестораны, такси, клиники и т.д. Для всех этих типов малого бизнеса нужно примерно одно и тоже. Поэтому, можно просто выбрать готовый тематический шаблон, заменить в нем логотип, цвета и контент. При желании такие шаблоны можно дорабатывать по усмотрению владельца.</p><p>Преимущества таких решений в том, что они очень дешевые и их можно запускать моментально. Но при этом, такие решения не учитывают особенностей бизнеса и конверсия будет не очень высокой.</p><p>Есть специальные каталоги шаблонов: TemplateMonster, <a href="https://themeforest.net/?ref=SECL">ThemeForest</a> и др. Часто встречаются онлайн-конструкторы, в том числе тематические: <a href="http://ru.wix.com/">Wix</a>, <a href="https://www.pagecloud.com/">PageCloud</a> и др.</p><h4>Мобильные приложения</h4><p>В мобильных приложениях в последнее время используется два подхода: нативная разработка и кроссплатформенные технологии. Нативная ведется на оригинальных языках программирования, в частности Swift (для iOS, ранее был Objective-C) и Java (для Android). Кроссплатформенных технологий сейчас довольно много, они есть на базе разных языков программирования, в частности: Apache Cordova, React Native и др. Некоторые лучше, некоторые хуже. В любом случае, сложные приложения всегда пишутся на нативных технологиях. С кроссплатформой часто возникают проблемы, вплоть до того, что некоторые функции просто нереализуемы на тех или иных кроссплатформенных технологиях, сильно грузится оперативная память устройства, быстро садится батарея и т.д.</p><p>В этих двух подходах люди тоже часто путаются, пытаясь использовать кроссплатформенные подходы на все случаи жизни. Оно и понятно, ведь кроссплатформа позволяет писать код один раз, который сразу работает и на iOS и на Android, в то время, как на нативных технологиях это минимум в два раза дороже выходит. Однако мало кто знает про возможные дальнейшие проблемы в разработке. Я бы рекомендовал очень тщательно выбирать технологии и кроссплатформу брать только для простых приложений, иначе придется переписывать. Впрочем, кроссплатформенные технологии постепенно развиваются и становятся все лучше, а приложения написанные на них все сложнее.</p><h4>Стек технологий в больших проектах</h4><p>Выше я описал разные языки и фреймворки, которые используются в больших проектах, однако, если присмотреться к действительно большим проектам, там можно найти целый комплекс языков и технологий. Почти все большие сайты используются в основе один язык и еще несколько дополнительных. Тоже самое с базами данных: для одних задач могут использоваться реляционные, а для других нереляционные базы, и все это органично сочетается в рамках одного проекта.</p><p>Выбор технологий зависит от предлагаемой архитектуры проекта. Именно архитектор продумывает основные блоки будущего сайта. Какой язык ляжет к основу, будет ли он нативный или фреймворк, какую систему кэширования выбрать, какие базы данных, как все это связано и т.д.</p><p>Для примера рассмотрим технологии Instagram (данные Insight IT):</p><ul><li>Ubuntu Server 14.04 LTS — основная серверная операционная система</li><li>Python — основной язык программирования серверной части</li><li>Django — фреймворк</li><li>nginx — второй уровень балансировки входящих HTTP-запросов</li><li>gunicorn — WSGI-сервер</li><li>HAProxy — балансировка нагрузки внутри системы</li><li>PostgreSQL — основное хранилище данных</li><li>postgis — поддержка гео-запросов</li><li>pgfouine — отчеты на основе логов</li><li>pgbouncer — создание пула соединений</li><li>Redis — дополнительное хранилище данных</li><li>Memcached — кэширование</li><li>Gearman — очередь задач</li><li>Solr — гео-поиск</li><li>munin, statsd, pingdom — мониторинг</li><li>Fabric — управление кластером</li><li>xfs — файловая система</li></ul><p>И это вполне нормальный стек технологий. Сам Instagram не самый большой и сложный сервис в мире.</p><h4>Стоимость специалистов</h4><p>Один из важнейших факторов выбора технологии является стоимость и доступность специалистов, потому что именно это самая затратная часть в любом проекте. В рунете есть только одна пузомерка по зарплатам — я отфильтровал по Киеву, уровень Senior, опыт 3-5 лет. Сравним средние значения.</p><p>Зарплаты:</p><ol><li>C# — 3072$</li><li>Java — 3300$</li><li>JS — 3500$</li><li>PHP — 2780$</li><li>Python — 3000$</li><li>Ruby — 3000$</li><li>Scala — 3900$</li></ol><p>В США немного другая картина:</p><figure><img src="https://media.tproger.ru/uploads/2016/11/salary.png" alt="" /></figure><p>Теперь переведем цифры на человеческий язык. Java хоть и не новый язык, но специалисты на ней всегда были одними их самых дорогих. PHP всегда был самым дешевым, да и специалистов на рынке очень много. В сравнение я внес еще и Scala как один из новейших и трендовых языков, по этой причине он дороже всех. Еще дорогой JS, это связанно с его бурным ростом в последние годы и растущей популярностью Node.js, а также AngularJS.</p><p>Таким образом, если мы хотим экономить — то лучше смотреть на PHP, специалисты дешевые, а комьюнити большое. А если хотим самое качественное — то смотрим на Scala, который называют будущем веб-разработки, но, правда, на ней найти специалистов почти невозможно и наработок просто нет.</p><p>Еще важным параметром будет скорость разработки. Ведь важна не только зарплата программистов, но и скорость разработки. Если не учитывать уже существующие наработки, то одним из самых быстрых в разработке будет Python и Ruby, а самый медленный — Java. Кстати, по этой причине за последние 10 лет почти не вышло новых мегапроектов на Java, зато вышло много проектов на Python, о чем я расскажу ниже.</p><h4>Тренды</h4><p>Выбирая технологию, нам нужно смотреть вперед. Особенно, если речь о большом проекте. Все технологии очень быстро развиваются, выходят все новые и новые версии. Языки сильно меняются каждые 5-7 лет, фреймворки — каждые 2-3 года, а CMS — каждые 1-2 года. Важно выбрать не просто хорошую технологию сегодня, а предугадать тренды развития так, чтобы остаться на коне через несколько лет. Иначе, в конечном счете, придется переписывать проект, что всегда очень проблематично.</p><p>Есть всевозможные исследования, которые нам могут подсказать некоторые статистические выкладки. Например, исследование <a href="http://www.tiobe.com/tiobe-index/">TIOBE Index</a> показывает интересную статистику:</p><figure><img src="https://media.tproger.ru/uploads/2016/11/tiobe.png" alt="" /></figure><p>По результатам разных исследований можно выделить явных лидеров по росту — это JS (версия ES6 и выше) и мультипарадигмальные языки, в частности Scala. Кстати, именно Scala считается преемником языка Java и во многом на него похож. Также не плохо себя показывает Python.</p><p>Антитренды держат ряд старых языков и PHP. Правда, недавно вышла 7я версия PHP, в которой исправлены многие серьезные недостатки. Так что, я думаю, мы скоро увидим новый виток развития PHP. Еще многие большие проекты переписываются с Ruby на другие языки, тоже некий антитренд.</p><p>Для иллюстрации посмотрим, каких специалистов не хватает в США:</p><figure><img src="https://media.tproger.ru/uploads/2016/11/specialists.png" alt="" /></figure><p>Именно это можно считать реальной картиной трендов, которые мы видим и у нас.</p><p>На чем делались большие проекты за последние 10 лет?</p><ol><li>Airbnb — Ruby</li><li>Instagram — Python</li><li>Pinterest — Python</li><li>Foursquare — Python</li><li>Groupon — Ruby → JS</li><li>Twitter — Ruby → Scala</li><li>Uber — JS</li></ol><p>Это уже не теоретическая статистика, а реальная практика. Python и JS очень хорошо себя показывают.</p><h4>Стоимость поддержки</h4><p>Безусловно, важный критерий выбора технологии — это стоимость поддержки, о которой мало кто задумывается в начале разработки. Обычно все мыслят категориями стоимости часа поддержки, что в корне неправильно. Нам важны несколько параметров: стоимость часа, количество часов, официальная поддержка технологии, доступность специалистов, правильный подход к разработке и некоторые другие.</p><p>Стоимость часа зависит от зарплаты специалисты, с этим мы уже разобрались. А вот количество часов зависит от самой технологии и качества написания кода. Если решение коробочное, то часов на него может уходить очень много. То есть, с одной стороны, мы можем сэкономить при разработке первой версии проекта, но после погрязнуть в его постоянной доработке. Хорошо, когда решение популярное и есть официальная документация, но часто выбирают малоизвестные коробочные решения без какой-либо документации — в таких решениям стоимость поддержки будет во много раз выше стоимости самой коробки. То же касается некачественной разработки: у нас почему-то полностью отсутствует культура проведения технических аудитов готовых решений или его частей. В среднем за 20-40 часов можно проверить почти любое решение и найти его основные минусы. Чем более качественный код, тем легче, а следовательно и дешевле его поддерживать.</p><p>Также следует смотреть на версию языка, фреимворка, CMS. Нужно всегда использовать самую последнюю стабильную версию, чтобы она не устарела до выхода проекта в продакшн. При появлении новой версии, нужно сразу рассматривать возможность перевода проекта на эту версию. Потому что, если пропустить несколько версий, потом будут проблемы сделать резкое обновление.</p><h3>Так что выбрать?</h3><p>Подведем итог. Для простых сайтов чаще всего отлично подходят коробочные решения и шаблоны. Сложные сайты делаются только на фреимворках или даже чистых языках программирования. Делать можно на очень разных языках, язык выбирается под проект. Простые мобильные приложения можно делать на кроссплатформенных технологиях, а сложные обычно делаются на родных технологиях. Ну и, выбирая платформу, всегда стоит руководствоваться объективными критериями, которые я описал в статье.</p>]]></content:encoded>
    </item>
  </channel>
</rss>