Добрый день.
Мало что понимаю в API, и с ним связанном.
Нужно из 1с77 отправить запрос по API методом POST.
Отправить нужно запрос в формате json сюда:
lc.epicentrk.com.ua/api/292/{секретный_ключ}/INVOICE_DATA
делаю:
затем сам запрос:
и получаю:
HTTP/1.1 500 Internal Server Error
в файле-ответе:
{"Message":"An error has occurred."}
что я делаю не так?
Мало что понимаю в API, и с ним связанном.
Нужно из 1с77 отправить запрос по API методом POST.
Отправить нужно запрос в формате json сюда:
lc.epicentrk.com.ua/api/292/{секретный_ключ}/INVOICE_DATA
делаю:
Если ЗагрузитьВнешнююКомпоненту("v7plus.dll") = 0 Тогда
Сообщить("не удалось найти компоненту v7plus.dll", "!!!");
Возврат;
КонецЕсли;
Попытка
Соединение = СоздатьОбъект("Addin.V7HttpReader") ;
Исключение
Сообщить("Ошибка подключения! (" + ОписаниеОшибки() + ")", "!!!");
КонецПопытки;
Показатьзатем сам запрос:
Попытка
СтрокаСоединения = "lc.epicentrk.com.ua/api/292/"+СекретныйКлюч+"/INVOICE_DATA";
ФайлJSON = "d:\1cv77bd\Temp\test.json";
ФайлОтвет = "d:\1cv77bd\Temp\test_err.json";
Соединение.УстановитьЗаголовокЗапроса("type", "POST");
Соединение.УстановитьЗаголовокЗапроса("data", "objects");
Соединение.УстановитьЗаголовокЗапроса("contentType", "application/json; charset=utf-8");
Соединение.УстановитьЗаголовокЗапроса("dataType", "json");
Соединение.ОтправитьДляОбработки(СокрЛП(СтрокаСоединения), ФайлJSON ,1,ФайлОтвет,1);
Исключение
Сообщить("Ошибка: " + Соединение.СтрокаСостоянияОтвета);
КонецПопытки;
Показатьи получаю:
HTTP/1.1 500 Internal Server Error
в файле-ответе:
{"Message":"An error has occurred."}
что я делаю не так?
По теме из базы знаний
- POST запрос
- Пример работы с первым ОФД из 1С посредством Get/Post запросов
- О программе Postman для тестирования API и для чего она нужна 1С-нику
- Запрос кодов маркировки товаров через API Честный знак (Система маркировки товаров) по заданным фильтрам и списание
- [Шпаргалка] Вычисление Content-Length в POST запросе на примере Битрикс 24
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Перем api_key;
Перем Сервер;
Перем ТекстЗапроса_ПолучениеШтрихКодов;
Перем рс;
//========================================================== ============
Функция УРЛ(Метод,ШК,Тип="orders") ///
Если Метод="POST" Тогда
Возврат "/vs/api/"+Тип+".json";
ИначеЕсли Метод="GET" Тогда
Возврат "/vs/api/"+Тип+"/"+ШК+".json?api_key="+api_key;
ИначеЕсли Метод="DELETE" Тогда
Возврат "/vs/api/"+Тип+"/"+ШК+".json?api_key="+api_key;
КонецЕсли;
КонецФункции // УРЛ(Метод,ШК)
//*******************************************
Функция СформироватьТекстЗН(Метод,ЗН)
Перем ТекстЗН;
Перем Владелец; // individual - Физ. лицо, legal - Юр. лицо
Перем ВидРемонта; // warranty - гарантийный заказ-наряд, commercial - коммерческий заказ-наряд, inner - внутренний заказ-наряд, insurance - страховой заказ-наряд
Перем ТипРемонта; // bench - слесарный заказ-наряд, bodywork - кузовной заказ-наряд
Перем ПромТЗ;
Перем ТекстРаботы;
Перем ТекстЗЧ;
Перем Номенклатура;
Перем ТО; // логическое true/false
Перем ЦенаРРЦ;
Перем ЦенаДок;
Перем СуммаДок;
Перем ПинКодПриемщика;
Перем Автомобиль;
Перем Фамилия,Имя,Отчество;
Если Метод="POST" Тогда
ТО="false";
ПинКодПриемщика="0020";
Фамилия="Матюшин";
Имя="Александр";
Отчество="Сергеевич";
Если Найти(Врег(СокрЛП(ЗН.Подразделение)),"КУЗОВНОЙ")>0 Тогда
ТипРемонта="bodywork";
Иначе
ТипРемонта="bench";
КонецЕсли;
Автомобиль=ЗН.Автомобиль;
Владелец=Автомобиль.Владельцы.Получить(ЗН.ДатаДок);
Если Владелец.ТипКонтрагента=Перечисление.ТипыКонтрагентов.ЧастноеЛицо Тогда
Владелец="individual";
ИначеЕсли Владелец.ТипКонтрагента=Перечисление.ТипыКонтрагентов.ПодотчетноеЛицо Тогда
Владелец="individual";
Иначе
Владелец="legal";
КонецЕсли;
ВидРемонта=ЗН.ВидРемонта;
Если ВидРемонта.Страховой=1 Тогда
ВидРемонта="insurance";
ИначеЕсли ВидРемонта.Страховой=2 Тогда
Если ВидРемонта.ТипРемонта=Перечисление.ТипыРемонтов.Бесплатный Тогда
ВидРемонта="inner";
Иначе
ВидРемонта="warranty";
КонецЕсли;
ИначеЕсли ВидРемонта.Страховой=3 Тогда
ВидРемонта="commercial";
ИначеЕсли ВидРемонта.Страховой=4 Тогда
ВидРемонта="inner";
ИначеЕсли ВидРемонта.Страховой=5 Тогда
ВидРемонта="commercial";
ИначеЕсли ВидРемонта.Страховой=6 Тогда
ВидРемонта="inner";
ИначеЕсли ВидРемонта.Страховой=7 Тогда
ВидРемонта="commercial";
ТО="true";
Иначе
ВидРемонта="commercial";
КонецЕсли;
ТекстРаботы="";
ТекстЗЧ="";
ТекстЗН="
|{
|""api_key"": """+api_key+""",
| ""order_id"": """+ЗН.ШтрихКод+""",
| ""closed_at"": """+Формат(ЗН.ДатаДок,"ДДДММГГГГ")+""",
| ""owner"": """+Владелец+""",
| ""model"": """+СокрЛП(Автомобиль)+""",
| ""vin"": """+СокрЛП(Автомобиль.Код)+""",
| ""price_of_paint"": 0,
| ""total_cost"": "+СокрЛП(ЗН.Итог("Сумма"))+",
| ""master_last_name"": """+СокрЛП(Фамилия)+""",
| ""master_name"": """+СокрЛП(Имя)+""",
| ""master_middle_name"": """+СокрЛП(Отчество)+""",
| ""master_pin"": """+ПинКодПриемщика+""",
| ""payment_type"": """+ВидРемонта+""",
| ""work_types"": """+ТипРемонта+""",
| ""works"": [
|";
ПромТЗ=СоздатьОбъект("ТаблицаЗначений");
ЗН.ВыгрузитьТабличнуюЧасть(ПромТЗ);
ПромТЗ.ВыбратьСтроки();
Пока ПромТЗ.ПолучитьСтроку()=1 Цикл
Номенклатура=ПромТЗ.Номенклатура;
Если Номенклатура.Вид()="Номенклатура" Тогда
Если ТекстЗЧ<>"" Тогда
ТекстЗЧ=ТекстЗЧ+",";
КонецЕсли;
ЦенаДок=Окр(ПромТЗ.Сумма/(ПромТЗ.Количество*?(ПромТЗ.Кратность=0,1,ПромТЗ.Кратность)),2,1);
Если глПолучитьЦену(Номенклатура,Константа.ОсновнаяКатегорияРРЦ,ЦенаРРЦ,Рубли,0,ЗН.ДатаДок)=0 Тогда
Если глПолучитьЦену(Номенклатура,Константа.ОсновнаяКатегорияЦенДляРозницы,ЦенаРРЦ,Рубли,0,ЗН.ДатаДок)=0 Тогда
ЦенаРРЦ=0;
КонецЕсли;
КонецЕсли;
ЦенаРРЦ=Окр(ЦенаРРЦ,2,1);
СуммаДок=Окр(ПромТЗ.Сумма,2,1);
ЦенаРРЦ=Макс(ЦенаРРЦ,ЦенаДок);
ТекстЗЧ=ТекстЗЧ+"
| {""code"": """+СокрЛП(Номенклатура.НомерПоКаталогу)+""",
| ""title"": """+СтрЗаменить(СтрЗаменить(СтрЗаменить(СокрЛП(Номенклатура.Наименование),Симв(13),""),Симв(10),""),"""","'")+""",
| ""count"": "+СокрЛП(Формат(ПромТЗ.Количество*?(ПромТЗ.Кратность=0,1,ПромТЗ.Кратность),"Ч17.2."))+",
| ""price"": "+СокрЛП(Формат(ЦенаРРЦ,"Ч17.2."))+",
| ""discount"": "+СокрЛП(Формат(ЦенаРРЦ-ЦенаДок,"Ч17.2."))+",
| ""purchase_price"": "+СокрЛП(Формат(Окр(ПромТЗ.Себестоимость/(ПромТЗ.Количество*?(ПромТЗ.Кратность=0,1,ПромТЗ.Кратность)),2,1),"Ч17.2."))+",
| ""selling_price"": "+СокрЛП(Формат(ЦенаДок,"Ч17.2."))+",
| ""total"": "+СокрЛП(Формат(СуммаДок,"Ч17.2."))+" }
|";
ИначеЕсли Номенклатура.Вид()="ПереченьРабот" Тогда
Если ТекстРаботы<>"" Тогда
ТекстРаботы=ТекстРаботы+",";
КонецЕсли;
ТекстРаботы=ТекстРаботы+"
| {""code"": """+СокрЛП(Номенклатура.НомерПоКаталогу)+""",
| ""title"": """+СтрЗаменить(СтрЗаменить(СтрЗаменить(СокрЛП(Номенклатура.Наименование),Симв(13),""),Симв(10),""),"""","'")+""",
| ""norm"": "+СокрЛП(Формат(ПромТЗ.Количество*?(ПромТЗ.Кратность=0,1,ПромТЗ.Кратность),"Ч17.2."))+",
| ""price"": "+СокрЛП(Формат(ПромТЗ.Сумма,"Ч17.2."))+",
| ""discount"": 0,
| ""total"": "+СокрЛП(Формат(ПромТЗ.Сумма,"Ч17.2."))+",
| ""maintenance"": "+ТО+" }
|";
КонецЕсли;
КонецЦикла;
ТекстЗН=ТекстЗН+ТекстРаботы+"],
|""spares"": [
|";
ТекстЗН=ТекстЗН+ТекстЗЧ+"]
|}
|";
ИначеЕсли Метод="GET" Тогда
ТекстЗН="";
ИначеЕсли Метод="DELETE" Тогда
ТекстЗН="";
КонецЕсли;
Возврат ТекстЗН;
КонецФункции//СформироватьТекстЗН(ЗН)
//*******************************************
Функция СформироватьТекстРН(Метод,РН)
Перем ТекстРН;
Перем Владелец; // individual - Физ. лицо, legal - Юр. лицо
Перем ВидРемонта; // warranty - гарантийный заказ-наряд, commercial - коммерческий заказ-наряд, inner - внутренний заказ-наряд, insurance - страховой заказ-наряд
Перем ТипРемонта; // bench - слесарный заказ-наряд, bodywork - кузовной заказ-наряд
Перем ПромТЗ;
Перем ТекстЗЧ;
Перем Номенклатура;
Перем ЦенаРРЦ;
Перем ЦенаДок;
Перем СуммаДок;
Если Метод="POST" Тогда
ТекстЗЧ="";
ТекстРН="
|{
|""api_key"": """+api_key+""",
| ""invoice_id"": """+РН.ШтрихКод+""",
| ""closed_at"": """+Формат(РН.ДатаДок,"ДДДММГГГГ")+""",
| ""price_of_paint"": 0,
| ""invoice_type"": ""retail"",
| ""total_cost"": "+СокрЛП(РН.Итог("Сумма"))+",
|";
ПромТЗ=СоздатьОбъект("ТаблицаЗначений");
РН.ВыгрузитьТабличнуюЧасть(ПромТЗ);
ПромТЗ.ВыбратьСтроки();
Пока ПромТЗ.ПолучитьСтроку()=1 Цикл
Номенклатура=ПромТЗ.Номенклатура;
Если ТекстЗЧ<>"" Тогда
ТекстЗЧ=ТекстЗЧ+",";
КонецЕсли;
ЦенаДок=Окр(ПромТЗ.Сумма/(ПромТЗ.Количество*?(ПромТЗ.Кратность=0,1,ПромТЗ.Кратность)),2,1);
Если глПолучитьЦену(Номенклатура,Константа.ОсновнаяКатегорияРРЦ,ЦенаРРЦ,Рубли,0,РН.ДатаДок)=0 Тогда
Если глПолучитьЦену(Номенклатура,Константа.ОсновнаяКатегорияЦенДляРозницы,ЦенаРРЦ,Рубли,0,РН.ДатаДок)=0 Тогда
ЦенаРРЦ=0;
КонецЕсли;
КонецЕсли;
ЦенаРРЦ=Окр(ЦенаРРЦ,2,1);
СуммаДок=Окр(ПромТЗ.Сумма,2,1);
ЦенаРРЦ=Макс(ЦенаРРЦ,ЦенаДок);
ТекстЗЧ=ТекстЗЧ+"
| {""code"": """+СокрЛП(Номенклатура.НомерПоКаталогу)+""",
| ""title"": """+СокрЛП(Номенклатура.Наименование)+""",
| ""count"": "+СокрЛП(Формат(ПромТЗ.Количество*?(ПромТЗ.Кратность=0,1,ПромТЗ.Кратность),"Ч17.2."))+",
| ""price"": "+СокрЛП(Формат(ЦенаРРЦ,"Ч17.2."))+",
| ""discount"": "+СокрЛП(Формат(ЦенаРРЦ-ЦенаДок,"Ч17.2."))+",
| ""purchase_price"": "+СокрЛП(Формат(Окр(ПромТЗ.Себестоимость/(ПромТЗ.Количество*?(ПромТЗ.Кратность=0,1,ПромТЗ.Кратность)),2,1),"Ч17.2."))+",
| ""selling_price"": "+СокрЛП(Формат(ЦенаДок,"Ч17.2."))+",
| ""total"": "+СокрЛП(Формат(СуммаДок,"Ч17.2."))+" }
|";
КонецЦикла;
ТекстРН=ТекстРН+"
|""spares"": ["+ТекстЗЧ+"]
|}
|";
ИначеЕсли Метод="GET" Тогда
ТекстРН="";
ИначеЕсли Метод="DELETE" Тогда
ТекстРН="";
КонецЕсли;
Возврат ТекстРН;
КонецФункции//СформироватьТекстРН(РН)
//*******************************************
Процедура ПолучитьТекстЗН_UTF8(Метод,ЗН)
Перем Текст;
Текст=СоздатьОбъект("Текст");
Текст.ДобавитьСтроку(СформироватьТекстЗН(Метод,ЗН));
Текст.Записать(КаталогПользователя()+"JSON.txt");
Байт=255;
СтримВход=СоздатьОбъект("ADODB.Stream");
СтримВход.Type=2;
СтримВход.charset="windows-1251";
СтримВход.Open();
СтримВход.LoadFromFile(КаталогПользователя()+"JSON.txt");
СтримВыход=СоздатьОбъект("ADODB.Stream");
СтримВыход.Type=2;
СтримВыход.charset="utf-8";
СтримВыход.LineSeparator=-1;
СтримВыход.Open();
Всего=СтримВход.size;
Пока СтримВход.EOS=0 Цикл
СтримВыход.WriteText(СтримВход.ReadText(Байт),?(Байт=-2,1,0));
Состояние("" + Формат(100 * СтримВход.position/Всего,"Ч(0)5.2")+"%");
КонецЦикла;
СтримВход.close();
СтримВыход.SaveToFile(КаталогПользователя()+"JSON.txt",2);
СтримВыход.close();
КонецПроцедуры//ПолучитьТекстЗН_UTF8(ЗН)
//*******************************************
Процедура ПолучитьТекстРН_UTF8(Метод,РН)
Перем Текст;
Текст=СоздатьОбъект("Текст");
Текст.ДобавитьСтроку(СформироватьТекстРН(Метод,РН));
Текст.Записать(КаталогПользователя()+"JSON.txt");
Байт=255;
СтримВход=СоздатьОбъект("ADODB.Stream");
СтримВход.Type=2;
СтримВход.charset="windows-1251";
СтримВход.Open();
СтримВход.LoadFromFile(КаталогПользователя()+"JSON.txt");
СтримВыход=СоздатьОбъект("ADODB.Stream");
СтримВыход.Type=2;
СтримВыход.charset="utf-8";
СтримВыход.LineSeparator=-1;
СтримВыход.Open();
Всего=СтримВход.size;
Пока СтримВход.EOS=0 Цикл
СтримВыход.WriteText(СтримВход.ReadText(Байт),?(Байт=-2,1,0));
Состояние("" + Формат(100 * СтримВход.position/Всего,"Ч(0)5.2")+"%");
КонецЦикла;
СтримВход.close();
СтримВыход.SaveToFile(КаталогПользователя()+"JSON.txt",2);
СтримВыход.close();
КонецПроцедуры//ПолучитьТекстРН_UTF8(РН)
//*******************************************
Функция ОтправитьВебЗапрос(Метод,ТекстЗапроса,ШК,Тип="orders")
Перем xmlHtp; // MSXML2.XMLHTTP60
Перем Текст;
//xmlHtp = СоздатьОбъект("MSXML2.XMLHTTP.6.0");
xmlHtp = СоздатьОбъект("MSXML2.ServerXMLHTTP.6.0");
xmlHtp.Open(Метод, Сервер + УРЛ(Метод,ШК,Тип));
xmlHtp.setRequestHeader("Content-Type", "application/json; charset=windows-1251");
xmlHtp.setTimeouts(5*1000,5*1000,5*1000,0);
xmlHtp.send(ТекстЗапроса);
Текст=СоздатьОбъект("Текст");
Текст.ДобавитьСтроку(xmlHtp.responseText);
Текст.Записать(КаталогПользователя()+"JSON_ОТВЕТ.txt");
Возврат(xmlHtp.statusText);//statusText
КонецФункции //ОтправитьВебЗапрос(Метод,ТекстЗапроса)
//*******************************************
Процедура Сформировать()
Перем Текст;
Перем ТекстЗапроса;
Перем ТС;
Перем Метод;
Метод=спМетод.ПолучитьЗначение(спМетод.ТекущаяСтрока());
ПолучитьТекстЗН_UTF8(Метод,фЗН);
Текст=СоздатьОбъект("Текст");
Текст.Открыть(КаталогПользователя()+"JSON.txt");
ТекстЗапроса="";
Для ТС=2 По Текст.КоличествоСтрок() Цикл
ТекстЗапроса=ТекстЗапроса+"
|"+Текст.ПолучитьСтроку(ТС);
КонецЦикла;
Попытка
Статус=ОтправитьВебЗапрос(Метод,ТекстЗапроса,СокрЛП(фЗН.ШтрихКод));
//ЗапуститьПриложение(КаталогПользователя()+"JSON_ОТВЕТ.txt");
Сообщить(Статус);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
//Текст.Показать("Текст з/н");
КонецПроцедуры
//========================================================== ============
Функция ПолучитьТекстОбновленияSQL(Метод,ШК)
Перем рез;
Если Метод="DELETE" Тогда
рез="
|DELETE FR OM [Bufer1c].[dbo].[Ford_service_dealerpoint]
| WHERE barcode = '"+ШК+"' AND metod = '"+Метод+"'
|";
Возврат рез;
Иначе
рез="
|UPD ATE [Bufer1c].[dbo].[Ford_service_dealerpoint]
| SE T [status] = 0
| WH ERE barcode = '"+ШК+"' AND metod = '"+Метод+"'
|";
Возврат рез;
КонецЕсли;
КонецФункции // ПолучитьТекстОбновленияSQL(Метод)
//========================================================== ============
Функция ПроверитьВИН(ЗН,Метод)
Перем Авто;
Перем ВИН;
Авто=ЗН.Автомобиль;
ВИН=СокрЛП(Авто.Код);
Если (ВИН<>глВернутьКорректныйВин(ВИН)) Или (СтрДлина(ВИН)<>17) Тогда
лОтправитьПочту("Ошибка ДИЛЕРПОИНТ-ФСХ (ВИН)","ЗаказНаряд №"+ЗН.НомерДок+" от "+ЗН.ДатаДок+РазделительСтрок+"!!! Проверьте ВИН ("+ВИН+").
|Для повторной отправки данных перепроведите Документ.",_АдресПолучателя);
рс.Выполнить(ПолучитьТекстОбновленияSQL(Метод,ЗН.Штрихкод));
Возврат 0;
КонецЕсли;
Возврат 1;
КонецФункции // ПроверитьВИН(ЗН)
//*******************************************
Процедура ОбработатьЗН(Метод,ЗН)
Перем Текст;
Перем ТекстЗапроса;
Перем ТС;
Перем Тип;
Тип="orders";
Если ПроверитьВИН(ЗН,Метод)=0 Тогда
рс.Выполнить(ПолучитьТекстОбновленияSQL(Метод,ЗН.Штрихкод));
Возврат;
КонецЕсли;
ПолучитьТекстЗН_UTF8(Метод,ЗН);
Текст=СоздатьОбъект("Текст");
Текст.Открыть(КаталогПользователя()+"JSON.txt");
ТекстЗапроса="";
Для ТС=2 По Текст.КоличествоСтрок() Цикл
ТекстЗапроса=ТекстЗапроса+"
|"+Текст.ПолучитьСтроку(ТС);
КонецЦикла;
Попытка
Статус=ОтправитьВебЗапрос(Метод,ТекстЗапроса,СокрЛП(ЗН.ШтрихКод),Тип);
Сообщить(Статус);
Если (СокрЛП(Статус) = "OK") или (СокрЛП(Статус)="Not Found") Тогда
рс.Выполнить(ПолучитьТекстОбновленияSQL(Метод,ЗН.Штрихкод));
Иначе
лОтправитьПочту("Ошибка ДИЛЕРПОИНТ-ФСХ",Статус+РазделительСтрок+"ЗаказНаряд №"+ЗН.НомерДок+" от "+ЗН.ДатаДок,_АдресПолучателя,"JSON_ОТВЕТ.txt;JSON.txt");
КонецЕсли;
Исключение
//Сообщить(ОписаниеОшибки());
КонецПопытки;
//Текст.Показать("Текст з/н");
КонецПроцедуры
//*******************************************
Процедура ОбработатьРН(Метод,РН)
Перем Текст;
Перем ТекстЗапроса;
Перем ТС;
Перем Тип;
Тип="invoices";
ПолучитьТекстРН_UTF8(Метод,РН);
Текст=СоздатьОбъект("Текст");
Текст.Открыть(КаталогПользователя()+"JSON.txt");
ТекстЗапроса="";
Для ТС=2 По Текст.КоличествоСтрок() Цикл
ТекстЗапроса=ТекстЗапроса+"
|"+Текст.ПолучитьСтроку(ТС);
КонецЦикла;
Попытка
Статус=ОтправитьВебЗапрос(Метод,ТекстЗапроса,СокрЛП(РН.ШтрихКод),Тип);
Сообщить(Статус);
Если (СокрЛП(Статус) = "OK") или (СокрЛП(Статус)="Not Found") Тогда
рс.Выполнить(ПолучитьТекстОбновленияSQL(Метод,РН.Штрихкод));
Иначе
лОтправитьПочту("Ошибка ДИЛЕРПОИНТ-ФСХ","Расходная накладная №"+РН.НомерДок+" от "+РН.ДатаДок,_АдресПолучателя,"JSON_ОТВЕТ.txt");
КонецЕсли;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
//Текст.Показать("Текст з/н");
КонецПроцедуры
//========================================================== ============
Процедура dealerpoint()
Перем тз;
тз = рс.ВыполнитьИнструкцию(ТекстЗапроса_ПолучениеШтрихКодов);
тз.Выгрузить(фТЗ);
фТЗ.ВыбратьСтроки();
Пока фТЗ.ПолучитьСтроку()=1 Цикл
Если фТЗ.Документ_вид = "ЗаказНаряд" Тогда
ОбработатьЗН(фТЗ.metod,фТЗ.Документ);
ИначеЕсли фТЗ.Документ_вид = "РасходнаяНакладная" Тогда
ОбработатьРН(фТЗ.metod,фТЗ.Документ);
КонецЕсли;
КонецЦикла;
КонецПроцедуры //
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот