eComm+

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

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

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


delivery_designer_utbas_2_4_0_2

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

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ЧерезTURBO"

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

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

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

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

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

	|   <soapenv:Body>
	|      <tur:GetMessageStatus>
	|           <!--Optional:-->
	|           <tur:MessageId>" + ИдентификаторСообщения + "</tur:MessageId>
	|      </tur:GetMessageStatus>
	|   </soapenv:Body>
	//++
	//Баланс = ПреобразоватьОтвет(ФайлОтвета, "ns1:GetCreditBalanceResult");
	//УдалитьФайлы(ФайлОтвета);

	//Ответ = Неопределено;
	//Запрос = Неопределено;
	//Соединение = Неопределено;

	//Возврат Баланс;

	СтатусДоставки = ПреобразоватьОтвет(ФайлОтвета, "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

	Результат = СоответствиеСтатусов[СтатусСтрокой];
	Возврат ?(Результат = Неопределено, "Ошибка", Результат);
	
КонецФункции

Общая форма "НастройкаОтправкиSMS"

Добавим на форму реквизит «ИмяОтправителя» (Строка)

Метод "ПриЗаписиНаСервере"

	ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Владелец, ЛогинДляОтправкиSMS, "Логин");
	//++
	ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Владелец, ИмяОтправителя, "ИмяОтправителя");
	//--
	УстановитьПривилегированныйРежим(Ложь);

Метод "ПриСозданииНаСервере"

	ПарольИЛогин = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Владелец, "Пароль, Логин, ИмяОтправителя");	//++ eComm+ / Добавлен параметр "ИмяОтправителя"
	УстановитьПривилегированныйРежим(Ложь);
	ЛогинДляОтправкиSMS = ПарольИЛогин.Логин;
	ПарольДляОтправкиSMS = ?(ЗначениеЗаполнено(ПарольИЛогин.Пароль), ЭтотОбъект.УникальныйИдентификатор, "");
	ИмяОтправителя = ПарольИЛогин.ИмяОтправителя; 	//++ eComm+ / Добавлена строка

Общий модуль "ОтправкаSMS"

Метод "НастройкиОтправкиSMS"

	Результат = Новый Структура("Логин, Пароль, Провайдер,ИмяОтправителя");  //++ eComm+
	Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда
		Владелец = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Константа.ПровайдерSMS");
		УстановитьПривилегированныйРежим(Истина);
		ПарольИЛогин = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Владелец, "Пароль,Логин,ИмяОтправителя");//++ eComm+
		УстановитьПривилегированныйРежим(Ложь);
		Результат.Логин = ПарольИЛогин.Логин;
		Результат.Пароль = ПарольИЛогин.Пароль;
		Результат.ИмяОтправителя = ПарольИЛогин.ИмяОтправителя;			//++ eComm+
		Результат.Провайдер =Константы.ПровайдерSMS.Получить();
	КонецЕсли;

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

	НастройкиОтправкиSMS = НастройкиОтправкиSMS();
	
	Если НастройкиОтправкиSMS.Провайдер = Перечисления.ПровайдерыSMS.TURBO Тогда // TURBOSMS
		Результат = ОтправкаSMSЧерезTURBO.ОтправитьSMS(НомераПолучателей, Текст, НастройкиОтправкиSMS.ИмяОтправителя,
		НастройкиОтправкиSMS.Логин, НастройкиОтправкиSMS.Пароль);
Обратите внимание что расписание обновлений справочников необходимо настраивать ТОЛЬКО ПОСЛЕ ПЕРВОНАЧАЛЬНОГО РУЧНОГО ОБНОВЛЕНИЯ СПРАВОЧНИКОВ. Иначе города/отделения/улицы могут задублироваться
delivery_designer_utbas_2_4_0_2.txt · Последнее изменение: 2022/07/26 21:06 — webmaster