Попытка сравнить две строки, а затем добавить ячейки в каждой, используя скрипт Google - PullRequest
0 голосов
/ 28 марта 2019

У меня есть список товаров, которые имеют как новые, так и восстановленные детали.Новые они имеют одинаковый номер детали, за исключением того, что отремонтированные детали имеют R в конце.Я хочу найти две строки, а затем добавить, сколько у каждого есть.т. е.

  • поз. # описание мин. на руках
  • 172077 Соединительный кабель CAT 6, литой - 4 2
  • 172077R 172079 Соединительный кабель CAT 6 11

Итак, я хочу взять обе руки и сложить их вместе в сценарии, после чего на вкладке будет напечатан один ряд, в котором будет указано, сколько заказов

У меня работает сценарийна отдельных основаниях, но это не сравнивает как части так, тогда это говорит мне, чтобы заказать части, в которых я не нуждаюсь.Мне нужно только сохранить товар на складе, не имеет значения, его новый или старый

//@@@@@@@@@@@@@@@@@@@@@@@ Needs Ordered @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  function needsOrderedSheet() {
  // source spreadsheets
  var sourceSpreadSheet = SpreadsheetApp.getActive();
  var ss = sourceSpreadSheet.getSheetByName('Products'); 
 //destination spreadsheet
 var destinationSpreadSheet = sourceSpreadSheet.getSheetByName('Needs Ordered'); 
//  destinationSpreadSheet.appendRow(['Item #','Description','Type','Min Stock','When To Order','On Order','Portal On Hands','Total In Stock','How Many to Order']);

  var startRow=2; // First row of data to process
  var numRows =2; // Number of rows to process
  var startColumn = 1;  // A=1 B=2
  var numColumns = 9;  // Number of columns to process

  var dataRange = ss.getRange(startRow, startColumn, numRows, numColumns);
  var data = dataRange.getValues();

  for (var i = 0; i < data.length; ++i) {
     var column = data[i];
    var itemnum = column[0]; // a column
    var desc = column[1]; // b column
    var type =column[2]; // c column
    var minstock = column[3]; // d column
    var whentoorder=column[4];// e column
    var onorder=column[5];// f column
    var portal = column[6]; // g column
    var compare= column
    var newitem = itemnum.split("R");
    var nitem=newitem[0];

  var dataRange2 = ss.getRange(startRow, startColumn, numRows, numColumns);
  var data2 = dataRange2.getValues();    
    for (var c = 0; c < data2.length; ++c) {
   var compare = data2[c];
   var itemnum2 = compare[0]; // a column
   var desc2 = compare[1]; // b column
   var type2 =compare[2]; // c column
   var minstock2 = compare[3]; // d column
   var whentoorder2=compare[4];// e column
   var onorder2=compare[5];// f column
   var portal2 = compare[6]; // g column
   var addp=portal + portal2;   
      var totalwhentoorder=whentoorder+whentoorder2;
      var totalminstock=minstock+minstock2;
      var instock = addp; // h column
      var totalonorder=onorder + onorder2;
      var howmanytoorder=totalminstock-(totalonorder+instock);

 if (nitem == itemnum2 && itemnum2 != '' && nitem != itemnum){
  if(instock <= whentoorder && whentoorder >= '1' && totalonorder < totalwhentoorder || instock < totalminstock && instock < whentoorder){

 destinationSpreadSheet.appendRow([itemnum,desc,type,totalminstock,totalwhentoorder,totalonorder,portal,instock,howmanytoorder,nitem]);
 }

    }    

  if (nitem == itemnum && itemnum != '' && nitem != itemnum2){
   if(instock <= whentoorder && whentoorder >= '1' && totalonorder < totalwhentoorder || instock < totalminstock && instock < whentoorder){
   destinationSpreadSheet.appendRow([itemnum,desc,type,totalminstock,totalwhentoorder,totalonorder,portal,instock,howmanytoorder,itemnum2]);
 }
     }    
    }
 //   }
 }
}

Я обновил код .. Это на самом деле работает так, как я хочу для первых двух строк, но если я изменю NumRows на100 это в основном просто обработать первые две строки снова ..

Ответы [ 2 ]

0 голосов
/ 31 марта 2019

Это рабочая версия того, что я искал. Спасибо Куперу за большую часть кода. Он находит восстановленные детали и новые детали и соединяет их вместе. Затем он печатает только те элементы, которые необходимо заказать.

 function needsOrderedSheet() {
      var ss=SpreadsheetApp.getActive();
      var sh=ss.getSheetByName('Stock Items');
      var osh=ss.getSheetByName('Needs Ordered');
       osh.clearContents();
      var vH=(['Item #','Description','Type','Min Stock','On Order','Portal On Hands','Total In Stock','How Many to Order','New Part #']);
      var rg=sh.getRange(2,1,sh.getLastRow()-1,6);
      var vA=rg.getValues();
      var vB=[];
      var s=0;
      //rg.sort({column:1,ascending:true});
      for(var i=0;i-s<vA.length;i++) {
         vA[i-s][6]=vA[i-s][5];                                 // Total In Stock
         vA[i-s][7]=vA[i-s][3] - (vA[i-s][6] + vA[i-s][4]);     // How many to Order
      if(vA[i-s][0].toString().slice(-1)=='R') {

        vB.push(vA[i - s]);

          vA.splice(i - s,1);  
          s+=1;
        }
      }

      s=0;
      for(var i=0;i-s<vA.length;i++) {
         for(var j=0;j<vB.length;j++) {
           if(vA[i-s][0]==vB[j][0].toString().slice(0,-1)) {
            vB[j][6]=vA[i-s][5]+vB[j][5];                              //Total In Stock  vB
            vB[j][7]=vB[j][3] - (vA[i-s][4]+vB[j][6] + vB[j][4]);      //How many to Order  vB
            vB[j][8]=vA[i-s][0];                                      // Add New Part Number vB
            vA.splice(i-s,1);
             s+=1;
            break;
          }  
        }
      }
      var vBk=[];
      var d=0;
      for(var i=0;i-d<vB.length;i++) {
        if(!vB[i-d][8]) {

          vBk.push(vB[i-d]);
          vB.splice(i-d,1);
          d++;
        }
      }


    //  osh.getRange(1,1,vH.length,vH[0].length).setValues(vH)
     osh.appendRow(['Item #','Description','Type','Min Stock','On Order','Portal On Hands','Total In Stock','How Many to Order','Part # For New Items']);

     for(var c=0;c<vA.length;c++) {
       var vC = vA[c]; 
        var itemnum = vC[0]; // a column
        var desc = vC[1]; // b column
        var type =vC[2]; // c column
        var minstock = vC[3]; // d column
        var onorder=vC[4];// f column
        var portal =vC[5]; // g column
        var totalinstock=vC[6];
        var howmanytoorder=vC[7];
       var newpart=vC[8];

       if (howmanytoorder > 0){
      osh.appendRow([itemnum,desc,type,minstock,onorder,portal,totalinstock,howmanytoorder,]);
       }
     }
    //   osh.getRange(osh.getLastRow()+1,1,vA.length,vA[0].length).setValues(vA);
      for(var d=0;d<vBk.length;d++) {
       var vD = vBk[d]; 
        var itemnum = vD[0]; // a column
        var desc = vD[1]; // b column
        var type =vD[2]; // c column
        var minstock = vD[3]; // d column
        var onorder=vD[4];// f column
        var portal =vD[5]; // g column
        var totalinstock=vD[6];
        var howmanytoorder=vD[7];
       var newpart=vD[8];

       if (howmanytoorder > 0){
      osh.appendRow([itemnum,desc,type,minstock,onorder,portal,totalinstock,howmanytoorder,]);
       }
     }
    //  osh.getRange(osh.getLastRow()+1,1,vBk.length,vBk[0].length).setValues(vBk);

      for(var e=0;e<vB.length;e++) {
         var vE = vB[e]; 
        var itemnum = vE[0]; // a column
        var desc = vE[1]; // b column
        var type =vE[2]; // c column
        var minstock = vE[3]; // d column
        var onorder=vE[4];// f column
        var portal =vE[5]; // g column
        var totalinstock=vE[6];
        var howmanytoorder=vE[7];
       var newpart=vE[8];

       if (howmanytoorder > 0){
      osh.appendRow([itemnum,desc,type,minstock,onorder,portal,totalinstock,howmanytoorder,newpart]);
       }
     }
        //  osh.getRange(osh.getLastRow()+1,1,vB.length,vB[0].length).setValues(vB);

    }
0 голосов
/ 29 марта 2019

Сравнение новых и восстановленных товаров на складе

function search1() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet105');//sheet where I copied your data
  var rg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());//Data Range after Header
  var vA=rg.getValues();//all data
  var vB=[];
  var s=0;
  for(var i=0;i-s<vA.length;i++) {
    if(vA[i-s][0].toString().slice(-1)=='R') {
      vB.push(vA[i - s]);//push Rs into vB
      vA.splice(i - s,1);//removing Rs from vA 
      s+=1;
    }
  }
  for(var i=0;i<vA.length;i++) {//looking for vB in vA
    for(var j=0;j<vB.length;j++) {
      if(vA[i][0]==vB[j][0].toString().slice(0,-1)) {
        vB[j][7]=vA[i][6]+vB[j][6];//put sum in added column
      }  
    }
  }
  var d=0;
  for(var i=0;i-d<vB.length;i++) {//removing vB rows that are not long enough
    if(!vB[i-d][7]) {
      vB.splice(i-d,1);
      d++;
    }
  }
  //Putting vBs found in vA at bottom of spreadsheet.
  //The last column vB[j][7] is the sum of vA[i][6] and vB[j][6] from above
  sh.getRange(sh.getLastRow() + 2,1,vB.length,vB[0].length).setValues(vB);
}

Это строки, которые я нашел.

enter image description here

Эта версия найдет совпадения, суммирует их в версии R, удалит версию без R и создаст список новых пользователей. Он также использует выходную страницу, которую он очищает перед каждым запуском. У вас есть два назначить имя страниц. Страница ввода должна содержать только данные (никаких других материалов на этой странице), и страница вывода будет очищена перед повторной записью.

function search1() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet109');
  var osh=ss.getSheetByName('Sheet110');
  osh.clearContents();
  var vH=sh.getRange(1,1,1,sh.getLastColumn()).getValues();
  var rg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());
  var vA=rg.getValues();
  var vB=[];
  var s=0;
  //rg.sort({column:1,ascending:true});
  for(var i=0;i-s<vA.length;i++) {
    if(vA[i-s][0].toString().slice(-1)=='R') {
      vB.push(vA[i - s]);
      vA.splice(i - s,1);
      s+=1;
    }
  }
  s=0;
  for(var i=0;i-s<vA.length;i++) {
    for(var j=0;j<vB.length;j++) {
      if(vA[i-s][0]==vB[j][0].toString().slice(0,-1)) {
        vB[j][7]=vA[i-s][6]+vB[j][6];
        vA.splice(i-s,1);
        s+=1;
        break;
      }  
    }
  }
  var vBk=[];
  var d=0;
  for(var i=0;i-d<vB.length;i++) {
    if(!vB[i-d][7]) {
      vBk.push(vB[i-d]);
      vB.splice(i-d,1);
      d++;
    }
  }
  osh.getRange(1,1,vH.length,vH[0].length).setValues(vH);
  osh.getRange(osh.getLastRow()+1,1,vA.length,vA[0].length).setValues(vA);
  osh.getRange(osh.getLastRow()+1,1,vBk.length,vBk[0].length).setValues(vBk);
  osh.getRange(osh.getLastRow() + 1,1,vB.length,vB[0].length).setValues(vB);
}
...