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

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

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

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

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

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

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

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

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

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

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

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