() Prooa,
Функция СобратьПакет_Query_SM(НомерПакета, ИдентификаторСМС)
Сообщить("Начато: СобратьПакет_Query_SM");
ОтправительСМС = Ящик.ОтправительПоУмолчанию;
//ОтправительСМС = "";
ДлинаИдентификатора = СтрДлина(ИдентификаторСМС);
Сообщить("-"+ИдентификаторСМС+"-");
ДлинаИмениОтправителя = СтрДлина(СокрЛП(ОтправительСМС));
ДлинаПакета = 20 + ДлинаИдентификатора + ДлинаИмениОтправителя;
МатрицаДанных = Новый COMSafeArray("VT_UI1",ДлинаПакета);
//Заголовок
МатрицаДанных.SetValue(0, 0);
МатрицаДанных.SetValue(1, 0);
МатрицаДанных.SetValue(2, 0);
МатрицаДанных.SetValue(3, ДлинаПакета); //общая длина пакета command_length
МатрицаДанных.SetValue(4, 0);
МатрицаДанных.SetValue(5, 0);
МатрицаДанных.SetValue(6, 0);
МатрицаДанных.SetValue(7, 3); //command_id 3=query_sm
МатрицаДанных.SetValue(8, 0);
МатрицаДанных.SetValue(9, 0);
МатрицаДанных.SetValue(10, 0);
МатрицаДанных.SetValue(11, 0); //command_status
МатрицаДанных.SetValue(12, 0);
МатрицаДанных.SetValue(13, 0);
МатрицаДанных.SetValue(14, 0);
МатрицаДанных.SetValue(15, НомерПакета); //номер пакета
//мНомерПакета = мНомерПакета + 1;
//message_id
Индекс = 16;
Для Сч = 1 По ДлинаИдентификатора Цикл
МатрицаДанных.SetValue(Индекс, КодСимвола(ИдентификаторСМС, Сч));
Индекс = Индекс + 1;
КонецЦикла;
МатрицаДанных.SetValue(Индекс, 0); Индекс = Индекс + 1;
//message_id
МатрицаДанных.SetValue(Индекс, 0); Индекс = Индекс + 1; //source_addr_ton (5 - буквенно-алфавитный)
МатрицаДанных.SetValue(Индекс, 0); Индекс = Индекс + 1; //source_addr_npi
//source_addr
Для НомерСимвола = 1 По ДлинаИмениОтправителя Цикл
МатрицаДанных.SetValue(Индекс, КодСимвола(ОтправительСМС, НомерСимвола));
Индекс = Индекс+1;
КонецЦикла;
МатрицаДанных.SetValue(Индекс, 0); Индекс = Индекс+1;
//source_addr
Сообщить( "Окончено: СобратьПакет_Query_SM");
Возврат МатрицаДанных;
КонецФункции // СобратьПакет_Query_SM()
Процедура ОбработатьПакет_Query_sm_resp(ВходящийПакет)
//Сообщить("Начато: ОбработатьПакет_Query_sm_resp");
РазмерПакета = ВходящийПакет.GetValue(3);
КодСтатуса = ВходящийПакет.GetValue(РазмерПакета-2);
Индекс = 16;
message_id = "";
Пока Индекс < РазмерПакета Цикл
ТекЗначение = ВходящийПакет.GetValue(Индекс);
Если ТекЗначение = 0 Тогда
Индекс = Индекс + 1;
Прервать;
КонецЕсли;
message_id = message_id + Символ(ВходящийПакет.GetValue(Индекс));
Индекс = Индекс + 1;
КонецЦикла;
final_date = "";
Пока Индекс < РазмерПакета Цикл
ТекЗначение = ВходящийПакет.GetValue(Индекс);
Если ТекЗначение = 0 Тогда
Индекс = Индекс + 1;
Прервать;
КонецЕсли;
final_date = final_date + Символ(ВходящийПакет.GetValue(Индекс));
Индекс = Индекс + 1;
КонецЦикла;
message_state = ВходящийПакет.GetValue(Индекс); Индекс = Индекс + 1;
error_code = ВходящийПакет.GetValue(Индекс);
КонецПроцедуры
Показать