Зачастую многие, кто использует интернет магазин на CMS Битрикс, просят реализовать выгрузку старой цены на сайт. В свою очередь это порождает работу для отдела маркетинга в рамках фиксации старых цен или же побуждает отдел разработки придумывать какой-то алгоритм для автоматической фиксации старой цены, что бывает намного чаще. Вот и мне пришлось придумать механизм для решения этой задачи. Я предлагаю поступить следующим образом:
На борту имеем:
- 1С Управление торговлей ред. 11.2.2.119
- Модуль обмена с сайтом Битрикс 6.0.3.4
(см. https://1c.1c-bitrix.ru/ecommerce/download.php — тут доступные модули обмена)
Сначала идем ОбщиеМодули. Б_ОбменССайтомСерверВыгрузкаДанных и находим следующую функцию:
«СформироватьВременныеТаблицыПоИнформацииОТоварахПакета»
В ней ищем следующий текст запроса:
Запрос по ценам типовой
ЗапросПоЦенам = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СоглашениеШапка.Ссылка КАК Соглашение,
| СоглашениеШапка.ИдентификаторСоглашения,
| СоглашениеТовары.Упаковка КАК Упаковка,
| ВЫБОР
| КОГДА СоглашениеТовары.Упаковка.Б_Идентификатор = """"
| ТОГДА СоглашениеТовары.Упаковка.Ссылка
| ИНАЧЕ СоглашениеТовары.Упаковка.Б_Идентификатор
| КОНЕЦ КАК ИдентификаторУпаковки,
| СоглашениеТовары.Упаковка.Числитель КАК
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ ВремЦеныПоСоглашениям
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ ВремЦеныСрезПоследних";
И меняем его на запрос который позволит нам получить информацию по старой цене в рамках одного вида цен который используется в типовом соглашении для интеграции с Битрикс:
Запрос по ценам новая версия
ЗапросПоЦенам = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СоглашениеШапка.Ссылка КАК Соглашение,
| СоглашениеШапка.ИдентификаторСоглашения,
| СоглашениеТовары.Упаковка КАК Упаковка,
| ВЫБОР
| КОГДА СоглашениеТовары.Упаковка.Б_Идентификатор = """"
| ТОГДА СоглашениеТовары.Упаковка.Ссылка
| ИНАЧЕ СоглашениеТовары.Упаковка.Б_Идентификатор
| КОНЕЦ КАК ИдентификаторУпаковки,
| СоглашениеТовары.Упаковка.Числитель КАК КоэффициентУпаковкиСоглашения,
| СоглашениеШапка.НалогообложениеНДС КАК НалогообложениеНДС,
| СоглашениеШапка.ЦенаВключаетНДС КАК ЦенаВключаетНДС,
| СоглашениеШапка.Валюта КАК ВалютаСоглашения,
| ВЫБОР
| КОГДА ЕСТЬNULL(СоглашениеТовары.Цена, 0) > 0
| ТОГДА ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)
| КОГДА СоглашениеТовары.ВидЦены <> ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)
| И СоглашениеТовары.ВидЦены ЕСТЬ НЕ NULL
| ТОГДА СоглашениеТовары.ВидЦены
| КОГДА (СоглашениеТовары.ВидЦены = ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)
| ИЛИ СоглашениеТовары.ВидЦены ЕСТЬ NULL)
| И СоглашениеЦеновыеГруппы.ВидЦен ЕСТЬ НЕ NULL
| И СоглашениеЦеновыеГруппы.ВидЦен <> ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)
| ТОГДА СоглашениеЦеновыеГруппы.ВидЦен
| КОГДА (СоглашениеТовары.ВидЦены = ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)
| ИЛИ СоглашениеТовары.ВидЦены ЕСТЬ NULL)
| И (СоглашениеЦеновыеГруппы.ВидЦен ЕСТЬ NULL
| ИЛИ СоглашениеЦеновыеГруппы.ВидЦен = ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка))
| И СоглашениеШапка.ВидЦен <> ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)
| ТОГДА СоглашениеШапка.ВидЦен
| КОНЕЦ КАК ВидЦены,
| СоглашениеШапка.ИдентификаторВидаЦены,
| ЕСТЬNULL(СоглашениеТовары.Цена, 0) КАК Цена,
| ВремНоменклатураСХарактеристиками.Номенклатура,
| ВремНоменклатураСХарактеристиками.ИдентификаторНоменклатуры,
| ВремНоменклатураСХарактеристиками.Характеристика,
| ВремНоменклатураСХарактеристиками.ИдентификаторХарактеристики,
| ВремНоменклатураСХарактеристиками.ЕдиницаИзмерения
|ПОМЕСТИТЬ ВремЦеныПоСоглашениям
|ИЗ
| ВремНоменклатураСХарактеристиками КАК ВремНоменклатураСХарактеристиками
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВремСоглашения КАК СоглашениеШапка
| ПО (ИСТИНА)
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СоглашенияСКлиентами.Товары КАК СоглашениеТовары
| ПО (СоглашениеШапка.Ссылка = СоглашениеТовары.Ссылка)
| И ВремНоменклатураСХарактеристиками.Номенклатура = СоглашениеТовары.Номенклатура
| И ВремНоменклатураСХарактеристиками.Характеристика = СоглашениеТовары.Характеристика
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СоглашенияСКлиентами.ЦеновыеГруппы КАК СоглашениеЦеновыеГруппы
| ПО ВремНоменклатураСХарактеристиками.ЦеноваяГруппа = СоглашениеЦеновыеГруппы.ЦеноваяГруппа
| И (СоглашениеШапка.Ссылка = СоглашениеЦеновыеГруппы.Ссылка)
|
|ИНДЕКСИРОВАТЬ ПО
| ВидЦены
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЦеныСрезПоследних.Номенклатура,
| ЦеныСрезПоследних.ВидЦены,
| ЦеныСрезПоследних.Характеристика,
| ЦеныСрезПоследних.Цена,
| ЦеныСрезПоследних.Упаковка,
| ЦеныСрезПоследних.Валюта
|ПОМЕСТИТЬ ВремЦеныСрезПоследних
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
| ,
| (Номенклатура, Характеристика) В
| (ВЫБРАТЬ
| ВремНоменклатураСХарактеристиками.Номенклатура,
| ВремНоменклатураСХарактеристиками.Характеристика
| ИЗ
| ВремНоменклатураСХарактеристиками КАК ВремНоменклатураСХарактеристиками)) КАК ЦеныСрезПоследних
|
|ИНДЕКСИРОВАТЬ ПО
| ЦеныСрезПоследних.Номенклатура,
| ЦеныСрезПоследних.Характеристика,
| ЦеныСрезПоследних.ВидЦены
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период,
| ЦеныНоменклатуры.Номенклатура,
| ЦеныНоменклатуры.ВидЦены,
| ЦеныНоменклатуры.Характеристика
|ПОМЕСТИТЬ ВремПериодПрошлыхУстановокЦен
|ИЗ
| РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Период КАК Период,
| ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
| ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦены,
| ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика
| ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
| ,
| (Номенклатура, Характеристика) В
| (ВЫБРАТЬ
| ВремНоменклатураСХарактеристиками.Номенклатура,
| ВремНоменклатураСХарактеристиками.Характеристика
| ИЗ
| ВремНоменклатураСХарактеристиками КАК ВремНоменклатураСХарактеристиками)) КАК ЦеныНоменклатурыСрезПоследних) КАК ЦеныНоменклатурыАктуальные
| ПО ЦеныНоменклатуры.Период <> ЦеныНоменклатурыАктуальные.Период
| И ЦеныНоменклатуры.Номенклатура = ЦеныНоменклатурыАктуальные.Номенклатура
| И ЦеныНоменклатуры.ВидЦены = ЦеныНоменклатурыАктуальные.ВидЦены
| И ЦеныНоменклатуры.Характеристика = ЦеныНоменклатурыАктуальные.Характеристика
|ГДЕ
| (ЦеныНоменклатуры.Номенклатура, ЦеныНоменклатуры.Характеристика) В
| (ВЫБРАТЬ
| ВремНоменклатураСХарактеристиками.Номенклатура,
| ВремНоменклатураСХарактеристиками.Характеристика
| ИЗ
| ВремНоменклатураСХарактеристиками КАК ВремНоменклатураСХарактеристиками)
|
|СГРУППИРОВАТЬ ПО
| ЦеныНоменклатуры.Номенклатура,
| ЦеныНоменклатуры.ВидЦены,
| ЦеныНоменклатуры.Характеристика
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЦеныНоменклатуры.Номенклатура,
| ЦеныНоменклатуры.ВидЦены,
| ЦеныНоменклатуры.Характеристика,
| МАКСИМУМ(ЦеныНоменклатуры.Цена) КАК Цена
|ПОМЕСТИТЬ ВремСтараяЦена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВремПериодПрошлыхУстановокЦен КАК ВремПериодПрошлыхУстановокЦен
| ПО ЦеныНоменклатуры.Период = ВремПериодПрошлыхУстановокЦен.Период
| И ЦеныНоменклатуры.Номенклатура = ВремПериодПрошлыхУстановокЦен.Номенклатура
| И ЦеныНоменклатуры.ВидЦены = ВремПериодПрошлыхУстановокЦен.ВидЦены
| И ЦеныНоменклатуры.Характеристика = ВремПериодПрошлыхУстановокЦен.Характеристика
|ГДЕ
| (ЦеныНоменклатуры.Номенклатура, ЦеныНоменклатуры.Характеристика) В
| (ВЫБРАТЬ
| ВремНоменклатураСХарактеристиками.Номенклатура,
| ВремНоменклатураСХарактеристиками.Характеристика
| ИЗ
| ВремНоменклатураСХарактеристиками КАК ВремНоменклатураСХарактеристиками)
|
|СГРУППИРОВАТЬ ПО
| ЦеныНоменклатуры.Номенклатура,
| ЦеныНоменклатуры.ВидЦены,
| ЦеныНоменклатуры.Характеристика
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| ВремЦеныПоСоглашениям.Соглашение КАК Соглашение,
| ВремЦеныПоСоглашениям.ИдентификаторСоглашения,
| ВремЦеныПоСоглашениям.ЦенаВключаетНДС КАК ЦенаВключаетНДС,
| ВремЦеныПоСоглашениям.ВидЦены КАК ВидЦены,
| ВремЦеныПоСоглашениям.ИдентификаторВидаЦены,
| ВремЦеныПоСоглашениям.ВалютаСоглашения КАК ВалютаСоглашения,
| ВЫБОР
| КОГДА ВремЦеныПоСоглашениям.Цена > 0
| ТОГДА ВремЦеныПоСоглашениям.Упаковка
| КОГДА ВремЦеныПоСоглашениям.ВидЦены <> ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)
| И ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) > 0
| ТОГДА ЦеныНоменклатурыСрезПоследних.Упаковка
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| КОНЕЦ КАК Упаковка,
| ВЫБОР
| КОГДА ВремЦеныПоСоглашениям.Цена > 0
| ТОГДА ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)
| КОГДА ВремЦеныПоСоглашениям.ВидЦены <> ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)
| И ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) > 0
| ТОГДА ЦеныНоменклатурыСрезПоследних.Валюта
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)
| КОНЕЦ КАК ВалютаЦены,
| ВЫБОР
| КОГДА ВремЦеныПоСоглашениям.Цена > 0
| ТОГДА ВремЦеныПоСоглашениям.Цена
| КОГДА ВремЦеныПоСоглашениям.ВидЦены <> ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)
| И ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) > 0
| ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
| ИНАЧЕ 0
| КОНЕЦ КАК Цена,
| ВремЦеныПоСоглашениям.Номенклатура,
| ВремЦеныПоСоглашениям.ИдентификаторНоменклатуры,
| ВремЦеныПоСоглашениям.Характеристика,
| ВремЦеныПоСоглашениям.ИдентификаторХарактеристики,
| ВЫБОР
| КОГДА ВремЦеныПоСоглашениям.Цена > 0
| ТОГДА ВремЦеныПоСоглашениям.Упаковка.Числитель
| КОГДА ВремЦеныПоСоглашениям.ВидЦены <> ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)
| И ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) > 0
| ТОГДА ЦеныНоменклатурыСрезПоследних.Упаковка.Числитель
| ИНАЧЕ 1
| КОНЕЦ КАК УпаковкаКоэффициент,
| ВремЦеныПоСоглашениям.ЕдиницаИзмерения,
| ЕСТЬNULL(ВремСтараяЦена.Цена, 0) КАК CЦена
|ПОМЕСТИТЬ ВремЦены
|ИЗ
| ВремЦеныПоСоглашениям КАК ВремЦеныПоСоглашениям
| ЛЕВОЕ СОЕДИНЕНИЕ ВремЦеныСрезПоследних КАК ЦеныНоменклатурыСрезПоследних
| ПО ВремЦеныПоСоглашениям.ВидЦены = ЦеныНоменклатурыСрезПоследних.ВидЦены
| И ВремЦеныПоСоглашениям.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
| И ВремЦеныПоСоглашениям.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика
| ЛЕВОЕ СОЕДИНЕНИЕ ВремСтараяЦена КАК ВремСтараяЦена
| ПО ВремЦеныПоСоглашениям.Характеристика = ВремСтараяЦена.Характеристика
| И ВремЦеныПоСоглашениям.Номенклатура = ВремСтараяЦена.Номенклатура
| И ВремЦеныПоСоглашениям.ВидЦены = ВремСтараяЦена.ВидЦены
|ГДЕ
| ВЫБОР
| КОГДА ВремЦеныПоСоглашениям.Цена > 0
| ТОГДА ВремЦеныПоСоглашениям.Цена
| КОГДА ВремЦеныПоСоглашениям.ВидЦены <> ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)
| И ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) > 0
| ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
| ИНАЧЕ 0
| КОНЕЦ > 0
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ ВремЦеныПоСоглашениям
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ ВремЦеныСрезПоследних";
Далее ищем функцию «ВыгрузитьПрайсы» в ней находим следующий код:
Выгрузка цены для каждого товара (предложения) типовая
Для НомерСтроки = 0 по КоличествоСтрок Цикл
ТекЦена = ТзнЦен[НомерСтроки];
Если ПараметрыОбмена.ИспользоватьУпаковкиНоменклатуры И ЗначениеЗаполнено(ТекЦена.Упаковка) Тогда
Единица = ТекЦена.Упаковка;
Коэффициент = ТекЦена.УпаковкаКоэффициент;
Иначе
Единица = ТекЦена.ЕдиницаИзмерения;
Коэффициент = 1;
КонецЕсли;
ИдПредложения = ?(ЗначениеЗаполнено(ТекЦена.Характеристика), XMLСтрока(ТекЦена.ИдентификаторНоменклатуры) + "#" + XMLСтрока(ТекЦена.ИдентификаторХарактеристики), XMLСтрока(ТекЦена.ИдентификаторНоменклатуры));
Если НомерСтроки = КоличествоСтрок тогда
ИдПредложенияСлед = "";
Иначе
ТекЦенаСлед = ТзнЦен[НомерСтроки + 1];
ИдПредложенияСлед = ?(ЗначениеЗаполнено(ТекЦенаСлед.Характеристика), XMLСтрока(ТекЦенаСлед.ИдентификаторНоменклатуры) + "#" + XMLСтрока(ТекЦенаСлед.ИдентификаторХарактеристики), XMLСтрока(ТекЦенаСлед.ИдентификаторНоменклатуры));
КонецЕсли;
Если НомерСтроки = 0 или ИдПредложения <> ИдПредложенияПре тогда
XDTOПредложение = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOПредложениеТип);
XDTOПредложение.Ид = ИдПредложения;
XDTOЦены = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЦеныТип);
КонецЕсли;
XDTOЦена = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЦенаТип);
ЦенаТовара = ТекЦена.Цена/Коэффициент;
ПредставлениеЦены = СокрЛП(ТекЦена.Цена) + " " + СокрЛП(ТекЦена.ВалютаЦены) + " за " + СокрЛП(Единица);
XDTOЦена.Представление = ПредставлениеЦены;
XDTOЦена.ИдТипаЦены = XMLСтрока(ТекЦена.ИдентификаторСоглашения);
XDTOЦена.ЦенаЗаЕдиницу = Формат(ЦенаТовара, ПараметрыОбмена.ФорматСуммы);
XDTOЦена.Валюта = Лев(ТекЦена.ВалютаЦены, 3);
//XDTOЦена.ИдЕдиницыИзмерения = XMLСтрока(ТекЦена.БазоваяЕдиницаИзмеренияИдентификатор);
Если ТекЦена.Цена > 0 тогда
XDTOЦены.Цена.Добавить(XDTOЦена);
КонецЕсли;
Если ИдПредложения <> ИдПредложенияСлед тогда
XDTOПредложение.Цены = XDTOЦены;
Владелец.Предложение.Добавить(XDTOПредложение);
КонецЕсли;
ИдПредложенияПре = ИдПредложения;
Итератор = Итератор + 1;
КонецЦикла;
И меняем его на следующий:
Выгрузка цены для каждого товара (предложения) новая версия
Для НомерСтроки = 0 по КоличествоСтрок Цикл
ТекЦена = ТзнЦен[НомерСтроки];
Если ПараметрыОбмена.ИспользоватьУпаковкиНоменклатуры И ЗначениеЗаполнено(ТекЦена.Упаковка) Тогда
Единица = ТекЦена.Упаковка;
Коэффициент = ТекЦена.УпаковкаКоэффициент;
Иначе
Единица = ТекЦена.ЕдиницаИзмерения;
Коэффициент = 1;
КонецЕсли;
ИдПредложения = ?(ЗначениеЗаполнено(ТекЦена.Характеристика), XMLСтрока(ТекЦена.ИдентификаторНоменклатуры) + "#" + XMLСтрока(ТекЦена.ИдентификаторХарактеристики), XMLСтрока(ТекЦена.ИдентификаторНоменклатуры));
Если НомерСтроки = КоличествоСтрок тогда
ИдПредложенияСлед = "";
Иначе
ТекЦенаСлед = ТзнЦен[НомерСтроки + 1];
ИдПредложенияСлед = ?(ЗначениеЗаполнено(ТекЦенаСлед.Характеристика), XMLСтрока(ТекЦенаСлед.ИдентификаторНоменклатуры) + "#" + XMLСтрока(ТекЦенаСлед.ИдентификаторХарактеристики), XMLСтрока(ТекЦенаСлед.ИдентификаторНоменклатуры));
КонецЕсли;
Если НомерСтроки = 0 или ИдПредложения <> ИдПредложенияПре тогда
XDTOПредложение = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOПредложениеТип);
XDTOПредложение.Ид = ИдПредложения;
XDTOЦены = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЦеныТип);
КонецЕсли;
XDTOЦена = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЦенаТип);
ЦенаТовара = ТекЦена.Цена/Коэффициент;
ПредставлениеЦены = СокрЛП(ТекЦена.Цена) + " " + СокрЛП(ТекЦена.ВалютаЦены) + " за " + СокрЛП(Единица);
XDTOЦена.Представление = ПредставлениеЦены;
XDTOЦена.ИдТипаЦены = XMLСтрока(ТекЦена.ИдентификаторСоглашения);
XDTOЦена.ЦенаЗаЕдиницу = Формат(ЦенаТовара, ПараметрыОбмена.ФорматСуммы);
XDTOЦена.Валюта = Лев(ТекЦена.ВалютаЦены, 3);
//XDTOЦена.ИдЕдиницыИзмерения = XMLСтрока(ТекЦена.БазоваяЕдиницаИзмеренияИдентификатор);
Если ТекЦена.Цена > 0 тогда
XDTOЦены.Цена.Добавить(XDTOЦена);
КонецЕсли;
// Формируем запись о старой цене на товар
XDTOЦена = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЦенаТип);
ЦенаТовара = ТекЦена.CЦена/Коэффициент;
ПредставлениеЦены = СокрЛП(ТекЦена.CЦена) + " " + СокрЛП(ТекЦена.ВалютаЦены) + " за " + СокрЛП(Единица);
XDTOЦена.Представление = ПредставлениеЦены;
XDTOЦена.ИдТипаЦены = XMLСтрока("old_price");
XDTOЦена.ЦенаЗаЕдиницу = Формат(ЦенаТовара, ПараметрыОбмена.ФорматСуммы);
XDTOЦена.Валюта = Лев(ТекЦена.ВалютаЦены, 3);
//XDTOЦена.ИдЕдиницыИзмерения = XMLСтрока(ТекЦена.БазоваяЕдиницаИзмеренияИдентификатор);
Если ТекЦена.CЦена > 0 тогда
XDTOЦены.Цена.Добавить(XDTOЦена);
КонецЕсли;
Если ИдПредложения <> ИдПредложенияСлед тогда
XDTOПредложение.Цены = XDTOЦены;
Владелец.Предложение.Добавить(XDTOПредложение);
КонецЕсли;
ИдПредложенияПре = ИдПредложения;
Итератор = Итератор + 1;
КонецЦикла;
Все после этого для каждого товара добавлена информация по двум типам цен. Первая запись это текущая актуальная цена, а вторая старая цена, если она есть. Но на этом еще не все нужно также описать наш новый тип цен который будет выгружаться в общей информации. Идем в процедуру «ВыгрузитьСоглашенияXDTO» и после цикла который обходит выборку «ВыборкаСоглашений» добавляем следующие строчки кода:
Добавляем в выгрузку общей информации новый вид цен.
XDTOТипЦены = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOТипЦеныТип);
XDTOТипЦены.Ид = XMLСтрока("old_price");
XDTOТипЦены.НомерВерсии = Б_ОбменССайтомСервер.ПолучитьВерсиюОбъекта(ПараметрыОбмена, ВыборкаСоглашений.ВерсияДанных, "Типов цен");
XDTOТипЦены.Наименование = "old_price";
XDTOТипЦены.ПометкаУдаления = XMLСтрока(ВыборкаСоглашений.ПометкаУдаления);
XDTOТипЦены.Валюта = Лев(ВыборкаСоглашений.ВалютаКод, 3 );
XDTOНалог = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOНалогТип);
XDTOНалог.Наименование = ПараметрыОбмена.НаименованиеНалога;
XDTOНалог.УчтеноВСумме = XMLСтрока(ВыборкаСоглашений.ЦенаВключаетНДС);
XDTOТипЦены.Налог.Добавить(XDTOНалог);
XDTOТипыЦен.ТипЦены.Добавить(XDTOТипЦены);
Итератор = Итератор + 1;
Ну вот и все. Решение работает и нас полностью устраивает за 7 дней отладки ошибок вроде нет. Удачи!!! Ну и не забудьте поставить задачу web программисту чтоб он реализовал вывод этой информации в карточку товара на самом сайте.
А зачем такие танцы с бубном, если можно просто добавить вид цены «старая цена» и выгружать его стандартным способом?
Цена рассчитывается автоматически, отделу маркетинга только галку поставить при установке цен.
Ну я и не претендую на премию лучшей разработки года. Каждый ищет выходы по своему. Тут вы себя обезопасите от человеческого фактора заполнения старой цены. Меня просто смущает тот факт, что вам придется написать произвольный запрос для вашего вида цен который будет работать по определенному алгоритму, создать еще одно типовое соглашение для этого вида цен и обязать маркетинг проставлять флаги и делать перерасчет цены. Тут и начнется, что кто-то не поставил, кто-то не нажал пересчет по видам цен и по итогу старая цена будет некорректной, то есть этот процесс нужно будет постоянно контролировать и он будет порождать новые обращения в службу ИТ. А в моем решении человеческий фактор полностью исключен. Ценообразование розничной цены происходит ежедневно и к этому маркетинг подходит более внимательно не желе к формированию какой-то дополнительной цены для какого-то там сайта. Ну это лично мое мнение из сложившегося опыта.