+7 (987) 026-06-36
Написать в Telegram

Оставить заявку
stanislav_web

Отправка файла excel (.xls) из 1С в 1С-Битрикс

Отправка файла excel (.xls) из 1С в 1С-Битрикс Объясняю и показываю примеры решений разных задач с которыми сталкивался и сталкиваюсь в процессе работы

Отправка файла excel (.xls) из 1С в 1С-Битрикс

Объясняю и показываю примеры решений разных задач с которыми сталкивался и сталкиваюсь в процессе работы

📅 16 июня 2025

👁‍🗨 91

🔥 0

Отправка файла excel (.xls) из 1С в 1С-Битрикс
Код из 1С:
ВременныйКаталог = КаталогВременныхФайлов();
Если (Прав(ВременныйКаталог, 1) = "\") ИЛИ (Прав(ВременныйКаталог, 1) = "/") Тогда
    ВременныйКаталог = Лев(ВременныйКаталог, СтрДлина(ВременныйКаталог) - 1);
КонецЕсли;

ПутьКФайлу = ВременныйКаталог + "\price.xls";
ЭлементыФормы.ДокументРезультат.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLS);

НТТР = Новый HTTPСоединение("site.ru",,"Login","Password",,,Новый ЗащищенноеСоединениеOpenSSL());

Заголовки = Новый Соответствие();
Заголовки.Вставить("Content-Type", "application/octet-stream");
Заголовки.Вставить("X-File-Name", "price.xls");
Заголовки.Вставить("X-Api-Key", "YOUR_SECRET_API_KEY"); // Оставляем так

HTTPЗапрос = Новый HTTPЗапрос("/price.php", Заголовки);
ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКФайлу);

HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанные);
Попытка
	
    ОтветСайта = НТТР.ОтправитьДляОбработки(HTTPЗапрос);
    УдалитьФайлы(ПутьКФайлу);
	
Исключение
    Инфо = ИнформацияОбОшибке();
    Сообщить("Описание='" + Инфо.Описание + "'");
    Сообщить("ИмяМодуля='" + Инфо.ИмяМодуля + "'");
    Сообщить("НомерСтроки=" + Инфо.НомерСтроки);
    Сообщить("ИсходнаяСтрока='" + Инфо.ИсходнаяСтрока + "'");

    Сообщить(ОписаниеОшибки());
КонецПопытки;
Код из файла /price.php:
<?php
define('STOP_STATISTICS', true);
define('NO_AGENT_CHECK', true);
define('NO_AGENT_STATISTIC', true);
define('NOT_CHECK_PERMISSIONS', true);
define('DisableEventsCheck', true);

require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');

header('Content-Type: text/plain; charset=utf-8');
header('Connection: keep-alive');
header('Keep-Alive: timeout=30');

function logMessage($message) {
    $logFile = $_SERVER['DOCUMENT_ROOT'].'/upload/1c_uploads/1c_upload.log';
    $timestamp = date('Y-m-d H:i:s');
    file_put_contents($logFile, "[$timestamp] $message\n", FILE_APPEND);
}

try {
    logMessage('Start processing request');
    
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
        throw new Exception('Only POST method allowed');
    }

    $fileName = getallheaders()['X-File-Name'] ?? null;
    if (empty($fileName)) {
        throw new Exception('File name not specified in X-File-Name header');
    }

    $fileExt = pathinfo($fileName, PATHINFO_EXTENSION);

    $allowedExtensions = ['pdf', 'doc', 'docx', 'xls', 'xlsx', 'jpg', 'jpeg', 'png', 'txt'];
    if (!in_array(strtolower($fileExt), $allowedExtensions)) {
        throw new Exception('File type not allowed');
    }

    $fileContent = file_get_contents('php://input');
    if (empty($fileContent)) {
        throw new Exception('No file content received');
    }

    $uploadDir = $_SERVER['DOCUMENT_ROOT'].'/upload/1c_uploads/';
    if (!file_exists($uploadDir)) {
        mkdir($uploadDir, 0755, true);
    }

    $filePath = $uploadDir . 'price.' . $fileExt;

    if (file_put_contents($filePath, $fileContent) === false) {
        throw new Exception('Failed to save file to disk');
    }

    logMessage("File saved successfully: $filePath");

} catch (Exception $e) {
    $errorMessage = 'ERROR: '.$e->getMessage();
    logMessage($errorMessage);
    header('HTTP/1.1 400 Bad Request');
    echo $errorMessage;
}

require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/epilog_after.php');
Файл будет сохранён по пути /upload/1c_uploads/price.xls