Como verificar se um pedido é selecionado - página 18

 
Na verdade, o erro está logo no primeiro post, ao contrário do iniciador do tópico que tenho todos os movimentos escritos, ou seja, eu só escrevo sobre o que foi testado
 
keekkenen:
não importa o que você pensa sobre como escrever código, o principal é que o código funciona corretamente, em vez de trazer seu código e perguntar onde você está indo errado... mais uma vez, não há erro 4105 se o bilhete estiver correto

O que você diz é falso, porque o erro 4105 ocorre ao chamar funções para as quais não é necessário passar um bilhete.

Por exemplo, quando OrderTicket() é chamado se OrderSelect() não foi chamado antes de OrderTicket() ser chamado - esta é a situação discutida neste tópico.

 

Não, o que eu quis dizer foi uma seleção garantida do meu pedido para cada uma das funções, independentemente das transições (saídas) para o exterior.

ou seja, salvar a última ordem selecionada para cada função de seu

 
FAQ:

Não, o que eu quis dizer foi uma seleção garantida do meu pedido para cada uma das funções, independentemente das transições (saídas) para o exterior.

ou seja, salvar a última ordem selecionada para cada função como se fosse sua

Se houver várias funções aninhadas com controle da última ordem selecionada - ou seja, uma função chama outra e a outra chama uma terceira, então cada função manterá a seleção da ordem no momento em que for chamada e retornará a seleção para aquele estado no retorno, se entendi corretamente a pergunta. Mas esta é uma solução realmente complicada. Normalmente, é improvável que haja mais de um nível de nidificação. O principal é controlar o ambiente de cada uma dessas funções, para que uma chamada desta função não cause erros lógicos devido ao restabelecimento de uma seleção de ordem anterior. Isto só é necessário para funções de serviço que podem ser chamadas do loop principal de recuperação de pedidos e ainda recuperar os próprios pedidos a fim de calcular qualquer coisa.

 

A propósito, parece que se a função de serviço está na biblioteca - então não há necessidade de salvar o "ponteiro"(seleção do pedido), existe? Como a EA principal e a biblioteca têm seu próprio "ponteiro", ou seja, uma ordem selecionada na biblioteca não será selecionada na EA e vice versa.

Esta parece ser uma solução perfeita para o problema se ambas as funções A e B não estiverem localizadas dentro do mesmo módulo

 

Ideologia: para ter uma função de seleção de ordem (uma para todos) com os filtros necessários fora (de qualquer forma, em cada função você tem que selecionar esta ordem em algum lugar (o mais provável no início))

int OrdersTicket(filters, int function_id, bool new = false){static int tickets[functions count];int ticket = -1;
   if(!new){
      if(OrderSelect(tickets[function_id],SELECT_BY_TICKET)){return(OrderTicket());}
   }
   // Выбор и возврат тикета ордера с нужными фильтрами
   return(ticket);
}

que certamente devolverá o bilhete da ordem previamente escolhida (nesta função), ou então fará uma nova busca com os filtros que especificamos

Neste caso, o bilhete = OrderTicket(); a construção funcionará perfeitamente.

 
Ant_TL:

O que você diz é falso, porque o erro 4105 ocorre ao chamar funções para as quais não é necessário passar um bilhete.

Por exemplo, quando OrderTicket() é chamado se OrderSelect() não foi chamado antes de OrderTicket() ser chamado - esta é a situação discutida neste tópico.


de onde você obtém o bilhete das configurações da EA, arquivo externo - de onde ?

se assim for, então sim, haverá um erro, porque o fato da OrderSelect() chamada permanece no início nos próximos ticks (pelo menos no testador),...

 
Ant_TL:

A propósito, parece que se a função de serviço está na biblioteca - então não há necessidade de salvar o "ponteiro" (seleção do pedido), existe? Como a EA principal e a biblioteca têm seu próprio "ponteiro", ou seja, uma ordem selecionada na biblioteca não será selecionada na EA e vice versa.

Esta parece ser a solução perfeita para o problema se ambas as funções A e B não estiverem localizadas dentro do mesmo módulo


Tudo depende do grau de globalidade da variável externa.
 
Ant_TL:

A propósito, parece que se a função de serviço está na biblioteca - então não há necessidade de salvar o "ponteiro" (seleção do pedido), existe? Como a EA principal e a biblioteca têm seu próprio "ponteiro", ou seja, uma ordem selecionada na biblioteca não será selecionada na EA e vice versa.

Esta parece ser a solução perfeita para o problema se ambas as funções A e B não estiverem localizadas dentro do mesmo módulo


Vou passar. Não posso lhe ajudar em mais nada. Redondo e redondo sem mim!!!
 
FAQ:

Tudo depende de quão global é a variável externa.

Especificamente, o "ponteiro" - o estado daseleção da ordem atual - é global dentro do módulo, ou seja, este ponteiro é o mesmo para a biblioteca e diferente para o módulo do programa. Isto significa que se a função A no programa seleciona alguma ordem no laço e então chama a função auxiliar B da biblioteca, então mesmo que durante sua operação B selecione outra ordem, a seleção da ordem na função A não deve ser alterada no retorno. Mas se ambas as funções estiverem localizadas dentro de um módulo, ao retornar de B, a seleção da ordem atual deve ser armazenada e restaurada antes e depois de B ser chamada em A ou em B no início e após a conclusão de seu trabalho, para que a lógica do trabalho de A não seja violada naquele ponto.

Razão: