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

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) Партионный учет только.
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

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

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день