Отправка файла excel (.xls) из 1С в 1С-Битрикс
Отправка файла excel (.xls) из 1С в 1С-Битрикс
Объясняю и показываю примеры решений разных задач с которыми сталкивался и сталкиваюсь в процессе работы
📅 16 июня 2025
👁🗨 91
Код из 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