В данной статье рассматривается программное заполнение торгового каталога с отбором номенклатуры, у которой характеристики имеют свойство "выгружать на сайт", и внесение изменений в формирование уникального идентификатора характеристик номенклатуры.
Задача состоит в том, чтобы на сайт организации из программы 1С выгрузить каталог товаров для интернет-магазина. Так как автор до этого не имел дела с выгрузкой данных на сайт, то пришлось разбираться в этой теме и наступать на некоторые грабли, которые, как оказалось, не очевидны на первый взгляд, но присутствуют.
Сразу оговорюсь, что учет номенклатуры в моей организации в конфигурации 1С ведется в разрезе характеристик, при этом у номенклатуры есть свойства и у характеристик тоже есть свойства, и нам надо выгрузить на сайт и свойства номенклатуры, и свойства характеристик. Так же скажу, что обработка данных и загрузка этих данных на сайт не входила в задачу автора и рассматриваться в этой статье не будет. Только выгрузка из 1С.
Торговый каталог на сайте должен содержать разделы и подразделы, в нашей организации эти разделы и подразделы совпадают с группами и подгруппами номенклатуры в справочнике Номенклатура.
Итак, нам необходимо выгрузить на сайт вот такую структуру торгового каталога:
Товары для дома
- для кухни
- для ванны
- текстиль
Товары для дачи
- инвентарь
-- лейки
-- грабли
-- газонокосилки
- удобрения
Канцелярия
В качестве механизма для обмена данными между сайтом организации и программой учета 1С был выбран механизм стандартной обработки 1С Битрикс.
Саму установку стандартной обработки 1С Битрикс я думаю, в этой статье рассматривать не стоит, она достаточно подробно рассмотрена на сайте Битрикс 1С-Битрикс - Модуль для: "Управление производственным предприятием ред.1.3" релиз 1.3.92.3 (1c-bitrix.ru) и желающие, ознакомившись с материалом по приведенной ссылке, без труда справятся с её настройкой и установкой. Мы же поговорим о настройке и необходимой доработке стандартного механизма выгрузки Битрикс.
Итак, после проведенной установки модуля обмена 1С Битрикс, нам необходимо запустить конфигуратор и открыть настройки обмена с сайтом.
Все настройки обмена с сайтом задаются в плане обмена, который называется «Обмен с Web - сайтом». Открыть план обмена ««Обмен с Web - сайтом»» можно следующим способом: меню \ Операции \ Планы обмена \ Настройки обмена с Web - сайтами.
Инструкция с описанием разделов обработки плана обмена находится здесь:
Окно настроек 1С-Битрикс (1c-bitrix.ru)
Первое, что необходимо сделать в обработке Битрикс, это создать узел обмена, назовем его «Тестовая выгрузка». Перейдем на вкладку «Настройка параметров обмена» и поставим переключатель в режим «Выгружать в каталог на диске», затем укажем папку, в которую будут записаны сформированные обработкой в процессе выгрузки файлы XML и укажем каталог, в который будет записываться файл лога. Пока мы только настраиваем выгрузку каталога, мы будем выгружать данные из 1С в XML-файл. А когда уже настроим выгрузку, тогда поставим переключатель в режим «Выгружать на сайт».
Затем перейдем на вкладку «Режим обмена данными» и установим флажок в разделе «Выгрузка информации о номенклатуре». Остальные флажки на вкладке «Режим обмена данными» отключим, т. к. мы в этой статье рассматриваем настройку выгрузки номенклатуры.
Нажимаем кнопку Настроить в разделе «Выгрузка информации о номенклатуре» и переходим в окно «Настройка выгрузки информации о номенклатуре». В этом окне на вкладке «Общие настройки» в табличную часть, которая присутствует в окне, добавляем новую строку. Эта строка будет корневым разделом каталога товаров.
Дадим имя корневому разделу каталога товаров «Основной каталог товаров» и в столбце «Дерево групп» нажмем ссылку «Изменить». В появившемся окне «Настройка дерева групп для каталога «Основной каталог товаров»» в левой части окна можем создавать разделы и подразделы торгового каталога, и добавлять в нужный раздел номенклатуру из правой части окна.
Я предлагаю автоматизировать процесс первоначального заполнения торгового каталога для сайта.
Торговый каталог, создаваемый с помощью обработки 1С Битрикс, находится в справочнике «(Битрикс) Пользовательские группы товаров», в конфигураторе этот справочник носит название «Б_ПользовательскиеГруппыТоваров». Справочник иерархический, иерархия элементов.
В качестве элементов в справочнике «(Битрикс) Пользовательские группы товаров» выступают разделы торгового каталога, в нашем случае они совпадают с группами справочника Номенклатура. Сами товары, то есть то, что является элементами в справочнике Номенклатура, в справочнике «(Битрикс) Пользовательские группы товаров» записывается в табличные части элементов справочника вот так:
Обратите внимание, что в справочник «(Битрикс) Пользовательские группы товаров» записываются только ссылки на номенклатуры, а ссылки на характеристики номенклатуры в этот справочник не записываются. То есть в торговый каталог при выгрузке через модуль обмена 1С Битрикс выгружаются все характеристики номенклатуры. Забегая вперед, скажу, что, характеристики выгружаются в виде торговых предложений, их названия формируются из названий номенклатур и названий характеристики в скобках.
Если же необходимо выгружать на сайт не все характеристики номенклатуры, а только те, которые отвечают определенным свойствам, то придется внести изменения в программный модуль обмена.
У себя мы нашли решение присвоить характеристике номенклатуры какое-либо свойство, которое будет признаком — выгружать характеристику на сайт или нет. Это свойство так и назовем - «ВыгружатьНаСайт», тип свойства Булево и будем выгружать только те характеристики номенклатуры, у которых свойство ВыгружатьНаСайт принимает значение ИСТИНА.
Вернемся к программному заполнению справочника «(Битрикс) Пользовательские группы товаров». Создадим внешнюю обработку и добавим в нее приведенный ниже код. Обратите внимание, что в коде используется ссылка на корневой каталог. Если будете использовать данный код, то вместо значения уникального идентификатора корневого каталога подставьте своё значение. То есть сначала, перед запуском кода обработки, необходимо создать корневой элемент справочника «(Битрикс) Пользовательские группы товаров», затем подставить его уникальный идентификатор в код обработки, и только затем запускать обработку, вот здесь следует заменить уникальный идентификатор корневого каталога:
ИДКаталога = "622c305d-da81-4abe-addb-88e8257a4c7e";
Еще одна из особенностей данного программного кода — товары включаются в торговый каталог из трех групп справочника Номенклатура, эти три группы прописаны явно в коде. Если вам необходимо указать другие группы или же вам необходимо включать все группы справочника номенклатура, то необходимо в программный код внести небольшие изменения.
Данный программный код создает структуру разделов глубиной до пяти уровней вложенности и выводит сообщение, если существует вложенность более пяти уровней в отобранных группах номенклатуры.
//три группы из справочника номенклатура, которые следует включить в торговый каталог:
ДляДома = Справочники.Номенклатура.НайтиПоКоду("00000020531");
ДляДачи = Справочники.Номенклатура.НайтиПоКоду("00000020603");
Канцелярия = Справочники.Номенклатура.НайтиПоКоду("00000020617");
ИДКаталога = "622c305d-da81-4abe-addb-88e8257a4c7e";
ЭлементКаталог = Справочники.Б_ПользовательскиеГруппыТоваров.НайтиПоРеквизиту("ИдентификаторРаздела", ИДКаталога);
Массив1Ур = Новый Массив;
Массив1Ур.Добавить(ДляДома);
Массив1Ур.Добавить(ДляДачи);
Массив1Ур.Добавить(Канцелярия);
Запрос = Новый Запрос;
МВТ = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МВТ;
Запрос.УстановитьПараметр("Массив1Ур", Массив1Ур);
Запрос.УстановитьПараметр("ВыгружатьНаСайт", ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("03813"));
//делаем до 5 уровней вложенности, если все 5 уровней вложенности пустые, тогда выводим сообщение, что данные номенклатуры находятся более чем в 5 уровнях вложенности
//и увеличиваем уровни вложенности или
//дорабатываем программу, отсекая какие-то уровни вложенности
//а пока так - 5 уровней.
ПустаяСсылка = Справочники.Номенклатура.ПустаяСсылка();
Запрос.УстановитьПараметр("ПустаяСсылка", ПустаяСсылка);
Запрос.Текст = "ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Объект.Владелец.Родитель.Родитель.Родитель.Родитель.Родитель КАК Группа5,
| ЗначенияСвойствОбъектов.Объект.Владелец.Родитель.Родитель.Родитель.Родитель КАК Группа4,
| ЗначенияСвойствОбъектов.Объект.Владелец.Родитель.Родитель.Родитель КАК Группа3,
| ЗначенияСвойствОбъектов.Объект.Владелец.Родитель.Родитель КАК Группа2,
| ЗначенияСвойствОбъектов.Объект.Владелец.Родитель КАК Группа1,
| различные(ЗначенияСвойствОбъектов.Объект.Владелец) КАК номенклатура
|ПОМЕСТИТЬ ВТ
|ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
| ЗначенияСвойствОбъектов.Свойство = &ВыгружатьНаСайт
| И ЗначенияСвойствОбъектов.Значение = ИСТИНА
| И ТИПЗНАЧЕНИЯ(ЗначенияСвойствОбъектов.Объект) = ТИП(Справочник.ХарактеристикиНоменклатуры)
| И ЗначенияСвойствОбъектов.Объект.Владелец В ИЕРАРХИИ(&Массив1Ур)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВЫБОР
| КОГДА НЕ вт.Группа5 В (&Массив1Ур)
| ТОГДА &ПустаяСсылка
| ИНАЧЕ вт.Группа5
| КОНЕЦ КАК группа5,
| ВЫБОР
| КОГДА НЕ вт.Группа4 В (&Массив1Ур)
| И НЕ вт.Группа5 В (&Массив1Ур)
| ТОГДА &ПустаяСсылка
| ИНАЧЕ вт.Группа4
| КОНЕЦ КАК группа4,
| ВЫБОР
| КОГДА НЕ вт.Группа3 В (&Массив1Ур)
| И НЕ вт.Группа4 В (&Массив1Ур)
| И НЕ вт.Группа5 В (&Массив1Ур)
| ТОГДА &ПустаяСсылка
| ИНАЧЕ вт.Группа3
| КОНЕЦ КАК группа3,
| ВЫБОР
| КОГДА НЕ вт.Группа2 В (&Массив1Ур)
| И НЕ вт.Группа3 В (&Массив1Ур)
| И НЕ вт.Группа4 В (&Массив1Ур)
| И НЕ вт.Группа5 В (&Массив1Ур)
| ТОГДА &ПустаяСсылка
| ИНАЧЕ вт.Группа2
| КОНЕЦ КАК группа2,
| ВЫБОР
| КОГДА НЕ вт.Группа1 В (&Массив1Ур)
| И НЕ вт.Группа2 В (&Массив1Ур)
| И НЕ вт.Группа3 В (&Массив1Ур)
| И НЕ вт.Группа4 В (&Массив1Ур)
| И НЕ вт.Группа5 В (&Массив1Ур)
| ТОГДА &ПустаяСсылка
| ИНАЧЕ вт.Группа1
| КОНЕЦ КАК группа1,
| вт.номенклатура
|ПОМЕСТИТЬ втГруппы
|ИЗ
| ВТ КАК вт
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втГруппы.номенклатура
|ПОМЕСТИТЬ втВсеГруппыПустые
|ИЗ
| втГруппы КАК втГруппы
|ГДЕ
| втГруппы.группа5 = &ПустаяСсылка
| И втГруппы.группа4 = &ПустаяСсылка
| И втГруппы.группа3 = &ПустаяСсылка
| И втГруппы.группа2 = &ПустаяСсылка
| И втГруппы.группа1 = &ПустаяСсылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втГруппы.группа5 КАК группа5,
| втГруппы.группа4 КАК группа4,
| втГруппы.группа3 КАК группа3,
| втГруппы.группа2 КАК группа2,
| втГруппы.группа1 КАК группа1,
| втГруппы.номенклатура
|ИЗ
| втГруппы КАК втГруппы
|ИТОГИ ПО
| группа5,
| группа4,
| группа3,
| группа2,
| группа1";
Результат = Запрос.Выполнить();
тз1 = результат.Выгрузить();
Запрос.Текст = "ВЫБРАТЬ
| Номенклатура
|ИЗ
| втВсеГруппыПустые ";
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Для каждого стр из РезультатЗапроса Цикл
Сообщить(строка(стр.Номенклатура.Код)+ " "+строка(стр.Номенклатура)+" более 5 уровней вложенности! Номенклатура не добавлена в каталог товаров! Необходимо доработать программу.");
КонецЦикла;
//создаем элементы
Выборка1 = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "группа5");
//1й уровень
Пока Выборка1.Следующий() Цикл
Если Выборка1.группа5 <> ПустаяСсылка Тогда
СсылкаНаЭтотОбъект = СуществуетОбъект(Выборка1.группа5.Наименование, ЭлементКаталог);
Если СсылкаНаЭтотОбъект = Справочники.Б_ПользовательскиеГруппыТоваров.ПустаяСсылка() Тогда
Если Выборка1.группа5.ЭтоГруппа Тогда
//создаем элемент
Об = Справочники.Б_ПользовательскиеГруппыТоваров.СоздатьЭлемент();
Об.Наименование = Выборка1.группа5.Наименование;
Об.ИдентификаторРаздела = ПолучитьИД();
Об.Родитель = ЭлементКаталог;
Об.Записать();
Родитель1 = Об.Ссылка;
Иначе
Об = ЭлементКаталог.ПолучитьОбъект();
НС = Об.Товары.Добавить();
НС.Номенклатура = Выборка1.Группа5;
Об.Записать();
Сообщить("номенклатура не является группой " + строка(Выборка1.Группа5));
КонецЕсли;
Иначе
Родитель1 = СсылкаНаЭтотОбъект;
КонецЕсли;
Иначе
Родитель1 = ЭлементКаталог;
КонецЕсли;
//////////выбираем 2й уровень
Выборка2 = Выборка1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "группа4");
Пока Выборка2.Следующий() Цикл
Если Выборка2.группа4 <> ПустаяСсылка Тогда
СсылкаНаЭтотОбъект = СуществуетОбъект(Выборка2.группа4, Родитель1);
Если СсылкаНаЭтотОбъект = Справочники.Б_ПользовательскиеГруппыТоваров.ПустаяСсылка() Тогда
Если Выборка2.группа4.ЭтоГруппа Тогда
//создаем элемент
Об = Справочники.Б_ПользовательскиеГруппыТоваров.СоздатьЭлемент();
Об.Наименование = Выборка2.группа4.Наименование;
Об.ИдентификаторРаздела = ПолучитьИД();
Об.Родитель = Родитель1;
Об.Записать();
Родитель2 = Об.Ссылка;
Иначе
Об = ЭлементКаталог.ПолучитьОбъект();
НС = Об.Товары.Добавить();
НС.Номенклатура = Выборка2.Группа4;
Об.Записать();
Сообщить("номенклатура не является группой " + строка(Выборка2.группа4));
КонецЕсли;
Иначе
Родитель2 = СсылкаНаЭтотОбъект;
КонецЕсли;
Иначе
Родитель2 = Родитель1;
КонецЕсли;
//////////выбираем 3й уровень
Выборка3 = Выборка2.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "группа3");
Пока Выборка3.Следующий() Цикл
Если Выборка3.группа3 <> ПустаяСсылка Тогда
СсылкаНаЭтотОбъект = СуществуетОбъект(Выборка3.группа3, Родитель2);
Если СсылкаНаЭтотОбъект = Справочники.Б_ПользовательскиеГруппыТоваров.ПустаяСсылка() Тогда
//создаем элемент
Если Выборка3.группа3.ЭтоГруппа Тогда
Об = Справочники.Б_ПользовательскиеГруппыТоваров.СоздатьЭлемент();
Об.Наименование = Выборка3.группа3.Наименование;
Об.ИдентификаторРаздела = ПолучитьИД();
Об.Родитель = Родитель2;
Об.Записать();
Родитель3 = Об.Ссылка;
Иначе
Об = ЭлементКаталог.ПолучитьОбъект();
НС = Об.Товары.Добавить();
НС.Номенклатура = Выборка3.Группа3;
Об.Записать();
Сообщить("номенклатура не является группой " + строка(Выборка3.группа3));
КонецЕсли;
Иначе
Родитель3 = СсылкаНаЭтотОбъект;
КонецЕсли;
Иначе
Родитель3 = Родитель2;
КонецЕсли;
//////////выбираем 4й уровень
Выборка4 = Выборка3.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "группа2");
Пока Выборка4.Следующий() Цикл
Если Выборка4.группа2 <> ПустаяСсылка Тогда
СсылкаНаЭтотОбъект = СуществуетОбъект(Выборка4.группа2, Родитель3);
Если СсылкаНаЭтотОбъект = Справочники.Б_ПользовательскиеГруппыТоваров.ПустаяСсылка() Тогда
Если Выборка4.группа2.ЭтоГруппа Тогда
//создаем элемент
Об = Справочники.Б_ПользовательскиеГруппыТоваров.СоздатьЭлемент();
Об.Наименование = Выборка4.группа2.Наименование;
Об.ИдентификаторРаздела = ПолучитьИД();
Об.Родитель = Родитель3;
Об.Записать();
Родитель4 = Об.Ссылка;
Иначе
Об = ЭлементКаталог.ПолучитьОбъект();
НС = Об.Товары.Добавить();
НС.Номенклатура = Выборка4.Группа2;
Об.Записать();
Сообщить("номенклатура не является группой " + строка(Выборка4.группа2));
КонецЕсли;
Иначе
Родитель4 = СсылкаНаЭтотОбъект;
КонецЕсли;
Иначе
Родитель4 = Родитель3;
КонецЕсли;
//////////выбираем 5й уровень
Выборка5 = Выборка4.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "группа1");
Пока Выборка5.Следующий() Цикл
Если Выборка5.группа1 <> ПустаяСсылка Тогда
СсылкаНаЭтотОбъект = СуществуетОбъект(Выборка5.группа1, Родитель4);
Если СсылкаНаЭтотОбъект = Справочники.Б_ПользовательскиеГруппыТоваров.ПустаяСсылка() Тогда
Если Выборка5.группа1.ЭтоГруппа Тогда
//создаем элемент
Об = Справочники.Б_ПользовательскиеГруппыТоваров.СоздатьЭлемент();
Об.Наименование = Выборка5.группа1.Наименование;
Об.ИдентификаторРаздела = ПолучитьИД();
Об.Родитель = Родитель4;
Об.Записать();
Родитель5 = Об.Ссылка;
Иначе
Об = ЭлементКаталог.ПолучитьОбъект();
НС = Об.Товары.Добавить();
НС.Номенклатура = Выборка5.Группа1;
Об.Записать();
Сообщить("номенклатура не является группой " + строка(Выборка5.группа1));
КонецЕсли;
Иначе
Родитель5 = СсылкаНаЭтотОбъект;
КонецЕсли;
Иначе
Родитель5 = Родитель4;
КонецЕсли;
ВыборкаНом = Выборка5.Выбрать();
Пока ВыборкаНом.Следующий() Цикл
Если ВыборкаНом.Номенклатура.ЭтоГруппа Тогда
Сообщить(" номенклатура"+строка(ВыборкаНом.Номенклатура)+ " группа и не может быть добавлена в справочник ");
Иначе
Если Родитель5<> ЭлементКаталог Тогда
Об = Родитель5.ПолучитьОбъект();
НС = Об.Товары.Добавить();
НС.Номенклатура = ВыборкаНом.Номенклатура;
Об.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
После программного заполнения каталога товаров в справочнике «(Битрикс) Пользовательские группы товаров» необходимо внести небольшие изменения в программный код модуля обмена 1С Битрикс. К сожалению, стандартными средствами настройки не удалось добиться выгрузки только тех характеристик номенклатур, которые соответствуют заданным критериям отбора, в нашем случае это свойство характеристики номенклатуры ВыгружатьНаСайт = Истина.
Кроме того, нам необходимо изменить выгрузку уникального идентификатора номенклатуры и характеристики номенклатуры, т. к. стандартная обработка 1С Битрикс выгружает в качестве уникального идентификатора номенклатуры ее название, преобразованное в строку XML, а в качестве уникального идентификатора характеристики номенклатуры стандартная обработка обмена 1С Битрикс формирует строку, состоящую из названия номенклатуры, взятого дважды и разделенного символом «#».
Уникальный идентификатор характеристик номенклатуры нам понадобится для загрузки документа Заказа покупателя c сайта в программу 1С. Поэтому без уникального идентификатора характеристик номенклатуры нам всё же не обойтись. Внесем исправления в программном коде модуля обмена 1С Битрикс. Для этого откроем конфигурацию 1С в режиме конфигуратора и найдем с помощью глобального поиска следующий код. Данный код был найден автором в результате анализа структуры кода и пошаговой остановке в точках останова, поэтому информация о том, в каком место программного модуля мы будем вносить изменения достоверна и опробована автором на практике.
Итак, сначала исправим отбор характеристик номенклатур. До внесенных нами изменений номенклатуры и характеристики номенклатру отбирались по следующему алгоритму — выбиралась вся номенклатура из справочника Номенклатура, а потом к нем добавлялись характеристики номенклатур.
Немного изменим алгоритм отбора — будем выбирать только ту номенклатуру, у которой учет по характеристикам не ведется, но которая присутствует в справочнике «(Битрикс) Пользовательские группы товаров», а так же ту номенклатуру, у которой есть характеристики со свойством ВыгружатьНаСайт = Истина.
Напомню, что я использую модуль обмена 1С Битрикс версии 7.0.1.8.
Находим в общих модулях модуль Б_ПроцедурыИФункцииВыгрузкиДанныхНаСайт, в найденом модуле найдем экспортную функцию
СформироватьВременныеТаблицыПоИнформацииОТоварахПакета(ПараметрыОбмена, ИдентификаторКаталога, СписокТоваров, СписокСвойств).
В этой функции находится запрос, который отбирает характеристики номенклатур для выгрузки их на сайт, внесем небольшие исправления в этот запрос, все внесенные исправления отметим комментаторскими авторскими скобками:
// user773200 -->
// user773200 <--
////////////////////////////////////////////////////////////////////////////////////////////////////////
// ///
// ПАКЕТ ЗАПРОСОВ ДЛЯ ПОЛУЧЕНИЯ НОМЕНКЛАТУРЫ С ХАРАКТЕРИСТИКОЙ ///
// ///
////////////////////////////////////////////////////////////////////////////////////////////////////
ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
Номенклатура.Ссылка КАК Номенклатура
ПОМЕСТИТЬ ВремНоменклатураОтбор
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
(НЕ &КлассифицироватьПоЦеновымГруппам
ИЛИ &КлассифицироватьПоЦеновымГруппам
И НЕ Номенклатура.ЦеноваяГруппа = ЗНАЧЕНИЕ(Справочник.ЦеновыеГруппы.ПустаяСсылка))
И Номенклатура.Ссылка В(&СписокТоваров)
ИНДЕКСИРОВАТЬ ПО
Номенклатура
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
РИ_ИдентификаторыНоменклатурыБитрикс.Объект КАК Объект,
РИ_ИдентификаторыНоменклатурыБитрикс.Идентификатор
ПОМЕСТИТЬ ВремИдГруппБитрикс
ИЗ
РегистрСведений.РИ_ИдентификаторыНоменклатурыБитрикс КАК РИ_ИдентификаторыНоменклатурыБитрикс
ГДЕ
РИ_ИдентификаторыНоменклатурыБитрикс.Объект.ЭтоГруппа
ИНДЕКСИРОВАТЬ ПО
Объект
;
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ТипыЦенНоменклатуры.Ссылка КАК ТипЦены,
ТипыЦенНоменклатуры.ВерсияДанных,
ТипыЦенНоменклатуры.ПометкаУдаления,
ТипыЦенНоменклатуры.Наименование,
ТипыЦенНоменклатуры.Рассчитывается,
ТипыЦенНоменклатуры.ПроцентСкидкиНаценки,
ТипыЦенНоменклатуры.ЦенаВключаетНДС,
ТипыЦенНоменклатуры.СпособРасчетаЦены,
ТипыЦенНоменклатуры.ВалютаЦены,
ТипыЦенНоменклатуры.ВалютаЦены.Наименование КАК ВалютаЦеныКод,
ТипыЦенНоменклатуры.БазовыйТипЦен,
ЕСТЬNULL(РИ_ИдентификаторыОстальные.Идентификатор, ТипыЦенНоменклатуры.Ссылка) КАК Идентификатор
ПОМЕСТИТЬ ВремТипыЦен
ИЗ
Справочник.ТипыЦенНоменклатуры КАК ТипыЦенНоменклатуры
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РИ_ИдентификаторыОстальные КАК РИ_ИдентификаторыОстальные
ПО ТипыЦенНоменклатуры.Ссылка = РИ_ИдентификаторыОстальные.Объект
ГДЕ
ТипыЦенНоменклатуры.Ссылка В(&СписокТиповЦен)
{ГДЕ
ТипыЦенНоменклатуры.Ссылка.* КАК ТипЦен}
ИНДЕКСИРОВАТЬ ПО
ТипЦены
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ТипыЦенНоменклатуры.Ссылка КАК ТипЦены,
ТипыЦенНоменклатуры.ВалютаЦены КАК ВалютаЦены,
ТипыЦенНоменклатуры.Рассчитывается КАК Рассчитывается,
ТипыЦенНоменклатуры.БазовыйТипЦен КАК БазовыйТипЦен,
ТипыЦенНоменклатуры.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,
ТипыЦенНоменклатуры.СпособРасчетаЦены КАК СпособРасчетаЦены
ПОМЕСТИТЬ ВремВсеТипыЦен
ИЗ
Справочник.ТипыЦенНоменклатуры КАК ТипыЦенНоменклатуры
ГДЕ
(ТипыЦенНоменклатуры.Ссылка В
(ВЫБРАТЬ
ВремТипыЦен.ТипЦены
ИЗ
ВремТипыЦен)
ИЛИ НЕ ТипыЦенНоменклатуры.Рассчитывается)
ИНДЕКСИРОВАТЬ ПО
ТипЦены
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
ЦеныНоменклатурыСрезПоследних.Цена КАК БазоваяЦена,
ЦеныНоменклатурыСрезПоследних.Валюта КАК ВалютаБазовойЦены,
ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения КАК ЕдиницаИзмеренияБазовойЦены,
ВЫБОР
КОГДА ПроцентыСкидкиНаценкиДинамическихЦенСрезПоследних.ПроцентСкидкиНаценки ЕСТЬ NULL
ТОГДА ВремВсеТипыЦен.ПроцентСкидкиНаценки
ИНАЧЕ ПроцентыСкидкиНаценкиДинамическихЦенСрезПоследних.ПроцентСкидкиНаценки
КОНЕЦ КАК ПроцентСкидкиНаценки,
ВремВсеТипыЦен.ТипЦены КАК ТипЦен,
ВремВсеТипыЦен.СпособРасчетаЦены КАК СпособРасчетаЦены,
ВремВсеТипыЦен.ВалютаЦены КАК ВалютаТипЦены
ПОМЕСТИТЬ ВремБазовыеЦены
ИЗ
ВремВсеТипыЦен КАК ВремВсеТипыЦен
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
&ТекДата,
Номенклатура В
(ВЫБРАТЬ
ВремНоменклатураОтбор.Номенклатура
ИЗ
ВремНоменклатураОтбор)
И ТипЦен В
(ВЫБРАТЬ
ВремВсеТипыЦен.ТипЦены
ИЗ
ВремВсеТипыЦен)) КАК ЦеныНоменклатурыСрезПоследних
ПО (ВремВсеТипыЦен.Рассчитывается)
И (ЦеныНоменклатурыСрезПоследних.ТипЦен = ВремВсеТипыЦен.БазовыйТипЦен)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
&ТекДата,
Номенклатура В
(ВЫБРАТЬ
ВремНоменклатураОтбор.Номенклатура
ИЗ
ВремНоменклатураОтбор)
И ТипЦен В
(ВЫБРАТЬ
ВремВсеТипыЦен.ТипЦены
ИЗ
ВремВсеТипыЦен)) КАК ПроцентыСкидкиНаценкиДинамическихЦенСрезПоследних
ПО (ПроцентыСкидкиНаценкиДинамическихЦенСрезПоследних.ТипЦен = ВремВсеТипыЦен.ТипЦены)
И (ПроцентыСкидкиНаценкиДинамическихЦенСрезПоследних.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура)
И (ПроцентыСкидкиНаценкиДинамическихЦенСрезПоследних.ХарактеристикаНоменклатуры = ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры)
И (ПроцентыСкидкиНаценкиДинамическихЦенСрезПоследних.Валюта = ВремВсеТипыЦен.ВалютаЦены)
И (ПроцентыСкидкиНаценкиДинамическихЦенСрезПоследних.ЕдиницаИзмерения = ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения)
И (ПроцентыСкидкиНаценкиДинамическихЦенСрезПоследних.СпособРасчетаЦены = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип))
ИНДЕКСИРОВАТЬ ПО
БазоваяЦена,
ТипЦен
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВремВсеТипыЦен
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
БазовыеЦены.ТипЦен КАК ТипЦен,
БазовыеЦены.ВалютаТипЦены КАК ВалютаТипаЦен,
БазовыеЦены.Номенклатура КАК Номенклатура,
БазовыеЦены.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
БазовыеЦены.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,
БазовыеЦены.СпособРасчетаЦены КАК СпособРасчетаЦены,
БазовыеЦены.БазоваяЦена КАК БазоваяЦена,
БазовыеЦены.ВалютаБазовойЦены КАК ВалютаБазовойЦены,
БазовыеЦены.ЕдиницаИзмеренияБазовойЦены КАК ЕдиницаИзмеренияБазовойЦены,
МИНИМУМ(ДиапазоныЦенДляНаценкиСрезПоследних.ВерхняяГраница) КАК ВерхняяГраница
ПОМЕСТИТЬ ВремДинамическиеЦены
ИЗ
ВремБазовыеЦены КАК БазовыеЦены
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДиапазоныЦенДляНаценки.СрезПоследних(&ТекДата, ) КАК ДиапазоныЦенДляНаценкиСрезПоследних
ПО БазовыеЦены.БазоваяЦена < ДиапазоныЦенДляНаценкиСрезПоследних.ВерхняяГраница
И БазовыеЦены.ТипЦен = ДиапазоныЦенДляНаценкиСрезПоследних.ТипЦен
СГРУППИРОВАТЬ ПО
БазовыеЦены.ХарактеристикаНоменклатуры,
БазовыеЦены.СпособРасчетаЦены,
БазовыеЦены.ТипЦен,
БазовыеЦены.ВалютаТипЦены,
БазовыеЦены.Номенклатура,
БазовыеЦены.ВалютаБазовойЦены,
БазовыеЦены.ЕдиницаИзмеренияБазовойЦены,
БазовыеЦены.ПроцентСкидкиНаценки,
БазовыеЦены.БазоваяЦена
ИНДЕКСИРОВАТЬ ПО
ТипЦен,
БазоваяЦена,
ВерхняяГраница,
ВалютаБазовойЦены,
ВалютаТипаЦен
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВремБазовыеЦены
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДинамическиеЦены.Номенклатура КАК Номенклатура,
ДинамическиеЦены.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
ДинамическиеЦены.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,
ДинамическиеЦены.СпособРасчетаЦены КАК СпособРасчетаЦены,
ДинамическиеЦены.ТипЦен КАК ТипЦен,
ДинамическиеЦены.ВалютаТипаЦен КАК ВалютаТипаЦен,
ЕСТЬNULL(КурсыВалютыЦены.Курс, 0) КАК КурсВалютыЦены,
ЕСТЬNULL(КурсыВалютыЦены.Кратность, 0) КАК КратностьКурсаВалютыЦены,
ДинамическиеЦены.БазоваяЦена КАК БазоваяЦена,
ДинамическиеЦены.ВалютаБазовойЦены КАК ВалютаБазовойЦены,
ЕСТЬNULL(КурсыВалютыБазовойЦены.Курс, 0) КАК КурсВалютыБазовойЦены,
ЕСТЬNULL(КурсыВалютыБазовойЦены.Кратность, 0) КАК КратностьКурсаВалютыБазовойЦены,
ДинамическиеЦены.ЕдиницаИзмеренияБазовойЦены КАК ЕдиницаИзмеренияБазовойЦены,
ЕСТЬNULL(ДиапазоныЦенДляНаценкиСрезПоследних.Цена, 0) КАК ЦенаПоДиапазону,
ДиапазоныЦенДляНаценкиСрезПоследних.Валюта КАК ВалютаЦеныПоДиапазону,
ВЫБОР
КОГДА ДинамическиеЦены.ВалютаТипаЦен = ДинамическиеЦены.ВалютаБазовойЦены
ТОГДА 1
ИНАЧЕ ВЫБОР
КОГДА ЕСТЬNULL(КурсыВалютыЦены.Курс, 0) = 1
ТОГДА ВЫБОР
КОГДА ЕСТЬNULL(КурсыВалютыБазовойЦены.Кратность, 0) = 0
ТОГДА 0
ИНАЧЕ ЕСТЬNULL(КурсыВалютыБазовойЦены.Курс, 0) / ЕСТЬNULL(КурсыВалютыБазовойЦены.Кратность, 0)
КОНЕЦ
КОГДА ЕСТЬNULL(КурсыВалютыЦены.Курс, 0) <> 1
И ЕСТЬNULL(КурсыВалютыБазовойЦены.Курс, 0) = 1
ТОГДА ВЫБОР
КОГДА ЕСТЬNULL(КурсыВалютыЦены.Курс, 0) = 0
ТОГДА 0
ИНАЧЕ ЕСТЬNULL(КурсыВалютыЦены.Кратность, 0) / ЕСТЬNULL(КурсыВалютыЦены.Курс, 0)
КОНЕЦ
ИНАЧЕ ВЫБОР
КОГДА ЕСТЬNULL(КурсыВалютыЦены.Курс, 0) * ЕСТЬNULL(КурсыВалютыБазовойЦены.Кратность, 0) = 0
ТОГДА 0
ИНАЧЕ ЕСТЬNULL(КурсыВалютыБазовойЦены.Курс, 0) * ЕСТЬNULL(КурсыВалютыЦены.Кратность, 0) / ЕСТЬNULL(КурсыВалютыЦены.Курс, 0) * ЕСТЬNULL(КурсыВалютыБазовойЦены.Кратность, 0)
КОНЕЦ
КОНЕЦ
КОНЕЦ КАК КоэффициентПересчетаБазовойЦены
ПОМЕСТИТЬ ВремРасчетныеЦены
ИЗ
ВремДинамическиеЦены КАК ДинамическиеЦены
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДиапазоныЦенДляНаценки.СрезПоследних(&ТекДата, ) КАК ДиапазоныЦенДляНаценкиСрезПоследних
ПО ДинамическиеЦены.БазоваяЦена < ДиапазоныЦенДляНаценкиСрезПоследних.ВерхняяГраница
И ДинамическиеЦены.ТипЦен = ДиапазоныЦенДляНаценкиСрезПоследних.ТипЦен
И ДинамическиеЦены.ВерхняяГраница = ДиапазоныЦенДляНаценкиСрезПоследних.ВерхняяГраница
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&ТекДата, ) КАК КурсыВалютыЦены
ПО ДинамическиеЦены.ВалютаТипаЦен = КурсыВалютыЦены.Валюта
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&ТекДата, ) КАК КурсыВалютыБазовойЦены
ПО ДинамическиеЦены.ВалютаБазовойЦены = КурсыВалютыБазовойЦены.Валюта
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВремДинамическиеЦены
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура,
ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры,
ЦеныНоменклатурыСрезПоследних.ТипЦен,
ЦеныНоменклатурыСрезПоследних.Валюта,
ЦеныНоменклатурыСрезПоследних.Цена,
ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения
ПОМЕСТИТЬ ВремЦеныНоменклатурыСрезПоследних
ИЗ
(ВЫБРАТЬ
РасчетныеЦены.Номенклатура КАК Номенклатура,
РасчетныеЦены.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
РасчетныеЦены.ТипЦен КАК ТипЦен,
ВЫБОР
КОГДА РасчетныеЦены.СпособРасчетаЦены = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип)
ТОГДА РасчетныеЦены.ВалютаТипаЦен
ИНАЧЕ РасчетныеЦены.ВалютаЦеныПоДиапазону
КОНЕЦ КАК Валюта,
ВЫБОР
КОГДА РасчетныеЦены.СпособРасчетаЦены = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип)
ТОГДА РасчетныеЦены.БазоваяЦена * РасчетныеЦены.КоэффициентПересчетаБазовойЦены * (1 + РасчетныеЦены.ПроцентСкидкиНаценки / 100)
ИНАЧЕ РасчетныеЦены.ЦенаПоДиапазону
КОНЕЦ КАК Цена,
РасчетныеЦены.ЕдиницаИзмеренияБазовойЦены КАК ЕдиницаИзмерения
ИЗ
ВремРасчетныеЦены КАК РасчетныеЦены
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура,
ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры,
ЦеныНоменклатурыСрезПоследних.ТипЦен,
ЦеныНоменклатурыСрезПоследних.Валюта,
ЦеныНоменклатурыСрезПоследних.Цена,
ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
&ТекДата,
НЕ ТипЦен.Рассчитывается
И Номенклатура В
(ВЫБРАТЬ
ВремНоменклатураОтбор.Номенклатура
ИЗ
ВремНоменклатураОтбор)
И ТипЦен В
(ВЫБРАТЬ
ВремТипыЦен.ТипЦены
ИЗ
ВремТипыЦен) {(ТипЦен).*}) КАК ЦеныНоменклатурыСрезПоследних) КАК ЦеныНоменклатурыСрезПоследних
ИНДЕКСИРОВАТЬ ПО
ЦеныНоменклатурыСрезПоследних.Номенклатура,
ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВремРасчетныеЦены
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
ЦеныНоменклатурыСрезПоследних.ТипЦен КАК ТипЦены,
ЦеныНоменклатурыСрезПоследних.Валюта КАК ВалютаЦеныСсылка,
ЦеныНоменклатурыСрезПоследних.Валюта.Наименование КАК ВалютаКод,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
ВЫБОР
КОГДА ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
ИНАЧЕ 0
КОНЕЦ КАК ЦенаБезХарактеристики,
ЦеныНоменклатурыСрезПоследних.ТипЦен.ПорядокОкругления КАК ПорядокОкругления,
ЦеныНоменклатурыСрезПоследних.ТипЦен.ОкруглятьВБольшуюСторону КАК ОкруглятьВБольшуюСторону,
ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения КАК ЕдиницаИзмеренияЦены,
ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения.Коэффициент КАК Коэффициент,
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры КАК Характеристика
ПОМЕСТИТЬ ВремЦены
ИЗ
ВремЦеныНоменклатурыСрезПоследних КАК ЦеныНоменклатурыСрезПоследних
ИНДЕКСИРОВАТЬ ПО
Номенклатура,
Характеристика
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВремЦеныНоменклатурыСрезПоследних
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
КомплектующиеНоменклатуры.Комплектующая КАК Комплектующая
ПОМЕСТИТЬ ВремКомплектующиеНоменклатурыОтбор
ИЗ
ВремНоменклатураОтбор КАК ВремНоменклатураОтбор
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КомплектующиеНоменклатуры КАК КомплектующиеНоменклатуры
ПО ВремНоменклатураОтбор.Номенклатура = КомплектующиеНоменклатуры.Номенклатура
ГДЕ
&ВыгружатьНаборы
ИНДЕКСИРОВАТЬ ПО
Комплектующая
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВремНоменклатураОтбор.Номенклатура КАК Номенклатура,
ЛОЖЬ КАК Комплектующая
ПОМЕСТИТЬ ВремНоменклатураОтбораИкомплектов
ИЗ
ВремНоменклатураОтбор КАК ВремНоменклатураОтбор
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВремКомплектующиеНоменклатурыОтбор.Комплектующая,
ИСТИНА
ИЗ
ВремКомплектующиеНоменклатурыОтбор КАК ВремКомплектующиеНоменклатурыОтбор
ИНДЕКСИРОВАТЬ ПО
Номенклатура
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВремНоменклатураОтбор
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВремКомплектующиеНоменклатурыОтбор
;
// user773200 --> только та номенклатура, у которой учет ведется по характеристикам и характеристика.свойство выгружать на сайт = да
// или та, по которой не ведется учет по характеристикам, но есть в каталоге товаров (спр.Б_ПользовательскиеГруппыТоваров)
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
ВремНоменклатура.Ссылка
ПОМЕСТИТЬ втНоменклатураНаСайт
ИЗ
Справочник.Номенклатура КАК ВремНоменклатура
ГДЕ
ВремНоменклатура.ВестиУчетПоХарактеристикам = ЛОЖЬ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВремНоменклатура.Ссылка
ИЗ
Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК ВремНоменклатура
ПО ХарактеристикиНоменклатуры.Владелец.Ссылка = ВремНоменклатура.Ссылка
И (ВремНоменклатура.ВестиУчетПоХарактеристикам)
ГДЕ
ХарактеристикиНоменклатуры.Ссылка В
(ВЫБРАТЬ
значениясвойствобъектов.Объект
ИЗ
РегистрСведений.ЗначенияСвойствОбъектов КАК значениясвойствобъектов
ГДЕ
ТИПЗНАЧЕНИЯ(значениясвойствобъектов.Объект) = ТИП(Справочник.ХарактеристикиНоменклатуры)
И значениясвойствобъектов.Свойство = &ВыгружатьНаСайт
И значениясвойствобъектов.Значение = ИСТИНА)
;
// user773200 <--
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ВремНоменклатураОтбораИкомплектов.Номенклатура КАК Объект,
ВремНоменклатураОтбораИкомплектов.Номенклатура КАК Номенклатура,
ЕСТЬNULL(РИ_ИдентификаторыНоменклатурыБитрикс.Идентификатор, ВремНоменклатураОтбораИкомплектов.Номенклатура.Ссылка) КАК Идентификатор,
ВремНоменклатураОтбораИкомплектов.Номенклатура.ВерсияДанных КАК ВерсияДанных,
ВремНоменклатураОтбораИкомплектов.Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
ВремНоменклатураОтбораИкомплектов.Номенклатура.Код КАК Код,
ВремНоменклатураОтбораИкомплектов.Номенклатура.Артикул КАК Артикул,
ВремНоменклатураОтбораИкомплектов.Номенклатура.Наименование КАК Наименование,
ВремНоменклатураОтбораИкомплектов.Номенклатура.НаименованиеПолное КАК НаименованиеПолное,
ВремНоменклатураОтбораИкомплектов.Номенклатура.ВестиУчетПоХарактеристикам КАК ВестиУчетПоХарактеристикам,
ВремНоменклатураОтбораИкомплектов.Номенклатура.ЕдиницаХраненияОстатков.Вес КАК Вес,
ВремНоменклатураОтбораИкомплектов.Номенклатура.СтранаПроисхождения.Наименование КАК СтранаПроисхождения,
ВремНоменклатураОтбораИкомплектов.Номенклатура.ОсновнойПоставщик.Наименование КАК ОсновнойПоставщик,
ВремНоменклатураОтбораИкомплектов.Номенклатура.ВидНоменклатуры.ТипНоменклатуры КАК ТипНоменклатуры,
ВремНоменклатураОтбораИкомплектов.Номенклатура.ДополнительноеОписаниеНоменклатурыВФорматеHTML КАК ДополнительноеОписаниеНоменклатурыВФорматеHTML,
ВремНоменклатураОтбораИкомплектов.Номенклатура.Комментарий КАК Комментарий,
ВремНоменклатураОтбораИкомплектов.Номенклатура.ЦеноваяГруппа КАК ЦеноваяГруппа,
ВремНоменклатураОтбораИкомплектов.Номенклатура.Родитель КАК Родитель,
ЕСТЬNULL(ВремИдГруппБитрикс.Идентификатор, ВремНоменклатураОтбораИкомплектов.Номенклатура.Родитель.Ссылка) КАК ИдентификаторРодителя,
ВремНоменклатураОтбораИкомплектов.Номенклатура.НомерГТД.Код КАК НомерГТД,
ВремНоменклатураОтбораИкомплектов.Номенклатура.СтавкаНДС КАК СтавкаНДС,
ВремНоменклатураОтбораИкомплектов.Номенклатура.ОсновноеИзображение КАК ОсновноеИзображение,
ВремНоменклатураОтбораИкомплектов.Номенклатура.БазоваяЕдиницаИзмерения КАК БазоваяЕдиницаИзмерения,
ЕСТЬNULL(РИ_ИдентификаторыЕдиниц.Идентификатор, ВремНоменклатураОтбораИкомплектов.Номенклатура.БазоваяЕдиницаИзмерения.Код) КАК ИдентификаторБазовойЕдиницы,
ВремНоменклатураОтбораИкомплектов.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,
ВЫБОР
КОГДА ВремНоменклатураОтбораИкомплектов.Номенклатура.ВидНоменклатуры.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.товар)
ТОГДА ВЫБОР
КОГДА ВремНоменклатураОтбораИкомплектов.Номенклатура В
(ВЫБРАТЬ
КомплектующиеНоменклатуры.Номенклатура
ИЗ
РегистрСведений.КомплектующиеНоменклатуры КАК КомплектующиеНоменклатуры)
ТОГДА 2
ИНАЧЕ 1
КОНЕЦ
ИНАЧЕ ВЫБОР
КОГДА ВремНоменклатураОтбораИкомплектов.Номенклатура.ВидНоменклатуры.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)
ИЛИ ВремНоменклатураОтбораИкомплектов.Номенклатура.ВидНоменклатуры.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Комплект)
ТОГДА 3
ИНАЧЕ 4
КОНЕЦ
КОНЕЦ КАК ПриоритетСортировки,
ВремНоменклатураОтбораИкомплектов.Номенклатура.Комплект КАК Комплект,
ВремНоменклатураОтбораИкомплектов.Номенклатура.Набор КАК Набор,
ВремНоменклатураОтбораИкомплектов.Комплектующая КАК ЭтоКомплектующая
ПОМЕСТИТЬ ВремНоменклатура
ИЗ
ВремНоменклатураОтбораИкомплектов КАК ВремНоменклатураОтбораИкомплектов
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РИ_ИдентификаторыОстальные КАК РИ_ИдентификаторыЕдиниц
ПО ВремНоменклатураОтбораИкомплектов.Номенклатура.БазоваяЕдиницаИзмерения = РИ_ИдентификаторыЕдиниц.Объект
ЛЕВОЕ СОЕДИНЕНИЕ ВремИдГруппБитрикс КАК ВремИдГруппБитрикс
ПО ВремНоменклатураОтбораИкомплектов.Номенклатура.Родитель = ВремИдГруппБитрикс.Объект
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РИ_ИдентификаторыНоменклатурыБитрикс КАК РИ_ИдентификаторыНоменклатурыБитрикс
ПО ВремНоменклатураОтбораИкомплектов.Номенклатура = РИ_ИдентификаторыНоменклатурыБитрикс.Объект
ГДЕ
(НЕ &КлассифицироватьПоЦеновымГруппам
ИЛИ &КлассифицироватьПоЦеновымГруппам
И НЕ ВремНоменклатураОтбораИкомплектов.Номенклатура.ЦеноваяГруппа = ЗНАЧЕНИЕ(Справочник.ЦеновыеГруппы.ПустаяСсылка))
// user773200 -->
И ВремНоменклатураОтбораИкомплектов.Номенклатура В (Выбрать ссылка из втНоменклатураНаСайт)
// user773200 <--
ИНДЕКСИРОВАТЬ ПО
Номенклатура,
ВестиУчетПоХарактеристикам
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
ВремНоменклатура.Номенклатура КАК Номенклатура,
ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК Характеристика
ПОМЕСТИТЬ ВремНоменклатураСХарактеристикамиВся
ИЗ
ВремНоменклатура КАК ВремНоменклатура
// user773200 -->
ГДЕ ВестиУчетПоХарактеристикам = ЛОЖЬ
// user773200 <--
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВремНоменклатура.Номенклатура,
ХарактеристикиНоменклатуры.Ссылка
ИЗ
Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВремНоменклатура КАК ВремНоменклатура
ПО ХарактеристикиНоменклатуры.Владелец.Ссылка = ВремНоменклатура.Номенклатура
И (ВремНоменклатура.ВестиУчетПоХарактеристикам)
// user773200 Выбираем только те Характеристики, у которых сво-во Выгружать на сайт = ИСТИНА
ГДЕ ХарактеристикиНоменклатуры.Ссылка В
(ВЫБРАТЬ Объект
ИЗ
РегистрСведений.ЗначенияСвойствОбъектов КАК значениясвойствобъектов
ГДЕ
ТИПЗНАЧЕНИЯ(значениясвойствобъектов.Объект) = ТИП(Справочник.ХарактеристикиНоменклатуры)
И значениясвойствобъектов.Свойство = &ВыгружатьНаСайт
И значениясвойствобъектов.Значение = ИСТИНА
)
И ВремНоменклатура.ВестиУчетПоХарактеристикам = ИСТИНА
// user773200 <--
ИНДЕКСИРОВАТЬ ПО
Номенклатура,
Характеристика
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВремНоменклатураОтбораИкомплектов
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Склады.Ссылка КАК Склад,
Склады.Ссылка КАК Идентификатор
ПОМЕСТИТЬ ВремСклады
ИЗ
Справочник.Склады КАК Склады
ГДЕ
НЕ Склады.ЭтоГруппа
И Склады.Ссылка В(&СписокСкладов)
ИНДЕКСИРОВАТЬ ПО
Склад
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Остатки.Номенклатура,
Остатки.ХарактеристикаНоменклатуры,
Остатки.КоличествоОстаток,
Остатки.Склад
ПОМЕСТИТЬ ВремТоварыНаСкладахОстаткиПоСкладам
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(
,
Номенклатура В
(ВЫБРАТЬ
ВремНоменклатура.Номенклатура
ИЗ
ВремНоменклатура)
И Склад В
(ВЫБРАТЬ
ВремСклады.Склад
ИЗ
ВремСклады)) КАК Остатки
ИНДЕКСИРОВАТЬ ПО
Остатки.Номенклатура,
Остатки.ХарактеристикаНоменклатуры,
Остатки.Склад
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Остатки.Номенклатура,
Остатки.ХарактеристикаНоменклатуры,
Остатки.КоличествоОстаток,
Остатки.Склад
ПОМЕСТИТЬ ВремТоварыВРозницеОстаткиПоСкладам
ИЗ
РегистрНакопления.ТоварыВРознице.Остатки(
,
Номенклатура В
(ВЫБРАТЬ
ВремНоменклатура.Номенклатура
ИЗ
ВремНоменклатура)
И Склад В
(ВЫБРАТЬ
ВремСклады.Склад
ИЗ
ВремСклады)) КАК Остатки
ИНДЕКСИРОВАТЬ ПО
Остатки.Номенклатура,
Остатки.ХарактеристикаНоменклатуры,
Остатки.Склад
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Остатки.Номенклатура,
Остатки.ХарактеристикаНоменклатуры,
Остатки.КоличествоОстаток,
Остатки.Склад
ПОМЕСТИТЬ ВремТоварыВНТТОстаткиПоСкладам
ИЗ
РегистрНакопления.ТоварыВНТТ.Остатки(
,
Номенклатура В
(ВЫБРАТЬ
ВремНоменклатура.Номенклатура
ИЗ
ВремНоменклатура)
И Склад В
(ВЫБРАТЬ
ВремСклады.Склад
ИЗ
ВремСклады)) КАК Остатки
ИНДЕКСИРОВАТЬ ПО
Остатки.Номенклатура,
Остатки.ХарактеристикаНоменклатуры,
Остатки.Склад
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Остатки.Номенклатура,
Остатки.ХарактеристикаНоменклатуры,
Остатки.КоличествоОстаток,
Остатки.Склад
ПОМЕСТИТЬ ВремТоварыВРезервеНаСкладахОстаткиПоСкладам
ИЗ
РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(
,
Номенклатура В
(ВЫБРАТЬ
ВремНоменклатура.Номенклатура
ИЗ
ВремНоменклатура)
И Склад В
(ВЫБРАТЬ
ВремСклады.Склад
ИЗ
ВремСклады)) КАК Остатки
ИНДЕКСИРОВАТЬ ПО
Остатки.Номенклатура,
Остатки.ХарактеристикаНоменклатуры,
Остатки.Склад
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Остатки.Номенклатура,
Остатки.ХарактеристикаНоменклатуры,
Остатки.КоличествоОстаток,
Остатки.Склад
ПОМЕСТИТЬ ВремТоварыКПередачеСоСкладовОстаткиПоСкладам
ИЗ
РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(
,
Номенклатура В
(ВЫБРАТЬ
ВремНоменклатура.Номенклатура
ИЗ
ВремНоменклатура)
И Склад В
(ВЫБРАТЬ
ВремСклады.Склад
ИЗ
ВремСклады)) КАК Остатки
ИНДЕКСИРОВАТЬ ПО
Остатки.Номенклатура,
Остатки.ХарактеристикаНоменклатуры,
Остатки.Склад
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
НоменклатураСХарактеристиками.Номенклатура КАК Номенклатура,
НоменклатураСХарактеристиками.Характеристика КАК Характеристика,
ЕСТЬNULL(ТоварыОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток, 0) КАК Остаток
ПОМЕСТИТЬ ВремОстатки
ИЗ
ВремНоменклатураСХарактеристикамиВся КАК НоменклатураСХарактеристиками
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВремТоварыНаСкладахОстаткиПоСкладам КАК ТоварыОстатки
ПО НоменклатураСХарактеристиками.Номенклатура = ТоварыОстатки.Номенклатура
И НоменклатураСХарактеристиками.Характеристика = ТоварыОстатки.ХарактеристикаНоменклатуры
ЛЕВОЕ СОЕДИНЕНИЕ ВремТоварыВРезервеНаСкладахОстаткиПоСкладам КАК ТоварыВРезервеНаСкладахОстатки
ПО НоменклатураСХарактеристиками.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
И НоменклатураСХарактеристиками.Характеристика = ТоварыВРезервеНаСкладахОстатки.ХарактеристикаНоменклатуры
И (ТоварыОстатки.Склад = ТоварыВРезервеНаСкладахОстатки.Склад)
ЛЕВОЕ СОЕДИНЕНИЕ ВремТоварыКПередачеСоСкладовОстаткиПоСкладам КАК ТоварыКПередачеСоСкладовОстатки
ПО НоменклатураСХарактеристиками.Номенклатура = ТоварыКПередачеСоСкладовОстатки.Номенклатура
И НоменклатураСХарактеристиками.Характеристика = ТоварыКПередачеСоСкладовОстатки.ХарактеристикаНоменклатуры
И (ТоварыОстатки.Склад = ТоварыКПередачеСоСкладовОстатки.Склад)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
НоменклатураСХарактеристиками.Номенклатура,
НоменклатураСХарактеристиками.Характеристика,
ЕСТЬNULL(ТоварыОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток, 0)
ИЗ
ВремНоменклатураСХарактеристикамиВся КАК НоменклатураСХарактеристиками
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВремТоварыВРозницеОстаткиПоСкладам КАК ТоварыОстатки
ПО НоменклатураСХарактеристиками.Номенклатура = ТоварыОстатки.Номенклатура
И НоменклатураСХарактеристиками.Характеристика = ТоварыОстатки.ХарактеристикаНоменклатуры
ЛЕВОЕ СОЕДИНЕНИЕ ВремТоварыВРезервеНаСкладахОстаткиПоСкладам КАК ТоварыВРезервеНаСкладахОстатки
ПО НоменклатураСХарактеристиками.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
И НоменклатураСХарактеристиками.Характеристика = ТоварыВРезервеНаСкладахОстатки.ХарактеристикаНоменклатуры
И (ТоварыОстатки.Склад = ТоварыВРезервеНаСкладахОстатки.Склад)
ЛЕВОЕ СОЕДИНЕНИЕ ВремТоварыКПередачеСоСкладовОстаткиПоСкладам КАК ТоварыКПередачеСоСкладовОстатки
ПО НоменклатураСХарактеристиками.Номенклатура = ТоварыКПередачеСоСкладовОстатки.Номенклатура
И НоменклатураСХарактеристиками.Характеристика = ТоварыКПередачеСоСкладовОстатки.ХарактеристикаНоменклатуры
И (ТоварыОстатки.Склад = ТоварыКПередачеСоСкладовОстатки.Склад)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
НоменклатураСХарактеристиками.Номенклатура,
НоменклатураСХарактеристиками.Характеристика,
ЕСТЬNULL(ТоварыОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток, 0)
ИЗ
ВремНоменклатураСХарактеристикамиВся КАК НоменклатураСХарактеристиками
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВремТоварыВНТТОстаткиПоСкладам КАК ТоварыОстатки
ПО НоменклатураСХарактеристиками.Номенклатура = ТоварыОстатки.Номенклатура
И НоменклатураСХарактеристиками.Характеристика = ТоварыОстатки.ХарактеристикаНоменклатуры
ЛЕВОЕ СОЕДИНЕНИЕ ВремТоварыВРезервеНаСкладахОстаткиПоСкладам КАК ТоварыВРезервеНаСкладахОстатки
ПО НоменклатураСХарактеристиками.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
И НоменклатураСХарактеристиками.Характеристика = ТоварыВРезервеНаСкладахОстатки.ХарактеристикаНоменклатуры
И (ТоварыОстатки.Склад = ТоварыВРезервеНаСкладахОстатки.Склад)
ЛЕВОЕ СОЕДИНЕНИЕ ВремТоварыКПередачеСоСкладовОстаткиПоСкладам КАК ТоварыКПередачеСоСкладовОстатки
ПО НоменклатураСХарактеристиками.Номенклатура = ТоварыКПередачеСоСкладовОстатки.Номенклатура
И НоменклатураСХарактеристиками.Характеристика = ТоварыКПередачеСоСкладовОстатки.ХарактеристикаНоменклатуры
И (ТоварыОстатки.Склад = ТоварыКПередачеСоСкладовОстатки.Склад)
ИНДЕКСИРОВАТЬ ПО
Номенклатура,
Характеристика
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВремТоварыНаСкладахОстаткиПоСкладам
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВремТоварыВРозницеОстаткиПоСкладам
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВремТоварыВНТТОстаткиПоСкладам
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВремТоварыВРезервеНаСкладахОстаткиПоСкладам
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВремТоварыКПередачеСоСкладовОстаткиПоСкладам
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
ВремНоменклатура.Номенклатура КАК Номенклатура,
ВЫБОР
КОГДА ВремНоменклатура.Идентификатор = """"
ТОГДА ВремНоменклатура.Номенклатура
ИНАЧЕ ВремНоменклатура.Идентификатор
КОНЕЦ КАК НоменклатураИдентификатор,
ВремНоменклатура.ВерсияДанных КАК НоменклатураВерсияДанных,
ВремНоменклатура.ПометкаУдаления КАК НоменклатураПометкаУдаления,
ВремНоменклатура.Наименование,
ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК Характеристика,
"""" КАК ХарактеристикаИдентификатор,
"""" КАК ХарактеристикаВерсияДанных,
"""" КАК ХарактеристикаПометкаУдаления,
"""" КАК ХарактеристикаНаименование,
ВремНоменклатура.ВестиУчетПоХарактеристикам,
ВремНоменклатура.Набор
ИЛИ ВремНоменклатура.Комплект КАК КомплектНабор,
ВремНоменклатура.ПриоритетСортировки
ПОМЕСТИТЬ ВремНоменклатураСХарактеристиками
ИЗ
ВремНоменклатура КАК ВремНоменклатура
ГДЕ
(ВремНоменклатура.ВестиУчетПоХарактеристикам
И &ВыгружатьНоменклатуруКакПредложение
ИЛИ НЕ ВремНоменклатура.ВестиУчетПоХарактеристикам)
И ВЫБОР
КОГДА &ВыгружатьТолькоСЦеной
И НЕ ВремНоменклатура.ЭтоКомплектующая
ТОГДА (ВремНоменклатура.Номенклатура, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) В
(ВЫБРАТЬ
ВремЦены.Номенклатура,
ВремЦены.Характеристика
ИЗ
ВремЦены КАК ВремЦены)
ИНАЧЕ ИСТИНА
КОНЕЦ
И ВремНоменклатура.ВестиУчетПоХарактеристикам = ЛОЖЬ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ВремНоменклатура.Номенклатура,
ЕСТЬNULL(РИ_ИдентификаторыНоменклатурыБитрикс.Идентификатор, ВремНоменклатура.Номенклатура),
ВремНоменклатура.ВерсияДанных,
ВремНоменклатура.ПометкаУдаления,
ВремНоменклатура.Наименование,
ХарактеристикиНоменклатуры.Ссылка,
ЕСТЬNULL(РИ_ИдентификаторыХарактеристикНоменклатурыБитрикс.Идентификатор, ХарактеристикиНоменклатуры.Ссылка),
ХарактеристикиНоменклатуры.ВерсияДанных,
ХарактеристикиНоменклатуры.ПометкаУдаления,
ХарактеристикиНоменклатуры.Наименование,
ИСТИНА,
ВремНоменклатура.Набор
ИЛИ ВремНоменклатура.Комплект,
ВремНоменклатура.ПриоритетСортировки
ИЗ
Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВремНоменклатура КАК ВремНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РИ_ИдентификаторыНоменклатурыБитрикс КАК РИ_ИдентификаторыНоменклатурыБитрикс
ПО ВремНоменклатура.Номенклатура = РИ_ИдентификаторыНоменклатурыБитрикс.Объект
ПО ХарактеристикиНоменклатуры.Владелец = ВремНоменклатура.Номенклатура
И (ВремНоменклатура.ВестиУчетПоХарактеристикам)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РИ_ИдентификаторыХарактеристикНоменклатурыБитрикс КАК РИ_ИдентификаторыХарактеристикНоменклатурыБитрикс
ПО ХарактеристикиНоменклатуры.Ссылка = РИ_ИдентификаторыХарактеристикНоменклатурыБитрикс.Объект
ГДЕ
ВЫБОР
КОГДА &ВыгружатьТолькоСЦеной
И НЕ ВремНоменклатура.ЭтоКомплектующая
ТОГДА ХарактеристикиНоменклатуры.Ссылка В
(ВЫБРАТЬ
ВремЦены.Характеристика
ИЗ
ВремЦены КАК ВремЦены)
ИНАЧЕ ИСТИНА
КОНЕЦ
И ВЫБОР
КОГДА НЕ &ВыгружатьПредложенияТолькоСОстатками
ИЛИ ВремНоменклатура.ЭтоКомплектующая
ТОГДА ИСТИНА
ИНАЧЕ (ВремНоменклатура.Номенклатура, ХарактеристикиНоменклатуры.Ссылка) В
(ВЫБРАТЬ
ВремОстатки.Номенклатура,
ВремОстатки.Характеристика
ИЗ
ВремОстатки КАК ВремОстатки)
КОНЕЦ
// user773200 -->
И ХарактеристикиНоменклатуры.Ссылка В
(ВЫБРАТЬ Объект
ИЗ
РегистрСведений.ЗначенияСвойствОбъектов КАК значениясвойствобъектов
ГДЕ
ТИПЗНАЧЕНИЯ(значениясвойствобъектов.Объект) = ТИП(Справочник.ХарактеристикиНоменклатуры)
И значениясвойствобъектов.Свойство = &ВыгружатьНаСайт
И значениясвойствобъектов.Значение = ИСТИНА
)
И ВремНоменклатура.ВестиУчетПоХарактеристикам = ИСТИНА
// user773200 <--
ИНДЕКСИРОВАТЬ ПО
Номенклатура,
Характеристика
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЗначенияСвойствОбъектов.Объект КАК Номенклатура,
ЗначенияСвойствОбъектов.Свойство,
ЗначенияСвойствОбъектов.Значение
ПОМЕСТИТЬ ВремЗначенияСвойствТоваровДляВыгрузкиРеквизитовПоПользовательсокмуАлгоритму
ИЗ
РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ГДЕ
ЗначенияСвойствОбъектов.Объект В
(ВЫБРАТЬ
ВремНоменклатура.Номенклатура
ИЗ
ВремНоменклатура)
ИНДЕКСИРОВАТЬ ПО
Номенклатура
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВремНоменклатураСХарактеристикамиВся
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВремОстатки
;
////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВремЦены";
Теперь нам осталось внести изменения в программный код для формирования уникального идентификатора характеристик номенклатуры (в сформированном XML-файле с выгрузкой торгового каталога они будут называться торговые предложения) и для формирования уникального идентификатора номенклатуры. Найдем в общих модулях модуль Б_ПроцедурыИФункцииВыгрузкиДанныхНаСайт. В этом модуле находим процедуру
ВыгрузитьПредложенияXDTO(ПараметрыОбмена, ИмяКаталога, Владелец, ВладелецТип, лМенеджерВременныхТаблиц, МассивКартинок, МассивФайлов) и вносим в нее следующие изменения для ИД характеристик:
//лИд = XMLСтрока(ТекПредложение.НоменклатураИдентификатор) + "#" + XMLСтрока(ТекПредложение.ХарактеристикаИдентификатор);
лИд = XMLСтрока(ТекПредложение.Номенклатура.УникальныйИдентификатор()) + "#" + XMLСтрока(ТекПредложение.Характеристика.УникальныйИдентификатор());
И для ИД номенклатуры:
//лИд = XMLСтрока(ТекПредложение.НоменклатураИдентификатор);
лИд = XMLСтрока(ТекПредложение.Номенклатура.УникальныйИдентификатор());
Для каждого ТекПредложение из ТзнПредложений Цикл
XDTOПредложение = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOПредложениеТип);
Если ЗначениеЗаполнено(ТекПредложение.Характеристика) тогда
// user773200 -->
//лИд = XMLСтрока(ТекПредложение.НоменклатураИдентификатор) + "#" + XMLСтрока(ТекПредложение.ХарактеристикаИдентификатор);
лИд = XMLСтрока(ТекПредложение.Номенклатура.УникальныйИдентификатор()) + "#" + XMLСтрока(ТекПредложение.Характеристика.УникальныйИдентификатор());
// user773200 <--
Если ПараметрыОбмена.ВыгружатьШтрихкоды тогда
лШтрихкод = ПолучитьШтрихКод(ТекПредложение.Номенклатура, лМенеджерВременныхТаблиц, ТекПредложение.Характеристика);
КонецЕсли;
Если ПараметрыОбмена.ВыгружатьПланируемуюДатуПоступленияПредложения тогда
лПланируемаяДатаПоступления = ПолучитьДатуПланирования(лМенеджерВременныхТаблиц, ТекПредложение.Номенклатура, ТекПредложение.Характеристика);
КонецЕсли;
// АМЕ ЛК сайт здесь названия характеристик (предложений)
//лНаименование = ТекПредложение.Наименование + " (" + ТекПредложение.ХарактеристикаНаименование + ")";
лНаименование = ТекПредложение.Наименование + " (" + ТекПредложение.ХарактеристикаНаименование + ")";
лВерсияДанных = ТекПредложение.ХарактеристикаВерсияДанных;
лПометкаУдаления= XMLСтрока(ТекПредложение.НоменклатураПометкаУдаления ИЛИ ТекПредложение.ХарактеристикаПометкаУдаления);
Иначе
// user773200 -->
//лИд = XMLСтрока(ТекПредложение.НоменклатураИдентификатор);
лИд = XMLСтрока(ТекПредложение.Номенклатура.УникальныйИдентификатор());
// user773200 <--
Если ПараметрыОбмена.ВыгружатьШтрихкоды тогда
лШтрихкод = ПолучитьШтрихКод(ТекПредложение.Номенклатура, лМенеджерВременныхТаблиц);
КонецЕсли;
Если ПараметрыОбмена.ВыгружатьПланируемуюДатуПоступленияПредложения тогда
лПланируемаяДатаПоступления = ПолучитьДатуПланирования(лМенеджерВременныхТаблиц, ТекПредложение.Номенклатура);
КонецЕсли;
лНаименование = ТекПредложение.Наименование;
лВерсияДанных = ТекПредложение.НоменклатураВерсияДанных;
лПометкаУдаления= XMLСтрока(ТекПредложение.НоменклатураПометкаУдаления);
КонецЕсли;
КонецЦикла;
Теперь компилируем программу и формируем xml-файл с выгрузкой торгового каталога. После проделанных изменений в выгрузку на сайт выгружаются только характеристики номенклатуры со свойством ВыгружатьНаСайт = истина или номенклатура, по которой не ведется учет в разрезе характеристик, но которая находится в справочнике «(Битрикс) Пользовательские группы товаров», уникальные идентификаторы характеристик номенклатуры являются действительно уникальными и торговый каталог заполняется программно из внешней обработки.