Включает перемещение по ячейкам, стикеровку МП, синхронизацию справочников и обработку кодов маркировки. Co-authored-by: Cursor <cursoragent@cursor.com>
1180 lines
72 KiB
Plaintext
1180 lines
72 KiB
Plaintext
|
||
Функция ЗапроситьДокументыСборкиСтикеровкиНаСервере(Номер) Экспорт
|
||
Пользователь = "admin1c";
|
||
Пароль = "A400943@!";
|
||
HTTPСоединение = Новый HTTPСоединение("technozonee.itinalog.ru",5443,Пользователь,Пароль,,,Новый ЗащищенноеСоединениеOpenSSL());
|
||
// HTTPСоединение = Новый HTTPСоединение("127.0.0.1",80,Пользователь,Пароль,,,);
|
||
Заголовки = Новый Соответствие();
|
||
Заголовки.Вставить("Content-Type","application/xml_request");
|
||
// Получали один док, теперь массив доков
|
||
ТелоЗапроса = ПолучитьОбщийМакет(Метаданные.ОбщиеМакеты.ШаблонGetArrayDoc);
|
||
HTTPЗапрос = Новый HTTPЗапрос("/unf/ws/tsdsync", Заголовки);
|
||
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса.ТекущаяОбласть.Текст);
|
||
РезультатЗапроса = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
|
||
ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку();
|
||
Возврат ТекстОтвета;
|
||
|
||
КонецФункции
|
||
//
|
||
Функция getDocInvent(Номер) Экспорт // не используется в данной конфе
|
||
|
||
СтрокаURI = "http://192.168.1.155/unf/ws/tsdsync";
|
||
|
||
Пользователь = "802165066";
|
||
Пароль = "5tg77h90ik";
|
||
|
||
HTTPСоединение = Новый HTTPСоединение("192.168.1.155",80,Пользователь,Пароль,,,);
|
||
|
||
Заголовки = Новый Соответствие();
|
||
Заголовки.Вставить("Content-Type","application/xml_request");
|
||
|
||
ТелоЗапроса = ПолучитьОбщийМакет(Метаданные.ОбщиеМакеты.ШаблонGetDocInvent);
|
||
|
||
HTTPЗапрос = Новый HTTPЗапрос("/unf/ws/tsdsync", Заголовки);
|
||
HTTPЗапрос.УстановитьТелоИзСтроки(СтрЗаменить(ТелоЗапроса.ТекущаяОбласть.Текст,"$Штрихкод",Номер));
|
||
РезультатЗапроса = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
|
||
ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку();
|
||
Возврат ТекстОтвета;
|
||
|
||
КонецФункции
|
||
|
||
|
||
Функция ВыгрузитьДокументыСборкиСтикеровкиНаСервер(Док, ТипДока) Экспорт // Отправляем Док СборкиМП
|
||
Пользователь = "admin1c";
|
||
Пароль = "A400943@!";
|
||
|
||
HTTPСоединение = Новый HTTPСоединение("technozonee.itinalog.ru", 5443, Пользователь, Пароль, , ,
|
||
Новый ЗащищенноеСоединениеOpenSSL);
|
||
// HTTPСоединение = Новый HTTPСоединение("127.0.0.1",80,Пользователь,Пароль,,,);
|
||
Заголовки = Новый Соответствие;
|
||
Заголовки.Вставить("Content-Type", "application/xml_request");
|
||
|
||
ТелоЗапроса = ПолучитьОбщийМакет("ШаблонSetDoc").ТекущаяОбласть.Текст;
|
||
|
||
ТелоЗапроса=СтрЗаменить(ТелоЗапроса, "$ДокСсылка", Док.Ссылка.УникальныйИдентификатор());
|
||
ТелоЗапроса=СтрЗаменить(ТелоЗапроса, "$Дата", Строка(Формат(Док.Дата, "ДФ=""гггг-ММ-дд'T'ЧЧ:мм:сс""")));
|
||
ТелоЗапроса=СтрЗаменить(ТелоЗапроса, "$Номер", Док.Номер);
|
||
ТелоЗапроса=СтрЗаменить(ТелоЗапроса, "$ТипДокумента", ТипЗнч(Док.Ссылка));
|
||
//ТелоЗапроса=СтрЗаменить(ТелоЗапроса, "$КонтрагентСсылка", Док.Партнер.УникальныйИдентификатор());
|
||
ТелоЗапроса=СтрЗаменить(ТелоЗапроса, "$АвторСсылка", Док.Автор.УникальныйИдентификатор());
|
||
СтрокиЗапроса="";
|
||
Для Каждого строка Из Док.ТоварыТолькоКоличество Цикл
|
||
ТелоСтроки = ПолучитьОбщийМакет("ШаблонSetDocPostup").ТекущаяОбласть.Текст;
|
||
ТелоСтроки= СтрЗаменить(ТелоСтроки, "$Строка", Формат(Строка.НомерСтроки,"ЧГ=0"));
|
||
Если ТипДока = "Сборка МП" Тогда
|
||
ТелоСтроки= СтрЗаменить(ТелоСтроки, "$НоменклатураСсылка", Строка.Номенклатура.УникальныйИдентификатор());
|
||
ТелоСтроки= СтрЗаменить(ТелоСтроки, "$ЕдСсылка", "00-00-00");
|
||
ТелоСтроки= СтрЗаменить(ТелоСтроки, "$КодКлас", "00-00-00"); // чтобы не было ошибки при выгрузке
|
||
ТелоСтроки= СтрЗаменить(ТелоСтроки, "$КодМаркировки", "");
|
||
ИначеЕсли ТипДока = "Стикеровка МП" Тогда
|
||
ТелоСтроки= СтрЗаменить(ТелоСтроки, "$НоменклатураСсылка", Строка.КарточкаМП.УникальныйИдентификатор());
|
||
ТелоСтроки= СтрЗаменить(ТелоСтроки, "$ЕдСсылка", строка.КодМП);
|
||
ТелоСтроки= СтрЗаменить(ТелоСтроки, "$КодКлас", строка.ШтрихкодПоставки); // чтобы не было ошибки при выгрузке
|
||
КодМаркировкиВыгрузки = "";
|
||
Если ЗначениеЗаполнено(строка.МаркаСтрока) И строка.МаркаСтрока <> "-" Тогда
|
||
КодМаркировкиВыгрузки = XMLСтрока(строка.МаркаСтрока);
|
||
КонецЕсли;
|
||
ТелоСтроки= СтрЗаменить(ТелоСтроки, "$КодМаркировки", КодМаркировкиВыгрузки);
|
||
КонецЕсли;
|
||
ТелоСтроки= СтрЗаменить(ТелоСтроки, "$НаимКлас", "00-00-00"); // чтобы не было ошибки при выгрузке
|
||
ТелоСтроки= СтрЗаменить(ТелоСтроки, "$Количество", Строка.Отсканировано);
|
||
ТелоСтроки= СтрЗаменить(ТелоСтроки, "$типз", "СобственныеТовары");
|
||
СтрокиЗапроса=СтрокиЗапроса + ТелоСтроки;
|
||
КонецЦикла;
|
||
ТелоЗапроса=СтрЗаменить(ТелоЗапроса, "$Запасы", СтрокиЗапроса);
|
||
//HTTPЗапрос = Новый HTTPЗапрос("/unf/ws/tsdsync", Заголовки);
|
||
HTTPЗапрос = Новый HTTPЗапрос("/unf/ws/tsdsync", Заголовки);
|
||
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса);
|
||
РезультатЗапроса = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
|
||
ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку();
|
||
Возврат ТекстОтвета;
|
||
|
||
КонецФункции
|
||
|
||
Функция SetDocInvent(Док) Экспорт // // не используется в данной конфе
|
||
|
||
СтрокаURI = "http://localhost/unf/ws/tsdsync";
|
||
|
||
Пользователь = "802165066";
|
||
Пароль = "5tg77h90ik";
|
||
|
||
HTTPСоединение = Новый HTTPСоединение("192.168.1.155",80,Пользователь,Пароль,,,);
|
||
|
||
Заголовки = Новый Соответствие();
|
||
Заголовки.Вставить("Content-Type","application/xml_request");
|
||
|
||
ТелоЗапроса = ПолучитьОбщийМакет("ШаблонSetDocInvent").ТекущаяОбласть.Текст;
|
||
|
||
ТелоЗапроса=СтрЗаменить(ТелоЗапроса,"$ДокСсылка",Док.Ссылка.УникальныйИдентификатор());
|
||
ТелоЗапроса=СтрЗаменить(ТелоЗапроса,"$Дата",Строка(Формат(Док.Дата,"ДФ=""гггг-ММ-дд'T'ЧЧ:мм:сс""")) );
|
||
ТелоЗапроса=СтрЗаменить(ТелоЗапроса,"$Номер",Док.Номер);
|
||
СтрокиЗапроса="";
|
||
|
||
Для каждого строка из Док.Запасы Цикл
|
||
ТелоСтроки = ПолучитьОбщийМакет("ШаблонSetDocInventTov").ТекущаяОбласть.Текст;
|
||
ТелоСтроки= СтрЗаменить(ТелоСтроки,"$Строка",Строка.НомерСтроки);
|
||
ТелоСтроки= СтрЗаменить(ТелоСтроки,"$НоменклатураСсылка",Строка.Номенклатура.УникальныйИдентификатор());
|
||
ТелоСтроки= СтрЗаменить(ТелоСтроки,"$ЕдСсылка",Строка.Номенклатура.ЕдиницаИзмерения.УникальныйИдентификатор());
|
||
ТелоСтроки= СтрЗаменить(ТелоСтроки,"$КодКлас",Строка.Номенклатура.ЕдиницаИзмерения.Код);
|
||
ТелоСтроки= СтрЗаменить(ТелоСтроки,"$НаимКлас",Строка.Номенклатура.ЕдиницаИзмерения.Наименование);
|
||
ТелоСтроки= СтрЗаменить(ТелоСтроки,"$Количество",Строка.Количество);
|
||
ТелоСтроки= СтрЗаменить(ТелоСтроки,"$Колуч",Строка.КоличествоУчет);
|
||
ТелоСтроки= СтрЗаменить(ТелоСтроки,"$типз","СобственныеТовары");
|
||
СтрокиЗапроса=СтрокиЗапроса+ТелоСтроки;
|
||
КонецЦикла;
|
||
|
||
ТелоЗапроса=СтрЗаменить(ТелоЗапроса,"$Запасы",СтрокиЗапроса);
|
||
HTTPЗапрос = Новый HTTPЗапрос("/unf/ws/tsdsync", Заголовки);
|
||
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса);
|
||
РезультатЗапроса = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
|
||
ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку();
|
||
Возврат ТекстОтвета;
|
||
|
||
КонецФункции
|
||
|
||
|
||
|
||
Функция КодироватьСтрокуВBase64(Знач Строка,
|
||
Знач Кодировка = Неопределено,
|
||
Знач ЗаписатьBOM = Ложь) Экспорт
|
||
|
||
// Устанавливаем кодировку по умолчанию, если не указана
|
||
Если Не ЗначениеЗаполнено(Кодировка) Тогда
|
||
Кодировка = КодировкаТекста.UTF8;
|
||
КонецЕсли;
|
||
|
||
// Преобразуем строку в двоичные данные
|
||
ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(Строка, Кодировка, ЗаписатьBOM);
|
||
|
||
// Кодируем двоичные данные в Base64
|
||
Результат = Base64Строка(ДвоичныеДанные);
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция РаспечататьКодПоставкиНаПринтере(ДанныеОтправки) Экспорт
|
||
СтрокаURI = "/unf/hs/prints/PrintUp";
|
||
хост="technozonee.itinalog.ru";
|
||
//Хост = "127.0.0.1";
|
||
HTTPСоединение = Новый HTTPСоединение(хост,5443,"admin1c","A400943@!",,,Новый ЗащищенноеСоединениеOpenSSL());
|
||
//HTTPСоединение = Новый HTTPСоединение(хост,80,"admin1c","A400943@!",,,);
|
||
Заголовки = Новый Соответствие();
|
||
Заголовки.Вставить("Content-Type","application/json");
|
||
//ДанныеОтправки=Новый Структура();
|
||
ПринтерПоУмолчанию = Константы.ПринтерПоУмолчанию.Получить();
|
||
Если ЗначениеЗаполнено(ПринтерПоУмолчанию) Тогда
|
||
ДанныеОтправки.Вставить("Printer", ПринтерПоУмолчанию.ИдентификаторРабМеста + ";" + ПринтерПоУмолчанию.ИмяПринтера);
|
||
Иначе
|
||
ДанныеОтправки.Вставить("Printer", "");
|
||
КонецЕсли;
|
||
ЗапросJSON = ПростаяЗаписьJSON(ДанныеОтправки);
|
||
HTTPЗапрос = Новый HTTPЗапрос(СтрокаURI, Заголовки);
|
||
HTTPЗапрос.УстановитьТелоИзСтроки(ЗапросJSON);
|
||
РезультатЗапроса = HTTPСоединение.ВызватьHTTPМетод("POST",HTTPЗапрос);
|
||
ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку();
|
||
ЧтениеJSON = Новый ЧтениеJSON;
|
||
ЧтениеJSON.УстановитьСтроку(ТекстОтвета);
|
||
Данные = ПрочитатьJSON(ЧтениеJSON);
|
||
ЧтениеJSON.Закрыть();
|
||
КонецФункции
|
||
|
||
Функция ЗапросДанныеДляМаркетов(Док, Шк) Экспорт //
|
||
МаркетПлейс=Лев(Док.ПоставкиМП[0].ПоставкаМП.Номер, 2);
|
||
СтрокаURI = "/unf/hs/tsd/MarketPlace/";
|
||
хост="technozonee.itinalog.ru";
|
||
HTTPСоединение = Новый HTTPСоединение(хост,5443,"admin1c","A400943@!",,,Новый ЗащищенноеСоединениеOpenSSL());
|
||
Заголовки = Новый Соответствие();
|
||
Заголовки.Вставить("Content-Type","application/json");
|
||
ДанныеОтправки=Новый Структура();
|
||
ДанныеОтправки.Вставить("barcode", Шк);
|
||
ДанныеОтправки.Вставить("TypeMarket", МаркетПлейс);
|
||
ДанныеОтправки.Вставить("integra", СтроковыйМассивДокОЗОН(Док));
|
||
ПринтерПоУмолчанию = Константы.ПринтерПоУмолчанию.Получить();
|
||
Если ЗначениеЗаполнено(ПринтерПоУмолчанию) Тогда
|
||
ДанныеОтправки.Вставить("Printer", ПринтерПоУмолчанию.ИдентификаторРабМеста + ";" + ПринтерПоУмолчанию.ИмяПринтера);
|
||
Иначе
|
||
ДанныеОтправки.Вставить("Printer", "");
|
||
КонецЕсли;
|
||
ЗапросJSON = ПростаяЗаписьJSON(ДанныеОтправки);
|
||
HTTPЗапрос = Новый HTTPЗапрос(СтрокаURI, Заголовки);
|
||
HTTPЗапрос.УстановитьТелоИзСтроки(ЗапросJSON);
|
||
РезультатЗапроса = HTTPСоединение.ВызватьHTTPМетод("POST",HTTPЗапрос);
|
||
ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку();
|
||
Попытка
|
||
ЧтениеJSON = Новый ЧтениеJSON;
|
||
ЧтениеJSON.УстановитьСтроку(ТекстОтвета);
|
||
Данные = ПрочитатьJSON(ЧтениеJSON);
|
||
Исключение
|
||
Сообщить(ТекстОтвета + Символы.ПС + ОписаниеОшибки());
|
||
КонецПопытки;
|
||
ЧтениеJSON.Закрыть();
|
||
Возврат Данные;
|
||
КонецФункции
|
||
|
||
Функция СтроковыйМассивДокОЗОН(Док)
|
||
МассивСтрок = "";
|
||
Для Каждого строка из Док.ПоставкиМП Цикл
|
||
МассивСтрок = МассивСтрок + строка.ПоставкаМП.Номер + ";";
|
||
КонецЦикла;
|
||
Возврат МассивСтрок;
|
||
КонецФункции
|
||
|
||
|
||
Функция ПростаяЗаписьJSON(ДанныеОтправки)
|
||
|
||
ЗаписьJSON = Новый ЗаписьJSON;
|
||
ЗаписьJSON.УстановитьСтроку();
|
||
ЗаписатьJSON(ЗаписьJSON,ДанныеОтправки);
|
||
Возврат ЗаписьJSON.Закрыть();
|
||
|
||
КонецФункции
|
||
|
||
Функция GetUsers() Экспорт
|
||
Пользователь = "admin1c";
|
||
Пароль = "A400943@!";
|
||
|
||
HTTPСоединение = Новый HTTPСоединение("technozonee.itinalog.ru",5443,Пользователь,Пароль,,,Новый ЗащищенноеСоединениеOpenSSL());
|
||
// HTTPСоединение = Новый HTTPСоединение("127.0.0.1",80,Пользователь,Пароль,,,);
|
||
|
||
Заголовки = Новый Соответствие();
|
||
Заголовки.Вставить("Content-Type","application/xml_request");
|
||
|
||
ТелоЗапроса = ПолучитьОбщийМакет(Метаданные.ОбщиеМакеты.ШаблонGetUsers);
|
||
|
||
HTTPЗапрос = Новый HTTPЗапрос("/unf/ws/tsdsync", Заголовки);
|
||
//HTTPЗапрос = Новый HTTPЗапрос("/unfgal/ws/tsdsync", Заголовки);
|
||
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса.ТекущаяОбласть.Текст);
|
||
РезультатЗапроса = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
|
||
ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку();
|
||
Возврат ТекстОтвета;
|
||
|
||
КонецФункции
|
||
|
||
Функция GetPrints() Экспорт
|
||
СтрокаURI = "/unf/hs/prints/GetPrintstoTSD";
|
||
хост="technozonee.itinalog.ru";
|
||
HTTPСоединение = Новый HTTPСоединение(хост,5443,"admin1c","A400943@!",,,Новый ЗащищенноеСоединениеOpenSSL());
|
||
Заголовки = Новый Соответствие();
|
||
Заголовки.Вставить("Content-Type","application/json");
|
||
ДанныеОтправки=Новый Структура();
|
||
ЗапросJSON = ПростаяЗаписьJSON(ДанныеОтправки);
|
||
HTTPЗапрос = Новый HTTPЗапрос(СтрокаURI, Заголовки);
|
||
HTTPЗапрос.УстановитьТелоИзСтроки(ЗапросJSON);
|
||
РезультатЗапроса = HTTPСоединение.ВызватьHTTPМетод("GET",HTTPЗапрос);
|
||
ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку();
|
||
ЧтениеJSON = Новый ЧтениеJSON;
|
||
ЧтениеJSON.УстановитьСтроку(ТекстОтвета);
|
||
Данные = ПрочитатьJSON(ЧтениеJSON);
|
||
ЧтениеJSON.Закрыть();
|
||
Возврат Данные;
|
||
КонецФункции
|
||
|
||
|
||
|
||
|
||
Функция ОтправитьДокШтрихкодов(Док) Экспорт
|
||
//СтрокаURI = "http://localhost/unf/ws/tsdsync";
|
||
Пользователь = "admin1c";
|
||
Пароль = "A400943@!";
|
||
HTTPСоединение = Новый HTTPСоединение("technozonee.itinalog.ru",5443,Пользователь,Пароль,,,Новый ЗащищенноеСоединениеOpenSSL());
|
||
Заголовки = Новый Соответствие();
|
||
Заголовки.Вставить("Content-Type","application/xml_request");
|
||
|
||
ТелоЗапроса = ПолучитьОбщийМакет("ШаблонSetDocBarcode").ТекущаяОбласть.Текст;
|
||
ТелоЗапроса=СтрЗаменить(ТелоЗапроса,"$ДокСсылка",Строка(Док.Ссылка.УникальныйИдентификатор()));
|
||
ТелоЗапроса=СтрЗаменить(ТелоЗапроса,"$Дата",Строка(Формат(Док.Дата,"ДФ=""гггг-ММ-дд'T'ЧЧ:мм:сс""")) );
|
||
ТелоЗапроса=СтрЗаменить(ТелоЗапроса,"$Номер",Док.Номер);
|
||
|
||
СтрокиЗапроса="";
|
||
Для каждого строка из Док.Штрихкоды Цикл
|
||
ТелоСтроки = ПолучитьОбщийМакет("ШаблонSetDocBarcodeLine").ТекущаяОбласть.Текст;
|
||
// Отключили, так как будем все передавать в кодированном варианте
|
||
// ТелоСтроки= СтрЗаменить(ТелоСтроки,"$ШтрихкодВСтроке", Строка.ШтрихкодСтрока);
|
||
ТелоСтроки= СтрЗаменить(ТелоСтроки,"$ШтрихкодКодированный", Строка.ШтрихкодКодированный);
|
||
СтрокиЗапроса=СтрокиЗапроса+ТелоСтроки;
|
||
КонецЦикла;
|
||
ТелоЗапроса=СтрЗаменить(ТелоЗапроса,"$СтрокаШК",СтрокиЗапроса);
|
||
HTTPЗапрос = Новый HTTPЗапрос("/unf/ws/tsdsync", Заголовки);
|
||
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса);
|
||
РезультатЗапроса = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
|
||
ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку();
|
||
Возврат ТекстОтвета;
|
||
КонецФункции
|
||
|
||
#Область ЯчейкиИПеремещение
|
||
|
||
Функция ПолучитьHTTPСоединениеТСД()
|
||
Возврат Новый HTTPСоединение("technozonee.itinalog.ru", 5443, "admin1c", "A400943@!", , ,
|
||
Новый ЗащищенноеСоединениеOpenSSL());
|
||
КонецФункции
|
||
|
||
Функция ВыполнитьSOAPЗапросТСД(ИмяМакета) Экспорт
|
||
HTTPСоединение = ПолучитьHTTPСоединениеТСД();
|
||
Заголовки = Новый Соответствие;
|
||
Заголовки.Вставить("Content-Type", "application/xml_request");
|
||
ПараметрыЗапроса = ПараметрыSOAPЗапросаТСД(ИмяМакета);
|
||
HTTPЗапрос = Новый HTTPЗапрос(ПараметрыЗапроса.АдресРесурса, Заголовки);
|
||
HTTPЗапрос.УстановитьТелоИзСтроки(ПараметрыЗапроса.Тело);
|
||
РезультатЗапроса = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
|
||
Возврат РезультатЗапроса.ПолучитьТелоКакСтроку();
|
||
КонецФункции
|
||
|
||
// Параметры для асинхронного HTTP на клиенте (без блокировки UI).
|
||
Функция ПараметрыSOAPЗапросаТСД(ИмяМакета) Экспорт
|
||
|
||
ПараметрыЗапроса = Новый Структура;
|
||
ПараметрыЗапроса.Вставить("Хост", "technozonee.itinalog.ru");
|
||
ПараметрыЗапроса.Вставить("Порт", 5443);
|
||
ПараметрыЗапроса.Вставить("Пользователь", "admin1c");
|
||
ПараметрыЗапроса.Вставить("Пароль", "A400943@!");
|
||
ПараметрыЗапроса.Вставить("АдресРесурса", "/unf/ws/tsdsync");
|
||
ПараметрыЗапроса.Вставить("Тело", ПолучитьОбщийМакет(ИмяМакета).ТекущаяОбласть.Текст);
|
||
Возврат ПараметрыЗапроса;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ЗагрузитьЯчейкиПартииИОстатки() Экспорт
|
||
ЗагрузитьОрганизацииИзУНФ();
|
||
ЗагрузитьЯчейкиИзУНФ();
|
||
ЗагрузитьПартииИзУНФ();
|
||
ЗагрузитьОстаткиПоЯчейкамИзУНФ();
|
||
ЗагрузитьШтрихкодыИзУНФ();
|
||
КонецПроцедуры
|
||
|
||
Функция GetCells() Экспорт
|
||
Возврат ВыполнитьSOAPЗапросТСД("ШаблонGetCells");
|
||
КонецФункции
|
||
|
||
Функция GetOrganizations() Экспорт
|
||
Возврат ВыполнитьSOAPЗапросТСД("ШаблонGetOrganizations");
|
||
КонецФункции
|
||
|
||
Функция GetBatches() Экспорт
|
||
Возврат ВыполнитьSOAPЗапросТСД("ШаблонGetBatches");
|
||
КонецФункции
|
||
|
||
Функция GetStockInCells() Экспорт
|
||
Возврат ВыполнитьSOAPЗапросТСД("ШаблонGetStockInCells");
|
||
КонецФункции
|
||
|
||
Функция GetNom() Экспорт
|
||
Возврат ВыполнитьSOAPЗапросТСД("ШаблонGetNom");
|
||
КонецФункции
|
||
|
||
Процедура ЗагрузитьОрганизацииИзУНФ() Экспорт
|
||
ЗагрузитьОрганизацииИзОтвета(GetOrganizations());
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗагрузитьОрганизацииИзОтвета(XmlОтвет) Экспорт
|
||
|
||
Попытка
|
||
ОбXDTO = ПрочитатьReturnОперацииТСД(XmlОтвет, "GetOrganizationsResponse");
|
||
Исключение
|
||
Сообщить("Ошибка GetOrganizations: " + ОписаниеОшибки() + Символы.ПС + XmlОтвет);
|
||
Возврат;
|
||
КонецПопытки;
|
||
|
||
Если ОбXDTO = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
МассивЗначений = МассивValueИзОтветаТСД(ОбXDTO);
|
||
Если ТипЗнч(МассивЗначений) = Тип("СписокXDTO") Тогда
|
||
Для Индекс = 0 По МассивЗначений.Количество() - 1 Цикл
|
||
ЗаписатьОрганизациюИзXDTO(МассивЗначений.Получить(Индекс));
|
||
КонецЦикла;
|
||
ИначеЕсли МассивЗначений <> Неопределено Тогда
|
||
ЗаписатьОрганизациюИзXDTO(МассивЗначений);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗаписатьОрганизациюИзXDTO(Элемент)
|
||
|
||
Если Элемент = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
// GetOrganizations: 0-ссылка, 1-наименование, 2-код
|
||
СсылкаUUID = ЗначениеСвойстваXDTO(Элемент, 0);
|
||
Наименование = ЗначениеСвойстваXDTO(Элемент, 1);
|
||
Код = ЗначениеСвойстваXDTO(Элемент, 2);
|
||
|
||
Если Не ЗначениеЗаполнено(СсылкаUUID) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Ссылка = Справочники.Организации.ПолучитьСсылку(Новый УникальныйИдентификатор(СсылкаUUID));
|
||
ОбъектОрганизации = Ссылка.ПолучитьОбъект();
|
||
Если ОбъектОрганизации = Неопределено Тогда
|
||
ОбъектОрганизации = Справочники.Организации.СоздатьЭлемент();
|
||
ОбъектОрганизации.УстановитьСсылкуНового(Ссылка);
|
||
КонецЕсли;
|
||
|
||
Если ЗначениеЗаполнено(Наименование) Тогда
|
||
ОбъектОрганизации.Наименование = Наименование;
|
||
ИначеЕсли Не ЗначениеЗаполнено(ОбъектОрганизации.Наименование) Тогда
|
||
ОбъектОрганизации.Наименование = "Организация " + Лев(СсылкаUUID, 8);
|
||
КонецЕсли;
|
||
|
||
Если ЗначениеЗаполнено(Код) Тогда
|
||
Попытка
|
||
ОбъектОрганизации.Код = Код;
|
||
Исключение
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
|
||
ОбъектОрганизации.Записать();
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗагрузитьЯчейкиИзУНФ() Экспорт
|
||
ЗагрузитьЯчейкиИзОтвета(GetCells());
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗагрузитьЯчейкиИзОтвета(XmlОтвет) Экспорт
|
||
|
||
Попытка
|
||
ОбXDTO = ПрочитатьReturnОперацииТСД(XmlОтвет, "GetCellsResponse");
|
||
Исключение
|
||
Сообщить("Ошибка GetCells: " + ОписаниеОшибки() + Символы.ПС + XmlОтвет);
|
||
Возврат;
|
||
КонецПопытки;
|
||
|
||
Если ОбXDTO = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
МассивЗначений = МассивValueИзОтветаТСД(ОбXDTO);
|
||
Если ТипЗнч(МассивЗначений) = Тип("СписокXDTO") Тогда
|
||
Для Индекс = 0 По МассивЗначений.Количество() - 1 Цикл
|
||
ЗаписатьЯчейкуИзXDTO(МассивЗначений.Получить(Индекс));
|
||
КонецЦикла;
|
||
ИначеЕсли МассивЗначений <> Неопределено Тогда
|
||
ЗаписатьЯчейкуИзXDTO(МассивЗначений);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗаписатьЯчейкуИзXDTO(Элемент)
|
||
|
||
Если Элемент = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
// GetCells: 0-ссылка, 1-наименование, 2-код, 3-склад UUID, 4-штрихкод, 5-наименование склада
|
||
СсылкаUUID = ЗначениеСвойстваXDTO(Элемент, 0);
|
||
Наименование = ЗначениеСвойстваXDTO(Элемент, 1);
|
||
Код = ЗначениеСвойстваXDTO(Элемент, 2);
|
||
СкладUUID = ЗначениеСвойстваXDTO(Элемент, 3);
|
||
Штрихкод = ЗначениеСвойстваXDTO(Элемент, 4);
|
||
НаименованиеСклада = ЗначениеСвойстваXDTO(Элемент, 5);
|
||
|
||
Если Не ЗначениеЗаполнено(СсылкаUUID) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
СкладСсылка = ОбеспечитьСкладПоUUID(СкладUUID, НаименованиеСклада);
|
||
|
||
Ссылка = Справочники.Ячейки.ПолучитьСсылку(Новый УникальныйИдентификатор(СсылкаUUID));
|
||
ОбъектЯчейки = Ссылка.ПолучитьОбъект();
|
||
Если ОбъектЯчейки = Неопределено Тогда
|
||
ОбъектЯчейки = Справочники.Ячейки.СоздатьЭлемент();
|
||
ОбъектЯчейки.УстановитьСсылкуНового(Ссылка);
|
||
КонецЕсли;
|
||
ОбъектЯчейки.Наименование = Наименование;
|
||
Если ЗначениеЗаполнено(Код) Тогда
|
||
ОбъектЯчейки.Код = Код;
|
||
КонецЕсли;
|
||
ОбъектЯчейки.Владелец = СкладСсылка;
|
||
ОбъектЯчейки.Штрихкод = Штрихкод;
|
||
ОбъектЯчейки.Записать();
|
||
|
||
КонецПроцедуры
|
||
|
||
// Создаёт/обновляет склад по UUID. Наименование обязательно из УНФ (индекс 5 GetCells),
|
||
// иначе в представлении остаётся заглушка с куском идентификатора.
|
||
Функция ОбеспечитьСкладПоUUID(СкладUUID, НаименованиеСклада) Экспорт
|
||
|
||
Если Не ЗначениеЗаполнено(СкладUUID) Тогда
|
||
Возврат Справочники.СтруктурныеЕдиницы.ПустаяСсылка();
|
||
КонецЕсли;
|
||
|
||
СкладСсылка = Справочники.СтруктурныеЕдиницы.ПолучитьСсылку(Новый УникальныйИдентификатор(СкладUUID));
|
||
СкладОбъект = СкладСсылка.ПолучитьОбъект();
|
||
ЭтоНовый = (СкладОбъект = Неопределено);
|
||
Если ЭтоНовый Тогда
|
||
СкладОбъект = Справочники.СтруктурныеЕдиницы.СоздатьЭлемент();
|
||
СкладОбъект.УстановитьСсылкуНового(СкладСсылка);
|
||
КонецЕсли;
|
||
|
||
ИмяСклада = СокрЛП(НаименованиеСклада);
|
||
Если Не ЗначениеЗаполнено(ИмяСклада) Тогда
|
||
ИмяСклада = СокрЛП(СкладОбъект.Наименование);
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(ИмяСклада) Или ЭтоЗаглушкаИмениСклада(ИмяСклада, СкладUUID) Тогда
|
||
ИмяСклада = "Склад";
|
||
КонецЕсли;
|
||
|
||
НужнаЗапись = ЭтоНовый Или СкладОбъект.Наименование <> ИмяСклада;
|
||
Если НужнаЗапись Тогда
|
||
СкладОбъект.Наименование = ИмяСклада;
|
||
СкладОбъект.Записать();
|
||
КонецЕсли;
|
||
|
||
Возврат СкладОбъект.Ссылка;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЭтоЗаглушкаИмениСклада(ИмяСклада, СкладUUID)
|
||
|
||
ПрефиксUUID = ВРег(Лев(СкладUUID, 8));
|
||
Если ВРег(ИмяСклада) = "СКЛАД " + ПрефиксUUID Тогда
|
||
Возврат Истина;
|
||
КонецЕсли;
|
||
Возврат Ложь;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ЗагрузитьПартииИзУНФ() Экспорт
|
||
ЗагрузитьПартииИзОтвета(GetBatches());
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗагрузитьПартииИзОтвета(XmlОтвет) Экспорт
|
||
|
||
Попытка
|
||
ОбXDTO = ПрочитатьReturnОперацииТСД(XmlОтвет, "GetBatchesResponse");
|
||
Исключение
|
||
Сообщить("Ошибка GetBatches: " + ОписаниеОшибки() + Символы.ПС + XmlОтвет);
|
||
Возврат;
|
||
КонецПопытки;
|
||
|
||
Если ОбXDTO = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
МассивЗначений = МассивValueИзОтветаТСД(ОбXDTO);
|
||
|
||
Если ТипЗнч(МассивЗначений) = Тип("СписокXDTO") Тогда
|
||
Для Индекс = 0 По МассивЗначений.Количество() - 1 Цикл
|
||
ЗаписатьПартиюИзXDTO(МассивЗначений.Получить(Индекс));
|
||
КонецЦикла;
|
||
ИначеЕсли МассивЗначений <> Неопределено Тогда
|
||
ЗаписатьПартиюИзXDTO(МассивЗначений);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗаписатьПартиюИзXDTO(Элемент)
|
||
|
||
Если Элемент = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
СсылкаUUID = ЗначениеСвойстваXDTO(Элемент, 0);
|
||
Наименование = ЗначениеСвойстваXDTO(Элемент, 1);
|
||
НоменклатураUUID = ЗначениеСвойстваXDTO(Элемент, 2);
|
||
|
||
Если Не ЗначениеЗаполнено(СсылкаUUID) Или Не ЗначениеЗаполнено(НоменклатураUUID) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
НоменклатураСсылка = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(НоменклатураUUID));
|
||
Если НоменклатураСсылка.ПолучитьОбъект() = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
Ссылка = Справочники.ПартииНоменклатуры.ПолучитьСсылку(Новый УникальныйИдентификатор(СсылкаUUID));
|
||
ОбъектПартии = Ссылка.ПолучитьОбъект();
|
||
Если ОбъектПартии = Неопределено Тогда
|
||
ОбъектПартии = Справочники.ПартииНоменклатуры.СоздатьЭлемент();
|
||
ОбъектПартии.УстановитьСсылкуНового(Ссылка);
|
||
КонецЕсли;
|
||
ОбъектПартии.Наименование = Наименование;
|
||
ОбъектПартии.Владелец = НоменклатураСсылка;
|
||
ОбъектПартии.Записать();
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗагрузитьОстаткиПоЯчейкамИзУНФ() Экспорт
|
||
ЗагрузитьОстаткиПоЯчейкамИзОтвета(GetStockInCells());
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗагрузитьШтрихкодыИзУНФ() Экспорт
|
||
ЗагрузитьШтрихкодыИзОтвета(GetNom());
|
||
КонецПроцедуры
|
||
|
||
Функция ИнтервалАктуальностиДанныхУНФСекунд()
|
||
Возврат 30 * 60; // 30 минут
|
||
КонецФункции
|
||
|
||
Функция НужнаЗагрузкаДанныхУНФ() Экспорт
|
||
|
||
ДатаЗагрузки = Константы.ДатаПоследнейЗагрузкиДанныхУНФ.Получить();
|
||
Если Не ЗначениеЗаполнено(ДатаЗагрузки) Тогда
|
||
Возврат Истина;
|
||
КонецЕсли;
|
||
Возврат (ТекущаяДата() - ДатаЗагрузки) >= ИнтервалАктуальностиДанныхУНФСекунд();
|
||
|
||
КонецФункции
|
||
|
||
Процедура ЗафиксироватьДатуЗагрузкиДанныхУНФ() Экспорт
|
||
Константы.ДатаПоследнейЗагрузкиДанныхУНФ.Установить(ТекущаяДата());
|
||
КонецПроцедуры
|
||
|
||
Функция ДатаПоследнейЗагрузкиДанныхУНФСтрокой() Экспорт
|
||
|
||
ДатаЗагрузки = Константы.ДатаПоследнейЗагрузкиДанныхУНФ.Получить();
|
||
Если Не ЗначениеЗаполнено(ДатаЗагрузки) Тогда
|
||
Возврат "";
|
||
КонецЕсли;
|
||
Возврат Формат(ДатаЗагрузки, "ДФ='dd.MM.yyyy HH:mm'");
|
||
|
||
КонецФункции
|
||
|
||
// Готовит таблицу ШК во временном хранилище и очищает старые записи.
|
||
// Возврат: Адрес, Количество (элементов-владельцев)
|
||
Функция ПодготовитьЗагрузкуШтрихкодов(УникальныйИдентификаторФормы) Экспорт
|
||
|
||
XmlОтвет = GetNom();
|
||
|
||
Попытка
|
||
ОбXDTO = ПрочитатьReturnОперацииТСД(XmlОтвет, "getNomResponse");
|
||
Исключение
|
||
Попытка
|
||
ОбXDTO = ПрочитатьReturnОперацииТСД(XmlОтвет, "GetNomResponse");
|
||
Исключение
|
||
ВызватьИсключение("Ошибка GetNom: " + ОписаниеОшибки());
|
||
КонецПопытки;
|
||
КонецПопытки;
|
||
|
||
Если ОбXDTO = Неопределено Тогда
|
||
ВызватьИсключение("GetNom: пустой ответ УНФ. Штрихкоды не изменены.");
|
||
КонецЕсли;
|
||
|
||
МассивЗначений = МассивValueИзОтветаТСД(ОбXDTO);
|
||
Если ТипЗнч(МассивЗначений) = Тип("СписокXDTO") Тогда
|
||
Если МассивЗначений.Количество() > 0 И Не ЭтоЭлементОтветаValueProperty(МассивЗначений.Получить(0)) Тогда
|
||
ВызватьИсключение("GetNom: неверный формат ответа (ожидается Value/Property). Штрихкоды не изменены.");
|
||
КонецЕсли;
|
||
ИначеЕсли Не ЭтоЭлементОтветаValueProperty(МассивЗначений) Тогда
|
||
ВызватьИсключение("GetNom: неверный формат ответа (ожидается Value/Property). Штрихкоды не изменены.");
|
||
КонецЕсли;
|
||
|
||
ТаблицаДанных = НовыйТаблицаДанныхШтрихкодов();
|
||
Если ТипЗнч(МассивЗначений) = Тип("СписокXDTO") Тогда
|
||
Для Индекс = 0 По МассивЗначений.Количество() - 1 Цикл
|
||
ДобавитьЭлементШтрихкодовВТаблицу(ТаблицаДанных, МассивЗначений.Получить(Индекс));
|
||
КонецЦикла;
|
||
ИначеЕсли МассивЗначений <> Неопределено Тогда
|
||
ДобавитьЭлементШтрихкодовВТаблицу(ТаблицаДанных, МассивЗначений);
|
||
КонецЕсли;
|
||
|
||
ОчиститьШтрихкодыНоменклатурыИКарточекМП();
|
||
|
||
Результат = Новый Структура;
|
||
Результат.Вставить("Адрес", ПоместитьВоВременноеХранилище(ТаблицаДанных, УникальныйИдентификаторФормы));
|
||
Результат.Вставить("Количество", ТаблицаДанных.Количество());
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Пишет порцию владельцев ШК из временного хранилища.
|
||
// Возврат: Записано, СледующийИндекс, Готово
|
||
Функция ЗаписатьПорциюШтрихкодов(АдресДанных, ИндексНачала, РазмерПорции = 40) Экспорт
|
||
|
||
ТаблицаДанных = ПолучитьИзВременногоХранилища(АдресДанных);
|
||
Если ТипЗнч(ТаблицаДанных) <> Тип("ТаблицаЗначений") Тогда
|
||
ВызватьИсключение("Нет данных штрихкодов для записи (временное хранилище пусто).");
|
||
КонецЕсли;
|
||
|
||
Всего = ТаблицаДанных.Количество();
|
||
Если ИндексНачала >= Всего Тогда
|
||
Результат = Новый Структура;
|
||
Результат.Вставить("Записано", 0);
|
||
Результат.Вставить("СледующийИндекс", ИндексНачала);
|
||
Результат.Вставить("Готово", Истина);
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
|
||
ИндексКонца = Мин(ИндексНачала + РазмерПорции - 1, Всего - 1);
|
||
КоличествоЗаписано = 0;
|
||
НаборЗаписей = РегистрыСведений.ШтрихкодыУпаковок.СоздатьНаборЗаписей();
|
||
|
||
Для Индекс = ИндексНачала По ИндексКонца Цикл
|
||
СтрокаДанных = ТаблицаДанных[Индекс];
|
||
ВладелецШтрихкода = Неопределено;
|
||
Если ВРег(СтрокаДанных.ТипОбъекта) = "КАРТОЧКИМП" Или ВРег(СтрокаДанных.ТипОбъекта) = "КАРТОЧКАМП" Тогда
|
||
ВладелецШтрихкода = ОбеспечитьКарточкуМППоUUID(СтрокаДанных.СсылкаUUID, СтрокаДанных.Наименование, СтрокаДанных.СвязаннаяНоменклатураUUID);
|
||
Иначе
|
||
ВладелецШтрихкода = ОбеспечитьНоменклатуруПоUUID(СтрокаДанных.СсылкаUUID, СтрокаДанных.Наименование);
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(ВладелецШтрихкода) Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
МассивШК = СтрРазделить(СтрокаДанных.СтрокаШтрихкодов, ";", Ложь);
|
||
Для Каждого Штрихкод Из МассивШК Цикл
|
||
Штрихкод = СокрЛП(Штрихкод);
|
||
Если Не ЗначениеЗаполнено(Штрихкод) Или Штрихкод = "0" Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
НоваяЗапись = НаборЗаписей.Добавить();
|
||
НоваяЗапись.Штрихкод = Штрихкод;
|
||
НоваяЗапись.Номенклатура = ВладелецШтрихкода;
|
||
КоличествоЗаписано = КоличествоЗаписано + 1;
|
||
КонецЦикла;
|
||
КонецЦикла;
|
||
|
||
Если НаборЗаписей.Количество() > 0 Тогда
|
||
НаборЗаписей.Записать(Ложь);
|
||
КонецЕсли;
|
||
|
||
СледующийИндекс = ИндексКонца + 1;
|
||
Результат = Новый Структура;
|
||
Результат.Вставить("Записано", КоличествоЗаписано);
|
||
Результат.Вставить("СледующийИндекс", СледующийИндекс);
|
||
Результат.Вставить("Готово", СледующийИндекс >= Всего);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция НовыйТаблицаДанныхШтрихкодов()
|
||
|
||
ТаблицаДанных = Новый ТаблицаЗначений;
|
||
ТаблицаДанных.Колонки.Добавить("СсылкаUUID", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(36)));
|
||
ТаблицаДанных.Колонки.Добавить("ТипОбъекта", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(50)));
|
||
ТаблицаДанных.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(150)));
|
||
ТаблицаДанных.Колонки.Добавить("СтрокаШтрихкодов", Новый ОписаниеТипов("Строка"));
|
||
ТаблицаДанных.Колонки.Добавить("СвязаннаяНоменклатураUUID", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(36)));
|
||
Возврат ТаблицаДанных;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ДобавитьЭлементШтрихкодовВТаблицу(ТаблицаДанных, Элемент)
|
||
|
||
Если Элемент = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
СсылкаUUID = СокрЛП(ЗначениеСвойстваXDTO(Элемент, 0));
|
||
ТипОбъекта = СокрЛП(ЗначениеСвойстваXDTO(Элемент, 1));
|
||
Наименование = СокрЛП(ЗначениеСвойстваXDTO(Элемент, 2));
|
||
СтрокаШтрихкодов = СокрЛП(ЗначениеСвойстваXDTO(Элемент, 3));
|
||
СвязаннаяНоменклатураUUID = СокрЛП(ЗначениеСвойстваXDTO(Элемент, 4));
|
||
|
||
Если Не ЭтоUUID(СсылкаUUID) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(СтрокаШтрихкодов) Или СтрокаШтрихкодов = "0" Тогда
|
||
Возврат; // без ШК не пишем и не создаём справочник
|
||
КонецЕсли;
|
||
|
||
НоваяСтрока = ТаблицаДанных.Добавить();
|
||
НоваяСтрока.СсылкаUUID = СсылкаUUID;
|
||
НоваяСтрока.ТипОбъекта = ТипОбъекта;
|
||
НоваяСтрока.Наименование = Наименование;
|
||
НоваяСтрока.СтрокаШтрихкодов = СтрокаШтрихкодов;
|
||
НоваяСтрока.СвязаннаяНоменклатураUUID = СвязаннаяНоменклатураUUID;
|
||
|
||
КонецПроцедуры
|
||
|
||
// GetNom: 0-UUID, 1-тип (Номенклатура/КарточкиМП), 2-наименование, 3-ШК через ";", 4-UUID связанной номенклатуры
|
||
Процедура ЗагрузитьШтрихкодыИзОтвета(XmlОтвет) Экспорт
|
||
|
||
Попытка
|
||
ОбXDTO = ПрочитатьReturnОперацииТСД(XmlОтвет, "getNomResponse");
|
||
Исключение
|
||
Попытка
|
||
ОбXDTO = ПрочитатьReturnОперацииТСД(XmlОтвет, "GetNomResponse");
|
||
Исключение
|
||
ВызватьИсключение("Ошибка GetNom: " + ОписаниеОшибки());
|
||
КонецПопытки;
|
||
КонецПопытки;
|
||
|
||
Если ОбXDTO = Неопределено Тогда
|
||
ВызватьИсключение("GetNom: пустой ответ УНФ. Штрихкоды не изменены.");
|
||
КонецЕсли;
|
||
|
||
МассивЗначений = МассивValueИзОтветаТСД(ОбXDTO);
|
||
Если ТипЗнч(МассивЗначений) = Тип("СписокXDTO") Тогда
|
||
Если МассивЗначений.Количество() > 0 И Не ЭтоЭлементОтветаValueProperty(МассивЗначений.Получить(0)) Тогда
|
||
ВызватьИсключение("GetNom: неверный формат ответа (ожидается Value/Property). Обновите getNom() на УНФ. Штрихкоды не изменены.");
|
||
КонецЕсли;
|
||
ИначеЕсли Не ЭтоЭлементОтветаValueProperty(МассивЗначений) Тогда
|
||
ВызватьИсключение("GetNom: неверный формат ответа (ожидается Value/Property). Обновите getNom() на УНФ. Штрихкоды не изменены.");
|
||
КонецЕсли;
|
||
|
||
ТаблицаДанных = НовыйТаблицаДанныхШтрихкодов();
|
||
Если ТипЗнч(МассивЗначений) = Тип("СписокXDTO") Тогда
|
||
Для Индекс = 0 По МассивЗначений.Количество() - 1 Цикл
|
||
ДобавитьЭлементШтрихкодовВТаблицу(ТаблицаДанных, МассивЗначений.Получить(Индекс));
|
||
КонецЦикла;
|
||
ИначеЕсли МассивЗначений <> Неопределено Тогда
|
||
ДобавитьЭлементШтрихкодовВТаблицу(ТаблицаДанных, МассивЗначений);
|
||
КонецЕсли;
|
||
|
||
ОчиститьШтрихкодыНоменклатурыИКарточекМП();
|
||
|
||
КоличествоЗаписано = 0;
|
||
Если ТаблицаДанных.Количество() > 0 Тогда
|
||
Адрес = ПоместитьВоВременноеХранилище(ТаблицаДанных);
|
||
Индекс = 0;
|
||
Пока Истина Цикл
|
||
РезультатПорции = ЗаписатьПорциюШтрихкодов(Адрес, Индекс, 200);
|
||
КоличествоЗаписано = КоличествоЗаписано + РезультатПорции.Записано;
|
||
Индекс = РезультатПорции.СледующийИндекс;
|
||
Если РезультатПорции.Готово Тогда
|
||
Прервать;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
Если КоличествоЗаписано = 0 Тогда
|
||
Сообщить("GetNom: ответ получен, но штрихкодов для записи нет.");
|
||
Иначе
|
||
Сообщить("Записано штрихкодов: " + Формат(КоличествоЗаписано, "ЧГ=0"));
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ЭтоЭлементОтветаValueProperty(Элемент)
|
||
|
||
Если Элемент = Неопределено Тогда
|
||
Возврат Ложь;
|
||
КонецЕсли;
|
||
Попытка
|
||
Свойства = Элемент.Property;
|
||
Возврат Свойства <> Неопределено;
|
||
Исключение
|
||
Возврат Ложь;
|
||
КонецПопытки;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ОчиститьШтрихкодыНоменклатурыИКарточекМП()
|
||
|
||
// Полная очистка регистра (используется только для номенклатуры/карточек МП)
|
||
НаборЗаписей = РегистрыСведений.ШтрихкодыУпаковок.СоздатьНаборЗаписей();
|
||
НаборЗаписей.Записать();
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ЗаписатьШтрихкодыИзXDTO(Элемент)
|
||
|
||
ТаблицаДанных = НовыйТаблицаДанныхШтрихкодов();
|
||
ДобавитьЭлементШтрихкодовВТаблицу(ТаблицаДанных, Элемент);
|
||
Если ТаблицаДанных.Количество() = 0 Тогда
|
||
Возврат 0;
|
||
КонецЕсли;
|
||
|
||
Адрес = ПоместитьВоВременноеХранилище(ТаблицаДанных);
|
||
РезультатПорции = ЗаписатьПорциюШтрихкодов(Адрес, 0, 1000);
|
||
Возврат РезультатПорции.Записано;
|
||
|
||
КонецФункции
|
||
|
||
Функция ОбеспечитьНоменклатуруПоUUID(НоменклатураUUID, Наименование) Экспорт
|
||
|
||
Если Не ЭтоUUID(НоменклатураUUID) Тогда
|
||
Возврат Справочники.Номенклатура.ПустаяСсылка();
|
||
КонецЕсли;
|
||
|
||
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(НоменклатураUUID));
|
||
ОбъектНоменклатуры = Ссылка.ПолучитьОбъект();
|
||
Если ОбъектНоменклатуры = Неопределено Тогда
|
||
ОбъектНоменклатуры = Справочники.Номенклатура.СоздатьЭлемент();
|
||
ОбъектНоменклатуры.УстановитьСсылкуНового(Ссылка);
|
||
ОбъектНоменклатуры.Наименование = ?(ЗначениеЗаполнено(Наименование), Наименование, "Номенклатура " + Лев(НоменклатураUUID, 8));
|
||
ОбъектНоменклатуры.Записать();
|
||
ИначеЕсли ЗначениеЗаполнено(Наименование) И ОбъектНоменклатуры.Наименование <> Наименование Тогда
|
||
ОбъектНоменклатуры.Наименование = Наименование;
|
||
ОбъектНоменклатуры.Записать();
|
||
КонецЕсли;
|
||
|
||
Возврат Ссылка;
|
||
|
||
КонецФункции
|
||
|
||
Функция ОбеспечитьКарточкуМППоUUID(КарточкаUUID, Наименование, НоменклатураUUID = "") Экспорт
|
||
|
||
Если Не ЭтоUUID(КарточкаUUID) Тогда
|
||
Возврат Справочники.КарточкиМП.ПустаяСсылка();
|
||
КонецЕсли;
|
||
|
||
Ссылка = Справочники.КарточкиМП.ПолучитьСсылку(Новый УникальныйИдентификатор(КарточкаUUID));
|
||
ОбъектКарточки = Ссылка.ПолучитьОбъект();
|
||
Если ОбъектКарточки = Неопределено Тогда
|
||
ОбъектКарточки = Справочники.КарточкиМП.СоздатьЭлемент();
|
||
ОбъектКарточки.УстановитьСсылкуНового(Ссылка);
|
||
КонецЕсли;
|
||
|
||
Если ЗначениеЗаполнено(Наименование) Тогда
|
||
ОбъектКарточки.Наименование = Наименование;
|
||
ИначеЕсли Не ЗначениеЗаполнено(ОбъектКарточки.Наименование) Тогда
|
||
ОбъектКарточки.Наименование = "Карточка " + Лев(КарточкаUUID, 8);
|
||
КонецЕсли;
|
||
|
||
Если ЭтоUUID(НоменклатураUUID) Тогда
|
||
НоменклатураСсылка = ОбеспечитьНоменклатуруПоUUID(НоменклатураUUID, "");
|
||
Попытка
|
||
ОбъектКарточки.Номенклатура = НоменклатураСсылка;
|
||
Исключение
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
|
||
ОбъектКарточки.Записать();
|
||
Возврат Ссылка;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЭтоUUID(Знач СтрокаUUID)
|
||
|
||
СтрокаUUID = СокрЛП(Строка(СтрокаUUID));
|
||
Если СтрДлина(СтрокаUUID) <> 36 Тогда
|
||
Возврат Ложь;
|
||
КонецЕсли;
|
||
Попытка
|
||
Проверка = Новый УникальныйИдентификатор(СтрокаUUID);
|
||
Возврат Истина;
|
||
Исключение
|
||
Возврат Ложь;
|
||
КонецПопытки;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ЗагрузитьОстаткиПоЯчейкамИзОтвета(XmlОтвет) Экспорт
|
||
|
||
Попытка
|
||
ОбXDTO = ПрочитатьReturnОперацииТСД(XmlОтвет, "GetStockInCellsResponse");
|
||
Исключение
|
||
Сообщить("Ошибка GetStockInCells: " + ОписаниеОшибки() + Символы.ПС + XmlОтвет);
|
||
Возврат;
|
||
КонецПопытки;
|
||
|
||
НаборОчистки = РегистрыСведений.ЗапасыНаСкладах.СоздатьНаборЗаписей();
|
||
НаборОчистки.Прочитать();
|
||
НаборОчистки.Очистить();
|
||
НаборОчистки.Записать();
|
||
|
||
Если ОбXDTO = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
МассивЗначений = МассивValueИзОтветаТСД(ОбXDTO);
|
||
|
||
Если ТипЗнч(МассивЗначений) = Тип("СписокXDTO") Тогда
|
||
Для Индекс = 0 По МассивЗначений.Количество() - 1 Цикл
|
||
ЗаписатьОстатокИзXDTO(МассивЗначений.Получить(Индекс));
|
||
КонецЦикла;
|
||
ИначеЕсли МассивЗначений <> Неопределено Тогда
|
||
ЗаписатьОстатокИзXDTO(МассивЗначений);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗаписатьОстатокИзXDTO(Элемент)
|
||
|
||
Если Элемент = Неопределено Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
СкладUUID = ЗначениеСвойстваXDTO(Элемент, 0);
|
||
ЯчейкаUUID = ЗначениеСвойстваXDTO(Элемент, 1);
|
||
НоменклатураUUID = ЗначениеСвойстваXDTO(Элемент, 2);
|
||
ПартияUUID = ЗначениеСвойстваXDTO(Элемент, 3);
|
||
КоличествоСтр = ЗначениеСвойстваXDTO(Элемент, 4);
|
||
|
||
Если Не ЗначениеЗаполнено(СкладUUID) Или Не ЗначениеЗаполнено(ЯчейкаUUID)
|
||
Или Не ЗначениеЗаполнено(НоменклатураUUID) Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
МенеджерЗаписи = РегистрыСведений.ЗапасыНаСкладах.СоздатьМенеджерЗаписи();
|
||
МенеджерЗаписи.СтруктурнаяЕдиница = Справочники.СтруктурныеЕдиницы.ПолучитьСсылку(Новый УникальныйИдентификатор(СкладUUID));
|
||
МенеджерЗаписи.Ячейка = Справочники.Ячейки.ПолучитьСсылку(Новый УникальныйИдентификатор(ЯчейкаUUID));
|
||
МенеджерЗаписи.Номенклатура = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(НоменклатураUUID));
|
||
Если ЗначениеЗаполнено(ПартияUUID) И ПартияUUID <> "00000000-0000-0000-0000-000000000000" Тогда
|
||
МенеджерЗаписи.Партия = Справочники.ПартииНоменклатуры.ПолучитьСсылку(Новый УникальныйИдентификатор(ПартияUUID));
|
||
КонецЕсли;
|
||
Попытка
|
||
МенеджерЗаписи.Количество = Число(КоличествоСтр);
|
||
Исключение
|
||
МенеджерЗаписи.Количество = 0;
|
||
КонецПопытки;
|
||
МенеджерЗаписи.Записать();
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ЗначениеСвойстваXDTO(Элемент, Индекс)
|
||
|
||
Попытка
|
||
Возврат Строка(Элемент.Property.Получить(Индекс).Value);
|
||
Исключение
|
||
КонецПопытки;
|
||
Возврат "";
|
||
|
||
КонецФункции
|
||
|
||
// return операции Get* имеет тип string: внутри — XML с узлами Value/Property,
|
||
// либо уже объект XDTO (как у части ответов). Нормализуем оба варианта.
|
||
Функция ПрочитатьReturnОперацииТСД(XmlОтвет, ИмяResponse) Экспорт
|
||
|
||
Чтение = Новый ЧтениеXML;
|
||
Чтение.УстановитьСтроку(XmlОтвет);
|
||
Фабрика = Новый ФабрикаXDTO;
|
||
Тело = Фабрика.ПрочитатьXML(Чтение).Body[ИмяResponse].return;
|
||
|
||
Если Тело = Неопределено Тогда
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
|
||
Если ТипЗнч(Тело) = Тип("Строка") Тогда
|
||
Если Не ЗначениеЗаполнено(СокрЛП(Тело)) Тогда
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
ЧтениеВложенный = Новый ЧтениеXML;
|
||
ЧтениеВложенный.УстановитьСтроку(Тело);
|
||
Возврат Фабрика.ПрочитатьXML(ЧтениеВложенный);
|
||
КонецЕсли;
|
||
|
||
Возврат Тело;
|
||
|
||
КонецФункции
|
||
|
||
Функция МассивValueИзОтветаТСД(ОбXDTO)
|
||
|
||
Если ОбXDTO = Неопределено Тогда
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
|
||
Попытка
|
||
Возврат ОбXDTO.Value;
|
||
Исключение
|
||
Возврат ОбXDTO;
|
||
КонецПопытки;
|
||
|
||
КонецФункции
|
||
|
||
Функция ВыгрузитьПеремещениеПоЯчейкам(СсылкаДокумента) Экспорт
|
||
|
||
Док = СсылкаДокумента.ПолучитьОбъект();
|
||
Если Док = Неопределено Тогда
|
||
Возврат "Документ не найден";
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(Док.Организация) Тогда
|
||
Возврат "Не заполнена организация";
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(Док.Автор) Тогда
|
||
Возврат "Не заполнен автор";
|
||
КонецЕсли;
|
||
|
||
HTTPСоединение = ПолучитьHTTPСоединениеТСД();
|
||
Заголовки = Новый Соответствие;
|
||
Заголовки.Вставить("Content-Type", "application/xml_request");
|
||
|
||
ТелоЗапроса = ПолучитьОбщийМакет("ШаблонSetDocCellMove").ТекущаяОбласть.Текст;
|
||
ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$ДокСсылка", Строка(Док.Ссылка.УникальныйИдентификатор()));
|
||
ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$Дата", Формат(Док.Дата, "ДФ=""гггг-ММ-дд'T'ЧЧ:мм:сс"""));
|
||
ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$Номер", Док.Номер);
|
||
ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$СкладСсылка", Строка(Док.СтруктурнаяЕдиница.УникальныйИдентификатор()));
|
||
Если Док.ВидОперации = Перечисления.ВидыОперацийПеремещенияПоЯчейкам.ИзНесколькихВОдну Тогда
|
||
ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$ВидОперации", "ИзНесколькихВОдну");
|
||
Иначе
|
||
ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$ВидОперации", "ИзОднойВНесколько");
|
||
КонецЕсли;
|
||
ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$АвторСсылка",
|
||
?(ЗначениеЗаполнено(Док.Автор), Строка(Док.Автор.УникальныйИдентификатор()),
|
||
"00000000-0000-0000-0000-000000000000"));
|
||
Если ЗначениеЗаполнено(Док.Организация) Тогда
|
||
ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$ОрганизацияСсылка",
|
||
Строка(Док.Организация.УникальныйИдентификатор()));
|
||
ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$ОрганизацияНаименование",
|
||
XMLСтрока(Строка(Док.Организация)));
|
||
Иначе
|
||
ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$ОрганизацияСсылка",
|
||
"00000000-0000-0000-0000-000000000000");
|
||
ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$ОрганизацияНаименование", "Организация");
|
||
КонецЕсли;
|
||
// Обязательное свойство XDTO поступления ТМУ (в ТСД контрагента нет)
|
||
ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$КонтрагентСсылка", "00000000-0000-0000-0000-000000000000");
|
||
|
||
// Сортировка по ячейке-источнику: в УНФ одна ячейка-источник = один документ
|
||
ТаблицаСтрок = Новый ТаблицаЗначений;
|
||
ТаблицаСтрок.Колонки.Добавить("ЯчейкаИсточник");
|
||
ТаблицаСтрок.Колонки.Добавить("Ячейка");
|
||
ТаблицаСтрок.Колонки.Добавить("Номенклатура");
|
||
ТаблицаСтрок.Колонки.Добавить("Партия");
|
||
ТаблицаСтрок.Колонки.Добавить("Количество");
|
||
ТаблицаСтрок.Колонки.Добавить("ЕдиницаИзмерения");
|
||
ТаблицаСтрок.Колонки.Добавить("Штрихкод");
|
||
ТаблицаСтрок.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число"));
|
||
|
||
НомерСтроки = 0;
|
||
Для Каждого СтрокаТЧ Из Док.Запасы Цикл
|
||
НомерСтроки = НомерСтроки + 1;
|
||
НовСтр = ТаблицаСтрок.Добавить();
|
||
НовСтр.ЯчейкаИсточник = СтрокаТЧ.ЯчейкаИсточник;
|
||
НовСтр.Ячейка = СтрокаТЧ.Ячейка;
|
||
НовСтр.Номенклатура = СтрокаТЧ.Номенклатура;
|
||
НовСтр.Партия = СтрокаТЧ.Партия;
|
||
НовСтр.Количество = СтрокаТЧ.Количество;
|
||
НовСтр.ЕдиницаИзмерения = СтрокаТЧ.ЕдиницаИзмерения;
|
||
НовСтр.Штрихкод = СтрокаТЧ.Штрихкод;
|
||
НовСтр.НомерСтроки = НомерСтроки;
|
||
КонецЦикла;
|
||
ТаблицаСтрок.Сортировать("ЯчейкаИсточник, Номенклатура, Ячейка");
|
||
|
||
СтрокиЗапроса = "";
|
||
НомерСтрокиВыгрузки = 0;
|
||
Для Каждого СтрокаТЧ Из ТаблицаСтрок Цикл
|
||
НомерСтрокиВыгрузки = НомерСтрокиВыгрузки + 1;
|
||
ТелоСтроки = ПолучитьОбщийМакет("ШаблонSetDocCellMoveLine").ТекущаяОбласть.Текст;
|
||
ТелоСтроки = СтрЗаменить(ТелоСтроки, "$Строка", Формат(НомерСтрокиВыгрузки, "ЧГ=0"));
|
||
ТелоСтроки = СтрЗаменить(ТелоСтроки, "$НоменклатураСсылка", Строка(СтрокаТЧ.Номенклатура.УникальныйИдентификатор()));
|
||
ТелоСтроки = СтрЗаменить(ТелоСтроки, "$НоменклатураНаименование", XMLСтрока(Строка(СтрокаТЧ.Номенклатура)));
|
||
ТелоСтроки = СтрЗаменить(ТелоСтроки, "$ПартияСсылка",
|
||
?(ЗначениеЗаполнено(СтрокаТЧ.Партия), Строка(СтрокаТЧ.Партия.УникальныйИдентификатор()),
|
||
"00000000-0000-0000-0000-000000000000"));
|
||
ТелоСтроки = СтрЗаменить(ТелоСтроки, "$Количество", Формат(СтрокаТЧ.Количество, "ЧРД=.; ЧГ=0"));
|
||
Если ЗначениеЗаполнено(СтрокаТЧ.ЕдиницаИзмерения) Тогда
|
||
ТелоСтроки = СтрЗаменить(ТелоСтроки, "$ЕдСсылка", Строка(СтрокаТЧ.ЕдиницаИзмерения.УникальныйИдентификатор()));
|
||
Попытка
|
||
ТелоСтроки = СтрЗаменить(ТелоСтроки, "$КодКлас", Строка(СтрокаТЧ.ЕдиницаИзмерения.Код));
|
||
ТелоСтроки = СтрЗаменить(ТелоСтроки, "$НаимКлас", Строка(СтрокаТЧ.ЕдиницаИзмерения.Наименование));
|
||
Исключение
|
||
ТелоСтроки = СтрЗаменить(ТелоСтроки, "$КодКлас", "796");
|
||
ТелоСтроки = СтрЗаменить(ТелоСтроки, "$НаимКлас", XMLСтрока(Строка(СтрокаТЧ.ЕдиницаИзмерения)));
|
||
КонецПопытки;
|
||
Иначе
|
||
ТелоСтроки = СтрЗаменить(ТелоСтроки, "$ЕдСсылка", "00000000-0000-0000-0000-000000000000");
|
||
ТелоСтроки = СтрЗаменить(ТелоСтроки, "$КодКлас", "796");
|
||
ТелоСтроки = СтрЗаменить(ТелоСтроки, "$НаимКлас", "шт");
|
||
КонецЕсли;
|
||
ТелоСтроки = СтрЗаменить(ТелоСтроки, "$типз", "СобственныеТовары");
|
||
ТелоСтроки = СтрЗаменить(ТелоСтроки, "$ЯчейкаИсточникСсылка",
|
||
?(ЗначениеЗаполнено(СтрокаТЧ.ЯчейкаИсточник), Строка(СтрокаТЧ.ЯчейкаИсточник.УникальныйИдентификатор()),
|
||
"00000000-0000-0000-0000-000000000000"));
|
||
ТелоСтроки = СтрЗаменить(ТелоСтроки, "$ЯчейкаСтрокиСсылка",
|
||
?(ЗначениеЗаполнено(СтрокаТЧ.Ячейка), Строка(СтрокаТЧ.Ячейка.УникальныйИдентификатор()),
|
||
"00000000-0000-0000-0000-000000000000"));
|
||
ТелоСтроки = СтрЗаменить(ТелоСтроки, "$Штрихкод", XMLСтрока(СтрокаТЧ.Штрихкод));
|
||
СтрокиЗапроса = СтрокиЗапроса + ТелоСтроки;
|
||
КонецЦикла;
|
||
|
||
ТелоЗапроса = СтрЗаменить(ТелоЗапроса, "$Запасы", СтрокиЗапроса);
|
||
HTTPЗапрос = Новый HTTPЗапрос("/unf/ws/tsdsync", Заголовки);
|
||
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса);
|
||
РезультатЗапроса = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
|
||
ТекстОтвета = РезультатЗапроса.ПолучитьТелоКакСтроку();
|
||
|
||
Док.Статус = Перечисления.Статус.Отправлен;
|
||
Док.Записать();
|
||
|
||
Возврат ТекстОтвета;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|