Каталог решений - Как вывести итоговый вес и объем на форму документа Заказ клиента. УТ 11.4

Как вывести итоговый вес и объем на форму документа Заказ клиента. УТ 11.4

Как вывести итоговый вес и объем на форму документа Заказ клиента. УТ 11.4

В наличии

Всем привет, долго ломал голову, но с помощью тыка и подсказок более опытных программистов, вот что мне удалось достичь и как это я сделал.
Открываем конфигуратор — заходим в Документы-Заказ-Клиенту-Формы-ФормаДокумента, все будем делать только здесь, снизу формы две вкладки, в общем сама форма и модуль (как открыть, смотри рисунок — открыть форму).

Категория:

Описание

Создаем два табличных поля, у меня это ТоварВес и ТоварОбъем, указываем путь к данным — Объект.Товары.Номенклатура.Вес(Числитель) и указываем заголовок в свойствах, для более корректного отображения в списке колонок (смотри рисунок Создаем 2 поля)

 

.
Создаем реквизиты итоговых значений у меня это ИтогВес и ИтогОбъем с типом число, характеристики указывайте сами по умолчанию 10,3 (для создания реквизита нажмите на маленький плюсик в области реквизитов (смотри рисунок Реквизиты для итоговых)

 

.

Далее, поочередно цепляем мышкой созданные реквизиты в дерево формы, туда где вам необходимо, я сделал снизу (смотри рисунок Размещаем рисунок на форме)

 

Указываем Заголовок, вид выбираем поле надписи, путь присвоен автоматически. 
После этого в нижней части окна переходим на вкладку модуль и ищем процедуру ТоварыКоличествоУпаковокПриИзменении, и вставляем следующий код

//VID(
      Объем1 = 0;
        Вес1 = 0;
        Для Каждого Строка Из Объект.Товары Цикл
        Объем1 = Объем1 + Строка.Количество * Строка.Номенклатура.ОбъемЧислитель;            
        Вес1 = Вес1 + Строка.Количество * Строка.Номенклатура.ВесЧислитель;    
    КонецЦикла;    
        ИтогоВес = Вес1;
        ИтогоОбъем = Объем1;
//VID)  

 

(смотри рисунок код модуля)

 

После этого обновляем конфигурацию и смотрим что получилось Рисунок в итоге.

 

Т.е. после изменения количества снизу у нас просчитывается общий вес и объем всех товаров, а в колонках прописан вес и объем за 1 единицу товара.

При проверке выяснилось, что при выходе данные автоматически не проставляются, все что для этого нужно, чтобы при открытии заказа клиента, у вас уже были посчитаны данные, это в модуле формы документа найти процедуру ПриОткрытии и вставить в конец, тот же код.

Если Вам не нужны колонки с отображением веса за единицу, то можете их скрыть и создать новые или изменить заголовок для вывода общих построчных значений, ну например вы количество меняете на 4 вес товара у вас при этом 5 кг, и вместо 5 в окне должно писаться 20, т.е. сумма именно этих товаров в зависимости от количества, то нам необходимо, я не стал удалять текущие колонки,  создал новые Вес товара и Объем Товара. Дальше открыл конфигурации раскрыл документ заказ клиента, табличные части, товары и правой кнопкой создал реквизиты табличной части ВесТовара и ОбъемТовара, с типом Число, 15,3, далее как я уже и писал создал 2 поля ВесТовара иОбъем товара и указал путь к этим 2 реквизитам (смотри рисунок подсчет строк)

После этого заходим в модуль объекта формы и дополняем в те места где вставляли первоначальный код, следующий код

Для каждого СтрокаТД из Объект.Товары Цикл
			СтрокаТД.ВесТовара = СтрокаТД.Количество * СтрокаТД.Номенклатура.ВесЧислитель;
			СтрокаТД.ОбъемТовара = СтрокаТД.Количество * СтрокаТД.Номенклатура.ОбъемЧислитель;
	КонецЦикла;

Смотрим что получилось, вес и объем за 1 единицу товара я скрыл убрав в свойствах галочку видимость и теперь у меня построчный расчет веса и объема.

Смотри рисунок что вышло

Ребята при работе выяснилось, что данный код не работает в тонком клиенте, поэтому создайте следующую функцию прямо в модуле документа

//VID( добавляем наши реквизиты для тонкого клиента, без этой функции, код указанный при открытии ипри изменении количества работает только на толстом клиенте
 
&НаСервереБезКонтекста
Функция ПолучитьСведенияНоменклатуры(Номенклатура)
Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Номенклатура, "ОбъемЧислитель, ВесЧислитель");
КонецФункции
//VID)

и измените предыдущий код, во всех местах куда его вставляли!

//VID(
	  Объем1 = 0; 
      Вес1 = 0; 
      Для Каждого Строка Из Объект.Товары Цикл 

      СведенияНоменклатуры = ПолучитьСведенияНоменклатуры(Строка.Номенклатура); 

      Объем1 = Объем1 + Строка.Количество * СведенияНоменклатуры.ОбъемЧислитель; 
      Вес1 = Вес1 + Строка.Количество * СведенияНоменклатуры.ВесЧислитель; 

     Строка.ВесТовара = Строка.Количество * СведенияНоменклатуры.ВесЧислитель;
	  Строка.ОбъемТовара = Строка.Количество * СведенияНоменклатуры.ОбъемЧислитель;
	  
      КонецЦикла; 
      ИтогоВес = Вес1; 
      ИтогоОбъем = Объем1;     	  
	
//VID)	

Теперь надеюсь, точно все, пока полет нормальный

Спасибо, что прочли эту статью, всем всего хорошего.

has been added to your cart:
Оформление заказа