1

Тема: добавление поля в csv файл

Мне необходимо добавить поле в выгружаемый файл csv в wminqty.php, необходимо добавить название категории товара. Я попытался сделать так

    public function oncsv($sender) {
    
        $csv = "";

        foreach ($this->data as $d) {
          
            $csv .= $d->itemname . '|';
            $csv .= $d->iqty . '|';
        $csv .= $d->msr . '|';
            $csv .= $d->minqty ; 
         
            $csv .= "\n";
        }
        $csv = mb_convert_encoding($csv, "windows-1251", "utf-8");

        header("Content-type: text/csv");
        header("Content-Disposition: attachment;Filename=minqty.csv");
        header("Content-Transfer-Encoding: binary");

        echo $csv;
        flush();
        die;
    }

так же добавил

   public function mqlistOnRow($row) {
        $item = $row->getDataItem();

        $row->add(new Label('itemname', $item->itemname));
//    $row->add(new Label('msr', $item->msr));
        $row->add(new Label('qty', Helper::fqty($item->iqty)));
        $row->add(new Label('minqty', Helper::fqty($item->minqty)));
    
    }

если убрать коментарии $row->add(new Label('msr', $item->msr)); то получаю ошибку, если закоментирую то все работает.
При добавлении  просто переменной $csv .= $d->msr нечего не происходит. Подскажите пожалуйста где ошибка, как мне добавить эту строку.

2

Re: добавление поля в csv файл

сам грид трогать не  нужно данные  в  csv берутся   прямо  с  набора получанрго  с  БД
$row->add(new Label('itemname', $item->itemname));
это  вывод на  экран

msr  это  единица  измерения  а  не  категория
имя категории надо  подтянуть в  набора

используйте
select * from (select item_id, itemname, msr,cat_name,
                 (select  coalesce(sum(s.qty) ,0) from `store_stock_view` s where {$cstr} s.item_id=i.item_id and s.qty <> 0    ) as iqty,
                 i.`minqty`
                 from items_view i where minqty>0 )t where   iqty <  minqty   

а  из него  cat_name

   $csv .= $d->minqty ;

3

Re: добавление поля в csv файл

Сделал вот так вот

$sql =     " select * from (select item_id, itemname, msr, cat_name,
                 (select  coalesce(sum(s.qty) ,0) from `store_stock_view` s where {$cstr} s.item_id=i.item_id and s.qty <> 0    ) as iqty,
                 i.`minqty`
                 from items_view i where minqty>0 )t where   iqty <  minqty ";
public function oncsv($sender) {
    
        $csv = "";

        foreach ($this->data as $d) {
          
            $csv .= $d->itemname . '|';
            $csv .= $d->iqty . '|';
        //    $csv .= $d->cat_name ; . '|';
            $csv .= $d->minqty ; 
         
            $csv .= "\n";
        }
        $csv = mb_convert_encoding($csv, "windows-1251", "utf-8");

        header("Content-type: text/csv");
        header("Content-Disposition: attachment;Filename=minqty.csv");
        header("Content-Transfer-Encoding: binary");

        echo $csv;
        flush();
        die;
    }

если раскоментировать

$csv .= $d->cat_name ; . '|';

то выдает ошибку

4

Re: добавление поля в csv файл

так  это  синтаксис не правильный  у  вас  точка  с  запятой  в   воздухе  висит

5

Re: добавление поля в csv файл

Спасибо! Не заметил.

6

Re: добавление поля в csv файл

подскажите пожалуйста, как добавить поле с именем склада в wminqty.php для CSV

public function oncsv($sender) {
        $csv = "";
        foreach ($this->data as $d) {
            $csv .= $d->itemname . '|';
            $csv .= $d->cat_name . '|';
            $csv .= $d->iqty . '|';
            $csv .= $d->minqty ; 
            $csv .= "\n";
        }
        $csv = mb_convert_encoding($csv, "windows-1251", "utf-8");
        header("Content-type: text/csv");
        header("Content-Disposition: attachment;Filename=minqty.csv");
        header("Content-Transfer-Encoding: binary");
        echo $csv;
        flush();
        die;
    }

7

Re: добавление поля в csv файл

Пробовал так

   public function oncsv($sender) {
        $csv = "";
        foreach ($this->data as $d) {
            
            $csv .= $d->itemname . '|';
            $csv .= $d->cat_name . '|';
            $csv .= $d->storename . '|';
            $csv .= $d->iqty . '|';
            $csv .= $d->minqty ; 
            $csv .= "\n";
        }
        $csv = mb_convert_encoding($csv, "windows-1251", "utf-8");
        header("Content-type: text/csv");
        header("Content-Disposition: attachment;Filename=minqty.csv");
        header("Content-Transfer-Encoding: binary");
        echo $csv;
        flush();
        die;
    }

не работает

8

Re: добавление поля в csv файл

склад там не  вынимается в  запросе поэтому  неоткуда  печатать

9

Re: добавление поля в csv файл

если в mysql добавляю storename то уходит в ошибку

        $sql =     " select * from (select item_id, itemname, msr, cat_name, storename,
                 (select  coalesce(sum(s.qty) ,0) 
                 from `store_stock_view` s where {$cstr} s.item_id=i.item_id and s.qty <> 0    ) as iqty,
                 i.`minqty`
                 from items_view i where minqty>0 )t where   iqty <  minqty ";

если вставляю отдельный запрос

$sql =  "SELECT * FROM `store_stock_view` ORDER BY `store_stock_view`.`storename` ";

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

10

Re: добавление поля в csv файл

там нельзя  просто так  вставить  он  должен  сгрупировать  по  количеству.
я  переделаю  это  у  себя  и отправлю  вам
было  бы  удобнее  если  бы  вы  в  телеграм написали - на  оф.сайте есть  где  обратна связь

11

Re: добавление поля в csv файл

поменяйте  запрос
        $sql = "select t.qty, i.`minqty`,i.`itemname`,s.`storename`  from (select  item_id,store_id,coalesce(sum( `qty`),0) as qty   from  store_stock
            group by item_id,store_id ) t
            join items  i  on t.item_id = i.item_id
            join stores s  on t.store_id = s.store_id
            where t.qty < i.`minqty` and i.`minqty`>0 ";

и тогда  появится  имя  склада

12

Re: добавление поля в csv файл

так показывает только одну единицу товара
Вот мой старый запрос

$sql =     " select * from (select item_id, itemname, msr, cat_name,
                 (select  coalesce(sum(s.qty) ,0) 
                 from `store_stock_view` s where {$cstr} s.item_id=i.item_id and s.qty <> 0    ) as iqty,
                 i.`minqty` 
                 from items_view i where minqty>0 )t where   iqty <  minqty ";

13

Re: добавление поля в csv файл

да, недописал
дело не  в запросе

поменяйте  цикл там на     
        foreach ($rs as $row) {

                $this->data[] = new DataItem($row);
        }