Дополнение всех материалов в существующий элемент справочника с одинаковым названием

1. user2056518 15.07.24 10:34 Сейчас в теме
Есть обработка иморта из одной программы в 1С, которая при импорте создаёт Элементы справочника, справочник Спецификаций Номенклатуры, где добавляются материалы загруженного изделия.
Необходимо что бы при одинаковом наименовании загружаемой спецификации все элементы добавлялись в уже существующий Элемент справочника а не создавало новый с тем же названием ? (Соответсвенно если наименование другое то создавать новый)

Код который создаёт элемент справочника
&НаСервере
Процедура ПолучитьТекущиеИзделия(КодДокумента,НомерЗаказа)
   //НомерЗаказа    = Объект.НомерЗаказа;
   Объект.НомерЗаказа = НомерЗаказа;
   Менеджер = РегистрыСведений.ф_ЭлементыИзделия.СоздатьМенеджерЗаписи();
   Длина = Менеджер.Длина;
   Профиль = Менеджер.Профиль;
   
   Если ЗаказПВХТипИзделия = Справочники.ТипыИзделий.Алюминий Тогда
        ТипА = "Алюминий";
	ИначеЕсли ЗаказПВХТипИзделия = Справочники.ТипыИзделий.ОкнаПВХ Тогда
		ТипП = "ПВХ";
   КонецЕсли;
   ИзделияЗаказа    = ПолучитьМассивИзделий(КодДокумента);
   Номенклатура.Очистить();
   СоответствияНоменклатуры.Очистить();
   Объект.Изделия.Очистить();
   ТаблицаИзделий.Очистить();
   Для Каждого Изделие Из ИзделияЗаказа Цикл
      	НовоеИзделие = Объект.Изделия.Добавить();
        Если Изделие.НаименованиеИТ5 = "Тип№1" Тогда
            НовоеИзделие.Наименование       = "Тип№1"; Иначе
            НовоеИзделие.Наименование       = "Светопрозрачная Конструкция " + ТипА + Длина + Формат(Объект.НомерЗаказа,"ЧГ=0") + " #" + Формат(Изделие.Номер,"ЧЦ=3; ЧВН=");   
		КонецЕсли;
		 
		НовоеИзделие.Количество 		= Изделие.Количество;
		НовоеИзделие.Цвет 				= ПолучитьЦвет(Изделие.Цвет);
		НовоеИзделие.Цена				= Изделие.Цена;
		НовоеИзделие.Сумма 				= Изделие.Сумма;
		НовоеИзделие.СуммаАксессуаров	= Изделие.СуммаАксессуаров;
		НовоеИзделие.Площадь1Изд		= Изделие.Площадь;
		НовоеИзделие.Площадь			= Изделие.Площадь * НовоеИзделие.Количество;
		НовоеИзделие.СуммаИзделийАксессуаров = Изделие.Сумма + Изделие.СуммаАксессуаров;
		НовоеИзделие.Эскиз				= Изделие.Эскиз;
		ДополнитьТаблицуСоответствий(Изделие.Номенклатура);
					 
		НоваяСтрокаИзделие = ТаблицаИзделий.Добавить();
		НоваяСтрокаИзделие.Номер			= Изделие.Номер;
		НоваяСтрокаИзделие.Наименование 	= НовоеИзделие.Наименование;
		НоваяСтрокаИзделие.Количество 		= Изделие.Количество;
		НоваяСтрокаИзделие.Цвет 			= СокрЛП(Изделие.Цвет);
		НоваяСтрокаИзделие.ЦветОкраски		= ПолучитьЦвет(Изделие.Цвет);
		НоваяСтрокаИзделие.Цена				= Окр((Изделие.Сумма + Изделие.СуммаАксессуаров)/НоваяСтрокаИзделие.Количество,2);
		НоваяСтрокаИзделие.Сумма 			= НоваяСтрокаИзделие.Цена*НоваяСтрокаИзделие.Количество;
		НоваяСтрокаИзделие.Площадь			= Изделие.Площадь;
		НоваяСтрокаИзделие.Эскиз			= Изделие.Эскиз;
		НоваяСтрокаИзделие.НаименованиеИТ5 	= Изделие.НаименованиеИТ5;
		НоваяСтрокаИзделие.ТаблицаСпецификации.Загрузить(Изделие.Номенклатура);
	КонецЦикла;
	    НайтиСоответствия();
КонецПроцедуры
Показать
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user2033930 15.07.24 10:44 Сейчас в теме
3. Lenten 25 15.07.24 11:04 Сейчас в теме
в вашем коде создается запись в регистре сведений, а не создается номенклатура


в коде, где у вас создается номенклатура надо написать что-то типа

ЭлементНоменклатура = Справочник.Номенклатура.НайтиПоНаименованию(НаименованиеИзЗагрузки);

Если не значениеЗаполнено(ЭлементНоменклатура) Тогда
      ЭлементНоменклатура = Справочник.Номенклатура.СоздатьЭлемент();
КонецЕсли;
4. user2056518 15.07.24 13:30 Сейчас в теме
(3) Что-то на подобии такого ? Только всё равно создаётся новый элемент в справочнике а не дополняется существующий
	Запрос = Новый Запрос();
	Запрос.Текст = "ВЫБРАТЬ
				   |	СпецификацииНоменклатуры.Ссылка
				   |ИЗ
				   |	Справочник.СпецификацииНоменклатуры КАК СпецификацииНоменклатуры
				   |ГДЕ
				   |	СпецификацииНоменклатуры.ВыходныеИзделия.Номенклатура = &Номенклатура";
	Запрос.УстановитьПараметр("Номенклатура", Номен.Ссылка);
	Спецификация = Запрос.Выполнить().Выбрать();
	
	Пока Спецификация.Следующий() Цикл
		СпецОбъект = Спецификация.Ссылка.ПолучитьОбъект();
		СпецОбъект.Активная = Ложь;
		СпецОбъект.Записать();
	КонецЦикла;
	     
	
	//Если Спецификация.Следующий() Тогда
	//	Спецификация = Спецификация.Ссылка.ПолучитьОбъект();	
	//Иначе
		Спецификация = Справочники.СпецификацииНоменклатуры.СоздатьЭлемент();
		Спецификация.ВидСпецификации 	= Перечисления.ВидыСпецификаций.Сборочная;
		Спецификация.Наименование 		= Номен.Наименование;
		Спецификация.Активная 			= Истина;
		Спецификация.Состояние 			= Перечисления.СостоянияОбъектов.Утвержден;
		Спецификация.ДатаУтверждения 	= ТекущаяДата();
		Спецификация.Ответственный 		= ПараметрыСеанса.ТекущийПользователь;
	
	ВИ = Спецификация.ВыходныеИзделия.Добавить();
	ВИ.Номенклатура 	= Номен.Ссылка;
	ВИ.Количество 		= 1;
	ВИ.ЕдиницаИзмерения = Номен.ЕдиницаХраненияОстатков;
	
	//КонецЕсли;
Показать
5. Lenten 25 15.07.24 14:03 Сейчас в теме
//Если Спецификация.Следующий() Тогда
    //    Спецификация = Спецификация.Ссылка.ПолучитьОбъект();    
    //Иначе
        Спецификация = Справочники.СпецификацииНоменклатуры.СоздатьЭлемент();


тут у вас вместо спецификации из запроса создается новый объект




    Пока Спецификация.Следующий() Цикл
        СпецОбъект = Спецификация.Ссылка.ПолучитьОбъект();
        СпецОбъект.Активная = Ложь;
        СпецОбъект.Записать();
    КонецЦикла;



а тут просто активируется найденная спецификация
user2056518; +1 Ответить
Оставьте свое сообщение

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