Вес номенклатуры в документе "Заказ клиента", УТ 11.5
Учетные задачи - Логистика, склад и ТМЦ
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Доброго времени суток, в данном примере я продемонстрирую свое решение вот такой задачи - необходимо вывести вес номенклатуры в табличную часть документа "Заказ клиента", реквизиты должны быть созданы программно, вес пересчитывается при изменении количества, номенклатуры или упаковки, в подвале документа выводится итоговый вес.
1. Создаем программно новые реквизиты, поля формы документа и устанавливаем действие для нового реквизита "вес"
Процедура ДобавитьРеквизитыВеса()
МассивДобавляемыхРеквизитов = Новый Массив;
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Вес", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)),
"Объект.Товары", "Вес"));
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ВесИтого", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)),
"", "Итого вес", Ложь));
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Объем", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)),
"Объект.Товары", "Объем"));
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ВесУпаковки", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(18,9)),
"Объект.Товары", "Вес упаковки"));
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ОбъемУпаковки", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(18,9)),
"Объект.Товары", "Объем упаковки"));
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ЕдиницаИзмеренияВеса", Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"),
"Объект.Товары", "Единица измерения веса"));
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ЕдиницаИзмеренияОбъема",Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"),
"Объект.Товары", "Единица измерения объема"));
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ТипИзмеряемойВеличины", Новый ОписаниеТипов("ПеречислениеСсылка.ТипыИзмеряемыхВеличин"),
"Объект.Товары", "Единица измерения объема"));
ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);
//Добавляем поле в табличную часть документа
ЭлементВес = Элементы.Вставить("Вес", Тип("ПолеФормы"), Элементы.Товары,Элементы.ТоварыУпаковкаЕдиницаИзмерения);
ЭлементВес.Заголовок = "Вес";
ЭлементВес.ПутьКДанным = "Объект.Товары.Вес";
ЭлементВес.Вид = ВидПоляФормы.ПолеВвода;
ЭлементВес.ПропускатьПриВводе=Истина;
ЭлементВес.УстановитьДействие("ПриИзменении","Расш1_ТоварыВесПриИзменении");
//Добавляем поле в подвал формы
ЭлементВес = Элементы.Вставить("ВесИтого", Тип("ПолеФормы"), Элементы.ГруппаПодвал);
ЭлементВес.Вид = ВидПоляФормы.ПолеНадписи;
ЭлементВес.ПутьКДанным = "ВесИтого";
КонецПроцедуры
2. В расширении переопределяем обработчики событий элементов форм и вставляем необходимый код
&НаКлиенте
&ИзменениеИКонтроль("ТоварыНоменклатураПриИзменении")
Процедура Расш1_ТоварыНоменклатураПриИзменении(Элемент)
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
#Вставка
СтруктураДействий.Вставить("ЗаполнитьПризнакТипИзмеряемойВеличины", Новый Структура("Номенклатура", "ТипИзмеряемойВеличины"));
СтруктураДействий.Вставить("ЗаполнитьВесУпаковки",Новый Структура("Номенклатура, Упаковка", "ВесУпаковки"));
СтруктураДействий.Вставить("ЗаполнитьОбъемУпаковки",Новый Структура("Номенклатура, Упаковка", "ОбъемУпаковки"));
СтруктураДействий.Вставить("ЗаполнитьЕдиницуИзмеренияВеса",Новый Структура("Номенклатура, Упаковка", "ЕдиницаИзмеренияВеса"));
СтруктураДействий.Вставить("ЗаполнитьЕдиницуИзмеренияОбъема",Новый Структура("Номенклатура, Упаковка", "ЕдиницаИзмеренияОбъема"));
СтруктураДействий.Вставить("ПересчитатьВесОбъем");
#КонецВставки
//////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
КонецПроцедуры
Подобные изменения необходимо внести в ряд процедур обработчиков событий (при изменении количества, единицы измерения).
3. Описываем процедуру обработчика события для созданного реквизита "Вес"
&НаКлиенте
Процедура Расш1_ТоварыВесПриИзменении()
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковокПоВесу");
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма);
КонецПроцедуры
Проверено на следующих конфигурациях и релизах:
- Управление торговлей, редакция 11, релизы 11.5.17.90, 11.5.17.84
Вступайте в нашу телеграмм-группу Инфостарт