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