Как Увидеть цену закупки(себестоимость) в окне подбора номенклатуры
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
В модуле объекта обработки "Подбор номенклатуры" процедура:
// Процедура выводит в табличную часть "ПараметрыНоменклатуры"// текущие данные по номенклатуре.
Процедура ОбновитьПараметрыНоменклатуры(ФормаПодбора, ТабличноеПолеПараметрыНоменклатуры,
ТабличноеПолеНоменклатуры, ТабличноеПолеХарактеристик,
ПанельНоменклатурыХарактеристик) Экспорт
Ну прикрути туда себестоимость.
// Процедура выводит в табличную часть "ПараметрыНоменклатуры"// текущие данные по номенклатуре.
Процедура ОбновитьПараметрыНоменклатуры(ФормаПодбора, ТабличноеПолеПараметрыНоменклатуры,
ТабличноеПолеНоменклатуры, ТабличноеПолеХарактеристик,
ПанельНоменклатурыХарактеристик) Экспорт
Ну прикрути туда себестоимость.
Посмотрите, Я наверно криво прикрутил
Процедура ОбновитьПараметрыНоменклатуры(ФормаПодбора, ТабличноеПолеПараметрыНоменклатуры,
ТабличноеПолеНоменклатуры, ТабличноеПолеХарактеристик,
ПанельНоменклатурыХарактеристик, СебестоимостьНоменклатуры) Экспорт
Если РаботаСдиалогами.ЕстьРеквизитФормы(ФормаПодбора, "ОтображатьИнформацию")
И Не ФормаПодбора.ОтображатьИнформацию Тогда
Возврат;
КонецЕсли;
ПараметрыНоменклатуры = ТабличноеПолеПараметрыНоменклатуры.Значение;
ТекущаяСтрокаНоменклатураСписок = ТабличноеПолеНоменклатуры.ТекущаяСтрока;
Если ЗначениеЗаполнено(ТекущаяСтрокаНоменклатураСписок) Тогда
Номенклатура = ТекущаяСтрокаНоменклатураСписок.Ссылка;
Иначе
ПараметрыНоменклатуры.Очистить();
Возврат;
КонецЕсли;
ПараметрыНоменклатуры.Очистить();
Если мМенеджерВременныхТаблиц = Неопределено Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = мМенеджерВременныхТаблиц;
ТекстЗапроса = "ВЫБРАТЬ
| СебестоимостьНоменклатуры,
| Номенклатура,
| ХарактеристикаНоменклатуры,
| ЕдиницаИзмерения,
| Артикул,
| СтавкаНДС,
| НоменклатурнаяГруппа,
| Количество,
| Цена,
| ЦенаПоТипуЦен,
| ТипЦен,
| Склад КАК Склад,
| Магазин КАК Магазин,
| ПорядокМагазинов,
| ПорядокСкладов,
| СуммаПоТипуЦен,
| Сумма
|ИЗ
| ОстаткиГруппы КАК ОстаткиГруппы
|ГДЕ
| ОстаткиГруппы.Номенклатура = &Номенклатура
| И &УсловиеПоХарактеристике
|УПОРЯДОЧИТЬ ПО
| ПорядокМагазинов, Магазин.Код, ПорядокСкладов, Склад.Код
|ИТОГИ
| МАКСИМУМ(СебестоимостьНоменклатуры),
| МАКСИМУМ(ТипЦен),
| МАКСИМУМ(Цена),
| МАКСИМУМ(ЦенаПоТипуЦен),
| МАКСИМУМ(ПорядокМагазинов),
| МАКСИМУМ(ПорядокСкладов),
| СУММА(Количество),
| СУММА(СуммаПоТипуЦен),
| СУММА(Сумма)
|ПО
| Магазин,
| Склад";
Если ПанельНоменклатурыХарактеристик.ТекущаяСтраница = ПанельНоменклатурыХарактеристик.Страницы.Характеристики Тогда
ТекущаяСтрока = ТабличноеПолеХарактеристик.ТекущаяСтрока;
Если ТекущаяСтрока <> Неопределено Тогда
ХарактеристикаНоменклатуры = ТекущаяСтрока.ХарактеристикаНоменклатуры;
Если ТипЗнч(ХарактеристикаНоменклатуры) = Тип("СправочникСсылка.ХарактеристикиНоменклатуры") Тогда
Запрос.УстановитьПараметр("ХарактеристикаНоменклатуры", ХарактеристикаНоменклатуры);
Иначе
Возврат;
КонецЕсли;
Иначе
Возврат;
КонецЕсли;
ДополнениеЗапроса = "ОстаткиГруппы.ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры";
Иначе
ДополнениеЗапроса = "ИСТИНА";
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеПоХарактеристике", ДополнениеЗапроса);
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.Текст = ТекстЗапроса;
РезультатЗапроса = Запрос.Выполнить();
ВедетсяУчетПоХарактеристикам = ОбщегоНазначения.ПолучитьФлагУчетаХарактеристик(Номенклатура.ВидНоменклатуры);
ВыборкаМагазин = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
СтрокаРазделитель = Неопределено;
Пока ВыборкаМагазин.Следующий() Цикл
// Разделитель магазинов узла и магазинов сети
Если СтрокаРазделитель = Неопределено
И ВыборкаМагазин.ПорядокМагазинов = 2 Тогда
СтрокаРазделитель = ПараметрыНоменклатуры.Добавить();
СтрокаРазделитель.МагазинСклад = "Остальные магазины";
КонецЕсли;
СтрокаМагазин = ПараметрыНоменклатуры.Добавить();
СтрокаМагазин.МагазинСклад = ВыборкаМагазин.Магазин;
ЗаполнитьЗначенияСвойств(СтрокаМагазин, ВыборкаМагазин);
СтрокаМагазин.ТипЦен = Неопределено;
Если НЕ (мМассивМагазиновТекущегоУзла.Найти(СтрокаМагазин.МагазинСклад) <> Неопределено
Или мМассивМагазиновТекущегоУзла.Количество() = 0) Тогда
Продолжить;
КонецЕсли;
ВыборкаСклад = ВыборкаМагазин.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаСклад.Следующий() Цикл
Если ПроцедурыОбменаДаннымиПоКассе.ЭтоУзелКассы()
И ВыборкаСклад.Склад = null Тогда
Продолжить;
КонецЕсли;
СтрокаСклад = ПараметрыНоменклатуры.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаСклад, ВыборкаСклад);
СтрокаСклад.МагазинСклад = ВыборкаСклад.Склад;
Если НЕ ЗначениеЗаполнено(ВыборкаСклад.Склад)
Или ВыборкаСклад.Склад.ТипСклада = Перечисления.ТипыСкладов.ТорговыйЗал Тогда
СтрокаСклад.Цена = ВыборкаСклад.Цена;
СтрокаМагазин.Цена = ВыборкаСклад.Цена;
Иначе
СтрокаСклад.Цена = ВыборкаСклад.ЦенаПоТипуЦен;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
При попытке открыть подбор Выдаёт
{Обработка.ПодборНоменклатуры.МодульОбъекта(162)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
по причине:
{(2, 4)}: Поле не найдено "СебестоимостьНоменклатуры"
<<?>>СебестоимостьНоменклатуры,
HHHHHHHELP !!!
Процедура ОбновитьПараметрыНоменклатуры(ФормаПодбора, ТабличноеПолеПараметрыНоменклатуры,
ТабличноеПолеНоменклатуры, ТабличноеПолеХарактеристик,
ПанельНоменклатурыХарактеристик, СебестоимостьНоменклатуры) Экспорт
Если РаботаСдиалогами.ЕстьРеквизитФормы(ФормаПодбора, "ОтображатьИнформацию")
И Не ФормаПодбора.ОтображатьИнформацию Тогда
Возврат;
КонецЕсли;
ПараметрыНоменклатуры = ТабличноеПолеПараметрыНоменклатуры.Значение;
ТекущаяСтрокаНоменклатураСписок = ТабличноеПолеНоменклатуры.ТекущаяСтрока;
Если ЗначениеЗаполнено(ТекущаяСтрокаНоменклатураСписок) Тогда
Номенклатура = ТекущаяСтрокаНоменклатураСписок.Ссылка;
Иначе
ПараметрыНоменклатуры.Очистить();
Возврат;
КонецЕсли;
ПараметрыНоменклатуры.Очистить();
Если мМенеджерВременныхТаблиц = Неопределено Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = мМенеджерВременныхТаблиц;
ТекстЗапроса = "ВЫБРАТЬ
| СебестоимостьНоменклатуры,
| Номенклатура,
| ХарактеристикаНоменклатуры,
| ЕдиницаИзмерения,
| Артикул,
| СтавкаНДС,
| НоменклатурнаяГруппа,
| Количество,
| Цена,
| ЦенаПоТипуЦен,
| ТипЦен,
| Склад КАК Склад,
| Магазин КАК Магазин,
| ПорядокМагазинов,
| ПорядокСкладов,
| СуммаПоТипуЦен,
| Сумма
|ИЗ
| ОстаткиГруппы КАК ОстаткиГруппы
|ГДЕ
| ОстаткиГруппы.Номенклатура = &Номенклатура
| И &УсловиеПоХарактеристике
|УПОРЯДОЧИТЬ ПО
| ПорядокМагазинов, Магазин.Код, ПорядокСкладов, Склад.Код
|ИТОГИ
| МАКСИМУМ(СебестоимостьНоменклатуры),
| МАКСИМУМ(ТипЦен),
| МАКСИМУМ(Цена),
| МАКСИМУМ(ЦенаПоТипуЦен),
| МАКСИМУМ(ПорядокМагазинов),
| МАКСИМУМ(ПорядокСкладов),
| СУММА(Количество),
| СУММА(СуммаПоТипуЦен),
| СУММА(Сумма)
|ПО
| Магазин,
| Склад";
Если ПанельНоменклатурыХарактеристик.ТекущаяСтраница = ПанельНоменклатурыХарактеристик.Страницы.Характеристики Тогда
ТекущаяСтрока = ТабличноеПолеХарактеристик.ТекущаяСтрока;
Если ТекущаяСтрока <> Неопределено Тогда
ХарактеристикаНоменклатуры = ТекущаяСтрока.ХарактеристикаНоменклатуры;
Если ТипЗнч(ХарактеристикаНоменклатуры) = Тип("СправочникСсылка.ХарактеристикиНоменклатуры") Тогда
Запрос.УстановитьПараметр("ХарактеристикаНоменклатуры", ХарактеристикаНоменклатуры);
Иначе
Возврат;
КонецЕсли;
Иначе
Возврат;
КонецЕсли;
ДополнениеЗапроса = "ОстаткиГруппы.ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры";
Иначе
ДополнениеЗапроса = "ИСТИНА";
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеПоХарактеристике", ДополнениеЗапроса);
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.Текст = ТекстЗапроса;
РезультатЗапроса = Запрос.Выполнить();
ВедетсяУчетПоХарактеристикам = ОбщегоНазначения.ПолучитьФлагУчетаХарактеристик(Номенклатура.ВидНоменклатуры);
ВыборкаМагазин = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
СтрокаРазделитель = Неопределено;
Пока ВыборкаМагазин.Следующий() Цикл
// Разделитель магазинов узла и магазинов сети
Если СтрокаРазделитель = Неопределено
И ВыборкаМагазин.ПорядокМагазинов = 2 Тогда
СтрокаРазделитель = ПараметрыНоменклатуры.Добавить();
СтрокаРазделитель.МагазинСклад = "Остальные магазины";
КонецЕсли;
СтрокаМагазин = ПараметрыНоменклатуры.Добавить();
СтрокаМагазин.МагазинСклад = ВыборкаМагазин.Магазин;
ЗаполнитьЗначенияСвойств(СтрокаМагазин, ВыборкаМагазин);
СтрокаМагазин.ТипЦен = Неопределено;
Если НЕ (мМассивМагазиновТекущегоУзла.Найти(СтрокаМагазин.МагазинСклад) <> Неопределено
Или мМассивМагазиновТекущегоУзла.Количество() = 0) Тогда
Продолжить;
КонецЕсли;
ВыборкаСклад = ВыборкаМагазин.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаСклад.Следующий() Цикл
Если ПроцедурыОбменаДаннымиПоКассе.ЭтоУзелКассы()
И ВыборкаСклад.Склад = null Тогда
Продолжить;
КонецЕсли;
СтрокаСклад = ПараметрыНоменклатуры.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаСклад, ВыборкаСклад);
СтрокаСклад.МагазинСклад = ВыборкаСклад.Склад;
Если НЕ ЗначениеЗаполнено(ВыборкаСклад.Склад)
Или ВыборкаСклад.Склад.ТипСклада = Перечисления.ТипыСкладов.ТорговыйЗал Тогда
СтрокаСклад.Цена = ВыборкаСклад.Цена;
СтрокаМагазин.Цена = ВыборкаСклад.Цена;
Иначе
СтрокаСклад.Цена = ВыборкаСклад.ЦенаПоТипуЦен;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
При попытке открыть подбор Выдаёт
{Обработка.ПодборНоменклатуры.МодульОбъекта(162)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
по причине:
{(2, 4)}: Поле не найдено "СебестоимостьНоменклатуры"
<<?>>СебестоимостьНоменклатуры,
HHHHHHHELP !!!
Процедура "Процедура ОбновитьПараметрыНоменклатуры(ФормаПодбора, ТабличноеПолеПараметрыНоменклатуры,
ТабличноеПолеНоменклатуры, ТабличноеПолеХарактеристик,
ПанельНоменклатурыХарактеристик, СебестоимостьНоменклатуры) Экспорт"
Работает уже с подготовленной выборкой.
Сам запрос собирается в общем модуле УправлениеНоменклатурой.
Процедура "РассчитатьОстаткиПодбор(Дата, СписокНоменклатуры, ОтображатьЦены = Истина, МенеджерВременныхТаблиц, ИспользоватьХарактеристики = Ложь) Экспорт"
Вот тут и нужно прикручивать выборку из регистра Себестоимость номенклатуры.
Что то типа
ТекстЗапроса = "";
Если ОтображатьЦены Тогда
ТекстЗапроса = "
|ВЫБРАТЬ
| ЦеныНоменклатурыМагазиновСрезПоследних.Магазин КАК Магазин,
| ЦеныНоменклатурыМагазиновСрезПоследних.Номенклатура КАК Номенклатура
| " + ?(ИспользоватьХарактеристики, ", ЦеныНоменклатурыМагазиновСрезПоследних.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры","") + "
| , ЦеныНоменклатурыМагазиновСрезПоследних.Цена КАК Цена
|ПОМЕСТИТЬ ЦеныНоменклатурыМагазиновСрезПоследних
|ИЗ
| РегистрСведений.ЦеныНоменклатурыМагазинов.СрезПоследних(&Дата, &УсловиеПоНоменклатуре) КАК ЦеныНоменклатурыМагазиновСрезПоследних
|ИНДЕКСИРОВАТЬ ПО
| Магазин,
| Номенклатура
|" + ?(ИспользоватьХарактеристики, ", ХарактеристикаНоменклатуры","") + "
|;
|";
//+++++++++++++++++ Добавил
ТекстЗапроса = ТекстЗапроса + "
|ВЫБРАТЬ
| СебестоимостьНоменклатурыСрезПоследних.Магазин,
| СебестоимостьНоменклатурыСрезПоследних.Номенклатура
| " + ?(ИспользоватьХарактеристики, ", СебестоимостьНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры","") + "
| , СебестоимостьНоменклатурыСрезПоследних.Цена КАК Себестоимость
|ПОМЕСТИТЬ СебестоимостьНоменклатурыСрезПоследних
|ИЗ
| РегистрСведений.СебестоимостьНоменклатуры.СрезПоследних КАК СебестоимостьНоменклатурыСрезПоследних
|ИНДЕКСИРОВАТЬ ПО
| Магазин,
| Номенклатура
|" + ?(ИспользоватьХарактеристики, ", ХарактеристикаНоменклатуры","") + "
|;
|";
//-------------- Добавил
КонецЕсли;
......
ТабличноеПолеНоменклатуры, ТабличноеПолеХарактеристик,
ПанельНоменклатурыХарактеристик, СебестоимостьНоменклатуры) Экспорт"
Работает уже с подготовленной выборкой.
Сам запрос собирается в общем модуле УправлениеНоменклатурой.
Процедура "РассчитатьОстаткиПодбор(Дата, СписокНоменклатуры, ОтображатьЦены = Истина, МенеджерВременныхТаблиц, ИспользоватьХарактеристики = Ложь) Экспорт"
Вот тут и нужно прикручивать выборку из регистра Себестоимость номенклатуры.
Что то типа
ТекстЗапроса = "";
Если ОтображатьЦены Тогда
ТекстЗапроса = "
|ВЫБРАТЬ
| ЦеныНоменклатурыМагазиновСрезПоследних.Магазин КАК Магазин,
| ЦеныНоменклатурыМагазиновСрезПоследних.Номенклатура КАК Номенклатура
| " + ?(ИспользоватьХарактеристики, ", ЦеныНоменклатурыМагазиновСрезПоследних.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры","") + "
| , ЦеныНоменклатурыМагазиновСрезПоследних.Цена КАК Цена
|ПОМЕСТИТЬ ЦеныНоменклатурыМагазиновСрезПоследних
|ИЗ
| РегистрСведений.ЦеныНоменклатурыМагазинов.СрезПоследних(&Дата, &УсловиеПоНоменклатуре) КАК ЦеныНоменклатурыМагазиновСрезПоследних
|ИНДЕКСИРОВАТЬ ПО
| Магазин,
| Номенклатура
|" + ?(ИспользоватьХарактеристики, ", ХарактеристикаНоменклатуры","") + "
|;
|";
//+++++++++++++++++ Добавил
ТекстЗапроса = ТекстЗапроса + "
|ВЫБРАТЬ
| СебестоимостьНоменклатурыСрезПоследних.Магазин,
| СебестоимостьНоменклатурыСрезПоследних.Номенклатура
| " + ?(ИспользоватьХарактеристики, ", СебестоимостьНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры","") + "
| , СебестоимостьНоменклатурыСрезПоследних.Цена КАК Себестоимость
|ПОМЕСТИТЬ СебестоимостьНоменклатурыСрезПоследних
|ИЗ
| РегистрСведений.СебестоимостьНоменклатуры.СрезПоследних КАК СебестоимостьНоменклатурыСрезПоследних
|ИНДЕКСИРОВАТЬ ПО
| Магазин,
| Номенклатура
|" + ?(ИспользоватьХарактеристики, ", ХарактеристикаНоменклатуры","") + "
|;
|";
//-------------- Добавил
КонецЕсли;
......
Ошибка!!!
{Обработка.ПодборНоменклатуры.МодульОбъекта(162)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
по причине:
{(2, 4)}: Поле не найдено "СебестоимостьНоменклатуры"
<<?>>СебестоимостьНоменклатуры,
Правильно ли я Сделал
{Обработка.ПодборНоменклатуры.МодульОбъекта(162)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
по причине:
{(2, 4)}: Поле не найдено "СебестоимостьНоменклатуры"
<<?>>СебестоимостьНоменклатуры,
Правильно ли я Сделал
Конфигуратор показывает ошибку в этой ПРОЦЕДУРЕ!
// Процедура выводит в табличную часть "ПараметрыНоменклатуры"
// текущие данные по номенклатуре.
Процедура ОбновитьПараметрыНоменклатуры(ФормаПодбора, ТабличноеПолеПараметрыНоменклатуры,
ТабличноеПолеНоменклатуры, ТабличноеПолеХарактеристик,
ПанельНоменклатурыХарактеристик, СебестоимостьНоменклатуры) Экспорт
Если РаботаСдиалогами.ЕстьРеквизитФормы(ФормаПодбора, "ОтображатьИнформацию")
И Не ФормаПодбора.ОтображатьИнформацию Тогда
Возврат;
КонецЕсли;
ПараметрыНоменклатуры = ТабличноеПолеПараметрыНоменклатуры.Значение;
ТекущаяСтрокаНоменклатураСписок = ТабличноеПолеНоменклатуры.ТекущаяСтрока;
Если ЗначениеЗаполнено(ТекущаяСтрокаНоменклатураСписок) Тогда
Номенклатура = ТекущаяСтрокаНоменклатураСписок.Ссылка;
Иначе
ПараметрыНоменклатуры.Очистить();
Возврат;
КонецЕсли;
ПараметрыНоменклатуры.Очистить();
Если мМенеджерВременныхТаблиц = Неопределено Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = мМенеджерВременныхТаблиц;
ТекстЗапроса = "ВЫБРАТЬ
| СебестоимостьНоменклатуры,
| Номенклатура,
| ХарактеристикаНоменклатуры,
| ЕдиницаИзмерения,
| Артикул,
| СтавкаНДС,
| НоменклатурнаяГруппа,
| Количество,
| Цена,
| ЦенаПоТипуЦен,
| ТипЦен,
| Склад КАК Склад,
| Магазин КАК Магазин,
| ПорядокМагазинов,
| ПорядокСкладов,
| СуммаПоТипуЦен,
| Сумма
|ИЗ
| ОстаткиГруппы КАК ОстаткиГруппы
|ГДЕ
| ОстаткиГруппы.Номенклатура = &Номенклатура
| И &УсловиеПоХарактеристике
|УПОРЯДОЧИТЬ ПО
| ПорядокМагазинов, Магазин.Код, ПорядокСкладов, Склад.Код
|ИТОГИ
| МАКСИМУМ(СебестоимостьНоменклатуры),
| МАКСИМУМ(ТипЦен),
| МАКСИМУМ(Цена),
| МАКСИМУМ(ЦенаПоТипуЦен),
| МАКСИМУМ(ПорядокМагазинов),
| МАКСИМУМ(ПорядокСкладов),
| СУММА(Количество),
| СУММА(СуммаПоТипуЦен),
| СУММА(Сумма)
|ПО
| Магазин,
| Склад";
Если ПанельНоменклатурыХарактеристик.ТекущаяСтраница = ПанельНоменклатурыХарактеристик.Страницы.Характеристики Тогда
ТекущаяСтрока = ТабличноеПолеХарактеристик.ТекущаяСтрока;
Если ТекущаяСтрока <> Неопределено Тогда
ХарактеристикаНоменклатуры = ТекущаяСтрока.ХарактеристикаНоменклатуры;
Если ТипЗнч(ХарактеристикаНоменклатуры) = Тип("СправочникСсылка.ХарактеристикиНоменклатуры") Тогда
Запрос.УстановитьПараметр("ХарактеристикаНоменклатуры", ХарактеристикаНоменклатуры);
Иначе
Возврат;
КонецЕсли;
Иначе
Возврат;
КонецЕсли;
ДополнениеЗапроса = "ОстаткиГруппы.ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры";
Иначе
ДополнениеЗапроса = "ИСТИНА";
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеПоХарактеристике", ДополнениеЗапроса);
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.Текст = ТекстЗапроса;
РезультатЗапроса = Запрос.Выполнить();
ВедетсяУчетПоХарактеристикам = ОбщегоНазначения.ПолучитьФлагУчетаХарактеристик(Номенклатура.ВидНоменклатуры);
ВыборкаМагазин = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
СтрокаРазделитель = Неопределено;
Пока ВыборкаМагазин.Следующий() Цикл
// Разделитель магазинов узла и магазинов сети
Если СтрокаРазделитель = Неопределено
И ВыборкаМагазин.ПорядокМагазинов = 2 Тогда
СтрокаРазделитель = ПараметрыНоменклатуры.Добавить();
СтрокаРазделитель.МагазинСклад = "Остальные магазины";
КонецЕсли;
СтрокаМагазин = ПараметрыНоменклатуры.Добавить();
СтрокаМагазин.МагазинСклад = ВыборкаМагазин.Магазин;
ЗаполнитьЗначенияСвойств(СтрокаМагазин, ВыборкаМагазин);
СтрокаМагазин.ТипЦен = Неопределено;
Если НЕ (мМассивМагазиновТекущегоУзла.Найти(СтрокаМагазин.МагазинСклад) <> Неопределено
Или мМассивМагазиновТекущегоУзла.Количество() = 0) Тогда
Продолжить;
КонецЕсли;
ВыборкаСклад = ВыборкаМагазин.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаСклад.Следующий() Цикл
Если ПроцедурыОбменаДаннымиПоКассе.ЭтоУзелКассы()
И ВыборкаСклад.Склад = null Тогда
Продолжить;
КонецЕсли;
СтрокаСклад = ПараметрыНоменклатуры.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаСклад, ВыборкаСклад);
СтрокаСклад.МагазинСклад = ВыборкаСклад.Склад;
Если НЕ ЗначениеЗаполнено(ВыборкаСклад.Склад)
Или ВыборкаСклад.Склад.ТипСклада = Перечисления.ТипыСкладов.ТорговыйЗал Тогда
СтрокаСклад.Цена = ВыборкаСклад.Цена;
СтрокаМагазин.Цена = ВыборкаСклад.Цена;
Иначе
СтрокаСклад.Цена = ВыборкаСклад.ЦенаПоТипуЦен;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
// Процедура выводит в табличную часть "ПараметрыНоменклатуры"
// текущие данные по номенклатуре.
Процедура ОбновитьПараметрыНоменклатуры(ФормаПодбора, ТабличноеПолеПараметрыНоменклатуры,
ТабличноеПолеНоменклатуры, ТабличноеПолеХарактеристик,
ПанельНоменклатурыХарактеристик, СебестоимостьНоменклатуры) Экспорт
Если РаботаСдиалогами.ЕстьРеквизитФормы(ФормаПодбора, "ОтображатьИнформацию")
И Не ФормаПодбора.ОтображатьИнформацию Тогда
Возврат;
КонецЕсли;
ПараметрыНоменклатуры = ТабличноеПолеПараметрыНоменклатуры.Значение;
ТекущаяСтрокаНоменклатураСписок = ТабличноеПолеНоменклатуры.ТекущаяСтрока;
Если ЗначениеЗаполнено(ТекущаяСтрокаНоменклатураСписок) Тогда
Номенклатура = ТекущаяСтрокаНоменклатураСписок.Ссылка;
Иначе
ПараметрыНоменклатуры.Очистить();
Возврат;
КонецЕсли;
ПараметрыНоменклатуры.Очистить();
Если мМенеджерВременныхТаблиц = Неопределено Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = мМенеджерВременныхТаблиц;
ТекстЗапроса = "ВЫБРАТЬ
| СебестоимостьНоменклатуры,
| Номенклатура,
| ХарактеристикаНоменклатуры,
| ЕдиницаИзмерения,
| Артикул,
| СтавкаНДС,
| НоменклатурнаяГруппа,
| Количество,
| Цена,
| ЦенаПоТипуЦен,
| ТипЦен,
| Склад КАК Склад,
| Магазин КАК Магазин,
| ПорядокМагазинов,
| ПорядокСкладов,
| СуммаПоТипуЦен,
| Сумма
|ИЗ
| ОстаткиГруппы КАК ОстаткиГруппы
|ГДЕ
| ОстаткиГруппы.Номенклатура = &Номенклатура
| И &УсловиеПоХарактеристике
|УПОРЯДОЧИТЬ ПО
| ПорядокМагазинов, Магазин.Код, ПорядокСкладов, Склад.Код
|ИТОГИ
| МАКСИМУМ(СебестоимостьНоменклатуры),
| МАКСИМУМ(ТипЦен),
| МАКСИМУМ(Цена),
| МАКСИМУМ(ЦенаПоТипуЦен),
| МАКСИМУМ(ПорядокМагазинов),
| МАКСИМУМ(ПорядокСкладов),
| СУММА(Количество),
| СУММА(СуммаПоТипуЦен),
| СУММА(Сумма)
|ПО
| Магазин,
| Склад";
Если ПанельНоменклатурыХарактеристик.ТекущаяСтраница = ПанельНоменклатурыХарактеристик.Страницы.Характеристики Тогда
ТекущаяСтрока = ТабличноеПолеХарактеристик.ТекущаяСтрока;
Если ТекущаяСтрока <> Неопределено Тогда
ХарактеристикаНоменклатуры = ТекущаяСтрока.ХарактеристикаНоменклатуры;
Если ТипЗнч(ХарактеристикаНоменклатуры) = Тип("СправочникСсылка.ХарактеристикиНоменклатуры") Тогда
Запрос.УстановитьПараметр("ХарактеристикаНоменклатуры", ХарактеристикаНоменклатуры);
Иначе
Возврат;
КонецЕсли;
Иначе
Возврат;
КонецЕсли;
ДополнениеЗапроса = "ОстаткиГруппы.ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры";
Иначе
ДополнениеЗапроса = "ИСТИНА";
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеПоХарактеристике", ДополнениеЗапроса);
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.Текст = ТекстЗапроса;
РезультатЗапроса = Запрос.Выполнить();
ВедетсяУчетПоХарактеристикам = ОбщегоНазначения.ПолучитьФлагУчетаХарактеристик(Номенклатура.ВидНоменклатуры);
ВыборкаМагазин = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
СтрокаРазделитель = Неопределено;
Пока ВыборкаМагазин.Следующий() Цикл
// Разделитель магазинов узла и магазинов сети
Если СтрокаРазделитель = Неопределено
И ВыборкаМагазин.ПорядокМагазинов = 2 Тогда
СтрокаРазделитель = ПараметрыНоменклатуры.Добавить();
СтрокаРазделитель.МагазинСклад = "Остальные магазины";
КонецЕсли;
СтрокаМагазин = ПараметрыНоменклатуры.Добавить();
СтрокаМагазин.МагазинСклад = ВыборкаМагазин.Магазин;
ЗаполнитьЗначенияСвойств(СтрокаМагазин, ВыборкаМагазин);
СтрокаМагазин.ТипЦен = Неопределено;
Если НЕ (мМассивМагазиновТекущегоУзла.Найти(СтрокаМагазин.МагазинСклад) <> Неопределено
Или мМассивМагазиновТекущегоУзла.Количество() = 0) Тогда
Продолжить;
КонецЕсли;
ВыборкаСклад = ВыборкаМагазин.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаСклад.Следующий() Цикл
Если ПроцедурыОбменаДаннымиПоКассе.ЭтоУзелКассы()
И ВыборкаСклад.Склад = null Тогда
Продолжить;
КонецЕсли;
СтрокаСклад = ПараметрыНоменклатуры.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаСклад, ВыборкаСклад);
СтрокаСклад.МагазинСклад = ВыборкаСклад.Склад;
Если НЕ ЗначениеЗаполнено(ВыборкаСклад.Склад)
Или ВыборкаСклад.Склад.ТипСклада = Перечисления.ТипыСкладов.ТорговыйЗал Тогда
СтрокаСклад.Цена = ВыборкаСклад.Цена;
СтрокаМагазин.Цена = ВыборкаСклад.Цена;
Иначе
СтрокаСклад.Цена = ВыборкаСклад.ЦенаПоТипуЦен;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Из рабочей конфигурации....
Остаток, закуп, розница в самом списке элементов номенклатуры.
// Функция осуществляет получение последней цены прихода для элемента номенклатуры.
//
Функция ПолучитьЗакупочнуюЦену(Номенклатура)
Результат = РегистрыСведений.СебестоимостьНоменклатуры.СрезПоследних(ТекущаяДата(), Новый Структура("Номенклатура", Номенклатура));
Если Результат.Количество() > 0 Тогда
Возврат Результат[0].Цена;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
Процедура НоменклатураСписокПриПолученииДанных(Элемент, ОформленияСтрок)
// Использует API подбора
НоменклатураПриПолученииДанных(ЭтаФорма, ОформленияСтрок, ЭлементыФормы.НоменклатураСписок.Колонки.Картинка);
ВидимостьОстаток = ЭлементыФормы.НоменклатураСписок.Колонки.Остаток.Видимость;
ВидимостьЦена = ЭлементыФормы.НоменклатураСписок.Колонки.Цена.Видимость;
ВидимостьЦенаЗакуп = ЭлементыФормы.НоменклатураСписок.Колонки.ЦенаЗакупочная.Видимость;
Если Не ВидимостьОстаток И Не ВидимостьЦена И Не ВидимостьЦенаЗакуп Тогда
Возврат;
КонецЕсли;
МассивНоменклатуры = Новый Массив;
Соответствие = Новый Соответствие;
Для Каждого Строка Из ОформленияСтрок Цикл
Если Строка.ДанныеСтроки = Неопределено ИЛИ Строка.ДанныеСтроки.Ссылка.ЭтоГруппа Тогда
Продолжить;
КонецЕсли;
ТекущаяНоменклатура = Строка.ДанныеСтроки.Ссылка;
Если ВидимостьЦенаЗакуп Тогда
Строка.Ячейки.ЦенаЗакупочная.Значение = ПолучитьЗакупочнуюЦену(ТекущаяНоменклатура);
КонецЕсли;
Соответствие.Вставить(ТекущаяНоменклатура, Строка);
МассивНоменклатуры.Добавить(ТекущаяНоменклатура);
КонецЦикла;
ТаблицаОстатковЦен = УправлениеЗапасами.ПолучитьТаблицуОстатковЦенПоМагазину(ТекущаяДата(), МассивНоменклатуры, ПараметрыСеанса.ТекущийМагазин, ВидимостьОстаток, ВидимостьЦена);
Для Каждого ТекущаяСтрока Из ТаблицаОстатковЦен Цикл
Если ВидимостьОстаток Тогда
Соответствие.Получить(ТекущаяСтрока.Номенклатура).Ячейки.Остаток.Значение = ТекущаяСтрока.Остаток;
КонецЕсли;
Если ВидимостьЦена Тогда
Соответствие.Получить(ТекущаяСтрока.Номенклатура).Ячейки.Цена.Значение = ТекущаяСтрока.Цена;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Остаток, закуп, розница в самом списке элементов номенклатуры.
// Функция осуществляет получение последней цены прихода для элемента номенклатуры.
//
Функция ПолучитьЗакупочнуюЦену(Номенклатура)
Результат = РегистрыСведений.СебестоимостьНоменклатуры.СрезПоследних(ТекущаяДата(), Новый Структура("Номенклатура", Номенклатура));
Если Результат.Количество() > 0 Тогда
Возврат Результат[0].Цена;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
Процедура НоменклатураСписокПриПолученииДанных(Элемент, ОформленияСтрок)
// Использует API подбора
НоменклатураПриПолученииДанных(ЭтаФорма, ОформленияСтрок, ЭлементыФормы.НоменклатураСписок.Колонки.Картинка);
ВидимостьОстаток = ЭлементыФормы.НоменклатураСписок.Колонки.Остаток.Видимость;
ВидимостьЦена = ЭлементыФормы.НоменклатураСписок.Колонки.Цена.Видимость;
ВидимостьЦенаЗакуп = ЭлементыФормы.НоменклатураСписок.Колонки.ЦенаЗакупочная.Видимость;
Если Не ВидимостьОстаток И Не ВидимостьЦена И Не ВидимостьЦенаЗакуп Тогда
Возврат;
КонецЕсли;
МассивНоменклатуры = Новый Массив;
Соответствие = Новый Соответствие;
Для Каждого Строка Из ОформленияСтрок Цикл
Если Строка.ДанныеСтроки = Неопределено ИЛИ Строка.ДанныеСтроки.Ссылка.ЭтоГруппа Тогда
Продолжить;
КонецЕсли;
ТекущаяНоменклатура = Строка.ДанныеСтроки.Ссылка;
Если ВидимостьЦенаЗакуп Тогда
Строка.Ячейки.ЦенаЗакупочная.Значение = ПолучитьЗакупочнуюЦену(ТекущаяНоменклатура);
КонецЕсли;
Соответствие.Вставить(ТекущаяНоменклатура, Строка);
МассивНоменклатуры.Добавить(ТекущаяНоменклатура);
КонецЦикла;
ТаблицаОстатковЦен = УправлениеЗапасами.ПолучитьТаблицуОстатковЦенПоМагазину(ТекущаяДата(), МассивНоменклатуры, ПараметрыСеанса.ТекущийМагазин, ВидимостьОстаток, ВидимостьЦена);
Для Каждого ТекущаяСтрока Из ТаблицаОстатковЦен Цикл
Если ВидимостьОстаток Тогда
Соответствие.Получить(ТекущаяСтрока.Номенклатура).Ячейки.Остаток.Значение = ТекущаяСтрока.Остаток;
КонецЕсли;
Если ВидимостьЦена Тогда
Соответствие.Получить(ТекущаяСтрока.Номенклатура).Ячейки.Цена.Значение = ТекущаяСтрока.Цена;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот