惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Project Zero
Project Zero
Martin Fowler
Martin Fowler
人人都是产品经理
人人都是产品经理
C
Check Point Blog
S
SegmentFault 最新的问题
腾讯CDC
IT之家
IT之家
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
B
Blog RSS Feed
博客园 - Franky
V
Visual Studio Blog
The Register - Security
The Register - Security
GbyAI
GbyAI
博客园 - 【当耐特】
Hugging Face - Blog
Hugging Face - Blog
U
Unit 42
Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
Y
Y Combinator Blog
云风的 BLOG
云风的 BLOG
博客园 - 三生石上(FineUI控件)
Schneier on Security
Schneier on Security
N
News and Events Feed by Topic
T
Troy Hunt's Blog
小众软件
小众软件
Scott Helme
Scott Helme
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
TaoSecurity Blog
TaoSecurity Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
C
CERT Recently Published Vulnerability Notes
aimingoo的专栏
aimingoo的专栏
T
The Exploit Database - CXSecurity.com
Know Your Adversary
Know Your Adversary
G
GRAHAM CLULEY
T
Tenable Blog
P
Palo Alto Networks Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
S
Schneier on Security
Simon Willison's Weblog
Simon Willison's Weblog
H
Help Net Security
WordPress大学
WordPress大学
The Cloudflare Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
MongoDB | Blog
MongoDB | Blog
Forbes - Security
Forbes - Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
W
WeLiveSecurity
I
InfoQ
P
Privacy International News Feed

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Быстрые интеграции в 1С: прощайте, бесконечные переделки
Alabuga_sez · 2026-05-27 · via Все публикации подряд на Хабре

Средний

7 мин

15K

Как же бесит, когда приходится переписывать интеграции снова и снова… Опять растет тех. долг, пока исправляешь названия полей в JSON… 

Меня зовут Михеев Антон – я ведущий специалист модуля разработки 1С, и я прошел через это: переписывал интеграции по несколько раз в день, снова и снова «договаривался» с внешней системой. И вот, когда всё протестировано и пора стартовать, кто‑то вдруг менял структуру пакета!

Снова разборки, релизы, переговоры… В течение месяца мы собирали совещания каждый день — и обсуждали одни и те же вопросы по пятому кругу.

Наступил момент, когда заказчики стояли над душой и требовали, чтобы 1С отдавала данные ещё вчера. А у нас уже рука не поднималась переписывать интеграцию в очередной раз.

Решение: конструктор внутри 1С

Мы собрались командой и начали строить конструктор внутри 1С, (описание решения будет ниже). Идея простая:

  • аналитики сами согласовывают и «мапят» поля;

  • программисты расширяют функциональность системы.

    • аналитики сами согласовывают и «мапят» поля;

    • программисты расширяют функциональность системы.

  • аналитики сами согласовывают и «мапят» поля;

  • программисты расширяют функциональность системы.

Это решение идеально вписалась в гибкую методологию AGILE. В нашем варианте AGILE звучит как «Айгуль» — это когда всё меняется так же быстро, как женское настроение.

Результаты внедрения

Сейчас наши системы работают на быстрых интеграциях на 70 % — постепенно переводим старые на быстрый режим. Что это даёт:

  1. Минимальная поддержка со стороны программистов. Расширение ставится на любую систему. Да, да — с версии 8.3.23 всё летает, а до этой версии… ну, вы поняли — всё вылетает!

  2. Бизнес‑аналитики занимаются настройкой и поддержкой. Они больше не пишут ТЗ и не убеждают программистов как надо. Экономия времени — до 80 %.

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

  4. Нет необходимости релизить новые интеграции. Всё работает из пользовательского режима. Аналитики глубже познают структуру конфигурации и начинают писать более грамотные ТЗ. В итоге прокачивается вся команда!

Сравнение бизнес‑процессов

Вспомните, сколько времени отнимает каждая интеграция: согласование полей, обсуждение с программистом, повторное согласование, тестирование, доработка, повторное тестирование… Несколько дней на интеграцию — это норма.

Бизнес‑процесс в компании «Виллариба» (старый подход):

ТТ → Анализ → Согласование → ТЗ → Разработка → Тестирование → Доработка → Тестирование → Старт.

Бизнес‑процесс в компании «Вилабаджа» (быстрые интеграции):

ТТ → Анализ → Согласование → Настройка БИ → Старт.

*Настройка БИ включает в себя маппинг и быстрое тестирование в пользовательском режиме без написания программного кода

Вы всё ещё кодите интеграции руками? В это время у нас junior‑аналитик сам настраивает интеграции: согласовывает поля с другими системами и запускает процессы. Время освобождается для разработки и новых интересных задач. Минимум поддержки — максимум результата!

Как подключить быстрые интеграции?

Если у вас те же проблемы и интеграции нужны уже вчера, то давайте вместе подключим быстрые интеграции с блэкджеком и плюшками к вашему проекту!

Шаг 1. Создаём новое расширение в 2 клика

Назовём его «Быстрый пробник» (или как вам больше нравится — это же ваше расширение!).

Шаг 2. Загружаем расширение

Просто загружаем «Быстрый пробничек» в систему. Готово! Какой же вы молодец!

Шаг 3. Настраиваем окружение

Ещё пара кликов — и всё заработает. Вам понадобится сервер типа IIS или Apache на сервере или компьютере с 1С. Обычно он уже есть, но если нет — придётся его установить или «замучить» сисадмина (они это любят).

Шаг 4. Активируем функциональность

Предположим, сервер работает. Далее:

  1. Включаем опцию «Публиковать расширения HTTP‑сервиса автоматически».

  2. Запускаем 1С!

Шаг 5. Начинаем работать

Теперь можно взять любой документ или справочник и выгрузить все нужные поля! Разве не чудо? Не нужно стоять в очереди к программисту и кодить. Всё работает как конструктор:

  • выбираем основной объект;

  • удаляем ненужные поля;

  • получаем готовый запрос для программиста (если нужен) и JSON для всего на свете.

Можно:

Взять готовый JSON и выгрузить прямо из текстового поля;

а можно постучаться в HTTP‑дверь:

http://Сервер/База/hs/Alabuga/Sync/Номенклатура

И прямо в браузере вы увидите результат!

Представьте, сколько времени вы сэкономите! Не нужно бегать и согласовывать всё по сто раз. Просто меняете набор реквизитов и псевдонимы полей — и готово. Без релизов, без программистов, без угрызений совести :)

Техническая реализация

Думаю, вы уже загорелись этой идеей. Хватайте программиста — пусть реализует всё по инструкции ниже (а сами пока можете наслаждаться быстрыми интеграциями).

  1. Создаём документ «Интеграции»

Добавляем реквизиты:

  • Эндпоинт — строка (20 символов). Сюда будет стучаться другая система.

  • ОсновнойОбъект — строка (200 символов). Объект, который мы будем отдавать.

  • Запрос — строка неограниченной длины.

  • Табличная часть:

    Реквизит — строка (100 символов);

    ТипОбщий — строка (50 символов);

    Псевдоним — строка (100 символов).

2. Добавляем форму

На форму добавляем виртуальный реквизит и оформляем её.

3. Реализуем логику выбора объекта

Чтобы определить тип объекта, нам понадобится «Чубака». В 1С это называется «Метаданные», но смысл тот же.

Копируем код:

&НаСервере
Процедура ВыборОсновногоПриИзмененииНаСервере()
    МетаданныеОбъекта = ВыборОсновного.Метаданные(); // Получаем «Чубаку»
    Объект.ОсновнойОбъект = МетаданныеОбъекта.ПолноеИмя(); // Определяем его тип («Существо.Чубака»)
    ЗаполнитьДанные();
КонецПроцедуры

&НаКлиенте
Процедура ВыборОсновногоПриИзменении(Элемент)
    ВыборОсновногоПриИзмененииНаСервере();
КонецПроцедуры

&НаСервере
// Это чтобы реквизиты все увидеть как в конфигураторе
Процедура ЗаполнитьДанные()
    Объект.Данные.Очистить();
    Реквизиты = НайтиРеквизитыОбъектаСервер(Объект.ОсновнойОбъект);
    Для Каждого Рек Из Реквизиты Цикл
        НовРек = Объект.Данные.Добавить();
        ЗаполнитьЗначенияСвойств(НовРек, Рек);

Теперь при выборе основного объекта вы точно знаете, что это за штука. Супер!

    КонецЦикла;
КонецПроцедуры

5. Дорабатываем логику формирования запроса и JSON

Создаём общий модуль для формирования JSON отовсюду.

В общем модуле добавляем функции:

// Тут формируем массив структур ответа

Функция СоздатьJSONНаСервере(ТЗ) Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст = ТЗ;
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Массив = Новый Массив;
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        СтруктураДанных = Новый Структура;
        Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл
            Значение = ВыборкаДетальныеЗаписи[Колонка.Имя];
            СтруктураДанных.Вставить(Колонка.Имя, Значение);
        КонецЦикла;
        Массив.Добавить(СтруктураДанных);
    КонецЦикла;
    Возврат СформироватьJSON(Массив);
КонецФункции

Тут формируем JSON

Функция СформироватьJSON(Структура) Экспорт
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, Структура);
    Результат = ЗаписьJSON.Закрыть();
    Возврат Результат;
КонецФункции

6. Добавляем кнопки на форму

Добавим две кнопки:

«Создать запрос». Собирает запрос с помощью кода:

&НаКлиенте
// Тут создаём запрос
Процедура СоздатьЗапрос(Команда)
    ТЗ = "ВЫБРАТЬ";
    Для Каждого Строчка из Объект.Данные Цикл
        РеквизитнаяЧасть = СоздатьРеквизитнуюЧасть(Строчка);
        ТЗ = ТЗ + Символы.ПС + РеквизитнаяЧасть + " КАК " + Строчка.Псевдоним + ",";
    КонецЦикла;
    ТЗ = СрезатьПоследнийСимвол(",", ТЗ);
    ТЗ = ТЗ + Символы.ПС + "ИЗ";
    ТЗ = ТЗ + Символы.ПС + Объект.ОсновнойОбъект;
    Объект.Запрос = ТЗ;
КонецПроцедуры

«Создать JSON». Формирует JSON на основе запроса:

&НаКлиенте
Процедура СоздатьJSON(Команда)
    JSON = Проб_ВызовСервера.СоздатьJSONНаСервере(Объект.Запрос);
    Объект.JSONРезультат = JSON; // Сохраняем результат в поле документа
КонецПроцедуры

7. Дорабатываем функцию создания реквизитной части

Функция СоздатьРеквизитнуюЧасть определяет, как обрабатывать разные типы данных.

Вот полный код:

&НаКлиенте
Функция СоздатьРеквизитнуюЧасть(Строчка)
    Если Строчка.ТипОбщий = "string" Тогда
        Возврат Строчка.Реквизит;
    ИначеЕсли Строчка.ТипОбщий = "bool" Тогда  
        Возврат "ЕСТЬNULL(" + Строчка.Реквизит + ", ЛОЖЬ)";
    ИначеЕсли Строчка.ТипОбщий = "number" Тогда  
        Возврат "ЕСТЬNULL(" + Строчка.Реквизит + ", 0)";
    ИначеЕсли Строчка.ТипОбщий = "date" Тогда  
        Возврат "ЕСТЬNULL(" + Строчка.Реквизит + ", " + Символ(34) + "01.01.0001" + Символ(34) + ")";
    ИначеЕсли Строчка.ТипОбщий = "enum" Тогда  
        Возврат "ЕСТЬNULL(ПРЕДСТАВЛЕНИЕ(" + Строчка.Реквизит + "), " + Символ(34) + "" + Символ(34) + ")";
    ИначеЕсли Строчка.ТипОбщий = "link" Тогда
        Возврат "ПРЕДСТАВЛЕНИЕ(УНИКАЛЬНЫЙИДЕНТИФИКАТОР(" + Строчка.Реквизит + "))";
    КонецЕсли;
    
    // Если тип не распознан, возвращаем просто имя реквизита
    Возврат Строчка.Реквизит;
КонецФункции

8. Реализуем функцию срезания последнего символа

Функция СрезатьПоследнийСимвол убирает лишнюю запятую в конце строки запроса:

&НаКлиенте
Функция СрезатьПоследнийСимвол(СимволДляСрезки, ТаблЗнач) Экспорт
    ПоследняяЗапятая = СтрНайти(ТаблЗнач, СимволДляСрезки, НаправлениеПоиска.СКонца);
    Если ПоследняяЗапятая = СтрДлина(ТаблЗнач) Тогда
        ТаблЗнач = Лев(ТаблЗнач, СтрДлина(ТаблЗнач) - 1); // Срезаем последнюю запятую
    КонецЕсли;
    Возврат ТаблЗнач;
КонецФункции

Проверка работы системы

После реализации всех шагов можно проверить, как всё работает:

  1. Создаём новую интеграцию:

    • указываем эндпоинт (например, /hs/MyIntegration/Data);

    • выбираем основной объект (например, «Справочник.Номенклатура»);

    • настраиваем поля в табличной части (указываем реквизиты, их типы и псевдонимы).

  2. Нажимаем кнопку «Создать запрос» — в поле «Запрос» появится готовый текст SQL‑подобного запроса.

  3. Нажимаем кнопку «Создать JSON» — в поле «JSONРезультат» появится сформированный JSON.

  4. Проверяем HTTP‑сервис:

  • открываем браузер и переходим по адресу: 

http://Сервер/База/hs/MyIntegration/Data;

  • убеждаемся, что сервер возвращает корректный JSON с данными.

Дополнительные возможности

Что ещё можно сделать, чтобы расширить функциональность:

  • Фильтрация данных. Добавить возможность задавать условия отбора (WHERE) прямо в интерфейсе.

  • Пагинация. Реализовать постраничный вывод данных для больших таблиц.

  • Аутентификация. Настроить базовую аутентификацию или токены для доступа к HTTP‑сервису.

  • Логирование. Вести журнал запросов и ошибок для отладки и мониторинга.

  • Кэширование. Кэшировать результаты частых запросов, чтобы снизить нагрузку на базу данных.


Итоги и перспективы

Мы реализовали конструктор интеграций, который:

  • экономит до 80 % времени аналитиков;

  • освобождает программистов от рутинной поддержки;

  • позволяет быстро настраивать обмен данными без релизов;

  • даёт возможность масштабировать систему без больших затрат.

А что дальше?

У вас наверняка возникли вопросы:

  • как работать с регистрами сведений и накопления?

  • как передавать табличные части и связанные документы?

  • как организовать двусторонний обмен?

  • как обеспечить безопасность данных?

Но это уже совсем другая история… Расскажу о ней в следующей статье, если эта вам покажется интересной. До скорых встреч!

Вы пишете интеграции руками? Делитесь мнением в комментариях