Имя: Пароль:
1C
 
TCP Soсket из 1С
0 Gsof
 
24.07.25
13:08
Добрый день, не подскажите где можно посмотреть пример кода как работать из 1с с TCP Soсket (не путать с WebSocket)
1 arsik
 
гуру
24.07.25
13:22
2 craxx
 
24.07.25
13:22
(0) кроме как через ВК - никак.
3 Asmody
 
24.07.25
13:23
Платформа не поддерживает работу с TCP socket.
Искать внешнюю компоненту, которая умеют. Или написать самому
4 craxx
 
24.07.25
13:25
(3) А еще лучше написать внешний сервис (хоть на чем, хоть на том же питоне) - и обмениваться штатно по http-сервису.
5 Dzenn
 
гуру
24.07.25
16:28
я развернул на апаче локальный адрес и обращался к нему из 1С по хттп. А там, моё обращение подхватывал пхп, и содержимое тела запроса отправлял уже через сокет:



<?php

if($_SERVER['REQUEST_METHOD'] == 'GET') {

    include 'help.html';

}


if($_SERVER['REQUEST_METHOD'] == 'POST') {
	$entityBody = file_get_contents('php://input');
	$fp = fsockopen("192.168.1.89", 9100, $errno, $errstr, 30);
	if (!$fp) {
        echo "$errstr ($errno)<br />\n";
    } else {
        fwrite($fp, $entityBody);
        fclose($fp); // To close the connection
    }	
}

?>



а вообще, задачу вида "напиши на пхп код отправки хттп запроса через сокет" тебе сейчас любой ии решит:

https://chat.qwen.ai/s/dacf4709-2164-403f-a722-02a9d23f6039?fev=0.0.166
6 Dzenn
 
гуру
24.07.25
16:30
а вот содержимое help.html:



<!DOCTYPE html>
<html lang="ru">

<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Сервер печати</title>
	<link rel="stylesheet" href="style.css" type="text/css">
</head>

<body>
	<h1>
		PHP-скрипт для печати на принтеры Zebra
	</h1>
	<div class="info">
		<p>
			Привет, это php-скрипт, посредством которого из 1С происходит печать на складские принтеры Zebra. Я нужен
			потому, что 1С-ка не умеет отправлять запросы на сокеты, но умеет отправлять HTTP-запросы.
			Та справка, которую ты сейчас видишь, выдаётся при методе GET. Для отправки на печать необходимо
			использовать метод POST, а также приложить ZPL-команду в тело запроса и IP-адрес принтера в заголовок
			'Zebra' запроса. Удачки тебе. Закиров Дамир, май 2024, <a href="https://t.me/zakirovdamir">t.me/zakirovdamir</a></p>
	</div>
</body>

</html>

7 Asmody
 
24.07.25
16:30
(5) неспортивно.
Пусть ИИ ВК напишет. На rust'е
8 Dzenn
 
гуру
24.07.25
16:33
(8) тогда уж пусть напишет новый бинарник 1С, поддерживающий сокеты 😎
9 Il19
 
25.07.25
04:02
Прокладку тру ванэсник должен так: https://oscript.io/syntax/TCPConnection
10 Gsof
 
25.07.25
14:13
всем спасибо за участите , если кому интересно
то вот пример кода (необходимо установить Winsock)
     // Создаем COM-объект Winsock
    Сокет = Новый COMОбъект("MSWinsock.Winsock");
    
    // Настраиваем параметры подключения
    УдаленныйХост = "192.168.1.1"; // IP или доменное имя сервера
    УдаленныйПорт = 5000;        // Порт сервера
    
    Попытка
        // Устанавливаем параметры подключения
        Сокет.RemoteHost = УдаленныйХост;
        Сокет.RemotePort = УдаленныйПорт;
        
        // Подключаемся к серверу
        Сокет.Connect();
        
        // Ждем завершения подключения (асинхронный режим)
        Пока Сокет.State = 6 Цикл  // sckConnecting
            Ожидание(1);           // Пауза 100 мс
        КонецЦикла;
        
        // Проверяем статус подключения
        Если Сокет.State = 7 Тогда  // sckConnected
            Сообщить("Подключение успешно!");
            
            // Отправляем данные на сервер
            ДанныеДляОтправки = "привет мир";
            Сокет.SendData(ДанныеДляОтправки);
            Сообщить("Отправлено: " + ДанныеДляОтправки);
            
            // Ждем ответа (можно использовать событие DataArrival, но в 1С проще поллинг)
            Пока НЕ Сокет.BytesReceived > 0 Цикл
                Ожидание(1); // Даем серверу время на ответ
            КонецЦикла;
            
            // Проверяем, есть ли данные в буфере
            Если Сокет.BytesReceived > 0 Тогда
                ПринятыеДанные = "";
                Сокет.GetData(ПринятыеДанные);
                   Сообщить("Получено от сервера: " + ПринятыеДанные)
            Иначе
                Сообщить("Сервер не ответил.");
            КонецЕсли;
            
        ИначеЕсли Сокет.State = 9 Тогда  // sckError
            ОшибкаТекста = Сокет.Error;
            Сообщить("Ошибка подключения: " + ОшибкаТекста);
        Иначе
            Сообщить("Неизвестный статус: " + Сокет.State);
        КонецЕсли;
        
    Исключение
        Сообщить("Ошибка: " + ОписаниеОшибки());
    КонецПопытки;
    
    // Закрываем соединение
    Сокет.Close();
11 Злопчинский
 
25.07.25
17:58
(10) И как это будет работать под линуксом?