Obtendo valores da datagrid carregada Boa tarde a todos! Estou tentando utilizar a seguinte função $objetos = $this->datagridXML->getItems(); mas não está retornando nada em $objetos. A datagrid está carregada com os dados, tudo certinho, mas não consigo obter os dados dela novamente. Alguma ajuda? ...
AN
Obtendo valores da datagrid carregada  
Boa tarde a todos!
Estou tentando utilizar a seguinte função

$objetos = $this->datagridXML->getItems();


mas não está retornando nada em $objetos.
A datagrid está carregada com os dados, tudo certinho, mas não consigo obter os dados dela novamente.
Alguma ajuda?

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (9)


NR

Em qual parte do código você está chamando a getItems?

Qualquer coisa poste o código que fica mais fácil de ajudar
AN

Bom dia Nataniel!
No meu formulário (criado pelo studio) tenho um botão que serve para validar o XML. Ao clicar, é carregado os produtos do XML em uma datagrid. Após carregado os produtos, o usuário poderá clicar em um outro botão para cadastrar aqueles produtos que estão na datagrid.

Segue o código:


 
  1. <?php
  2. /**
  3. * ImportaXML Registration
  4. * @author <your name here>
  5. */
  6. class ImportaXML extends TPage
  7. {
  8. private $form;
  9. private $datagrid;
  10. private $pageNavigation;
  11. private $loaded;
  12. private $datagridXML;
  13. private $campoFORNECEDOR;
  14. private $campoEMISSAO;
  15. private $campoNFE;
  16. private $campoTOTALNFE;
  17. private $pathNFE;
  18. private $campoDESCONTO;
  19. private $preco;
  20. private $validade;
  21. /**
  22. * Class constructor
  23. * Creates the page and the registration form
  24. */
  25. function __construct()
  26. {
  27. parent::__construct();
  28. // creates the form
  29. $this->form = new TForm('form_Nfecompra');
  30. try
  31. {
  32. // TUIBuilder object
  33. $ui = new TUIBuilder(500, 500);
  34. $ui->setController($this);
  35. $ui->setForm($this->form);
  36. // reads the xml form
  37. $ui->parseFile('app/forms/ImportaXML.form.xml');
  38. $this->campoFORNECEDOR = $ui->getWidget('FORNECEDOR');
  39. $this->campoNFE = $ui->getWidget('NFE');
  40. $this->campoTOTALNFE = $ui->getWidget('TOTALNFE');
  41. $this->campoEMISSAO = $ui->getWidget('EMISSAO');
  42. $this->pathNFE = $ui->getWidget('pathNFE');
  43. $this->campoDESCONTO = $ui->getWidget('TAXADESCONTO');
  44. $this->preco = $ui->getWidget('PRECO');
  45. $this->validade = $ui->getWidget('VALIDADE');
  46. //$this->datagridXML = $ui->getWidget('datagridXML');
  47. $this->preco->setNumericMask(2, ',', '.');
  48. // get the interface widgets
  49. $fields = $ui->getWidgets();
  50. // look for the TDataGrid object
  51. foreach ($fields as $name => $field)
  52. {
  53. if ($field instanceof TDataGrid)
  54. {
  55. $this->datagridXML = $field;
  56. //$this->pageNavigation = $this->datagrid->getPageNavigation();
  57. }
  58. }
  59. $this->datagridXML = new TDataGrid;
  60. $column_DESCRICAO = new TDataGridColumn('DESCRICAO', 'Descrição', 'left',400);
  61. $column_CUSTO = new TDataGridColumn('CUSTO', 'Custo', 'center',60);
  62. $column_QTD = new TDataGridColumn('QUANTIDADE', 'Qtd', 'center',40);
  63. $column_REFERENCIA = new TDataGridColumn('REFERENCIA', 'Referência', 'left',200);
  64. $column_PRECO = new TDataGridColumn('PRECO', 'Preço', 'center',100);
  65. $column_VALIDADE = new TDataGridColumn('VALIDADE', 'Validade', 'right',100);
  66. $this->datagridXML->addColumn($column_DESCRICAO);
  67. $this->datagridXML->addColumn($column_CUSTO);
  68. $this->datagridXML->addColumn($column_QTD);
  69. $this->datagridXML->addColumn($column_REFERENCIA);
  70. $this->datagridXML->addColumn($column_PRECO);
  71. $this->datagridXML->addColumn($column_VALIDADE);
  72. $this->datagridXML->setHeight(150);
  73. $this->datagridXML->createModel();
  74. $frame_html4 = $ui->getWidget('frame2'); // lê o frame
  75. $frame_html4->clearChildren(); // limpa o conteúdo do frame
  76. $scroll = new TScroll();
  77. $scroll->setSize('100%',180);
  78. $scroll->add($this->datagridXML);
  79. $frame_html4->add($scroll); // adiciona no frame
  80. $this->datagridXML->style = 'width: 100%, align: right, height: 100%;';
  81. // add the TUIBuilder panel inside the TForm object
  82. $this->form->add($ui);
  83. // set form fields from interface fields
  84. $this->form->setFields($ui->getFields());
  85. }
  86. catch (Exception $e)
  87. {
  88. new TMessage('error', $e->getMessage());
  89. }
  90. // add the form to the page
  91. parent::add($this->form);
  92. }
  93. function visualizarXML()
  94. {
  95. $object = $this->form->getData();
  96. try
  97. {
  98. TTransaction::open('sample');
  99. if ($object->file)
  100. {
  101. $target_folder = 'NFEImporta';
  102. $target_file = $target_folder . '/' . $object->file;
  103. @mkdir($target_folder);
  104. rename('tmp/' . $object->file, $target_file);
  105. $dom = new DomDocument();
  106. $dom->load($target_file);
  107. $this->pathNFE->setValue($target_file);
  108. $NFE_tags = $dom->getElementsByTagName('cNF');
  109. $NFE_tags = $NFE_tags->item(0)->nodeValue;
  110. $this->campoNFE->setValue($NFE_tags);
  111. $FORNECEDOR_tags = $dom->getElementsByTagName('xNome');
  112. $FORNECEDOR_tags = $FORNECEDOR_tags->item(0)->nodeValue;
  113. $this->campoFORNECEDOR->setValue($FORNECEDOR_tags);
  114. $FORNECEDOR_tags = $dom->getElementsByTagName('vNF');
  115. $FORNECEDOR_tags = $FORNECEDOR_tags->item(0)->nodeValue;
  116. $this->campoTOTALNFE->setValue(number_format($FORNECEDOR_tags, 2, ',', '.'));
  117. $FORNECEDOR_tags = $dom->getElementsByTagName('dhEmi');
  118. $FORNECEDOR_tags = $FORNECEDOR_tags->item(0)->nodeValue;
  119. $FORNECEDOR_tags = substr($FORNECEDOR_tags, 0, 10);
  120. $FORNECEDOR_tags = TDate::date2br($FORNECEDOR_tags);
  121. $this->campoEMISSAO->setValue($FORNECEDOR_tags);
  122. $tuas_tags = $dom->getElementsByTagName('prod');
  123. $repository = new TRepository('produto');
  124. foreach ($tuas_tags as $tua_tag)
  125. {
  126. $produto = new produto();
  127. $nomeTAG = $tua_tag->getElementsByTagName('xProd');
  128. $nome = $nomeTAG->item(0)->nodeValue;
  129. $produto->DESCRICAO = $nome;
  130. $nomeTAG = $tua_tag->getElementsByTagName('qTrib');
  131. $nome = $nomeTAG->item(0)->nodeValue;
  132. $produto->QUANTIDADE = $nome;
  133. $produto->QUANTIDADE = intval($produto->QUANTIDADE);
  134. $nomeTAG = $tua_tag->getElementsByTagName('vUnCom');
  135. $nome = $nomeTAG->item(0)->nodeValue;
  136. $produto->CUSTO = $nome;
  137. $produto->CUSTO = number_format($produto->CUSTO, 2, ',', '.');
  138. $nomeTAG = $tua_tag->getElementsByTagName('cEAN');
  139. $nome = $nomeTAG->item(0)->nodeValue;
  140. $produto->REFERENCIA = $nome;
  141. if($object->PRECO){
  142. $produto->PRECO = $object->PRECO;
  143. }
  144. $criteria = new TCriteria;
  145. $criteria->add(new TFilter('REFERENCIA', '=', $produto->REFERENCIA));
  146. $registros = $repository->count($criteria);
  147. if($registros != 0){
  148. new TMessage("info","Produto Já Existente! Referência: $produto->REFERENCIA.");
  149. }
  150. $item = new StdClass;
  151. $item = $produto;
  152. $item->VALIDADE = $object->VALIDADE;
  153. $item->PRECO = new TEntry('PRECO');
  154. $item->PRECO->setSize(60);
  155. $item->PRECO->setNumericMask(2, ',', '.', true);
  156. $item->PRECO->setValue($object->PRECO);
  157. $this->datagridXML->addItem($item);
  158. }
  159. }
  160. }
  161. catch (Exception $e)
  162. {
  163. new TMessage('error', $e->getCode());
  164. }
  165. TTransaction::close();
  166. }
  167. function ImportaXML()
  168. {
  169. TTransaction::open('sample');
  170. $object = $this->form->getData();
  171. $repositoryNfe = new TRepository('nfecompra');
  172. $repositoryNfe = $repositoryNfe->load();
  173. TTransaction::close();
  174. try
  175. {
  176. if ($object->pathNFE)
  177. {
  178. TTransaction::open('sample');
  179. $dom = new DomDocument();
  180. $dom->load($object->pathNFE);
  181. $NFE_tags = $dom->getElementsByTagName('emit');
  182. $empresa = new empresa();
  183. foreach ($NFE_tags as $EMIT_tag)
  184. {
  185. $nomeTAG = $EMIT_tag->getElementsByTagName('CNPJ');
  186. $nomeTAG = $nomeTAG->item(0)->nodeValue;
  187. $empresa->CNPJ = $nomeTAG;
  188. $nomeTAG = $EMIT_tag->getElementsByTagName('xNome');
  189. $nomeTAG = $nomeTAG->item(0)->nodeValue;
  190. $empresa->RAZAO = $nomeTAG;
  191. $nomeTAG = $EMIT_tag->getElementsByTagName('IE');
  192. $nomeTAG = $nomeTAG->item(0)->nodeValue;
  193. $empresa->TELEFONE = $nomeTAG;
  194. }
  195. $repository = new TRepository('empresa');
  196. $repository = $repository->load();
  197. $aux = 0;
  198. foreach ($repository as $empresasAux)
  199. {
  200. if ($empresa->CNPJ == preg_replace("/[^0-9]/", "", $empresasAux->CNPJ))
  201. {
  202. $aux = $empresasAux->id;
  203. }
  204. }
  205. if ($aux != 0) // Já existe uma empresa cadastrada com este cnpj
  206. {
  207. $empresa = new empresa($aux);
  208. new TMessage("info", "Já Existe uma empresa cadastrada com este CNPJ.");
  209. }
  210. else // Não existe nenhuma empresa cadastrada com este cnpj
  211. {
  212. new TMessage("info", "CNPJ não encontrado. Um novo fornecedor foi cadastrado.");
  213. $empresa->store();
  214. }
  215. $NFE_tags = $dom->getElementsByTagName('chNFe');
  216. $NFE_tags = $NFE_tags->item(0)->nodeValue;
  217. $aux2 = 0;
  218. foreach ($repositoryNfe as $nfes)
  219. {
  220. if ($nfes->CHAVEACESSO == $NFE_tags)
  221. {
  222. $aux2 = 1;
  223. }
  224. }
  225. if ($aux2 == 1)
  226. {
  227. new TMessage("error", "Nota já cadastrada!");
  228. }
  229. else
  230. {
  231. $nfeCompra = new nfecompra();
  232. // new TMessage('info',"aqui tudo bem");
  233. $nfeCompra->CHAVEACESSO = $NFE_tags;
  234. $nfeCompra->EMPRESA = $empresa->RAZAO;
  235. $nfeCompra->CNPJ = $empresa->CNPJ;
  236. $nfeCompra->DTEMISSAO = TDate::date2us($object->EMISSAO);
  237. $nfeCompra->DTCADASTRO = date("Y-m-d");
  238. $NFE_tags = $dom->getElementsByTagName('vNF');
  239. $NFE_tags = $NFE_tags->item(0)->nodeValue;
  240. $nfeCompra->TOTALNOTA = $NFE_tags;
  241. $NFE_tags = $dom->getElementsByTagName('vProd');
  242. $NFE_tags = $NFE_tags->item(0)->nodeValue;
  243. $nfeCompra->TOTALPRODUTOS = $NFE_tags;
  244. $nfeCompra->empresa_id = $empresa->id;
  245. $nfeCompra->store();
  246. $tuas_tags = $dom->getElementsByTagName('prod');
  247. $repository = new TRepository('produto');
  248. foreach ($tuas_tags as $tua_tag)
  249. {
  250. $produto = new produto();
  251. $nomeTAG = $tua_tag->getElementsByTagName('xProd');
  252. $nome = $nomeTAG->item(0)->nodeValue;
  253. $produto->DESCRICAO = strtoupper($nome);
  254. $nomeTAG = $tua_tag->getElementsByTagName('qTrib');
  255. $nome = $nomeTAG->item(0)->nodeValue;
  256. $produto->QUANTIDADE = (int) $nome;
  257. $nomeTAG = $tua_tag->getElementsByTagName('vUnCom');
  258. $nome = $nomeTAG->item(0)->nodeValue;
  259. $produto->PRECO = 0;
  260. $produto->CUSTO = (float) $nome;
  261. $produto->CUSTO = round($produto->CUSTO, 2);
  262. $nomeTAG = $tua_tag->getElementsByTagName('cEAN');
  263. $nome = $nomeTAG->item(0)->nodeValue;
  264. $produto->REFERENCIA = $nome;
  265. $produto->NFE_id = $nfeCompra->id;
  266. $produto->DTCADASTRO = date('Y-m-d');
  267. $produto->qtdTOTAL = $produto->QUANTIDADE;
  268. $produto->FORNECEDOR = $empresa->id;
  269. $produto->CATEGORIA = $object->CATEGORIA;
  270. $produto->TAXADESCONTO = $object->TAXADESCONTO;
  271. //$nomeTAG = $tua_tag->getElementsByTagName('vICMS');
  272. //$nome = $nomeTAG->item(0)->nodeValue;
  273. //$produto->ICMS = (float)$nome;
  274. $criteria = new TCriteria;
  275. $criteria->add(new TFilter('REFERENCIA', '=', $produto->REFERENCIA));
  276. $registros = $repository->count($criteria);
  277. if($registros != 0){
  278. $dados = $repository->load($criteria);
  279. foreach($dados as $prodOriginal){
  280. $prodOriginal->QUANTIDADE = $prodOriginal->QUANTIDADE + $produto->QUANTIDADE;
  281. $prodOriginal->CUSTO = $produto->CUSTO;
  282. $prodOriginal->TAXADESCONTO = $produto->TAXADESCONTO;
  283. $prodOriginal->store();
  284. //produto já existe. Vai só aumentar a quantidade. É uma atualização então..
  285. $historico = new historicoProduto();
  286. $historico->usuario = TSession::getValue('login');
  287. $historico->operacao = 6;
  288. $historico->acaoHistorico = "";
  289. $historico->acaoHistorico2 = "$produto->QUANTIDADE";
  290. $historico->dataAlteracao = date("d-m-Y H:i:s");
  291. $historico->produto_id = $prodOriginal->id;
  292. // TTransaction::open('sample');
  293. $historico->store();
  294. //TTransaction::close();
  295. }
  296. }else{
  297. $produto->store();
  298. $historico = new historicoProduto();
  299. $historico->usuario = TSession::getValue('login');
  300. $historico->operacao = 5;
  301. $historico->acaoHistorico = "";
  302. $historico->acaoHistorico2 = "$produto->QUANTIDADE";
  303. $historico->dataAlteracao = date("d-m-Y H:i:s");
  304. $historico->produto_id = $produto->id;
  305. $historico->store();
  306. }
  307. }
  308. new TMessage('info', "Nota Fiscal e Produtos Cadastrados Com Sucesso!");
  309. }
  310. TTransaction::close();
  311. }
  312. else
  313. {
  314. new TMessage("info", "Não há nada aqui!");
  315. }
  316. }
  317. catch (Exception $e)
  318. {
  319. new TMessage('error', $e->getCode());
  320. }
  321. }
  322. function ImportaXML2()
  323. {
  324. TTransaction::open('sample');
  325. $objetos = $this->datagridXML->getItems();
  326. if($objetos){
  327. new TMessage('info',"Ok");
  328. }else{
  329. new TMessage('info',"no");
  330. }
  331. foreach ($objetos as $ob){
  332. var_dump($ob);
  333. }
  334. }
  335. }
  336. ?>


Utilizo a função visualizarXML() para visualizar os produtos do XML na datagrid, e criei uma função chamada ImportaXML2() para pegar os dados da datagrid. Porém está retornando vazio.

Muito obrigado pela força!</your>
NR

Ao chamar importaXML2 a datagrid é zerada, pois quem adiciona os itens é a função visualizarXML, que não está sendo chamada nesse caso.

Lembre que cada ação é uma nova requisição, com isso uma nova instância da classe é criada, perdendo as informações anteriores.

Como preço é um TEntry, você vai precisar pegar essas informações através do getData, mas para isso sua grid vai ter que estar dentro de um form.

A ideia é a mesma do link abaixo:
adianti.com.br/framework_files/tutor/index.php?class=DatagridInputVi
AN

Entendi Nataniel!
Muito obrigado!
AN

Nataniel, estou seguindo o exemplo do tutor, e adicionei a seguinte linha logo após a inclusão do item na datagrid:

$this->form->addField($item->PRECO); // important!


Porém, obtenho um erro. Um TMessage escrito '0' (número zero)

Adicionei o datagrid no form, conforme tinha orientado anteriormente, mas ainda não consigo acessar os dados da datagrid após visualiza-la e após editar alguns campos TEntry editáveis.

Alguma ideia?
NR

Consegue postar o código novamente? Tente adicionar o xml do Form Designer também
AN

Bom dia!
Depois que você me disse que eu precisaria adicionar a datagrid no form, criei tudo sem utilizar o studio.
A função visualizarXML(), serve apenas pra importar os produtos do XML para a datagrid, e então poder fazer qualquer edição que eu preciso, para depois, utilizando a função onSave(), salvar os produtos no BD.

Para adicionar os TEntry no form, eu utiizei, na função visualizarXML() o seguinte:
$gridfields[] = $item->PRECO;


Após finalizar a iteração, fiz:
$this->form->setFields($gridfields);


Porém obtenho um erro, que até o momento não descobri o porque.

Segue o código completo:

 
  1. <?php
  2. class ImportaXML extends TStandardForm
  3. {
  4. protected $form;
  5. private $frame;
  6. private $framefoto;
  7. private $datagridTam;
  8. private $datagridTabelado;
  9. protected $datagridXML;
  10. private $path_NFE;
  11. private $campoEMISSAO;
  12. private $campoTOTALNFE;
  13. private $campoFORNECEDOR;
  14. private $arrayDataGrid;
  15. private $campoNFE;
  16. public function __construct()
  17. {
  18. parent::__construct();
  19. // creates the form
  20. $this->form = new TForm('form_search_ValCoig');
  21. $this->form->class = 'tform'; // CSS class
  22. // creates a table
  23. $table = new TTable;
  24. $table-> width = '1000px';
  25. $this->form->add($table);
  26. // add a row for the form title
  27. $row = $table->addRow();
  28. $row->class = 'tformtitle'; // CSS class
  29. $row->addCell( new TLabel('Importa XML') )->colspan = 10;
  30. // create the form fields
  31. $preco2 = new TEntry('PRECO2');
  32. //$preco2->setNumericMask(2, ',', '.');
  33. $this->campoFORNECEDOR = new TEntry('FORNECEDOR');
  34. $this->campoFORNECEDOR->setEditable(FALSE);
  35. $this->campoNFE = new TEntry('NFE');
  36. $this->campoNFE->setEditable(FALSE);
  37. $this->campoEMISSAO = new TEntry('EMISSAO');
  38. $this->campoEMISSAO->setEditable(FALSE);
  39. $this->campoTOTALNFE = new TEntry('TOTALNFE');
  40. $this->campoTOTALNFE->setEditable(FALSE);
  41. $this->pathNFE = new TEntry('pathNFE');
  42. $this->pathNFE->setEditable(FALSE);
  43. $file = new TFile('file');
  44. $categoria = new TCombo('CATEGORIA');
  45. $combo_items = array();
  46. $combo_items['1'] ='Automotivo';
  47. $combo_items['2'] ='Bijuterias';
  48. $combo_items['3'] ='Brinquedos';
  49. $combo_items['4'] ='Calçados';
  50. $combo_items['5'] ='Cama, Mesa, Banho';
  51. $combo_items['6'] ='Celulares';
  52. $combo_items['7'] ='Colchões';
  53. $combo_items['8'] ='Confecções';
  54. $combo_items['9'] ='Cosméticos e Beleza';
  55. $combo_items['10'] ='Eletrodomésticos';
  56. $combo_items['11'] ='Eletroportáteis';
  57. $combo_items['12'] ='Enxovais Recém-Nascidos';
  58. $combo_items['13'] ='Games';
  59. $combo_items['14'] ='Informática';
  60. $combo_items['15'] ='Malas de Viagem';
  61. $combo_items['16'] ='Material Escolar';
  62. $combo_items['17'] ='Móveis';
  63. $combo_items['18'] ='Óculos';
  64. $combo_items['19'] ='Relógios';
  65. $combo_items['20'] ='Utensílios de Casa';
  66. $categoria->addItems($combo_items);
  67. $desconto = new TEntry('TAXADESCONTO');
  68. $desconto->setNumericMask(2, ',','.',true);
  69. $desconto->setValue(100);
  70. //$desconto->setMask("99");
  71. $outros = new TEntry('OUTROS');
  72. $outros->setNumericMask(2, ',', '.');
  73. $frete = new TEntry('FRETE');
  74. $frete->setNumericMask(2, ',', '.');
  75. $refClipp = new TCombo('REFERENCIACLIPP');
  76. $combo_items2 = array();
  77. $combo_items['1'] =' = Cód. Barras';
  78. $combo_items['2'] =' Em Branco';
  79. $refClipp->addItems($combo_items2);
  80. $validade = new TDate('VALIDADE');
  81. $validade->setMask("dd/mm/yyyy");
  82. $row = $table->addRow();
  83. $row->addCell(new TLabel('XML:'));
  84. $row->addCell($file);
  85. $row->addCell(new TLabel('Desconto'));
  86. $row->addCell($desconto);
  87. $row->addCell(new TLabel('Categoria'));
  88. $row->addCell($categoria);
  89. $row->addCell(new TLabel('Valor'));
  90. $row->addCell($preco2);
  91. $row->addCell(new TLabel('Difal'));
  92. $row->addCell($outros);
  93. $row->addCell(new TLabel('Frete'));
  94. $row->addCell($frete);
  95. $row = $table->addRow();
  96. $row->addCell(new TLabel('Validade'));
  97. $row->addCell($validade)->colspan = 5;
  98. $row->addCell(new TLabel('Referencia'));
  99. $row->addCell($refClipp);
  100. $row->addCell(new TLabel('Responsavel:'));
  101. $this->form->setFields(array($file,$desconto,$preco2,$outros,$frete,$validade,$refClipp,$categoria));
  102. // keep the form filled during navigation with session data
  103. //$this->form->setData( TSession::getValue('Coig_filter_data') );
  104. // create two action buttons to the form
  105. $find_button = TButton::create('find', array($this, 'visualizarXML'), "Validar XML", 'ico_find.png');
  106. //$new_button = TButton::create('new', array('CoigForm', 'onEdit'), _t('New'), 'ico_new.png');
  107. $this->form->addField($find_button);
  108. //$this->form->addField($new_button);
  109. $buttons_box = new THBox;
  110. $buttons_box->add($find_button);
  111. //$buttons_box->add($new_button);
  112. // add a row for the form action
  113. $row = $table->addRow();
  114. $row->class = 'tformaction'; // CSS class
  115. $row->addCell($buttons_box)->colspan = 10;
  116. //------ creates a Datagrid----------------
  117. $this->datagridXML = new TDataGrid;
  118. //$this->datagrid->makeScrollable();
  119. $this->datagridXML->disableDefaultClick(); // important!
  120. $this->datagridXML->setHeight(320);
  121. //$this->form->add($this->datagrid);
  122. $this->form->add($this->datagridXML);
  123. // creates the datagrid columns
  124. $column_DESCRICAO = new TDataGridColumn('DESCRICAO', 'Descrição', 'left',400);
  125. $column_CUSTO = new TDataGridColumn('CUSTO', 'Custo', 'center',60);
  126. $column_QTD = new TDataGridColumn('QUANTIDADE', 'Qtd', 'center',20);
  127. $column_REFERENCIA = new TDataGridColumn('REFERENCIA', 'Referência', 'left',100);
  128. $column_PRECO = new TDataGridColumn('PRECO', 'Preço Prazo', 'center',100);
  129. $column_PRECOAVISTA = new TDataGridColumn('PRECOAVISTA', 'Preço A Vista', 'center',100);
  130. $column_VALIDADE = new TDataGridColumn('VALIDADE', 'Validade', 'center',100);
  131. $column_DIFAL = new TDataGridColumn('OUTROS', 'Difal', 'center',100);
  132. $column_FRETE = new TDataGridColumn('FRETE', 'Frete', 'center',100);
  133. $this->datagridXML->addColumn($column_DESCRICAO);
  134. $this->datagridXML->addColumn($column_CUSTO);
  135. $this->datagridXML->addColumn($column_QTD);
  136. $this->datagridXML->addColumn($column_REFERENCIA);
  137. $this->datagridXML->addColumn($column_PRECO);
  138. $this->datagridXML->addColumn($column_PRECOAVISTA);
  139. $this->datagridXML->addColumn($column_VALIDADE);
  140. $this->datagridXML->addColumn($column_DIFAL);
  141. $this->datagridXML->addColumn($column_FRETE);
  142. // create the datagrid model
  143. $this->datagridXML->createModel();
  144. $table = new TTable;
  145. $table->style = 'width: 90%';
  146. $table->addRow()->addCell(new TXMLBreadCrumb('menu.xml', __CLASS__));
  147. $table->addRow()->addCell($this->form);
  148. //$table->addRow()->addCell($this->datagridXML);
  149. //----botão salvar----------
  150. $save_button = TButton::create('save', array($this, 'onSave'), ('Importar XML'), 'ico_save.png');
  151. $this->form->addField($save_button);
  152. $buttons_box1 = new THBox;
  153. $buttons_box1->add($save_button);
  154. $row = $table->addRow()->addCell($buttons_box1);
  155. $row->class = 'tformaction'; // CSS class
  156. //navegador de paginas
  157. //$row = $table->addRow()->addCell($this->pageNavigation);
  158. parent::add($table);
  159. }
  160. function onSave(){
  161. $data = $this->form->getData();
  162. var_dump($data);
  163. }
  164. function visualizarXML()
  165. {
  166. $gridfields = array();
  167. $object = $this->form->getData();
  168. $this->form->setData($this->form->getData());
  169. try
  170. {
  171. TTransaction::open('sample');
  172. if ($object->file)
  173. {
  174. $target_folder = 'NFEImporta';
  175. $target_file = $target_folder . '/' . $object->file;
  176. @mkdir($target_folder);
  177. rename('tmp/' . $object->file, $target_file);
  178. $dom = new DomDocument();
  179. $dom->load($target_file);
  180. $this->pathNFE->setValue($target_file);
  181. $NFE_tags = $dom->getElementsByTagName('cNF');
  182. $NFE_tags = $NFE_tags->item(0)->nodeValue;
  183. $this->campoNFE->setValue($NFE_tags);
  184. $FORNECEDOR_tags = $dom->getElementsByTagName('xNome');
  185. $FORNECEDOR_tags = $FORNECEDOR_tags->item(0)->nodeValue;
  186. $this->campoFORNECEDOR->setValue($FORNECEDOR_tags);
  187. $FORNECEDOR_tags = $dom->getElementsByTagName('vNF');
  188. $FORNECEDOR_tags = $FORNECEDOR_tags->item(0)->nodeValue;
  189. $this->campoTOTALNFE->setValue(number_format($FORNECEDOR_tags, 2, ',', '.'));
  190. $FORNECEDOR_tags = $dom->getElementsByTagName('dhEmi');
  191. $FORNECEDOR_tags = $FORNECEDOR_tags->item(0)->nodeValue;
  192. $FORNECEDOR_tags = substr($FORNECEDOR_tags, 0, 10);
  193. $FORNECEDOR_tags = TDate::date2br($FORNECEDOR_tags);
  194. $this->campoEMISSAO->setValue($FORNECEDOR_tags);
  195. $tuas_tags = $dom->getElementsByTagName('prod');
  196. $repository = new TRepository('produto');
  197. foreach ($tuas_tags as $tua_tag)
  198. {
  199. $produto = new produto();
  200. $nomeTAG = $tua_tag->getElementsByTagName('xProd');
  201. $nome = $nomeTAG->item(0)->nodeValue;
  202. $produto->DESCRICAO = $nome;
  203. $nomeTAG = $tua_tag->getElementsByTagName('qTrib');
  204. $nome = $nomeTAG->item(0)->nodeValue;
  205. $produto->QUANTIDADE = $nome;
  206. $produto->QUANTIDADE = intval($produto->QUANTIDADE);
  207. $nomeTAG = $tua_tag->getElementsByTagName('vUnCom');
  208. $nome = $nomeTAG->item(0)->nodeValue;
  209. $produto->CUSTO = $nome;
  210. $produto->CUSTO = number_format($produto->CUSTO, 2, ',', '.');
  211. $nomeTAG = $tua_tag->getElementsByTagName('cEAN');
  212. $nome = $nomeTAG->item(0)->nodeValue;
  213. $produto->REFERENCIA = $nome;
  214. if($object->PRECO2){
  215. $produto->PRECO = $object->PRECO2;
  216. }
  217. $criteria = new TCriteria;
  218. $criteria->add(new TFilter('REFERENCIA', '=', $produto->REFERENCIA));
  219. $registros = $repository->count($criteria);
  220. if($registros != 0){
  221. new TMessage("info","Produto Já Existente! Referência: $produto->REFERENCIA.");
  222. }
  223. $item = new StdClass;
  224. //$item = $produto;
  225. $item->DESCRICAO = $produto->DESCRICAO;
  226. $item->CUSTO = $produto->CUSTO;
  227. //$item->REFERENCIA = $produto->REFERENCIA;
  228. $item->REFERENCIA = new TEntry('REFERENCIA');
  229. $item->VALIDADE = $object->VALIDADE;
  230. $item->FRETE = $object->FRETE;
  231. $item->OUTROS = $object->OUTROS;
  232. $item->PRECO = new TEntry('PRECO');
  233. $item->PRECOAVISTA = new TEntry('PRECOAVISTA');
  234. $item->QUANTIDADE = new TEntry('QUANTIDADE');
  235. $item->OUTROS = new TEntry('OUTROS');
  236. $item->FRETE = new TEntry('FRETE');
  237. $item->PRECO->setSize(60);
  238. $item->PRECOAVISTA->setSize(60);
  239. $item->OUTROS->setSize(60);
  240. $item->FRETE->setSize(60);
  241. $item->REFERENCIA->setSize(100);
  242. $item->QUANTIDADE->setSize(40);
  243. $item->PRECO->setNumericMask(2, ',', '.', true);
  244. $item->PRECOAVISTA->setNumericMask(2, ',', '.', true);
  245. $item->OUTROS->setNumericMask(2, ',', '.', true);
  246. $item->FRETE->setNumericMask(2, ',', '.', true);
  247. $item->PRECO->setValue($object->PRECO2);
  248. if($produto->PRECO){
  249. $PRECOAUX = str_replace('.','', $produto->PRECO);
  250. $PRECOAUX = str_replace(',','.', $PRECOAUX);
  251. }else{
  252. $PRECOAUX = null;
  253. }
  254. if($object->TAXADESCONTO !=100 && $PRECOAUX != null){
  255. $item->PRECOAVISTA->setValue($PRECOAUX - ($PRECOAUX*($object->TAXADESCONTO)/100));
  256. }
  257. $item->FRETE->setValue($object->FRETE);
  258. $item->OUTROS->setValue($object->OUTROS);
  259. $item->QUANTIDADE->setValue($produto->QUANTIDADE);
  260. $item->REFERENCIA->setValue($produto->REFERENCIA);
  261. $this->datagridXML->addItem($item);
  262. $gridfields[] = $item->PRECO; // important
  263. $this->arrayDataGrid[] = $item;
  264. }
  265. $this->form->setFields($gridfields);
  266. TSession::setValue('sessaoDatagridProdutosXML',$this->arrayDataGrid);
  267. }
  268. //$this->form->setData($this->form->getData());
  269. }
  270. catch (Exception $e)
  271. {
  272. new TMessage('error', $e->getCode());
  273. }
  274. TTransaction::close();
  275. }
  276. }
  277. ?>

NR

O zero está aparecendo porque você está exibindo o código da exceção ao invés da mensagem:
 
  1. <?php
  2. catch (Exception $e)
  3. {
  4. //new TMessage('error', $e->getCode());
  5. new TMessage('error', $e->getMessage());
  6. }
  7. ?>
AN

Realmente Nataniel. A mensagem dizia que eu já havia adicionado o campo PRECO2. Então o que fiz foi alterar o nome do campo com um contador, que é incrementado a cada iteração. Veja:
$item->PRECO = new TEntry("PRECO$contador"); $this->form->addField($item->PRECO);

Dessa forma tenho nomes diferentes a cada iteração.
Até aí tudo bem.
Rodei, sem erros.
Mas quando fui buscar os campos, na função onSave, utilizei os seguintes comandos:

function onSave(){ $data = $this->form->getData(); $message = ''; foreach ($this->form->getFields() as $name => $field) { if ($field instanceof TEntry) { $message .= " $name: " . $field->getValue() . ''; } } new TMessage('info', $message); //var_dump($data); }

Mas é mostrado apenas os campos do formulário. Os campos de preços, que foram criados na iteração, não foram mostrados.

Segue o código completo:

 
  1. <?php
  2. class ImportaXML extends TStandardForm
  3. {
  4. protected $form;
  5. private $frame;
  6. private $framefoto;
  7. private $datagridTam;
  8. private $datagridTabelado;
  9. protected $datagridXML;
  10. private $path_NFE;
  11. private $campoEMISSAO;
  12. private $campoTOTALNFE;
  13. private $campoFORNECEDOR;
  14. private $arrayDataGrid;
  15. private $campoNFE;
  16. public function __construct()
  17. {
  18. parent::__construct();
  19. // creates the form
  20. $this->form = new TForm('form_search_ValCoig');
  21. $this->form->class = 'tform'; // CSS class
  22. // creates a table
  23. $table = new TTable;
  24. $table-> width = '1000px';
  25. $this->form->add($table);
  26. // add a row for the form title
  27. $row = $table->addRow();
  28. $row->class = 'tformtitle'; // CSS class
  29. $row->addCell( new TLabel('Importa XML') )->colspan = 10;
  30. // create the form fields
  31. $preco2 = new TEntry('PRECO');
  32. //$preco2->setNumericMask(2, ',', '.');
  33. $this->campoFORNECEDOR = new TEntry('FORNECEDOR');
  34. $this->campoFORNECEDOR->setEditable(FALSE);
  35. $this->campoNFE = new TEntry('NFE');
  36. $this->campoNFE->setEditable(FALSE);
  37. $this->campoEMISSAO = new TEntry('EMISSAO');
  38. $this->campoEMISSAO->setEditable(FALSE);
  39. $this->campoTOTALNFE = new TEntry('TOTALNFE');
  40. $this->campoTOTALNFE->setEditable(FALSE);
  41. $this->pathNFE = new TEntry('pathNFE');
  42. $this->pathNFE->setEditable(FALSE);
  43. $file = new TFile('file');
  44. $categoria = new TCombo('CATEGORIA');
  45. $combo_items = array();
  46. $combo_items['1'] ='Automotivo';
  47. $combo_items['2'] ='Bijuterias';
  48. $combo_items['3'] ='Brinquedos';
  49. $combo_items['4'] ='Calçados';
  50. $combo_items['5'] ='Cama, Mesa, Banho';
  51. $combo_items['6'] ='Celulares';
  52. $combo_items['7'] ='Colchões';
  53. $combo_items['8'] ='Confecções';
  54. $combo_items['9'] ='Cosméticos e Beleza';
  55. $combo_items['10'] ='Eletrodomésticos';
  56. $combo_items['11'] ='Eletroportáteis';
  57. $combo_items['12'] ='Enxovais Recém-Nascidos';
  58. $combo_items['13'] ='Games';
  59. $combo_items['14'] ='Informática';
  60. $combo_items['15'] ='Malas de Viagem';
  61. $combo_items['16'] ='Material Escolar';
  62. $combo_items['17'] ='Móveis';
  63. $combo_items['18'] ='Óculos';
  64. $combo_items['19'] ='Relógios';
  65. $combo_items['20'] ='Utensílios de Casa';
  66. $categoria->addItems($combo_items);
  67. $desconto = new TEntry('TAXADESCONTO');
  68. $desconto->setNumericMask(2, ',','.',true);
  69. $desconto->setValue(100);
  70. //$desconto->setMask("99");
  71. $outros = new TEntry('OUTROS');
  72. $outros->setNumericMask(2, ',', '.');
  73. $frete = new TEntry('FRETE');
  74. $frete->setNumericMask(2, ',', '.');
  75. $refClipp = new TCombo('REFERENCIACLIPP');
  76. $combo_items2 = array();
  77. $combo_items['1'] =' = Cód. Barras';
  78. $combo_items['2'] =' Em Branco';
  79. $refClipp->addItems($combo_items2);
  80. $validade = new TDate('VALIDADE');
  81. $validade->setMask("dd/mm/yyyy");
  82. $row = $table->addRow();
  83. $row->addCell(new TLabel('XML:'));
  84. $row->addCell($file);
  85. $row->addCell(new TLabel('Desconto'));
  86. $row->addCell($desconto);
  87. $row->addCell(new TLabel('Categoria'));
  88. $row->addCell($categoria);
  89. $row->addCell(new TLabel('Valor'));
  90. $row->addCell($preco2);
  91. $row->addCell(new TLabel('Difal'));
  92. $row->addCell($outros);
  93. $row->addCell(new TLabel('Frete'));
  94. $row->addCell($frete);
  95. $row = $table->addRow();
  96. $row->addCell(new TLabel('Validade'));
  97. $row->addCell($validade)->colspan = 5;
  98. $row->addCell(new TLabel('Referencia'));
  99. $row->addCell($refClipp);
  100. $row->addCell(new TLabel('Responsavel:'));
  101. $this->form->setFields(array($file,$desconto,$preco2,$outros,$frete,$validade,$refClipp,$categoria));
  102. // keep the form filled during navigation with session data
  103. //$this->form->setData( TSession::getValue('Coig_filter_data') );
  104. // create two action buttons to the form
  105. $find_button = TButton::create('find', array($this, 'visualizarXML'), "Validar XML", 'ico_find.png');
  106. //$new_button = TButton::create('new', array('CoigForm', 'onEdit'), _t('New'), 'ico_new.png');
  107. $this->form->addField($find_button);
  108. //$this->form->addField($new_button);
  109. $buttons_box = new THBox;
  110. $buttons_box->add($find_button);
  111. //$buttons_box->add($new_button);
  112. // add a row for the form action
  113. $row = $table->addRow();
  114. $row->class = 'tformaction'; // CSS class
  115. $row->addCell($buttons_box)->colspan = 10;
  116. //------ creates a Datagrid----------------
  117. $this->datagridXML = new TDataGrid;
  118. //$this->datagrid->makeScrollable();
  119. $this->datagridXML->disableDefaultClick(); // important!
  120. $this->datagridXML->setHeight(320);
  121. //$this->form->add($this->datagrid);
  122. $this->form->add($this->datagridXML);
  123. // creates the datagrid columns
  124. $column_DESCRICAO = new TDataGridColumn('DESCRICAO', 'Descrição', 'left',400);
  125. $column_CUSTO = new TDataGridColumn('CUSTO', 'Custo', 'center',60);
  126. $column_QTD = new TDataGridColumn('QUANTIDADE', 'Qtd', 'center',20);
  127. $column_REFERENCIA = new TDataGridColumn('REFERENCIA', 'Referência', 'left',100);
  128. $column_PRECO = new TDataGridColumn('PRECO', 'Preço Prazo', 'center',100);
  129. $column_PRECOAVISTA = new TDataGridColumn('PRECOAVISTA', 'Preço A Vista', 'center',100);
  130. $column_VALIDADE = new TDataGridColumn('VALIDADE', 'Validade', 'center',100);
  131. $column_DIFAL = new TDataGridColumn('OUTROS', 'Difal', 'center',100);
  132. $column_FRETE = new TDataGridColumn('FRETE', 'Frete', 'center',100);
  133. $this->datagridXML->addColumn($column_DESCRICAO);
  134. $this->datagridXML->addColumn($column_CUSTO);
  135. $this->datagridXML->addColumn($column_QTD);
  136. $this->datagridXML->addColumn($column_REFERENCIA);
  137. $this->datagridXML->addColumn($column_PRECO);
  138. $this->datagridXML->addColumn($column_PRECOAVISTA);
  139. $this->datagridXML->addColumn($column_VALIDADE);
  140. $this->datagridXML->addColumn($column_DIFAL);
  141. $this->datagridXML->addColumn($column_FRETE);
  142. // create the datagrid model
  143. $this->datagridXML->createModel();
  144. $table = new TTable;
  145. $table->style = 'width: 90%';
  146. $table->addRow()->addCell(new TXMLBreadCrumb('menu.xml', __CLASS__));
  147. $table->addRow()->addCell($this->form);
  148. //$table->addRow()->addCell($this->datagridXML);
  149. //----botão salvar----------
  150. $save_button = TButton::create('save', array($this, 'onSave'), ('Importar XML'), 'ico_save.png');
  151. $this->form->addField($save_button);
  152. $buttons_box1 = new THBox;
  153. $buttons_box1->add($save_button);
  154. $row = $table->addRow()->addCell($buttons_box1);
  155. $row->class = 'tformaction'; // CSS class
  156. //navegador de paginas
  157. //$row = $table->addRow()->addCell($this->pageNavigation);
  158. parent::add($table);
  159. }
  160. function onSave(){
  161. $data = $this->form->getData();
  162. $message = '';
  163. foreach ($this->form->getFields() as $name => $field)
  164. {
  165. if ($field instanceof TEntry)
  166. {
  167. $message .= " $name: " . $field->getValue() . '<br>';
  168. }
  169. }
  170. new TMessage('info', $message);
  171. var_dump($data);
  172. }
  173. function visualizarXML()
  174. {
  175. $gridfields = array();
  176. $object = $this->form->getData();
  177. $this->form->setData($this->form->getData());
  178. try
  179. {
  180. TTransaction::open('sample');
  181. if ($object->file)
  182. {
  183. $target_folder = 'NFEImporta';
  184. $target_file = $target_folder . '/' . $object->file;
  185. @mkdir($target_folder);
  186. rename('tmp/' . $object->file, $target_file);
  187. $dom = new DomDocument();
  188. $dom->load($target_file);
  189. $this->pathNFE->setValue($target_file);
  190. $NFE_tags = $dom->getElementsByTagName('cNF');
  191. $NFE_tags = $NFE_tags->item(0)->nodeValue;
  192. $this->campoNFE->setValue($NFE_tags);
  193. $FORNECEDOR_tags = $dom->getElementsByTagName('xNome');
  194. $FORNECEDOR_tags = $FORNECEDOR_tags->item(0)->nodeValue;
  195. $this->campoFORNECEDOR->setValue($FORNECEDOR_tags);
  196. $FORNECEDOR_tags = $dom->getElementsByTagName('vNF');
  197. $FORNECEDOR_tags = $FORNECEDOR_tags->item(0)->nodeValue;
  198. $this->campoTOTALNFE->setValue(number_format($FORNECEDOR_tags, 2, ',', '.'));
  199. $FORNECEDOR_tags = $dom->getElementsByTagName('dhEmi');
  200. $FORNECEDOR_tags = $FORNECEDOR_tags->item(0)->nodeValue;
  201. $FORNECEDOR_tags = substr($FORNECEDOR_tags, 0, 10);
  202. $FORNECEDOR_tags = TDate::date2br($FORNECEDOR_tags);
  203. $this->campoEMISSAO->setValue($FORNECEDOR_tags);
  204. $tuas_tags = $dom->getElementsByTagName('prod');
  205. $repository = new TRepository('produto');
  206. $contador = 0;
  207. foreach ($tuas_tags as $tua_tag)
  208. {
  209. $contador = $contador +1;
  210. $produto = new produto();
  211. $nomeTAG = $tua_tag->getElementsByTagName('xProd');
  212. $nome = $nomeTAG->item(0)->nodeValue;
  213. $produto->DESCRICAO = $nome;
  214. $nomeTAG = $tua_tag->getElementsByTagName('qTrib');
  215. $nome = $nomeTAG->item(0)->nodeValue;
  216. $produto->QUANTIDADE = $nome;
  217. $produto->QUANTIDADE = intval($produto->QUANTIDADE);
  218. $nomeTAG = $tua_tag->getElementsByTagName('vUnCom');
  219. $nome = $nomeTAG->item(0)->nodeValue;
  220. $produto->CUSTO = $nome;
  221. $produto->CUSTO = number_format($produto->CUSTO, 2, ',', '.');
  222. $nomeTAG = $tua_tag->getElementsByTagName('cEAN');
  223. $nome = $nomeTAG->item(0)->nodeValue;
  224. $produto->REFERENCIA = $nome;
  225. if($object->PRECO){
  226. $produto->PRECO = $object->PRECO;
  227. }
  228. $criteria = new TCriteria;
  229. $criteria->add(new TFilter('REFERENCIA', '=', $produto->REFERENCIA));
  230. $registros = $repository->count($criteria);
  231. if($registros != 0){
  232. new TMessage("info","Produto Já Existente! Referência: $produto->REFERENCIA.");
  233. }
  234. $item = new StdClass;
  235. //$item = $produto;
  236. $item->DESCRICAO = $produto->DESCRICAO;
  237. $item->CUSTO = $produto->CUSTO;
  238. //$item->REFERENCIA = $produto->REFERENCIA;
  239. $item->REFERENCIA = new TEntry('REFERENCIA');
  240. $item->VALIDADE = $object->VALIDADE;
  241. $item->FRETE = $object->FRETE;
  242. $item->OUTROS = $object->OUTROS;
  243. //$contador = $this->datagridXML->getRowIndex();
  244. $item->PRECO = new TEntry("PRECO$contador");
  245. $this->form->addField($item->PRECO);
  246. //new TMessage("info",$contador);
  247. $item->PRECOAVISTA = new TEntry('PRECOAVISTA');
  248. $item->QUANTIDADE = new TEntry('QUANTIDADE');
  249. $item->OUTROS = new TEntry('OUTROS');
  250. $item->FRETE = new TEntry('FRETE');
  251. $item->PRECO->setSize(60);
  252. $item->PRECOAVISTA->setSize(60);
  253. $item->OUTROS->setSize(60);
  254. $item->FRETE->setSize(60);
  255. $item->REFERENCIA->setSize(100);
  256. $item->QUANTIDADE->setSize(40);
  257. $item->PRECO->setNumericMask(2, ',', '.', true);
  258. $item->PRECOAVISTA->setNumericMask(2, ',', '.', true);
  259. $item->OUTROS->setNumericMask(2, ',', '.', true);
  260. $item->FRETE->setNumericMask(2, ',', '.', true);
  261. $item->PRECO->setValue($object->PRECO);
  262. if($produto->PRECO){
  263. $PRECOAUX = str_replace('.','', $produto->PRECO);
  264. $PRECOAUX = str_replace(',','.', $PRECOAUX);
  265. }else{
  266. $PRECOAUX = null;
  267. }
  268. if($object->TAXADESCONTO !=100 && $PRECOAUX != null){
  269. $item->PRECOAVISTA->setValue($PRECOAUX - ($PRECOAUX*($object->TAXADESCONTO)/100));
  270. }
  271. $item->FRETE->setValue($object->FRETE);
  272. $item->OUTROS->setValue($object->OUTROS);
  273. $item->QUANTIDADE->setValue($produto->QUANTIDADE);
  274. $item->REFERENCIA->setValue($produto->REFERENCIA);
  275. $this->datagridXML->addItem($item);
  276. //$gridfields[] = $item->PRECO; // important
  277. //$this->arrayDataGrid[] = $item->PRECO;
  278. //new TMessage("info",$item->PRECO->getName());
  279. }
  280. //$this->form->setFields($gridfields);
  281. TSession::setValue('sessaoDatagridProdutosXML',$this->arrayDataGrid);
  282. }
  283. //$this->form->setData($this->form->getData());
  284. }
  285. catch (Exception $e)
  286. {
  287. new TMessage('error', $e->getMessage());
  288. }
  289. TTransaction::close();
  290. }
  291. }
  292. ?>