Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Изменение кода обработки в 1с

Owl Scoring Ученик (86), на голосовании 4 месяца назад
Существующий запрос каждый раз создаёт новый элемент справочника, необходимо добавить условие при котором если НаименованиеИт5 = Тип№1 тогда дополнять существующий элемент с таким названием если нет то создать новый

КОД:
Процедура ПолучитьТекущиеИзделия(КодДокумента,НомерЗаказа)
//НомерЗаказа = Объект.НомерЗаказа;
Объект.НомерЗаказа = НомерЗаказа;

ИзделияЗаказа = ПолучитьМассивИзделий(КодДокумента);
Номенклатура.Очистить();
СоответствияНоменклатуры.Очистить();
Объект.Изделия.Очистить();
ТаблицаИзделий.Очистить();
Для Каждого Изделие Из ИзделияЗаказа Цикл
НовоеИзделие = Объект.Изделия.Добавить();
Если Изделие.НаименованиеИТ5 = "Тип№1" Тогда
НовоеИзделие.Наименование = "Тип№1"; Иначе
НовоеИзделие.Наименование = "Светопрозрачная Конструкция " + Формат(Объект.НомерЗаказа,"ЧГ=0") + " #" + Формат(Изделие.Номер,"ЧЦ=3; ЧВН=");
КонецЕсли;
НовоеИзделие.Количество = Изделие.Количество;
НовоеИзделие.Цвет = ПолучитьЦвет(Изделие.Цвет);
НовоеИзделие.Цена = Изделие.Цена;
НовоеИзделие.Сумма = Изделие.Сумма;
НовоеИзделие.СуммаАксессуаров = Изделие.СуммаАксессуаров;
НовоеИзделие.Площадь1Изд = Изделие.Площадь;
НовоеИзделие.Площадь = Изделие.Площадь * НовоеИзделие.Количество;
НовоеИзделие.СуммаИзделийАксессуаров = Изделие.Сумма + Изделие.СуммаАксессуаров;
НовоеИзделие.Эскиз = Изделие.Эскиз;
ДополнитьТаблицуСоответствий(Изделие.Номенклатура);

НоваяСтрокаИзделие = ТаблицаИзделий.Добавить();
НоваяСтрокаИзделие.Номер = Изделие.Номер;
НоваяСтрокаИзделие.Наименование = НовоеИзделие.Наименование;
НоваяСтрокаИзделие.Количество = Изделие.Количество;
НоваяСтрокаИзделие.Цвет = СокрЛП(Изделие.Цвет);
НоваяСтрокаИзделие.ЦветОкраски = ПолучитьЦвет(Изделие.Цвет);
НоваяСтрокаИзделие.Цена = Окр((Изделие.Сумма + Изделие.СуммаАксессуаров)/НоваяСтрокаИзделие.Количество,2);
НоваяСтрокаИзделие.Сумма = НоваяСтрокаИзделие.Цена*НоваяСтрокаИзделие.Количество;
НоваяСтрокаИзделие.Площадь = Изделие.Площадь;
НоваяСтрокаИзделие.Эскиз = Изделие.Эскиз;
НоваяСтрокаИзделие.НаименованиеИТ5 = Изделие.НаименованиеИТ5;
НоваяСтрокаИзделие.ТаблицаСпецификации.Загрузить(Изделие.Номенклатура);
КонецЦикла;
НайтиСоответствия();
КонецПроцедуры
Голосование за лучший ответ
Татьяна Просветленный (36374) 5 месяцев назад
Для того чтобы реализовать ваше требование, необходимо проверить, существует ли элемент справочника с указанным наименованием. Если такой элемент существует, то нужно его обновить, если нет, создать новый. Ниже представлен измененный код с добавленным условием:
 Процедура ПолучитьТекущиеИзделия(КодДокумента,НомерЗаказа)   
//НомерЗаказа = Объект.НомерЗаказа;
Объект.НомерЗаказа = НомерЗаказа;

ИзделияЗаказа = ПолучитьМассивИзделий(КодДокумента);
Номенклатура.Очистить();
СоответствияНоменклатуры.Очистить();
Объект.Изделия.Очистить();
ТаблицаИзделий.Очистить();
Для Каждого Изделие Из ИзделияЗаказа Цикл
// Проверка на наличие существующего элемента
СуществующееИзделие = Неопределено;
Для Каждого ТекущееИзделие Из Объект.Изделия Цикл
Если ТекущееИзделие.Наименование = Изделие.Наименование Тогда
СуществующееИзделие = ТекущееИзделие;
Прервать;
КонецЕсли;
КонецЦикла;

Если СуществующееИзделие = Неопределено Тогда
НовоеИзделие = Объект.Изделия.Добавить();
Иначе
НовоеИзделие = СуществующееИзделие;
КонецЕсли;

Если Изделие.НаименованиеИТ5 = "Тип№1" Тогда
НовоеИзделие.Наименование = "Тип№1";
Иначе
НовоеИзделие.Наименование = "Светопрозрачная Конструкция " + Формат(Объект.НомерЗаказа,"ЧГ=0") + " #" + Формат(Изделие.Номер,"ЧЦ=3; ЧВН=");
КонецЕсли;

НовоеИзделие.Количество = Изделие.Количество;
НовоеИзделие.Цвет = ПолучитьЦвет(Изделие.Цвет);
НовоеИзделие.Цена = Изделие.Цена;
НовоеИзделие.Сумма = Изделие.Сумма;
НовоеИзделие.СуммаАксессуаров = Изделие.СуммаАксессуаров;
НовоеИзделие.Площадь1Изд = Изделие.Площадь;
НовоеИзделие.Площадь = Изделие.Площадь * НовоеИзделие.Количество;
НовоеИзделие.СуммаИзделийАксессуаров = Изделие.Сумма + Изделие.СуммаАксессуаров;
НовоеИзделие.Эскиз = Изделие.Эскиз;
ДополнитьТаблицуСоответствий(Изделие.Номенклатура);

НоваяСтрокаИзделие = ТаблицаИзделий.Добавить();
НоваяСтрокаИзделие.Номер = Изделие.Номер;
НоваяСтрокаИзделие.Наименование = НовоеИзделие.Наименование;
НоваяСтрокаИзделие.Количество = Изделие.Количество;
НоваяСтрокаИзделие.Цвет = СокрЛП(Изделие.Цвет);
НоваяСтрокаИзделие.ЦветОкраски = ПолучитьЦвет(Изделие.Цвет);
НоваяСтрокаИзделие.Цена = Окр((Изделие.Сумма + Изделие.СуммаАксессуаров)/НоваяСтрокаИзделие.Количество,2);
НоваяСтрокаИзделие.Сумма = НоваяСтрокаИзделие.Цена * НоваяСтрокаИзделие.Количество;
НоваяСтрокаИзделие.Площадь = Изделие.Площадь;
НоваяСтрокаИзделие.Эскиз = Изделие.Эскиз;
НоваяСтрокаИзделие.НаименованиеИТ5 = Изделие.НаименованиеИТ5;
НоваяСтрокаИзделие.ТаблицаСпецификации.Загрузить(Изделие.Номенклатура);
КонецЦикла;

НайтиСоответствия();
КонецПроцедуры
В этом изменении добавлена проверка на существование элемента с таким же наименованием перед добавлением нового элемента. Если такой элемент уже существует, он будет обновлен, если нет, будет создан новый.
Owl ScoringУченик (86) 5 месяцев назад
Не получилось, код продолжает создавать новый Элемент с таким же названием, так же желательно что бы он не просто изменял данные а добавлял новые к уже существующим
Похожие вопросы