==== Регистр сведений "eComm_ОстаткиПоставщиков" ====
Добавляем непериодический независимый регистр сведений "eComm_ОстаткиПоставщиков"
Измерения: Номенклатура, Характеристика
Ресурс: Наличие (Булево)
==== Общий модуль "eCommСерверДоработки" ====
=== Добавим метод "ПередУстановкойТекстаЗапросаИнициализацииДанныхВыгрузки" ===
Процедура ПередУстановкойТекстаЗапросаИнициализацииДанныхВыгрузки(СтруктураНастроек, ТекстЗапроса) Экспорт
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВрТабТаблицаТоваров.КоличествоОстаток ", " ВЫБОР
| КОГДА ВрТабТаблицаТоваров.КоличествоОстаток > 0
| ТОГДА ВрТабТаблицаТоваров.КоличествоОстаток
| КОГДА ЕСТЬNULL(eComm_ОстаткиПоставщиков.Наличие, ЛОЖЬ) = ИСТИНА
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ ");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//ДОПОЛНИТЕЛЬНЫЕ СОЕДИНЕНИЯ", " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.eComm_ОстаткиПоставщиков КАК eComm_ОстаткиПоставщиков
| ПО ВрТабТаблицаТоваров.Номенклатура = eComm_ОстаткиПоставщиков.Номенклатура
| И ВрТабТаблицаТоваров.ХарактеристикаНоменклатуры = eComm_ОстаткиПоставщиков.Характеристика");
КонецПроцедуры
=== Добавим метод "ВернутьНаличиеТоваровПоставщика" ===
Функция ВернутьНаличиеТоваровПоставщика(Номенклатура) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВрТабНоменклатура.Ссылка КАК Номенклатура,
| ЕСТЬNULL(СпрХарактеристикиНоменклатуры.Ссылка, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) КАК Характеристика
|ПОМЕСТИТЬ ВрТабНоменклатураХарактеристии
|ИЗ
| Справочник.Номенклатура КАК ВрТабНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК СпрХарактеристикиНоменклатуры
| ПО (ВрТабНоменклатура.Ссылка = СпрХарактеристикиНоменклатуры.Владелец
| ИЛИ ВрТабНоменклатура.КатегорияНоменклатуры = СпрХарактеристикиНоменклатуры.Владелец)
| И (ВрТабНоменклатура.ИспользоватьХарактеристики)
| И (СпрХарактеристикиНоменклатуры.ПометкаУдаления = ЛОЖЬ)
|ГДЕ
| ВрТабНоменклатура.Ссылка = &Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВрТабНоменклатураХарактеристии.Номенклатура,
| ВрТабНоменклатураХарактеристии.Характеристика,
| eComm_ОстаткиПоставщиков.Наличие
|ИЗ
| ВрТабНоменклатураХарактеристии КАК ВрТабНоменклатураХарактеристии
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.eComm_ОстаткиПоставщиков КАК eComm_ОстаткиПоставщиков
| ПО ВрТабНоменклатураХарактеристии.Номенклатура = eComm_ОстаткиПоставщиков.Номенклатура
| И ВрТабНоменклатураХарактеристии.Характеристика = eComm_ОстаткиПоставщиков.Характеристика";
Запрос.УстановитьПараметр("Ссылка", Номенклатура);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
==== Общий модуль "eCommСерверПереопределяемый" ====
=== Переопределим метод "ПередУстановкойТекстаЗапросаИнициализацииДанныхВыгрузки" ===
Процедура ПередУстановкойТекстаЗапросаИнициализацииДанныхВыгрузки(СтруктураНастроек, ТекстЗапроса) Экспорт
eCommСерверДоработки.ПередУстановкойТекстаЗапросаИнициализацииДанныхВыгрузки(СтруктураНастроек, ТекстЗапроса);
КонецПроцедуры
==== Форма элемента справочника "Номенклатура" ====
Добавим реквизиты и элементы на форму: https://prnt.sc/DXLLGsrUVcac
Сохраняемые данные = Истина
Добавим метод ПеречитатьОстаткиПоставщиков в конце модуля формы элемента справочника "Номенклатура"
&НаСервере
Процедура ПеречитатьОстаткиПоставщиков()
//++
eComm_ИспользоватьХарактеристики = Объект.ИспользоватьХарактеристики;
Элементы.eComm_ОстаткиПоставщиковНоменклатура.Видимость = НЕ eComm_ИспользоватьХарактеристики;
Элементы.eComm_ОстаткиПоставщиковХарактеристика.Видимость = eComm_ИспользоватьХарактеристики;
Набор = РегистрыСведений.eComm_ОстаткиПоставщиков.СоздатьНаборЗаписей();
Набор.Загрузить(eCommСерверДоработки.ВернутьНаличиеТоваровПоставщика(Объект.Ссылка));
ЗначениеВДанныеФормы(Набор,eComm_ОстаткиПоставщиков);
//--
КонецПроцедуры
Добавим вызов метода ПеречитатьОстаткиПоставщиков в конце обработчиков: ПриСозданииНаСервере, ПриЧтенииНаСервере, ПослеЗаписиНаСервере
ПеречитатьОстаткиПоставщиков(); //++ eComm
Привести метод ПриЗаписиНаСервере к виду:
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
// Шаблоны наименований
ШаблоныНаименований.ЗапомнитьШаблоныДляВидовНаименований(ЭтотОбъект, Объект.КатегорияНоменклатуры);
//++
Набор = ДанныеФормыВЗначение(eComm_ОстаткиПоставщиков, Тип("РегистрСведенийНаборЗаписей.eComm_ОстаткиПоставщиков"));
Набор.Отбор.Номенклатура.Использование = Истина;
Набор.Отбор.Номенклатура.ВидСравнения = ВидСравнения.Равно;
Набор.Отбор.Номенклатура.Значение = Объект.Ссылка;
Набор.Записать(Истина);
//--
КонецПроцедуры
==== Роль "БазовыеПраваУНФ" ====
Для роли "БазовыеПраваУНФ" добавляем права на "чтение / изменение / просмотр / редактирование" регистра сведений "eComm_ОстаткиПоставщиков"