Как убрать лишние комплектующие. Запрос ошибка ?

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

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

Код выборки "Внутреннего заказа" :

	Индекс = 0;
	
	Для каждого Строка из ВнутренниеЗаказы Цикл
		
		ЗапросНовыеПотребности.УстановитьПараметр("ВнутреннийЗаказДатаПотребности" + Формат(Индекс, "ЧГ=0"), НачалоДня(Строка.ДатаПотребности));
		
		ЗапросНовыеПотребности.Текст = ЗапросНовыеПотребности.Текст + "
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	&ДатаДокумента КАК Период,
		|	ВнутренниеЗаказыОстатки.Номенклатура КАК Номенклатура,
		|	ВнутренниеЗаказыОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
		|	ВнутренниеЗаказыОстатки.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения,
		|	ВЫБОР КОГДА	СтатусПартии = ЗНАЧЕНИЕ(Перечисление.СтатусыПартийТоваров.ВозвратнаяТара) ТОГДА
		|		ЗНАЧЕНИЕ(Перечисление.ТоварТара.Тара)
		|	ИНАЧЕ
		|		ЗНАЧЕНИЕ(Перечисление.ТоварТара.Товар)
		|	КОНЕЦ КАК ТоварТара,
		|	ВЫБОР КОГДА	СтатусПартии = ЗНАЧЕНИЕ(Перечисление.СтатусыПартийТоваров.ВозвратнаяТара) ТОГДА
		|		Истина
		|	ИНАЧЕ
		|		Ложь
		|	КОНЕЦ КАК Тара,
		|	&ВнутреннийЗаказДатаПотребности" + Формат(Индекс, "ЧГ=0") + " КАК ДатаПотребности,
		|	ВнутренниеЗаказыОстатки.ВнутреннийЗаказ КАК Заказ,
		|	ЗНАЧЕНИЕ(Справочник.Проекты.ПустаяСсылка) КАК Проект,
		|	ЗНАЧЕНИЕ(Справочник.СценарииПланирования.ПустаяСсылка) КАК Сценарий," +
		?(мИспользоватьРазузлование, "
		|	ВнутренниеЗаказыОстатки.Номенклатура КАК КонечнаяПродукция,
		//|	ЗНАЧЕНИЕ(Справочник.СпецификацииНоменклатуры.ПустаяСсылка) КАК Спецификация,
		
			
		//|	ВнутренниеЗаказыОстатки.Спецификация КАК Спецификация,
		|	ВЫБОР КОГДА	ВнутренниеЗаказыОстатки.Спецификация = ЗНАЧЕНИЕ(Справочник.СпецификацииНоменклатуры.ПустаяСсылка) ТОГДА
		|		ЗНАЧЕНИЕ(Справочник.СпецификацииНоменклатуры.ПустаяСсылка)
		|	ИНАЧЕ
		|		ВнутренниеЗаказыОстатки.Спецификация
		|	КОНЕЦ КАК Спецификация,
		
		|	ВнутренниеЗаказыОстатки.Номенклатура.ВидВоспроизводства КАК ВидВоспроизводства,", "") + "
		|	ВнутренниеЗаказыОстатки.КоличествоОстаток КАК Количество
		|ИЗ
		|	РегистрНакопления.ВнутренниеЗаказы.Остатки(КОНЕЦПЕРИОДА(&ДатаДокумента, ДЕНЬ), Номенклатура.Услуга = Ложь";
		
		Если ЗначениеЗаполнено(Строка.Заказ) Тогда
			
			ЗапросНовыеПотребности.УстановитьПараметр("ВнутреннийЗаказ" + Формат(Индекс, "ЧГ=0"), Строка.Заказ);
			ЗапросНовыеПотребности.Текст = ЗапросНовыеПотребности.Текст + " И ВнутреннийЗаказ = &ВнутреннийЗаказ" + Формат(Индекс, "ЧГ=0");
			
		КонецЕсли;
		
		ЗапросНовыеПотребности.Текст = ЗапросНовыеПотребности.Текст +
		") КАК ВнутренниеЗаказыОстатки
		|
		|ГДЕ ВнутренниеЗаказыОстатки.КоличествоОстаток > 0
		|";
		
		Индекс = Индекс + 1;
		
	КонецЦикла;
Показать
Прикрепленные файлы:
+
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. gudogu 93 10.02.19 17:52 Сейчас в теме
Насколько я понимаю из кода, который Вы показали, переменная мИспользоватьРазузлование = Истина и в запросе выбираются спецификации.
Вообще лучше бы Вам поставить точку останова и посмотреть текст запроса конечный, там уже более ясно будет что и откуда берется
+
3. Intercititude 10.02.19 18:35 Сейчас в теме
(2) Да,вы правы. Спецификация лезет оттуда! Уже обошёл всё точкой останова. Но не пойму как исправить это. Есть идеи у Вас?

Вот код спецификации ( Где СтрокаРазузлования Цикл , там как раз эти комплектующие и попадают) :

		Если мИспользоватьРазузлование Тогда
			
			Для каждого Строка из НовыеПотребности Цикл
				
				Если Строка.ВидВоспроизводства = Перечисления.ВидыВоспроизводстваНоменклатуры.Производство Тогда
					
					ИсхПараметры = Новый Структура;
					ИсхПараметры.Вставить("Номенклатура", Строка.Номенклатура);
					ИсхПараметры.Вставить("ХарактеристикаНоменклатуры", Строка.ХарактеристикаНоменклатуры);
					ИсхПараметры.Вставить("Количество", Строка.Количество);
					ИсхПараметры.Вставить("Спецификация", Строка.Спецификация);
							
					Результат = Новый Структура;
					Результат.Вставить("ИсходныеКомплектующие");
							
					МассивВидовВоспроизводства = Новый Массив;
					МассивВидовВоспроизводства.Добавить(Перечисления.ВидыВоспроизводстваНоменклатуры.Закупка);
					МассивВидовВоспроизводства.Добавить(Перечисления.ВидыВоспроизводстваНоменклатуры.Переработка);
					
					Параметры = Новый Структура;
					Параметры.Вставить("ДатаСпецификации", Строка.ДатаПотребности);
					Параметры.Вставить("Отбор", Новый Структура("ВидВоспроизводства", МассивВидовВоспроизводства));
					
					МассивОшибок = РазузлованиеНоменклатуры.РазузловатьНоменклатуру(ИсхПараметры, Результат, Параметры);
					
					Если МассивОшибок.Количество() > 0 Тогда
						
						Для каждого Ошибка из МассивОшибок Цикл
							
							Сообщить("Ошибка: " + Ошибка.Причина, Ошибка.СтатусОшибки);
							Сообщить(" Спецификация: " + Ошибка.Спецификация);
							Сообщить(" Номер строки: " + Ошибка.НомерСтроки);
							Сообщить(" Описание ошибки: " + Ошибка.ОписаниеОшибки);
						
						КонецЦикла;
						
					КонецЕсли;
							
					Если Результат <> Неопределено Тогда
						
						Для каждого СтрокаРазузлования из Результат.ИсходныеКомплектующие Цикл
							
							УправлениеПланированием.ДополнитьТаблицу(ТекущиеПотребности, НовыеПотребности,, НовыеПотребности.Индекс(Строка));
							ИндексСтроки = ТекущиеПотребности.Количество() - 1;
							ТекущиеПотребности[ИндексСтроки].Номенклатура = СтрокаРазузлования.Номенклатура;
							ТекущиеПотребности[ИндексСтроки].ХарактеристикаНоменклатуры = СтрокаРазузлования.ХарактеристикаНоменклатуры;
							ТекущиеПотребности[ИндексСтроки].ЕдиницаИзмерения = СтрокаРазузлования.Номенклатура.ЕдиницаХраненияОстатков;
							Попытка 
								ТекущиеПотребности[ИндексСтроки].Количество = СтрокаРазузлования.Количество * СтрокаРазузлования.ЕдиницаИзмерения.Коэффициент / СтрокаРазузлования.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент;
							Исключение
							КонецПопытки;
							ТекущиеПотребности[ИндексСтроки].КонечнаяПродукция = Строка.Номенклатура;
							
						КонецЦикла;
						
					КонецЕсли;
					
				Иначе
					
					УправлениеПланированием.ДополнитьТаблицу(ТекущиеПотребности, НовыеПотребности,, НовыеПотребности.Индекс(Строка));
					
				КонецЕсли;
				
			КонецЦикла;
Показать
+
4. gudogu 93 10.02.19 18:58 Сейчас в теме
(3) я бы на вашем месте смотрел в сторону переменной мИспользоватьРазузлование, откуда она берется и почему значение Истина у нее.
а так по кускам кода трудно что-либо советовать
+
5. Intercititude 10.02.19 20:28 Сейчас в теме
(4)Объясните пожалуйста тогда этот кусок.. Если есть спецификация номенклатуры, тогда мИспользоватьРазузлование = Истина ?

мИспользоватьРазузлование = Метаданные.Справочники.Найти("СпецификацииНоменклатуры") <> Неопределено;
+
6. gudogu 93 10.02.19 20:36 Сейчас в теме +0.02 $m
(5) Идет проверка на наличие справочника "СпецификацииНоменклатуры" в конфигурации, т.е. если есть этот справочник, то мИспользоватьРазузлование = Истина
+
8. Intercititude 10.02.19 20:41 Сейчас в теме
(6)С этим понял,спасибо.
А как быть с комплектующими?
+
10. gudogu 93 10.02.19 20:44 Сейчас в теме
(8) Пробовали установить переменной мИспользоватьРазузлование значение в ложь? По идее комплектующими заполняться не будет в таком случае. Если так, то советую добавить константу и присваивать значение константы данной переменной, чтобы иметь возможность управлять заполнением комплектующими
+
11. Intercititude 10.02.19 20:48 Сейчас в теме
(10)Пробовал.
Но я не уверен, что это правильно,так как много где используется и вообще введена же она для чего то - мИспользоватьРазузлование .
Что думаете по этому поводу ?
+
12. gudogu 93 10.02.19 20:50 Сейчас в теме
(11) Согласен что возможно это не совсем правильно, но у меня нет полного представления что там происходит. Поэтому советую исходя из того что вижу
+
13. Intercititude 10.02.19 20:58 Сейчас в теме
(12) Возможно при ДополненийТаблицы это происходит ?

Процедура ДополнитьТаблицу(ТаблицаПриемник, ТаблицаИсточник, СПозиции = -1, НомерСтрокиИсточника = -1) Экспорт

	Если ТипЗнч(ТаблицаПриемник) <> Тип("ТаблицаЗначений") И ТипЗнч(ТаблицаПриемник) <> Тип("КоллекцияСтрокДереваЗначений") Тогда
		
		ТаблицаПриемник = Новый ТаблицаЗначений;
		
	КонецЕсли;
		
	Если ТипЗнч(ТаблицаПриемник) = Тип("ТаблицаЗначений") Тогда
		
		Если ТаблицаПриемник.Колонки.Количество() = 0 Тогда
			
			Если НомерСтрокиИсточника < 0 Тогда
				
				ТаблицаПриемник = ТаблицаИсточник.Скопировать();
				Возврат;
				
			Иначе
				
				Для каждого Колонка из ТаблицаИсточник.Колонки Цикл
					
					
					Если Колонка.Имя = "Номенклатура" Тогда
						
						ТаблицаПриемник.Колонки.Добавить(Колонка.Имя, Новый ОписаниеТипов("СправочникСсылка.Номенклатура,СправочникСсылка.ТехнологическиеОперации"));
						
						Иначе
					
					ТаблицаПриемник.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения);
					
					КонецЕсли;
					
				КонецЦикла;
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;

	Если НомерСтрокиИсточника < 0 Тогда
		
		Для каждого СтрокаИсточник из ТаблицаИсточник Цикл
			
			// добавить (вставить) строку
			Если СПозиции < 0 Тогда
				
				НоваяСтрокаПриемник = ТаблицаПриемник.Добавить();
				
			Иначе
				
				НоваяСтрокаПриемник = ТаблицаПриемник.Вставить(СПозиции + ТаблицаИсточник.Индекс(СтрокаИсточник));
				
			КонецЕсли;
			
			ЗаполнитьЗначенияСвойств(НоваяСтрокаПриемник, СтрокаИсточник);
			
		КонецЦикла;
			
	Иначе
		
		// добавить (вставить) строку
		Если СПозиции < 0 Тогда
			
			НоваяСтрокаПриемник = ТаблицаПриемник.Добавить();
			
		Иначе
			
			НоваяСтрокаПриемник = ТаблицаПриемник.Вставить(СПозиции);
			
		КонецЕсли;

		ЗаполнитьЗначенияСвойств(НоваяСтрокаПриемник, ТаблицаИсточник[НомерСтрокиИсточника]);
		
	КонецЕсли;
	
КонецПроцедуры // ДополнитьТаблицу()
Показать
+
18. Intercititude 11.02.19 16:59 Сейчас в теме
(10) Извините,а в каком месте кода вы имели ввиду установить мИспользоватьРазузлование значение в ложь?
+
7. gudogu 93 10.02.19 20:39 Сейчас в теме
Конфигурация типовая какая-то?
+
9. Intercititude 10.02.19 20:43 Сейчас в теме
(7) КомлекснаяАвтоматизация,нетиповая,есть доработки. С поддержки снята.
+
14. acanta 10.02.19 20:59 Сейчас в теме
В принципе разузлование предполагает что номенклатура будет развернута до самых глубоких комплектующих. Это имеет смысл например в общепите.
В вашем случае вы хотите многопередельное производство, которое в комплексной не реализовано (при заполнении потребностей указывается что заполнять - комплектующие или полуфабрикаты и какого уровня вложенности). И заполняется технологическая карта, где указывается в какой точке происходит создание полуфабрикатов или готовой продукции.
+
15. Intercititude 10.02.19 21:09 Сейчас в теме +0.56 $m
(14)Хотите сказать, что кроме реализации с нуля многопередельного производства, проще вариантов решения данной проблемы нет ?
+
16. acanta 10.02.19 22:06 Сейчас в теме
(15) У вас есть серии и(или) партионный учет или только характеристики?
+
17. Intercititude 11.02.19 14:23 Сейчас в теме
(16) Партионный учет только.
+
Внимание! Тема сдана в архив

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