Интеграция с интеграцией. YaCRM СДЭК + Розница 2.3
У клиента доработанное под Розницу расширение YaCRM.
Возникла задача при создании накладной отмечать реквизиты статусы доставки заказа.
Для этого нужно отловить момент, когда изменяются данные по заказу в YaCRM.
Для начала определим, где расширение хранит свои данные. Оказывается, в регистре сведений » ДополнительныеСведения», ссылка: e1cib/list/РегистрСведений.ДополнительныеСведения.
Клиент хочет сохранять данные в реквизиты регистра сведений «Состояния доставки заказа покупателя»:
Эти реквизиты предназначены для сервиса 1С:Доставка, который официально не работает с Розницей, но следы которого есть в коде Розницы. Увы, 1С:Доставка работает только с Деловыми Линиями (вроде бы).
Логика работы будет следующая: при записи дополнительных свойств объекта будет соответствующим образом устанавливать состояние доставки.
Свойство «Номер накладной СДЭК»определяем в кэшируемом модуле по имени (для разработчиков):
Функция СвойствоСДЭКНомерНакладной() Экспорт Возврат ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "СДЭКНомерНакладной"); КонецФункции
Расширяем модуль набора записей, процедуру ПередЗаписью регистра сведений «Дополнительные сведения»:
&После("ПередЗаписью") Процедура дор_ПередЗаписью(Отказ, Замещение) //Проверяем и записываем сопутствующее состояние в регистр состояние доставки Если Отказ Тогда Возврат; КонецЕсли; //Проверяем, нужный ли у нас тип Если НЕ ЭтотОбъект.Отбор.Объект.Использование ИЛИ ТипЗнч(ЭтотОбъект.Отбор.Объект.Значение) <> Тип("ДокументСсылка.ЗаказПокупателя") Тогда Возврат; КонецЕсли; ТекЗаказ = ЭтотОбъект.Отбор.Объект.Значение; //Работаем только если есть свойство номера накладной СвойствоСДЭКНомерНакладной = дор_СерверПовт.СвойствоСДЭКНомерНакладной(); Если НЕ ЗначениеЗаполнено(СвойствоСДЭКНомерНакладной) Тогда Возврат; КонецЕсли; //Перебираем и ищем свойства заказа НомерНакладнойСДЭК = ""; Для Каждого МЗ ИЗ ЭтотОбъект Цикл Если МЗ.Свойство = СвойствоСДЭКНомерНакладной Тогда НомерНакладнойСДЭК = СокрЛП(МЗ.Значение); КонецЕсли; КонецЦикла; МЗ = Неопределено; //Если менеджер записи будет задействован, запишем его потом З = Новый Запрос( "ВЫБРАТЬ | Т.Период КАК Период, | Т.ЗаказПокупателя КАК ЗаказПокупателя, | Т.Состояние КАК Состояние |ИЗ | РегистрСведений.СостояниеДоставкиЗаказаПокупателя.СрезПоследних(&дата, ЗаказПокупателя = &ЗаказПокупателя) КАК Т"); З.УстановитьПараметр("Дата", ТекущаяДата()); З.УстановитьПараметр("ЗаказПокупателя", ТекЗаказ); Выборка = З.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда ТекСостояние = Выборка.Состояние; Иначе ТекСостояние = Неопределено; КонецЕсли; Если ТекСостояние = Перечисления.СостоянияДоставкиЗаказаПокупателя.Отгружен Тогда МЗ = РегистрыСведений.СостояниеДоставкиЗаказаПокупателя.СоздатьМенеджерЗаписи(); ЗаполнитьЗначенияСвойств(МЗ, Выборка); МЗ.Прочитать(); ИначеЕсли ТекСостояние = Перечисления.СостоянияДоставкиЗаказаПокупателя.Отменен ИЛИ ТекСостояние = Перечисления.СостоянияДоставкиЗаказаПокупателя.ДоставкаЗавершена Тогда //В таких состояниях ничего не меняем ИначеЕсли НомерНакладнойСДЭК <> "" Тогда //Создаем новое состояние накладной СДЭК МЗ = РегистрыСведений.СостояниеДоставкиЗаказаПокупателя.СоздатьМенеджерЗаписи(); МЗ.ЗаказПокупателя = ТекЗаказ; МЗ.Состояние = Перечисления.СостоянияДоставкиЗаказаПокупателя.Отгружен; МЗ.Период = ТекущаяДата(); КонецЕсли; Если МЗ <> Неопределено Тогда //Устанавливаем номер накладной СДЭК МЗ.ТрекНомер = НомерНакладнойСДЭК; //Устанавливаем/сбрасываем оператора доставки Если МЗ.ОператорДоставки = "СДЭК" И НомерНакладнойСДЭК = "" Тогда МЗ.ОператорДоставки = ""; КонецЕсли; Если НомерНакладнойСДЭК <> "" Тогда МЗ.ОператорДоставки = "СДЭК"; КонецЕсли; МЗ.Записать(); //Сохраняем в базе КонецЕсли; КонецПроцедуры
Проверяем — работает. Трек номер устанавливается и сбрасывается, создается новое состояние «Отгружен» при создании накладной СДЭК:
Таким образом, я впервые повзаимодействовал с расширением, отлавливая результаты его работы в местах, где это расширение изменяет данные конфигурации.
Среда: Розница 2.3.10.61, YaCRM_Cdek 2.5. Объем: 2 час.
Свежие комментарии