cancel
Showing results for 
Search instead for 
Did you mean: 

how can i add a new row in System Matrix passing itemcode and quantaty

Former Member
0 Kudos

Hi All,

I have to add new lines in the matrix system only through the itemcode and item quantity. I tried several ways without success. Maybe the following code help to explain what I'm trying to do.

Someone already inserted rows in the matrix system? Can someone show me how I can do. This example is in C# but if someone has in VB I will apreciate.



FormUID = SBO_Application.Forms.ActiveForm.UniqueID;
            f = SBO_Application.Forms.Item(FormUID);
            try
            {
                SAPbobsCOM.Recordset oRS;
                oRS = ((SAPbobsCOM.Recordset)oCompany.GetBusinessObje
SAPbobsCOM.BoObjectTypes.BoRecordset));
                oItem = f.Items.Item("38");
                oMatrix = ((SAPbouiCOM.Matrix)(oItem.Specific));
                oEditText = ((SAPbouiCOM.EditText)oMatrix.Columns.Item(3).Cells.Item(oMatrix.RowCount - 1).Specific);
                string Codigo = oEditText.Value; //Select the item number to use in strQuery
                strQuery = "SELECT U_ART_COM FROM [@SB1EVOL_COMPOSTOS] where
U_ART_PRI='" + Codigo.ToString();
                 oRS.DoQuery(strQuery);

                if (oRS.RecordCount > 0)
                {
                    oRS.MoveFirst();
                    numart = oRS.RecordCount;

                    f.Freeze(true);
                    for (j = 1; j <= numart; j++)
                    {
                        try
                        {

                            ItemCodeTXT = oRS.Fields.Item(0).Value.ToString();
                            oEditText = ((SAPbouiCOM.EditText)(oMatrix.Columns.Item(3).Cells.Item(oMatrix.RowCount).Specific));
                            oEditText.Value = ItemCodeTXT.ToString();
                            f.Update();
                            oRS.MoveNext();

                        }
                        catch (Exception oEx)
                        {
                            f.Freeze(false);
                            f.Update();
                            MessageBox.Show(oEx.Message + " j = " + System.Convert.ToString(j));
                        }
                    }
                    j = 0;
                    f.Freeze(false);
                    f.Update(); 
                }

In this example i try to add rows in Invoice matrix.

Thanks in advance.

Edited by: Luís Filipe Duarte on Jun 26, 2009 4:14 PM

Edited by: Luís Filipe Duarte on Jun 26, 2009 4:17 PM

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Viva Vitor,

Antes de mais obrigado pela resposta.

È esse mesmo o meu objectivo. Passo a explicar qual é o objectivo deste desenvolvimento. O que se pretende é que quando um utilizador escreva o código de um artigo numa linha da matrix de um documento de venda o add-on vai ler esse artigo e de seguida consultar uma tabela de utilizador que ja esta criada para validar se esse artigo tem outros artigos associados, e se tiver, entao o addon tem que os escrever nas linhas imediatamente a seguir. Eu queria mesmo, era escrever qual era o artigo e qual a respectiva quantidade. Eu consigo encontrar qual o artigo que o utlizador escreve e qual os artigos associados. O meu problema acontece quando tendo adicionar as novas linhas.

Com o codigo que se segue podes ver que estou a atribuir a uma EditText o codigo do artigo a escrever. O problema é se correr em modo debug consigo ver que a aplicação chega a essa linha

oEditText.Value = ItemCodeTXT.ToString();

e volta para trás, ou seja entra num loop e nao sai daqui.



if (oRS.RecordCount > 0)
                {
                    oRS.MoveFirst();
                    numart = oRS.RecordCount;
 
                    f.Freeze(true);
                    for (j = 1; j <= numart; j++)
                    {
                        try
                        {
 
                            ItemCodeTXT = oRS.Fields.Item(0).Value.ToString();
                            oEditText = ((SAPbouiCOM.EditText)(oMatrix.Columns.Item(3).Cells.Item(oMatrix.RowCount).Specific));
                            oEditText.Value = ItemCodeTXT.ToString();
                            f.Update();
                            oRS.MoveNext();
 
                        }
                        catch (Exception oEx)
                        {
                            f.Freeze(false);
                            f.Update();
                            MessageBox.Show(oEx.Message + " j = " + System.Convert.ToString(j));
                        }
                    }

Eu para adicionar uma nova linha o que tenho de fazer? não vasta passar a informação do item code?

Este desenvolvimento é para implementar ecoreee no sap. Nao sei já tiveste alguma coisa dessas entre mãos.

Obrigado mais uma vez pela atenção. Espero também um dia poder ajudar.

Com os melhores cumprimentos.

Luis duarte

Former Member
0 Kudos

Luís,

Implementei o ecoree num cliente utilizando as Listas de Materiais do B1. Não foi necessário qualquer desenvolvimento.

Já exploraste esta possibilidade? Se necessitares de alguma explicação, diz.

Sim, para adicionar uma nova linha basta introduzir o ItemCode na linha seguinte. O próprio B1 adiciona automaticamente uma linha extra.

Quanto ao loop, verifica se não estás a introduzir na linha seguinte o mesmo artigo que na linha actual. Pode ser essa a causa. Outra possibilidade é não estares a detectar se o pVal.InnerEvent = False e ao leres a linha actual a função é chamada de novo (provocando o loop).

Comprimentos,

Vítor Vieira

Answers (3)

Answers (3)

Former Member
0 Kudos

Problema resolvido,

Estava a tentar colocar a quantidade na linha seguinte. por isso não me deixava escrever.

Muito Obrigado mais uma vez.

Cumprimentos.

Former Member
0 Kudos

Luís,

Não tens de agradecer. "Felizmente" já tinha passado pelo mesmo problema.

Caso te depares com outro problema, não hesites em contactar.

Votos de bom fim-de-semana,

Vítor Vieira

Former Member
0 Kudos

Vitor,

Essa possibilidade foi a primeira a ser abordada. o Problema é que no cliente em causa eles tem artigos a serem contabilizados ás unidades e outros aos centos.

O B1 não regista correctamente contabilisticamente estes lançamentos. Por isso decidiram avançar com o desenvolvimento. A tua implementação deve ter sido como a idealizamos

aqui. Criar uma lista de materias para cada artigo com ecoreee e quando o utlizador coloca o artigo principal o B1 associa automáticamente o seu artigo de ecoreee. podendo ate o

movimento contabilistico ser feito para contas especificas parameterizadas nos artigos de ecorreee.

Para além do problema da contabilização ainda há o problema da quantidade gigantesca de artigos que tinham de criar.

Como B1 nao responde convenientemente ás especificidades deste cliente na parte da lista de materiais optou-se então por desenvolvimento. Desenvolvimento esse que tem por ideia

exactamente a lista de materiais.

Quanto ao código a questão do loop era exatamente pelo motivo de um nao estar a validar se o pval.InnerEvente=false.

Já testei e consegui introduzir os artigos sem qualquer problema.

Já agora e desculpa estar a incomodar. Depois de inserir as linhas estava a tentar inserir a quantidade de cada artigo:



oEditText = ((SAPbouiCOM.EditText)(oMatrix.Columns.Item(11).Cells.Item(oMatrix.RowCount).Specific));
oEditText.Value = ItemQtdTXT;

Mas agora já devolve um erro. "Item - Form item is not editable."

O B1 não deixa alterar a quantidade?

Vitor, muito obrigado pela ajuda prestada. Foi muito importante. Se precisares de alguma coisa estou disponivel.

Com os melhores cumprimentos

Former Member
0 Kudos

Viva Luis,

O teu objectivo é preencher uma matrix de sistema com dados vindo de um RecordSet, correcto?

Eu tenho feito isso em alguns desenvolvimentos sem problema. Que erro é que estás a obter?

Cumprimentos,

Vítor Vieira