Пересчитать количество,после удаления области в отчете

1. user1008893 17.06.20 14:18 Сейчас в теме
Нужно пересчитать поле Потребности и запасы.
Сейчас вот так:

-Мат1 10
-Пленка 5
-белая 1
-черная 0
-красная 0

Помогите пожалуйста..
Процедура ВывестиГруппировкуПечать(ВхМакет, ВхЗапрВыб, ВхТипГр, ВхНомГр, ВхТаблГр, ВхУровень, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику = Неопределено)
   
	_ДнейВМесяце = 30;
	
	_ИмяСекции                  = ?(ВхТипГр = "Строки", "Гр" + ВхУровень, "ГрИтоги");
	_ИмяГр                      = ВхТаблГр[ВхНомГр].ИмяИзмерения;
	_ВыводитьИтогиПоГруппировке = ВхТаблГр[ВхНомГр].ВыводитьИтоги;
	_ТипИзмерения               = ВхТаблГр[ВхНомГр].ТипИзмерения;
	_КолЗаказать = 1;
	
	Пока ВхЗапрВыб.Следующий() Цикл
		
		// "_ИмяСекции|Начало"
		
		Если ВхТипГр = "Итоги" Тогда
			
			Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
			ВхТаблДок.Вывести(Область, ВхУровень);
			
		Иначе    
			
			_ЗначениеГр = ВхЗапрВыб[_ИмяГр];// значение группировки по имени
			
			
			Если ВхНомГр = (ВхТаблГр.Количество() - 1) И _ИмяГр = "ВариантИсполнения" Тогда// последняя группировка ("ВариантИсполнения")
				
				Если глПустоеЗначение(_ЗначениеГр) Тогда
					Продолжить;    
				КонецЕсли;     
			КонецЕсли;
			
			Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
			Если ТипЗнч(_ЗначениеГр) = Тип("СправочникСсылка.Номенклатура") Тогда
				Если _ЗначениеГр.ЭтоГруппа Тогда
					Область.Параметры.ЗначениеГрСтр = ВРЕГ(глНоменклатураСтр(_ЗначениеГр));
				Иначе
					
					
					Область.Параметры.ЗначениеГрСтр = глНоменклатураСтр(_ЗначениеГр, Ложь) + ", " +  _ЗначениеГр[ИспользуемыеЕдиницыИзмерения];
					
					// для номенклатуры (элементов -> итоги будем выводить при условии, что тип измерения выбран как "Иерархия")
					
					Если _ТипИзмерения = ТипИзмеренияПостроителяОтчета.Иерархия Тогда
						_ВыводитьИтогиПоГруппировке = Истина;
					КонецЕсли;
					
				КонецЕсли;
			Иначе
				
				Область.Параметры.ЗначениеГрСтр = _ЗначениеГр;
				
			КонецЕсли;
			Область.Параметры.Расшифровка   = _ЗначениеГр;
			ВхТаблДок.Вывести(Область, ВхУровень);
		КонецЕсли;    
		
		Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ВертикальныйРазделитель1");
		ВхТаблДок.Присоединить(Область);
		
		// расшифровки работают только для группировок "Номенклатура" и "ВариантИсполнения"
		
		Если _ИмяГр = "Номенклатура" Тогда
			_Номенклатура   = _ЗначениеГр;
			_ВариантИсполнения = Справочники.ВариантыИсполнения.ПустаяСсылка();
			_ОснПоставщик     = ?(ГруппироватьПоОснПоставщику, ВхЗапрВыб.ОснПоставщик, Неопределено);
			
		ИначеЕсли _ИмяГр = "ВариантИсполнения" Тогда
			_Номенклатура   = _ЗначениеГр.Владелец;
			_ВариантИсполнения = _ЗначениеГр;
			_ОснПоставщик     = ?(ГруппироватьПоОснПоставщику, ВхЗапрВыб.ОснПоставщик, Неопределено);
		КонецЕсли;
		_ЕдИзм = ?(_Номенклатура = Неопределено, Неопределено, _Номенклатура[ИспользуемыеЕдиницыИзмерения]);
		
		Если _ИмяГр = "Номенклатура"
			И НЕ _Номенклатура.ЭтоГруппа
			И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда
			
			_ВариантИсполненияНоменклатуры = _Номенклатура.ОсновнойВариантИсполнения;
			
		КонецЕсли;
		
		Если _ИмяГр = "Номенклатура" И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
			ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
			
			//Область.Параметры.СрокПоставки     = ВхЗапрВыб.СрокПоставкиДней;
			
			
			_ТочкаЗаказа = ВхЗапрВыб.КолРасходЗаДень * ВхЗапрВыб.СрокПоставкиДней + ВхЗапрВыб.КолМинОстаток;
			//Область.Параметры.ТочкаЗаказа     = _ТочкаЗаказа;
			
			
			_МинЗаказ = ВхЗапрВыб.КолРасходЗаДень * ВхЗапрВыб.СрокПоставкиДней + (_ТочкаЗаказа - ВхЗапрВыб.КолОстаток);
			Если _МинЗаказ < 0 Тогда
				_МинЗаказ = 0;
			КонецЕсли;
			//Область.Параметры.МинЗаказ         = _МинЗаказ;
			
		КонецЕсли;
		_КолВидовВыводимыхПотребностей = 0 + АнализВнешнейПотребности + АнализПотребностиПроизводства + АнализВнутреннейПотребности;  
		
		Если АнализВнешнейПотребности Тогда
			Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + ?(_КолВидовВыводимыхПотребностей > 1, "|Потребности", "|Потребность"));
			Область.Параметры.КолПотребность = ?(_ВыводитьИтогиПоГруппировке, ВхЗапрВыб.КолПотребностьВнешнаяя, 0);
			Если _ИмяГр = "Номенклатура" ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
				Область.Параметры.КолПотребностьРасшифровка = Новый Структура("ТипРасшифровки, Номенклатура, ВариантИсполнения", "ВнешняяПотребность",  _Номенклатура, _ВариантИсполнения);
			КонецЕсли;
			ВхТаблДок.Присоединить(Область);
		КонецЕсли;
		
		Если АнализПотребностиПроизводства Тогда
			Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + ?(_КолВидовВыводимыхПотребностей > 1, "|Потребности", "|Потребность"));
			Область.Параметры.КолПотребность = ?(_ВыводитьИтогиПоГруппировке, ВхЗапрВыб.КолПотребностьПроизводства, 0);
			Если _ИмяГр = "Номенклатура" ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
				Область.Параметры.КолПотребностьРасшифровка = Новый Структура("ТипРасшифровки, Номенклатура, ВариантИсполнения", "ПотребностьПроизводства", _Номенклатура, _ВариантИсполнения);
			КонецЕсли;
			ВхТаблДок.Присоединить(Область);
		КонецЕсли;
		
		Если АнализВнутреннейПотребности Тогда
			Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + ?(_КолВидовВыводимыхПотребностей > 1, "|Потребности", "|Потребность"));
			Область.Параметры.КолПотребность = ?(_ВыводитьИтогиПоГруппировке, ВхЗапрВыб.КолПотребностьВнутренняя, 0);
			Если _ИмяГр = "Номенклатура" ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
				Область.Параметры.КолПотребностьРасшифровка = Новый Структура("ТипРасшифровки, Номенклатура, ВариантИсполнения", "ПотребностьВнутренняя", _Номенклатура, _ВариантИсполнения);
			КонецЕсли;
			ВхТаблДок.Присоединить(Область);
		КонецЕсли;
		
		Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ВертикальныйРазделитель1");
		ВхТаблДок.Присоединить(Область);
		
		// "_ИмяСекции|Запасы"
		Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Запасы");
		Область.Параметры.КолОстаток            = ?(_ВыводитьИтогиПоГруппировке, ВхЗапрВыб.КолОстаток,          0);
		ВхТаблДок.Присоединить(Область); 
		
		Если НЕ ТолькоУтвержденныеЗаказыОбеспечение Тогда
			
			// "_ИмяСекции|ИтогоЗаказ"
			
			_КолЗаказать = 0;
			
			Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ИтогоЗаказ");
			Если _ИмяГр = "Номенклатура" И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
				ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
				
				_КолДефицит = -ВхЗапрВыб.КолПрофицит;
				
				Если    // Заготовки раскроя в производство не заказываем, т.к. не поддерживается ввод заказов на резку
					
					(Есть.Раскрой()
					И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
					И _Номенклатура.НоменклатурнаяГруппа.ЯвляетсяВыходомРаскроя
					)
					
					//автозапускаемые позиции запускаются обработкой запуск заказа в производство
					
					ИЛИ (_ИмяГр = "Номенклатура"//номенклатура с единственным вариантом (автозапускаемым в производство)
					
					И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
					И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
					И _ВариантИсполненияНоменклатуры.АвтоЗапускВПроизводство
					)
					
					ИЛИ (_ИмяГр = "ВариантИсполнения"//автозапускаемый в производство вариант исполнения
					
					И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
					И _ВариантИсполнения.АвтоЗапускВПроизводство
					) Тогда
					
					_КолЗаказать = 0;    
					
				Иначе
					
					Если _МинЗаказ > 0 ИЛИ _КолДефицит > 0 Тогда
						
						_КолЗаказать = Макс(_МинЗаказ, _КолДефицит,ВхЗапрВыб.НормаПополнения);
						
					КонецЕсли;
					
					Если _КолЗаказать > 0 И ВхЗапрВыб.МинПартияЗакупки > 0 Тогда
						
						_КолЗаказать = Окр((_КолЗаказать/ВхЗапрВыб.МинПартияЗакупки)+0.5)*ВхЗапрВыб.МинПартияЗакупки;
						
					КонецЕсли;
					
				КонецЕсли;
				
				// точность количества материалов в производстве равна 6 знакам, а заказать можно только с точностью в 3 знака
				
				Если Окр(_КолЗаказать, 3) < _КолЗаказать Тогда
					
					_КолЗаказать = Окр(_КолЗаказать, 3) + 0.001;
					
				КонецЕсли;
				
				
				Область.Параметры.НормаПополнения     = ВхЗапрВыб.НормаПополнения;
				Область.Параметры.КолЗаказать         = _КолЗаказать;
				
			КонецЕсли;
			ВхТаблДок.Присоединить(Область);
		КонецЕсли;
		УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы-Область.ВысотаТаблицы+1,,ВхТаблДок.ВысотаТаблицы,);
		СтараяВысота = ВхТаблДок.ВысотаТаблицы; 
		// вывод след. группировки
		
		Если ВхЗапрВыб.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда
			
			_ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр].ИмяИзмерения);
			ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхТаблГр, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
			Если ВхТаблДок.ВысотаТаблицы = СтараяВысота Тогда
				ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
			КонецЕсли;                
		Иначе
			Если _ИмяГр = "Номенклатура" И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда
				
				Если _КолЗаказать=0   тогда    
					ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
				КонецЕсли;                
				Продолжить;
			КонецЕсли;
			
			Если ВхНомГр + 1 < ВхТаблГр.Количество() Тогда
				_ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр + 1].ИмяИзмерения);// имя след. группировки
				
				ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхНомГр + 1, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
				Если ВхТаблДок.ВысотаТаблицы = СтараяВысота Тогда
					ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
				КонецЕсли;                
			ИначеЕсли _КолЗаказать=0   тогда    
				ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
			КонецЕсли;    
		КонецЕсли;    
		
	КонецЦикла;
	
	
КонецПроцедуры
Показать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. soft_wind 17.06.20 15:29 Сейчас в теме
(1)
Сейчас вот так:

-Мат1 10
-Пленка 5
-белая 1
-черная 0
-красная 0


и где у вас здесь: поле Потребности и запасы. ???
3. user1008893 17.06.20 15:42 Сейчас в теме
(2) Потребности
-Мат1 10
-Пленка 5
-белая 1
-черная 0
-красная 0

а у запасов смысл такой же
4. soft_wind 17.06.20 15:51 Сейчас в теме
5. user1008893 17.06.20 16:04 Сейчас в теме
(4)Ну вот потребности и запасы
Смотрете,там же у мат1 потребность должна быть 6,а стоит 10
7. user856012 13 17.06.20 16:20 Сейчас в теме
(5)
у мат1 потребность должна быть 6
То есть, вы складываете "Пленка" и "белая"? Ну-ну...

Боюсь, с такой "постановкой задачи" вам придется ждать помощи очень долго...

Рекомендую показать скриншот отчета или вообще выложить его в теме целиком.
8. user1008893 17.06.20 16:28 Сейчас в теме +1 $m
(7)извините,немного ошиблись, Нужно у пленки и мат1 =1
9. user856012 13 17.06.20 17:34 Сейчас в теме
(8)
извините,немного ошиблись
Угу, а "много" вы с сайтом ошиблись: это не форум телепатов, простые смертные программисты не в силах угадать, что там творится у блондинок в головах.
6. soft_wind 17.06.20 16:16 Сейчас в теме
у вас вообще какая-то каша получается

Материалов = 10
хотя Пленок = 5
в которые входит только Белая = 1

и по примеру столбиком сразу не сообразишь что из чего состоит

Надо все переделывать.

для оптимального отслеживания/анализа результата, используйте консоль запросов, там очень удобно строить запросы и тут же проверять результат
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот