DemAl

6. Гамма. Расчет количества в спецификации по формуле

Dec 7th, 2021 (edited)
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.87 KB | None | 0 0
  1. Процедура РассчитатьКоличествоМатериаловПоФормулеНаСервере()
  2.    
  3.     СпрМенеджер = Справочники.РесурсныеСпецификации;
  4.     ТипКолонкиФормула = Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(1024));
  5.    
  6.     // Описание источников
  7.     ОписаниеИсточников = СпрМенеджер.ОписаниеИсточниковДанныхОперандов();
  8.    
  9.     // Параметры расчета
  10.     РеквизитыСтруктурыДанных =
  11.         "СпособРаспределенияЗатратНаВыходныеИзделия," +
  12.         "ТипПроизводственногоПроцесса," +
  13.         "ВариантНазначения," +
  14.         "МногоэтапныйПроизводственныйПроцесс," +
  15.         "ВыпускПроизвольнымиПорциями," +
  16.         "ОптимальнаяПартияВыпуска," +
  17.         "ОсновноеИзделиеНоменклатура," +
  18.         "ДопустимоеПревышениеОптимальнойПартииВыпуска," +
  19.         "МинимальнаяПартияВыпуска," +
  20.         "ОптимальноеКоличествоПередачиМеждуЭтапами," +
  21.         "ЕстьУточняемоеОсновноеИзделие," +
  22.         "ЕстьПараметризацияРесурсов," +
  23.         "ЕстьАвтовыборСпецификацийВПроцессе," +
  24.         "ЕстьРасчетВероятности," +
  25.         "ЕстьНекратныйВыпуск," +
  26.         "ЕстьНекратныеНормативыВРЦ"
  27.     ;
  28.    
  29.     СтруктураДанных = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Спецификация, РеквизитыСтруктурыДанных);
  30.     СтруктураДанных.Вставить("Спецификация", Спецификация);
  31.     СтруктураДанных.Вставить("СпецификацияПредставление", Строка(Спецификация));
  32.     СтруктураДанных.Вставить("СостояниеДанныхНаборов", "Отсутствуют");
  33.     СтруктураДанных.Вставить("МаксимальныйСрокПролеживанияВДнях", 1);
  34.     СтруктураДанных.Вставить("ОптимальноеКоличествоПередачиМеждуЭтапами", Ложь);
  35.     СтруктураДанных.Вставить("ОсновноеИзделие", СтруктураДанных.ОсновноеИзделиеНоменклатура);
  36.    
  37.     ДанныеОсновногоИзделия = СпрМенеджер.СтруктураДанныхОсновногоИзделияСпецификации();
  38.     ЗаполнитьЗначенияСвойств(ДанныеОсновногоИзделия, СтруктураДанных.ОсновноеИзделие);
  39.     ДанныеОсновногоИзделия.Количество = Спецификация.ВыходныеИзделия.Итог("КоличествоУпаковок");
  40.     ДанныеОсновногоИзделия.КоличествоУпаковок = ДанныеОсновногоИзделия.Количество;
  41.     СтруктураДанных.ОсновноеИзделие = ДанныеОсновногоИзделия;
  42.    
  43.     ДанныеТабличныхЧастей = Новый Структура;
  44.     ДанныеТабличныхЧастей.Вставить("ВыходныеИзделия", Спецификация.ВыходныеИзделия.Выгрузить());
  45.     ДанныеТабличныхЧастей.Вставить("ВозвратныеОтходы", Спецификация.ВозвратныеОтходы.Выгрузить());
  46.     ДанныеТабличныхЧастей.Вставить("МатериалыИУслуги", Спецификация.МатериалыИУслуги.Выгрузить());
  47.    
  48.     ИсточникиДанных = СпрМенеджер.СтруктураИсточниковДляРасчетаПоФормулам();
  49.    
  50.     // основное изделие спецификации
  51.     ОсновноеИзделие = ОбщегоНазначения.СкопироватьРекурсивно(СтруктураДанных.ОсновноеИзделие);
  52.     ИсточникиДанных.ОсновноеИзделие = ОсновноеИзделие;
  53.  
  54.     Для Каждого СтрокаДанных Из ДанныеТабличныхЧастей Цикл  
  55.        
  56.         ИмяТЧ = СтрокаДанных.Ключ;
  57.        
  58.         ТЗДанные = ДанныеТабличныхЧастей[ИмяТЧ];
  59.         ТЗДанные.Колонки.Добавить("Формула", ТипКолонкиФормула);
  60.        
  61.         Таблица = ОбщегоНазначенияУТ.ВыгрузитьТаблицуЗначений(ТЗДанные,, "НомерСтроки,АлгоритмРасчетаКоличества", Новый Структура("Формула", ""));
  62.        
  63.         НаборДанных = Новый Массив;
  64.         НаборДанных.Добавить(Таблица);
  65.        
  66.         ИсточникиДанных[ИмяТЧ].Колонки.Добавить("Формула", ТипКолонкиФормула);
  67.        
  68.         Для каждого Строка Из ТЗДанные Цикл
  69.        
  70.             нстрИсточника = ИсточникиДанных[ИмяТЧ].Добавить();
  71.             ЗаполнитьЗначенияСвойств(нстрИсточника, Строка);
  72.            
  73.             // заполним количество
  74.             НайденныеСтрокиТЧ = Спецификация[ИмяТЧ].НайтиСтроки(Новый Структура("КлючСвязи", нстрИсточника.КлючСвязи));
  75.             Если НайденныеСтрокиТЧ.Количество() > 0 Тогда
  76.                 нстрИсточника.Количество = НайденныеСтрокиТЧ[0].КоличествоУпаковок;  
  77.             КонецЕсли;
  78.            
  79.         КонецЦикла;
  80.  
  81.     КонецЦикла;
  82.    
  83.     ПараметрыДляРасчета = УправлениеДаннымиОбИзделиях.ПараметрыДляРасчетаПоФормулам(ОписаниеИсточников, НаборДанных);
  84.     ДанныеДляРасчета = УправлениеДаннымиОбИзделиях.ДанныеДляРасчетаПоФормулам(СпрМенеджер, ПараметрыДляРасчета, ОписаниеИсточников, ИсточникиДанных);
  85.    
  86.     Для Каждого Строка Из ИсточникиДанных.МатериалыИУслуги Цикл
  87.                
  88.         // заполним преоразованную формулу
  89.         МассивСтрокСФормулами = НаборДанных[0].НайтиСтроки(Новый Структура("НомерСтроки, АлгоритмРасчетаКоличества", Строка.НомерСтроки, Строка.АлгоритмРасчетаКоличества));
  90.         Если МассивСтрокСФормулами.Количество() > 0 Тогда
  91.             Формула = МассивСтрокСФормулами[0].Формула;
  92.             Если Формула <> Неопределено И Не ПустаяСтрока(Формула) Тогда
  93.                 Строка.Формула = Формула;
  94.                 УправлениеДаннымиОбИзделиях.РассчитатьКоличествоПоФормуле(Строка, ДанныеДляРасчета, "Количество");
  95.             КонецЕсли;
  96.         КонецЕсли;
  97.  
  98.     КонецЦикла;
  99.    
  100.     Объект.МатериалыИУслуги.Загрузить(ИсточникиДанных.МатериалыИУслуги);
  101.  
  102. КонецПроцедуры
Add Comment
Please, Sign In to add comment