on 06-26-2009 3:14 PM
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
Problema resolvido,
Estava a tentar colocar a quantidade na linha seguinte. por isso não me deixava escrever.
Muito Obrigado mais uma vez.
Cumprimentos.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
93 | |
11 | |
11 | |
6 | |
6 | |
4 | |
3 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.