1. Intercititude 12.02.19 15:10 Сейчас в теме

Дело в уровнях ?

Есть документы "Внутренние заказы".
В них указывается номенклатура,у которой имеется своя Спецификация, которая в свою очередь содержит комплектующие.
На основании "Внутренних заказов" заполняется ТЧ "Потребности" - "Заполнить потребности".

Вопрос! Почему при нажатии кнопки "Заполнить потребности",табличная часть заполняется Комплектующими Спецификации? Хотя ДОЛЖНА заполняться только номенклатурой и её спецификации!

Подскажите в чём причина сего ?
Запрос, где мИспользоватьРазузлование = Истина:
	// Внутренние заказы
	Индекс = 0;
	
	Для каждого Строка из ВнутренниеЗаказы Цикл
		
		ЗапросНовыеПотребности.УстановитьПараметр("ВнутреннийЗаказДатаПотребности" + Формат(Индекс, "ЧГ=0"), НачалоДня(Строка.ДатаПотребности));
		
				
		ЗапросНовыеПотребности.Текст = ЗапросНовыеПотребности.Текст + "
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	&ДатаДокумента КАК Период,
		|	ВнутренниеЗаказыОстатки.Номенклатура КАК Номенклатура,
		|	ВнутренниеЗаказыОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
		|	ВнутренниеЗаказыОстатки.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения,
		|	ВЫБОР КОГДА	СтатусПартии = ЗНАЧЕНИЕ(Перечисление.СтатусыПартийТоваров.ВозвратнаяТара) ТОГДА
		|		ЗНАЧЕНИЕ(Перечисление.ТоварТара.Тара)
		|	ИНАЧЕ
		|		ЗНАЧЕНИЕ(Перечисление.ТоварТара.Товар)
		|	КОНЕЦ КАК ТоварТара,
		|	ВЫБОР КОГДА	СтатусПартии = ЗНАЧЕНИЕ(Перечисление.СтатусыПартийТоваров.ВозвратнаяТара) ТОГДА
		|		Истина
		|	ИНАЧЕ
		|		Ложь
		|	КОНЕЦ КАК Тара,
		|	&ВнутреннийЗаказДатаПотребности" + Формат(Индекс, "ЧГ=0") + " КАК ДатаПотребности,
		|	ВнутренниеЗаказыОстатки.ВнутреннийЗаказ КАК Заказ,
		|	ЗНАЧЕНИЕ(Справочник.Проекты.ПустаяСсылка) КАК Проект,
		|	ЗНАЧЕНИЕ(Справочник.СценарииПланирования.ПустаяСсылка) КАК Сценарий," +
		?(мИспользоватьРазузлование, "
		|	ВнутренниеЗаказыОстатки.Номенклатура КАК КонечнаяПродукция,
		//|	ЗНАЧЕНИЕ(Справочник.СпецификацииНоменклатуры.ПустаяСсылка) КАК Спецификация,
		
		 	
		//|	ВнутренниеЗаказыОстатки.Спецификация КАК Спецификация,
		|	ВЫБОР КОГДА	ВнутренниеЗаказыОстатки.Спецификация = ЗНАЧЕНИЕ(Справочник.СпецификацииНоменклатуры.ПустаяСсылка) ТОГДА
		|		ЗНАЧЕНИЕ(Справочник.СпецификацииНоменклатуры.ПустаяСсылка)
		|	ИНАЧЕ
		|		ВнутренниеЗаказыОстатки.Спецификация
		|	КОНЕЦ КАК Спецификация,
		
		|	ВнутренниеЗаказыОстатки.Номенклатура.ВидВоспроизводства КАК ВидВоспроизводства,", "") + "
		|	ВнутренниеЗаказыОстатки.КоличествоОстаток КАК Количество
		|ИЗ
		|	РегистрНакопления.ВнутренниеЗаказы.Остатки(КОНЕЦПЕРИОДА(&ДатаДокумента, ДЕНЬ), Номенклатура.Услуга = Ложь";
Показать


В Этой строке начинаются изменения!:
МассивОшибок = РазузлованиеНоменклатуры.РазузловатьНоменклатуру(ИсхПараметры, Результат, Параметры);

		Если мИспользоватьРазузлование Тогда
			
			Для каждого Строка из НовыеПотребности Цикл
				
				Если Строка.ВидВоспроизводства = Перечисления.ВидыВоспроизводстваНоменклатуры.Производство Тогда
					
					ИсхПараметры = Новый Структура;
					ИсхПараметры.Вставить("Номенклатура", Строка.Номенклатура);
					ИсхПараметры.Вставить("ХарактеристикаНоменклатуры", Строка.ХарактеристикаНоменклатуры);
					ИсхПараметры.Вставить("Количество", Строка.Количество);
					ИсхПараметры.Вставить("Спецификация", Строка.Спецификация);
							
					Результат = Новый Структура;
					Результат.Вставить("ИсходныеКомплектующие");
							
					МассивВидовВоспроизводства = Новый Массив;
					МассивВидовВоспроизводства.Добавить(Перечисления.ВидыВоспроизводстваНоменклатуры.Закупка);
					МассивВидовВоспроизводства.Добавить(Перечисления.ВидыВоспроизводстваНоменклатуры.Переработка);
					
					Параметры = Новый Структура;
					Параметры.Вставить("ДатаСпецификации", Строка.ДатаПотребности);
					Параметры.Вставить("Отбор", Новый Структура("ВидВоспроизводства", МассивВидовВоспроизводства));
					
					МассивОшибок = РазузлованиеНоменклатуры.РазузловатьНоменклатуру(ИсхПараметры, Результат, Параметры);
					
					Если МассивОшибок.Количество() > 0 Тогда
						
						Для каждого Ошибка из МассивОшибок Цикл
							
							Сообщить("Ошибка: " + Ошибка.Причина, Ошибка.СтатусОшибки);
							Сообщить(" Спецификация: " + Ошибка.Спецификация);
							Сообщить(" Номер строки: " + Ошибка.НомерСтроки);
							Сообщить(" Описание ошибки: " + Ошибка.ОписаниеОшибки);
						
						КонецЦикла;
						
					КонецЕсли;
							
					Если Результат <> Неопределено Тогда
						
						Для каждого СтрокаРазузлования из Результат.ИсходныеКомплектующие Цикл
							
							УправлениеПланированием.ДополнитьТаблицу(ТекущиеПотребности, НовыеПотребности,, НовыеПотребности.Индекс(Строка));
							ИндексСтроки = ТекущиеПотребности.Количество() - 1;
							ТекущиеПотребности[ИндексСтроки].Номенклатура = СтрокаРазузлования.Номенклатура;
							ТекущиеПотребности[ИндексСтроки].ХарактеристикаНоменклатуры = СтрокаРазузлования.ХарактеристикаНоменклатуры;
							ТекущиеПотребности[ИндексСтроки].ЕдиницаИзмерения = СтрокаРазузлования.Номенклатура.ЕдиницаХраненияОстатков;
Показать


Точкой останова дошёл до этого момента и полагаю, что дело в уровнях :
Функция РазузловатьНоменклатуру(Источник, Результат = Неопределено, Параметры = Неопределено) Экспорт
	
	ИнициализацияПараметров(Параметры);
	ИнициализацияРезультатаРазузлования(Результат, Параметры);
	
	МассивОшибок = Новый Массив;
	Уровень = 0;
	
	Если Источник.Свойство("Номенклатура") И ТипЗнч(Источник.Номенклатура) = Тип("СправочникСсылка.Номенклатура") И НЕ Источник.Номенклатура.Пустая() Тогда
		
		// Исходная строка добавляется в результат разузлования
		НоваяСтрока = Результат.ПолноеРазузлование.Добавить();
		
		НоваяСтрока.Уровень = Уровень;
		НоваяСтрока.Разузлован = Ложь;
		НоваяСтрока.НоменклатурнаяГруппа = Источник.Номенклатура.НоменклатурнаяГруппа;
		НоваяСтрока.Номенклатура = Источник.Номенклатура;
		НоваяСтрока.ХарактеристикаНоменклатуры = ?(Источник.Свойство("ХарактеристикаНоменклатуры"), Источник.ХарактеристикаНоменклатуры, Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
		НоваяСтрока.ЕдиницаИзмерения = ?(Источник.Свойство("ЕдиницаИзмерения"), Источник.ЕдиницаИзмерения, НоваяСтрока.Номенклатура.ЕдиницаХраненияОстатков);
		НоваяСтрока.Коэффициент = ?(Источник.Свойство("Коэффициент"), Источник.Коэффициент, НоваяСтрока.ЕдиницаИзмерения.Коэффициент);
		НоваяСтрока.Количество = ?(Источник.Свойство("Количество"), Источник.Количество, 1);
		УстановитьВидВоспроизводства(НоваяСтрока);
		НоваяСтрока.Спецификация = ПолучитьСпецификацию(Источник, Параметры);
		УстановитьПараметрыВыходногоИзделия(НоваяСтрока);
		
		Если НЕ ДобавитьСпецификациюВПоследовательность(НоваяСтрока.Спецификация, НоваяСтрока.Последовательность) Тогда
			
			НоваяСтрока.Разузлован = Истина;
			ДобавитьВОшибки(СтатусСообщения.ОченьВажное, НСтр("ru='Обнаружено зацикливание в структуре изделия.'"), НСтр("ru='Зацикливание'"), НоваяСтрока.Спецификация, Неопределено, НоваяСтрока.Последовательность, МассивОшибок);
			
		КонецЕсли;
		
		Параметры.Вставить("Спецификация", НоваяСтрока.Спецификация);
		Параметры.Вставить("КоличествоВыпусков", ПолучитьКоличествоВыпусков(НоваяСтрока.Спецификация, НоваяСтрока.Номенклатура, НоваяСтрока.ХарактеристикаНоменклатуры, НоваяСтрока.Коэффициент, НоваяСтрока.Количество));
		Параметры.Вставить("ДоляСтоимости", ПолучитьДолюСтоимости(НоваяСтрока.Спецификация, НоваяСтрока.Номенклатура, НоваяСтрока.ХарактеристикаНоменклатуры, НоваяСтрока.Коэффициент));
		
		Результат.КоличествоВыпусков = Параметры.КоличествоВыпусков;
		
	ИначеЕсли Источник.Свойство("Спецификация") И ТипЗнч(Источник.Спецификация) = Тип("СправочникСсылка.СпецификацииНоменклатуры") И НЕ Источник.Спецификация.Пустая() Тогда
		
		ВыходноеИзделие = ПолучитьВыходныеИзделия(Источник.Спецификация);
		
		Если ВыходноеИзделие.Количество() = 0 Тогда
			
			НоваяСтрока = Результат.ПолноеРазузлование.Добавить();
					
			НоваяСтрока.Уровень = Уровень;
			НоваяСтрока.Разузлован = Ложь;
			НоваяСтрока.СопутствующееИзделие = Ложь;
			НоваяСтрока.Коэффициент = 1;
			НоваяСтрока.Количество = ?(Источник.Свойство("Количество"), Источник.Количество, 1);
			НоваяСтрока.Спецификация = Источник.Спецификация;
				
			Если НЕ ДобавитьСпецификациюВПоследовательность(НоваяСтрока.Спецификация, НоваяСтрока.Последовательность) Тогда
					
				НоваяСтрока.Разузлован = Истина;
				ДобавитьВОшибки(СтатусСообщения.ОченьВажное, НСтр("ru='Обнаружено зацикливание в структуре изделия.'"), НСтр("ru='Зацикливание'"), НоваяСтрока.Спецификация, Неопределено, НоваяСтрока.Последовательность, МассивОшибок);
					
			КонецЕсли;
			
		Иначе
			
			Пока ВыходноеИзделие.Следующий() Цикл
							
				НоваяСтрока = Результат.ПолноеРазузлование.Добавить();
					
				НоваяСтрока.Уровень = Уровень;
				НоваяСтрока.Разузлован = Ложь;
				НоваяСтрока.СопутствующееИзделие = ВыходноеИзделие.СопутствующееИзделие;
				НоваяСтрока.НомерОперацииМаршрута = ВыходноеИзделие.НомерОперацииМаршрута;
				НоваяСтрока.НоменклатурнаяГруппа = ВыходноеИзделие.НоменклатурнаяГруппа;
				НоваяСтрока.Номенклатура = ВыходноеИзделие.Номенклатура;
				НоваяСтрока.ХарактеристикаНоменклатуры = ВыходноеИзделие.ХарактеристикаНоменклатуры;
				НоваяСтрока.ЕдиницаИзмерения = ВыходноеИзделие.ЕдиницаИзмерения;
				НоваяСтрока.Коэффициент = ВыходноеИзделие.Коэффициент;
				НоваяСтрока.Количество = ?(Источник.Свойство("Количество"), ВыходноеИзделие.Количество * Источник.Количество, ВыходноеИзделие.Количество);
				НоваяСтрока.Спецификация = Источник.Спецификация;
				ЗаполнитьЗначенияСвойств(НоваяСтрока, ВыходноеИзделие, "МинимальнаяПартия, Кратность, ДоляСтоимости, ТочкаМаршрута, Подразделение, РабочийЦентр");
				
				Если НЕ ДобавитьСпецификациюВПоследовательность(НоваяСтрока.Спецификация, НоваяСтрока.Последовательность) Тогда
					
					НоваяСтрока.Разузлован = Истина;
					ДобавитьВОшибки(СтатусСообщения.ОченьВажное, НСтр("ru='Обнаружено зацикливание в структуре изделия.'"), НСтр("ru='Зацикливание'"), НоваяСтрока.Спецификация, Неопределено, НоваяСтрока.Последовательность, МассивОшибок);
					
				КонецЕсли;
							
			КонецЦикла;
			
		КонецЕсли;
		
		Параметры.Вставить("Спецификация", Источник.Спецификация);
		Параметры.Вставить("КоличествоВыпусков", УправлениеПланированием.ПолучитьДробь(Источник.Количество, Источник.Количество));
		Параметры.Вставить("ДоляСтоимости", УправлениеПланированием.ПолучитьДробь(Источник.Количество, Источник.Количество));
		
		Результат.КоличествоВыпусков = Параметры.КоличествоВыпусков;
		
	Иначе
		
		ДобавитьВОшибки(СтатусСообщения.ОченьВажное, НСтр("ru='Не указана номенклатура или спецификация для разузлования.'"), НСтр("ru='Разузлование'"), Неопределено, Неопределено, Неопределено, МассивОшибок);
		
	КонецЕсли;
	
	Пока Истина Цикл
		
		Если Параметры.КоличествоУровнейРазузлования < 0 Тогда // Разузлование не требуется
			
			Прервать;
			
		КонецЕсли;
		
		// Получение позиций, требующих разузлования
		СтрокиТекущегоУровня = Результат.ПолноеРазузлование.НайтиСтроки(Новый Структура("Разузлован, Уровень", Ложь, Уровень));
		
		Если СтрокиТекущегоУровня.Количество() = 0 Тогда // Нет данных для разузлования
			
			Прервать;
			
		ИначеЕсли Параметры.КоличествоУровнейРазузлования > 0 И Уровень = Параметры.КоличествоУровнейРазузлования Тогда // Достигнут требуемый уровень разузлования
			
			Для каждого СтрокаТекущегоУровня из СтрокиТекущегоУровня Цикл
				
				СтрокаТекущегоУровня.Разузлован = Истина;
				
			КонецЦикла;
			
			Прервать;
			
		КонецЕсли;
			
		Уровень = Уровень + 1;
			
		Для каждого СтрокаТекущегоУровня из СтрокиТекущегоУровня Цикл
			
			СтрокаТекущегоУровня.Разузлован = Истина;
			
			Если СтрокаТекущегоУровня.Спецификация <> Неопределено И НЕ СтрокаТекущегоУровня.Спецификация.Пустая() Тогда
					
				НеразмещенноеКоличество = РазместитьВСопутствующихИзделиях(СтрокаТекущегоУровня, Параметры, Результат);
				
				ДобавитьВВыходныеИзделия(Результат, СтрокаТекущегоУровня, Параметры);
				
				Если СтрокаТекущегоУровня.СопутствующееИзделие ИЛИ НеразмещенноеКоличество = 0 Тогда
					
					Продолжить;
					
				Иначе
					
					ДобавитьВСопутствующиеИзделия(СтрокаТекущегоУровня, Результат);
					
				КонецЕсли;
				
				КоличествоВыпусков = ПолучитьКоличествоВыпусков(СтрокаТекущегоУровня.Спецификация, СтрокаТекущегоУровня.Номенклатура, СтрокаТекущегоУровня.ХарактеристикаНоменклатуры, СтрокаТекущегоУровня.Коэффициент, НеразмещенноеКоличество);
				ДоляСтоимости = ПолучитьДолюСтоимости(СтрокаТекущегоУровня.Спецификация, СтрокаТекущегоУровня.Номенклатура, СтрокаТекущегоУровня.ХарактеристикаНоменклатуры, НеразмещенноеКоличество);
					
				КоэффициентОсновногоСырья = 0;
				
				ИсходноеКомплектующее = ПолучитьИсходныеКомплектующие(СтрокаТекущегоУровня.Спецификация, Источник);
				
				Пока ИсходноеКомплектующее.Следующий() Цикл
					
					Если Результат.Свойство("СопутствующиеИзделия") Тогда
						
						Результат.ПолноеРазузлование.Колонки.Количество.Имя = "КоличествоОкругленное";
						Результат.ПолноеРазузлование.Колонки.КоличествоТочное.Имя = "Количество";
						
					КонецЕсли;
						
					ДобавитьВПолноеРазулование(ИсходноеКомплектующее, СтрокаТекущегоУровня, КоличествоВыпусков, КоэффициентОсновногоСырья, Параметры, Уровень, Результат, МассивОшибок);
					
					Если Результат.Свойство("СопутствующиеИзделия") Тогда
						
						Результат.ПолноеРазузлование.Колонки.Количество.Имя = "КоличествоТочное";
						Результат.ПолноеРазузлование.Колонки.КоличествоОкругленное.Имя = "Количество";
						
					КонецЕсли;
						
				КонецЦикла;
				
				ВозвратныйОтход = ПолучитьВозвратныеОтходы(СтрокаТекущегоУровня.Спецификация, Источник);
				
				Пока ВозвратныйОтход.Следующий() Цикл
						
					ДобавитьВВозвратныеОтходы(ВозвратныйОтход, СтрокаТекущегоУровня, КоличествоВыпусков, КоэффициентОсновногоСырья, ДоляСтоимости, Параметры, Уровень, Результат, МассивОшибок);
						
				КонецЦикла;
				
			КонецЕсли;
			
		КонецЦикла;
		
		Результат.МаксимальныйУровень = Макс(Результат.МаксимальныйУровень, Уровень);
		
	КонецЦикла;
	
	ВыполнитьОтбор(Результат, Параметры);
	
	Возврат МассивОшибок;
	
КонецФункции // РазузловатьНоменклатуру()
Показать
Прикрепленные файлы:
Вознаграждение за ответ
Показать полностью
Ответы
Избранное Подписка Сортировка: Древо
2. Akuji 10 12.02.19 15:19 Сейчас в теме
раз не нужны комплектующие...

мИспользоватьРазузлование = Ложь
по идее должна быть
3. Intercititude 12.02.19 15:32 Сейчас в теме
(2)Уже так пробовал. Это не верно, так как нужны спецификации тоже. Да и не с проста там есть мИспользоватьРазузлование.
Не нужны именно только комплектующие, которые содержатся в спецификации!
4. acanta 48 12.02.19 15:39 Сейчас в теме
Вы пишете о том, что вам не нужно. В общем случае вам в этом документе не нужен весь справочник номенклатура.
Вы можете сформулировать что именно вы хотите видеть и на какой закладке и самое главное - на каком основании?
Т.е. данные именно этой закладки будут использованы в дальнейшем для чего в вашем понимании (напечатано и положено на стол менеджеру для заказа, кладовщику на сборку или для того чтобы в программе прошел расход)?
"Зачем? Чтобы что?"(с)
5. Intercititude 12.02.19 16:00 Сейчас в теме
(4)Вся номенклатура и её спецификации из "Внутренних заказов" нужны в итоговой тч "Потребности" и только ( а туда лезет ещё и комплектующие этих самых спецификации,что не надо) !

В свою очередь документ "Внутренние заказы" делает движения по регистру накопления( приход(кол-во) ).
А на основании всего этого документа "Формирование Потребностей" рассчитываются данные в регистре сведений( кол-во), которые потом необходимы для разных нужд.
Прикрепленные файлы:
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 90 000 руб.
Полный день

Программист 1С
Самара
зарплата от 50 000 руб. до 100 000 руб.
По совместительству

Программист 1С
Москва
зарплата от 90 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Программист 1С
Санкт-Петербург
зарплата от 100 000 руб.
Полный день