JavaScript: добавить лидирующий 0 к числу

Задача: добавить к числу лидирующий 0, если число однозначное, и не добавлять соответственно, если двухзначное.

Решение: есть два способа, старый, работающий во всех браузерах, и новый — для браузеров 2018 года и новее.

Способ 1:

function pad(value) {
    return ("0"+value).slice(-2);
}

Способ 2:

function pad(value) {
    return value.tostring().padstart(2, 0);
}

Чудесатые чудеса с выгрузкой заказов между 1С и Bitrix

Началось всё с того, что после настройки обмена мeжду Bitrix и 1С, заказы в 1С не прилетали. Посмотрел логи, подебажил код обмена и , увидел чудную ошибку «Transferred a partial file» при попытке получить файл заказов. Что при файловом варианте, что при серверном. Причем из браузера (по этой методике), файл открывался и корректно формировался. Просмотр логов сервера apache, добавил еще одну ошибку:

2021/07/14 08:54:49 [error] 27470#27470: *1517 upstream prematurely closed connection while reading upstream, client: 185.24.213.2, server: market.erfwerf.ru, request: "GET /bitrix/admin/1c_exchange.php?type=sale&mode=query&sessid=ca16a85220fc41bc7e7815adf4401d35 HTTP/1.1", upstream: "http://127.0.0.1:8083/bitrix/admin/1c_exchange.php?type=sale&mode=query&sessid=ca16a85220fc41bc7e7815adf4401d35", host: "market.ewrfewrf.ru"

Гуглинг объяснил, что это возможно ошибка в настройках ngnix. Совместно с хостером, попытались пару настроек изменить, после чего хостер сказал «ничё не знаю, у нас всё нормально». Доступа к настройкам сервера к сожалению нет — только через хостера.

Чего делать? Ну для начала решил попробовать файл формировать самостоятельно, и подпихивать его как то уже готовым в 1С. Наваял скрипт вида:

<?php
$login_url = 'https://market.ауцкацука.ru/bitrix/admin/1c_exchange.php?type=catalog&mode=checkauth';    
$post_data = 'AUTH_FORM=Y&TYPE=AUTH&USER_LOGIN=цукацук@цукацук.ru&USER_PASSWORD=кцуацукац';    
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $login_url );
curl_setopt($ch, CURLOPT_POST, 1 );
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
$postResult = curl_exec($ch);
$exa=explode("=",$postResult); 
$exa=explode("\n",$exa[1]);
$ssid=$exa[0];
curl_setopt($ch, CURLOPT_URL, "https://уцкацук.цукацука.ru/bitrix/admin/1c_exchange.php?type=sale&mode=query&sessid=".$ssid);
header('Content-Type: text/xml; charset=windows-1251');    
$postResult = curl_exec($ch);
echo $postResult;

Единственной задачей которого было выплюнуть уже готовый файл.

В 1С попробовал:

Запрос = Новый HTTPЗапрос("/цукаука.php");
		Соединение = Новый HTTPСоединение("цкуацук.ауцкацу.ru",443,,,,1800,ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение());    
		ОтветСервера=Соединение.ОтправитьДляОбработки(Запрос).ПолучитьТелоКакСтроку();

И получил ровно ту-же ошибку в 1С: Transferred a partial file. Шта??? Круг подозреваемых сузился. Стал винить во всем реализацию HTTPСоединение в 1С. А что если попробовать изобрести свою замену? Родил врезку в модуль обмена с сайтом:

   Если ОтветСервера = Неопределено Тогда    
		WinHttp = New COMОбъект("WinHttp.WinHttpRequest.5.1");
		WinHttp.Option(2,"utf-8");
		WinHttp.Open("GET", "https://maквеиеивкt.квеивкеимвек.ru/gквеивкеs.php", false);
		WinHttp.Send();
		Если WinHttp.Status = 200 Тогда
		    Stream = Новый COMОбъект("ADODB.Stream");
		    Stream.Type = 1;
		    Stream.Mode = 3;
			ОтветСервера=WinHttp.ResponseText;
		    Stream = Неопределено;
		КонецЕсли;						
	конецесли;

Работает.. Заказы в 1С появились..

Ошибка Transferred a partial file при загрузке заказов с сайта bitrix

По неведомой причине, эта ошибка возникает при выполнении HTTPОтветСервера = Соединение.Получить(HTTPЗапрос);, однако! при следующем выполнении того-же самого запроса, всё чудесным образом проскакивает.

Решение: поправим чуть модуль ОбменССайтом

Функция ПолучитьДанныеССервера(Соединение, ОписаниеОшибки, ПараметрыЗапроса = "", Знач Заголовки = Неопределено)
	
	HTTPОтветСервера = Неопределено;
	ОтветСервера     = Неопределено;
	
	Если Заголовки = Неопределено Тогда
		Заголовки = Новый Соответствие;
	КонецЕсли;
	HTTPЗапрос = Новый HTTPЗапрос(СокрЛП(ПараметрыЗапроса), Заголовки);
	
	Попытка
		СчетчикПопыток = 1;
		Пока СчетчикПопыток<20 Цикл
			Попытка
			 	HTTPОтветСервера = Соединение.Получить(HTTPЗапрос);
				Прервать;
			Исключение
				СчетчикПопыток  = СчетчикПопыток+1;
			КонецПопытки;	
		конеццикла;
	Исключение

Bitrix: Как посмотреть содержимое файла заказа при обмене с 1С

Иногда в целях отладки полезно посмотреть формирует ли вообще файл выгрузки заказов битрикс. Это делается так:

  1. По ссылке сайт/bitrix/admin/1c_exchange.php?type=sale&mode=checkauth получаем sessid
  2. Далее открываем сайт/bitrix/admin/1c_exchange.php?type=sale&mode=query&sessid=точтовышеполучили

В итоге получим xml выведенный в браузер с заказом.

Как посмотреть файлы обмена битрикс и 1с

По умолчанию после обмена битрикс эти файлы подчищает. Однако если открыть файл dbconn.php и добавить туда строчку

define("BX_CATALOG_IMPORT_1C_PRESERVE", true);

То файлы будут сохраняться в папке /uploads/1c_catalogxxx

1 83 84 85 86 87 299