eComm+

Модулі для BAS / 1С* - розроблено в Україні!

Инструменты пользователя

Инструменты сайта


delivery_designer_utcup_3_5

Встраивание подсистемы "Новая почта"

1. Объединяем с конфигурацией модуля новой почты 2. Выполняем объединение 3. Пропускаем зависимости

4.1 Если модуль «Новая почта» внедряется совместно с модулями торговых площадок «eComm+» тогда перетаскиваем подсистему «Новая почта» в торговые площадки

Только вместе с «eComm+»

4.2 Если модуль «Новая почта» внедряется самостоятельно (без модулей «eComm+») тогда отображаем подсистему «eComm_СлужбыДоставки» в командном интерфейсе

Только самостоятельно (без «eComm+»)

Редактирование документа “Заказ клиента”

Редактирование формы документа “Заказ клиента”

Добавляем в конце метода “ПриСозданииНаСервере” следующий код

//++ ingenum.com.ua / Торговые площадки
	eCommДоставкаСервер.ЗаказПокупателя_ФормаДокумента_ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
//-- ingenum//

Добавляем в конце модуля формы следующий код

&НаКлиенте
Процедура eComm_ЭкспрессНакладнаяНажатие(Элемент, СтандартнаяОбработка)               	//++ eComm / Службы доставки
	
	Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
		ПоказатьПредупреждение(, НСтр("ru = 'Данные не записаны.
								|Переход к экспресс-накладной возможен только после сохранения заказа';
								|
								|uk = 'Данные не записаны.
								|Перехід до експрес-накладної можливий лише після збереження замовлення'"));
		Возврат;
	КонецЕсли;
	
	Если Элемент.Имя = "eComm_ЭкспрессНакладная_Открыть" Тогда 
		// Это открытие списка накладных
		
		СписокВыбора 		= eCommДоставкаСервер.СписокЭкспрессНакладных(Объект.Ссылка); 
		Если СписокВыбора.Количество() > 1 Тогда
			ОповещениеОВыборе 	= Новый ОписаниеОповещения("ВыполнитьПослеВыбораЗначения", ЭтаФорма, Объект.Ссылка);
			ПоказатьВыборИзМеню(ОповещениеОВыборе, СписокВыбора, Элементы["eComm_ЭкспрессНакладная_Открыть"]);
		ИначеЕсли СписокВыбора.Количество() = 1 Тогда 
			ВыполнитьПослеВыбораЗначения(СписокВыбора[0], Объект.Ссылка);
		Иначе
			// Создадим если ранее накладная не была создана
			ВыполнитьПослеВыбораЗначения(Новый Структура("Значение", Неопределено), Объект.Ссылка);
		КонецЕсли;
		
	ИначеЕсли Элемент.Имя = "eComm_ЭкспрессНакладная_Создать" Тогда 
		// Это создание новой накладной
		ВыполнитьПослеВыбораЗначения(Новый Структура("Значение", Неопределено), Объект.Ссылка);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьПослеВыбораЗначения(ЭлементСпискаВыбора, Заказ) Экспорт            	//++ eComm / Службы доставки

	Если НЕ ЭлементСпискаВыбора = Неопределено Тогда 
		ЗначенияЗаполнения = Новый Структура("ДокументОснование", Заказ);
		ОткрытьФорму("Документ.eComm_ЭкспрессНакладная.ФормаОбъекта", Новый Структура("Ключ, ЗначенияЗаполнения", ЭлементСпискаВыбора.Значение, ЗначенияЗаполнения));
	КонецЕсли;

КонецПроцедуры

Редактирование формы "ФормаСпискаДокументов" документа “Заказ клиента”

Для реквизита «Список» выполняем команду «Настройка списка» и приводим текст запроса к такому виду:

ЕСТЬNULL(ФактОплаты.СуммаОплаты, 0) + ЕСТЬNULL(ФактОплаты.СуммаАванса, 0) КАК СуммаОплатыОборот,
	//++
	,eComm_СтатусыЭкспрессНакладных.ЭкспрессНакладная КАК ЭкспрессНакладная,
	eComm_СтатусыЭкспрессНакладных.ОписаниеСтатуса КАК ОписаниеСтатуса,
	eComm_СтатусыЭкспрессНакладных.СтатусДенежногоПеревода,
	eComm_СтатусыЭкспрессНакладных.ДнейХраненияНаСкладе КАК ДнейХраненияНаСкладе,
	eComm_СтатусыЭкспрессНакладных.НачалоПлатногоХранения,
	ЕСТЬNULL(СообщенияSMS.КоличествоSMS, 0) КАК SMS
	//--

ИЗ
	Документ.ЗаказКлиента КАК ДокументЗаказКлиента
		//++
		{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.eComm_ЭкспрессНакладныеСпискаЗаказов КАК eComm_ЭкспрессНакладныеСпискаЗаказов
			ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.eComm_СтатусыЭкспрессНакладных КАК eComm_СтатусыЭкспрессНакладных
			ПО eComm_ЭкспрессНакладныеСпискаЗаказов.ЭкспрессНакладная = eComm_СтатусыЭкспрессНакладных.ЭкспрессНакладная
		ПО eComm_ЭкспрессНакладныеСпискаЗаказов.ДокументОснование = ДокументЗаказКлиента.Ссылка}
		{ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СообщениеSMS.Ссылка) КАК КоличествоSMS,
			СообщениеSMS.ВзаимодействиеОснование КАК ДокОснование
		ИЗ
			Документ.СообщениеSMS КАК СообщениеSMS
		ГДЕ
			СообщениеSMS.ПометкаУдаления = ЛОЖЬ
		СГРУППИРОВАТЬ ПО
			СообщениеSMS.ВзаимодействиеОснование) КАК СообщенияSMS
		ПО ДокументЗаказКлиента.Ссылка = СообщенияSMS.ДокОснование}
		//--

Отобразим добавленные колонки на форме списка

Редактирование роли "Базовые права УТ"

Для роли «Базовые права УТ» добавим право на чтение и просмотр к:

  • регистрам «eComm_СтатусыЭкспрессНакладных», «eComm_ЭкспрессНакладныеСпискаЗаказов»
  • документу «eComm_ЭкспрессНакладная»

Редактирование формы документа "СообщениеSMS"

Метод "ОтправитьВыполнить"

Приведем код к следующему виду:

	Если ОтправленоУспешно Тогда
		Оповестить("СообщениеSMSОтправлено");     //++
		Закрыть();
	КонецЕсли;

Расширяем определяемый тип "ПредметШаблонаСообщения" типом "ДокументСсылка.eComm_ЭкспрессНакладная"

Редактирование типа реквизита "ВзаимодействиеОснование" документа "СообщениеSMS"

  • Дополним реквизит документа «ВзаимодействиеОснование» типом «ДокументСсылка.ЗаказКлиента»
  • Дополним реквизит формы элемента «ВзаимодействиеОснование» документа «СообщениеSMS» типом «ДокументСсылка.ЗаказКлиента»

Исправление ошибок подсистемы "Отправка SMS TURBO"

Если Вы используете провайдера TURBO SMS, тогда Вам, вероятно, понадобится исправить ошибки типовой конфигурации.

Редактирование табличной части "Адресаты" документа "СообщениеSMS"

В реквизите табличной части «Адресаты» документа «СообщениеSMS» увеличиваем длину реквизита «ИдентификаторСообщения» до 36 символов

Редактирование модуля "ОтправкаSMS"

Метод "ОтправитьSMS"

Приведем код к следующему виду:

	УстановитьПривилегированныйРежим(Истина);
	НастройкиОтправкиSMS = НастройкиОтправкиSMS();
	УстановитьПривилегированныйРежим(Ложь);
	
	//++
	//Если ИмяОтправителя = Неопределено Тогда
	Если ИмяОтправителя = Неопределено ИЛИ ИмяОтправителя = " " Тогда 
	//--
		ИмяОтправителя = НастройкиОтправкиSMS.ИмяОтправителя;
	КонецЕсли;

Редактирование модуля "ОтправкаSMSЧерезTURBO"

Метод "ОтправитьSMS"

Приведем код к следующему виду:

				Ответ = ПреобразоватьОтвет(ФайлОтвета, "ns1:ResultArray");
				//ИдентификаторСообщения = Ответ.id;
				
				//++
				//Результат.ОтправленныеСообщения.Добавить(Новый Структура("НомерПолучателя,ИдентификаторСообщения",	
				//												  НомерПолучателя));
				//
				//Если ЗначениеЗаполнено(Ответ) Тогда
				//	Результат.ОписаниеОшибки = Результат.ОписаниеОшибки 
				//	+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='SMS на номер %1';uk='SMS на номер %1'"), Элемент)
				//	+ ": " + Ответ
				//	+ Символы.ПС;
				//КонецЕсли;
				Попытка
					ИдентификаторСообщения = Новый УникальныйИдентификатор(Ответ);
					УспешноОтправлено = Истина;
				Исключение
					УспешноОтправлено = Ложь;
				КонецПопытки;
				
				Если УспешноОтправлено Тогда 
					Результат.ОтправленныеСообщения.Добавить(Новый Структура("НомерПолучателя,ИдентификаторСообщения",	
																  Элемент, Ответ));
				Иначе
					Результат.ОписаниеОшибки = Результат.ОписаниеОшибки 
												+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='SMS на номер %1';uk='SMS на номер %1'"), Элемент)
												+ ": " + Ответ
												+ Символы.ПС;											  
				КонецЕсли;												  
				//--

Метод "СтатусДоставки"

Заменим метод «Статуст доставки» на приведенный ниже:

Функция СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS) Экспорт              // eComm
	
	Авторизация = АвторизацияНаСайте(НастройкиОтправкиSMS.Логин, НастройкиОтправкиSMS.Пароль);
	
	sXML =
	"<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:tur=""http://turbosms.in.ua/api/Turbo"">
	|   <soapenv:Header/>
	|   <soapenv:Body>
	|      <tur:GetMessageStatus>
	|           <!--Optional:-->
	|           <tur:MessageId>" + ИдентификаторСообщения + "</tur:MessageId>
	|      </tur:GetMessageStatus>
	|   </soapenv:Body>
	|</soapenv:Envelope>";

	Соединение = Новый HTTPСоединение("turbosms.in.ua", 80);
	Заголовки = Новый Соответствие();
	Заголовки.Вставить("COOKIE", Авторизация);
	Запрос = Новый HTTPЗапрос("/api/soap.html", Заголовки);
	Запрос.УстановитьТелоИзСтроки(sXML);
	ФайлОтвета = ПолучитьИмяВременногоФайла();
	Ответ = Соединение.ОтправитьДляОбработки(Запрос, ФайлОтвета);
	Если Ответ.КодСостояния <> 200 Тогда
		Возврат Ответ.КодСостояния;
	КонецЕсли;

	СтатусДоставки = ПреобразоватьОтвет(ФайлОтвета, "ns1:GetMessageStatusResult");
	УдалитьФайлы(ФайлОтвета);
		
	Возврат СтатусДоставкиSMS(СтатусДоставки);

КонецФункции

Метод "ПреобразоватьОтвет"

Приведем код к следующему виду:

			Если СокрЛП(ЧтениеХМЛ.Имя) <> Тег и ЧтениеХМЛ.ТипУзла <> ТипУзлаXML.Текст Тогда
				Продолжить;
			ИначеЕсли ЧтениеХМЛ.ТипУзла = ТипУзлаXML.Текст и СокрЛП(ЧтениеХМЛ.Имя) = "#text" Тогда
				//++
				//ЗначениеВозврата = СокрЛП(ЧтениеХМЛ.Значение);
				//Прервать;
				Если ЧтениеХМЛ.Значение = "Сообщения успешно отправлены" Тогда 
					Продолжить;
				Иначе
					ЗначениеВозврата = СокрЛП(ЧтениеХМЛ.Значение);
					Прервать;
				КонецЕсли;
				//--
			КонецЕсли;

Добавим метод "СтатусДоставкиSMS" в конце модуля

Функция СтатусДоставкиSMS(СтатусСтрокой)
	
	//Сообщение с ID X не найдено
	//Не достаточно параметров для выполнения функции
	//Вы не авторизированы
	//Отправлено
	//В очереди
	//Сообщение передано в мобильную сеть
	//Сообщение доставлено получателю	
	//Истек срок сообщения
	//Удалено оператором
	//Не доставлено
	//Сообщение доставлено на сервер
	//Отклонено оператором
	//Неизвестный статус
	//Ошибка, сообщение не отправлено
	//Не достаточно кредитов на счете
	//Отправка отменена
	//Отправка приостановлена
	//Удалено пользователем
	
	СоответствиеСтатусов = Новый Соответствие;
	СоответствиеСтатусов.Вставить(""									, "НеОтправлялось");
    СоответствиеСтатусов.Вставить("Отправка приостановлена"				, "НеОтправлялось"); 		// SCHEDULED
    СоответствиеСтатусов.Вставить("В очереди"							, "Отправляется");   		// ENROUTE
	СоответствиеСтатусов.Вставить("Сообщение передано в мобильную сеть"	, "Отправляется");   		// ENROUTE
	СоответствиеСтатусов.Вставить("Сообщение доставлено на сервер"		, "Отправляется");   		// ENROUTE
    СоответствиеСтатусов.Вставить("Сообщение доставлено получателю"		, "Доставлено");     		// DELIVERED
    СоответствиеСтатусов.Вставить("Истек срок сообщения"				, "НеДоставлено");   		// EXPIRED
    СоответствиеСтатусов.Вставить("Отправка отменена"					, "НеДоставлено");  		// DELETED
	СоответствиеСтатусов.Вставить("Удалено пользователем"				, "НеДоставлено");   		// DELETED
    СоответствиеСтатусов.Вставить("Ошибка, сообщение не отправлено"		, "НеДоставлено");   		// UNDELIVERABLE
    СоответствиеСтатусов.Вставить("Отправлено"							, "Отправлено");     		// ACCEPTED
    СоответствиеСтатусов.Вставить("Неизвестный статус"					, "Ошибка"); 				// UNKNOWN
    СоответствиеСтатусов.Вставить("Отклонено оператором"				, "НеОпознаноПровайдером"); // REJECTED
    СоответствиеСтатусов.Вставить("Удалено оператором"					, "НеОпознаноПровайдером"); // DISCARDED
    СоответствиеСтатусов.Вставить("Не доставлено"						, "НеДоставлено");   		// SENDING
    СоответствиеСтатусов.Вставить("Не достаточно кредитов на счете"		, "НеДоставлено");   		// NOT_SUPPORTED
    СоответствиеСтатусов.Вставить("Вы не авторизированы"				, "НеДоставлено");   		// WRONG_ALPHANAME
    СоответствиеСтатусов.Вставить("Не достаточно параметров для выполнения функции", "НеДоставлено");   // WRONG_ALPHANAME_RETURNED

	Результат = СоответствиеСтатусов[СтатусСтрокой];
	Возврат ?(Результат = Неопределено, "Ошибка", Результат);
	
КонецФункции
Обратите внимание что расписание обновлений справочников необходимо настраивать ТОЛЬКО ПОСЛЕ ПЕРВОНАЧАЛЬНОГО РУЧНОГО ОБНОВЛЕНИЯ СПРАВОЧНИКОВ. Иначе города/отделения/улицы могут задублироваться
delivery_designer_utcup_3_5.txt · Последнее изменение: 2025/03/13 16:29 — webmaster