Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 июн 2024, 03:23

Помогите правильно прописать код в обработке.

Автор Yanawerg, 31 мая 2024, 09:21

0 Пользователей и 1 гость просматривают эту тему.

Yanawerg

Есть процедура которая создаёт новый элемент в справочнике спецификации при загрузке заказа, как прописать условие при котором если "Изделие.НаименованиеИТ5 = "Тип№1"" тогда дополнить существующий элемент с таким наименованием а если наименование другое то создать новый элемент ?

Код:

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

LexaK

Yanawerg, странный такой код у вас, если я правильно вас понял, то получается такой код
(внимание могут быть опечатки)

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

Yanawerg

LexaK, Не помогло, всё ещё создаёт новый элемент, не перезаписывает старый не говоря уже о том что бы дополнять то что в нём уже есть

LexaK

Yanawerg, у вас очень заковыристый код, возможно отрабатывает в другом месте, не в том что вы нам показываете!
но для успешного решения этой задачи, используйте отладчик! в нем можно, ваш код, пройти по каждой команде,
проверить текущие значения переменных и реквизитов - сразу все станет ясно что и где поправить для правильной работы!
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск