R
Раскрой Панелей
🌐 Тонкий / Веб-клиент 🖥️ Толстый — UI ⚡ Толстый — UI + API 🤖 Без UI 🏭 On-Premise

🌐 Тонкий / Веб-клиент Простая

⏱ ~30 минут 📝 ~40 строк ObjectScript 📋 Версия 1С: 8.3.6+
1С работает в браузере или в режиме тонкого клиента. HTML-поле открывает наш сервис внутри формы счёта. Менеджер рассчитывает раскрой и нажимает кнопку — данные автоматически заполняют документ.
Когда подходит
  • 1С открыта в браузере (веб-клиент)
  • Сервер 1С на Linux / macOS / облако
  • Управляемые формы (УФ)
  • Минимальные права у интегратора
  • Быстрый старт без сложных настроек
Ограничения
  • Нет прямых HTTP-запросов к API
  • Нет авто-обновления статусов
  • Нет синхронизации склада
  • Требует интернет на клиентской машине

Что нужно перед началом

1
API-ключ
Получите API-ключ в Клиентском кабинете. Ключ начинается с rsk_. Запишите — он показывается один раз.
2
1С:Предприятие 8.3.6+
Управляемые формы (Режим совместимости — не ниже 8.3.6). Проверьте: Справка → О программе.
3
Права в конфигураторе
Доступ к конфигуратору для редактирования формы документа «Счёт покупателю» и добавления общего модуля.

Пошаговая инструкция

1
Добавить общий модуль «РаскройПанелей»
В конфигураторе: Общие → Общие модули → Добавить. Имя: РаскройПанелей. Флаги: Клиент (управляемое приложение).
РаскройПанелей (Общий модуль, ~40 строк)
// ═══════════════════════════════════════════════════════════
// РаскройПанелей — тонкий/веб-клиент
// Управляемые формы, только UI (без HTTP-запросов)
// ═══════════════════════════════════════════════════════════

// ── Настройки (отредактируйте перед использованием) ─────────
BASE_URL  = "https://raskroy.app";  // адрес сервиса
API_TOKEN = "rsk_ВАШ_КЛЮЧ";       // API-ключ из /dashboard

// ── Открыть расчёт в HTML-поле ───────────────────────────────
// Вызывается из кнопки на форме счёта
&НаКлиенте
Процедура ОткрытьРасчёт(ПолеHTML, НомерСчёта, Контрагент, Детали, Стратегия = "optimal") Экспорт

    ДеталиСтрока = "";
    Для Каждого Д Из Детали Цикл
        ДеталиСтрока = ДеталиСтрока
            + ?(ДеталиСтрока = "", "", ",")
            + Д.ИД + ":" + Строка(Д.Ширина) + ":"
            + Строка(Д.Высота) + ":" + Строка(Д.Количество);
    КонецЦикла;

    URL = BASE_URL + "/?source=1c"
        + "&invoice="  + КодироватьСтроку(НомерСчёта,  СпособКодированияСтроки.URLВАдресеСтроки)
        + "&client="   + КодироватьСтроку(Контрагент,   СпособКодированияСтроки.URLВАдресеСтроки)
        + "&strategy=" + Стратегия
        + "&token="    + API_TOKEN
        + "&parts="    + ДеталиСтрока;

    ПолеHTML.Перейти(URL);

КонецПроцедуры

// ── Обработать ответ от сервиса ──────────────────────────────
// Вызывается из ПолеРаскройПриПолученииСообщенияОтВебСтраницы
&НаКлиенте
Процедура ОбработатьОтвет(Форма, JSONСтрока) Экспорт

    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(JSONСтрока);
    Данные = ПрочитатьJSON(Чтение);

    Если Данные.type <> "raskroy.fillInvoice" Тогда
        Возврат;
    КонецЕсли;

    // Ищем строку панелей в табчасти
    ТабЧасть = Форма.Объект.Товары;
    Строка = Неопределено;
    Для Каждого Стр Из ТабЧасть Цикл
        Если СтрНайти(НРег(Стр.Номенклатура.Наименование), "сэндвич") > 0 Тогда
            Строка = Стр;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Если Строка = Неопределено Тогда
        Строка = ТабЧасть.Добавить();
    КонецЕсли;

    Строка.Количество  = Данные.sheets_used;
    Строка.Комментарий = "Раскрой " + Данные.strategy
        + ": "    + Данные.sheets_used  + " л."
        + " КПД " + Данные.efficiency_pct + "%"
        + " ликвид " + Данные.liquid_m2 + " м²";

    Сообщить("✓ Счёт заполнен: " + Данные.sheets_used
        + " листов, КПД " + Данные.efficiency_pct + "%");

КонецПроцедуры
2
Добавить ПолеHTMLДокумента на форму счёта
В конфигураторе откройте форму документа «Счёт покупателю». Перетащите элемент ПолеHTMLДокумента на форму. Имя: ПолеРаскрой. Рекомендуемый размер: ширина 100%, высота 500–700px.
Разместите поле на отдельной вкладке «Раскрой» чтобы не перегружать основную форму.
3
Добавить кнопку и обработчики в модуль формы
Добавьте кнопку «Раскрой сэндвича» на форму и вставьте код в модуль формы документа.
МодульФормы.СчётПокупателю
// ── Кнопка «Раскрой сэндвича» ────────────────────────────────
&НаКлиенте
Процедура РаскройСэндвичаНажатие(Элемент)

    Детали = Новый Массив;
    Счётчик = 1;
    Для Каждого Стр Из Объект.Товары Цикл
        Если СтрНайти(НРег(Стр.Номенклатура.Наименование), "сэндвич") > 0 Тогда
            Д = Новый Структура("ИД,Ширина,Высота,Количество");
            Д.ИД         = "P" + Счётчик;
            Д.Ширина     = Стр.Номенклатура.Ширина;    // мм
            Д.Высота     = Стр.Номенклатура.Высота;    // мм
            Д.Количество = Стр.Количество;
            Детали.Добавить(Д);
            Счётчик = Счётчик + 1;
        КонецЕсли;
    КонецЦикла;

    Если Детали.Количество() = 0 Тогда
        Предупреждение("Нет строк с сэндвич-панелями в табличной части");
        Возврат;
    КонецЕсли;

    РаскройПанелей.ОткрытьРасчёт(
        Элементы.ПолеРаскрой,
        Строка(Объект.Ссылка),
        Строка(Объект.Контрагент),
        Детали
    );

КонецПроцедуры

// ── Получение ответа от страницы (window.external.notify) ────
// Событие ПолеРаскрой → ПриПолученииСообщенияОтВебСтраницы
&НаКлиенте
Процедура ПолеРаскройПриПолученииСообщенияОтВебСтраницы(Элемент, ТипСообщения, Данные)
    Если ТипСообщения <> "notify" Тогда Возврат; КонецЕсли;
    Если Данные = Неопределено Или Данные = "" Тогда Возврат; КонецЕсли;

    Попытка
        РаскройПанелей.ОбработатьОтвет(ЭтотОбъект, Данные);
    Исключение
        Сообщить("РаскройПанелей: ошибка — " + ОписаниеОшибки(), СтатусСообщения.Важное);
    КонецПопытки;

КонецПроцедуры
4
Настроить поля номенклатуры
Убедитесь, что у номенклатуры сэндвич-панелей заполнены реквизиты Ширина и Высота (в мм). Если реквизиты называются иначе — скорректируйте строки Стр.Номенклатура.Ширина в коде.
Код ищет панели по слову «сэндвич» в наименовании. Если у вас другое слово — измените строку поиска: СтрНайти(НРег(...), "сэндвич")
5
Заменить BASE_URL и API_TOKEN
В общем модуле РаскройПанелей замените значения констант:
Настройки
BASE_URL  = "https://raskroy.app";  // ← ваш адрес (или http://localhost:8001 для On-Premise)
API_TOKEN = "rsk_xxxxxxxxxxxx";    // ← ваш ключ из /dashboard

Тестирование

💡Для быстрого теста без 1С: откройте тестовую ссылку в браузере и нажмите «Рассчитать».