Come controllare se un ordine è selezionato - pagina 18

 
In realtà l'errore è nel primissimo post, a differenza del topicstarter ho tutte le mosse scritte, cioè scrivo solo ciò che è stato testato
 
keekkenen:
non importa cosa pensi su come scrivere il codice, l'importante è che il codice funzioni correttamente, invece di portare il tuo codice e chiedere dove stai andando male... ancora una volta, non c'è nessun errore 4105 se il biglietto è corretto

Quello che dici non è vero, perché l'errore 4105 si verifica quando si chiamano funzioni a cui non è necessario passare un biglietto.

Per esempio, quando OrderTicket() viene chiamato se OrderSelect() non è stato chiamato prima di OrderTicket() - questa è la situazione discussa in questo thread.

 

No, quello che intendevo era una selezione garantita del mio ordine per ciascuna delle funzioni indipendentemente dalle transizioni (uscite) verso l'esterno.

cioè salvare l'ultimo ordine selezionato per ogni funzione del vostro

 
FAQ:

No, quello che intendevo era una selezione garantita del mio ordine per ciascuna delle funzioni indipendentemente dalle transizioni (uscite) verso l'esterno.

cioè salvare l'ultimo ordine selezionato per ogni funzione come proprio

Se ci sono diverse funzioni annidate con il controllo dell'ultimo ordine selezionato - cioè una funzione ne chiama un'altra e l'altra ne chiama una terza, allora ogni funzione manterrà la selezione dell'ordine nel momento in cui viene chiamata e restituirà la selezione in quello stato al ritorno, se ho capito bene la domanda. Ma questa è una soluzione davvero complicata. Di solito più di un livello di annidamento è improbabile. La cosa principale è controllare l'ambiente di ogni funzione di questo tipo, in modo che una chiamata di questa funzione non causi errori logici dovuti alla reimpostazione di una selezione di ordine precedente. Questo è necessario solo per le funzioni di servizio che possono essere chiamate dal ciclo principale di recupero degli ordini e ancora recuperare gli ordini stessi per calcolare qualcosa.

 

A proposito, sembra che se la funzione di servizio è nella libreria - allora non c'è bisogno di salvare il "puntatore"(selezione dell'ordine), vero? Poiché l'EA principale e la libreria hanno il proprio "puntatore", cioè un ordine selezionato nella libreria non sarà selezionato nell'EA e viceversa.

Questa sembra una soluzione perfetta al problema se entrambe le funzioni A e B non si trovano nello stesso modulo

 

Ideologia: avere una funzione di selezione dell'ordine (una per tutti) con i filtri necessari all'esterno (comunque, in ogni funzione si deve selezionare questo ordine da qualche parte (molto probabilmente all'inizio))

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);
}

che sicuramente restituirà il biglietto dell'ordine precedentemente scelto (in questa funzione), oppure fare una nuova ricerca con i filtri che abbiamo specificato

In questo caso, la costruzione ticket = OrdersTicket(); funzionerà perfettamente.

 
Ant_TL:

Quello che dici non è vero, perché l'errore 4105 si verifica quando si chiamano funzioni a cui non è necessario passare il biglietto.

Per esempio, quando OrderTicket() viene chiamato se OrderSelect() non è stato chiamato prima di OrderTicket() - questa è la situazione discussa in questo thread.


Dove prendete il biglietto dalle impostazioni EA, file esterno - da dove?

se è così, allora sì, ci sarà un errore, perché il fatto della chiamata OrderSelect() rimane all'inizio sui prossimi tick (almeno nel tester),...

 
Ant_TL:

A proposito, sembra che se la funzione di servizio è nella libreria - allora non c'è bisogno di salvare il "puntatore" (selezione dell'ordine), vero? Poiché l'EA principale e la libreria hanno il proprio "puntatore", cioè un ordine selezionato nella libreria non sarà selezionato nell'EA e viceversa.

Questa sembra una soluzione perfetta al problema se entrambe le funzioni A e B non si trovano nello stesso modulo


Tutto dipende dal grado di globalità della variabile esterna.
 
Ant_TL:

A proposito, sembra che se la funzione di servizio è nella libreria - allora non c'è bisogno di salvare il "puntatore" (selezione dell'ordine), vero? Poiché l'EA principale e la libreria hanno il proprio "puntatore", cioè un ordine selezionato nella libreria non sarà selezionato nell'EA e viceversa.

Questa sembra una soluzione perfetta al problema se entrambe le funzioni A e B non si trovano nello stesso modulo


Io passo. Non posso aiutarla in altro modo. Gira e rigira senza di me!!!
 
FAQ:

Tutto dipende da quanto è globale la variabile esterna.

In particolare, il "puntatore" - lo stato dellaselezione dell'ordine corrente - è globale all'interno del modulo, cioè questo puntatore è lo stesso per la biblioteca e diverso per il modulo del programma. Questo significa che se la funzione A nel programma seleziona un certo ordine nel ciclo e poi chiama la funzione ausiliaria B dalla libreria, allora anche se durante la sua operazione B seleziona un altro ordine, la selezione dell'ordine nella funzione A non dovrebbe essere cambiata al ritorno. Ma se entrambe le funzioni si trovano all'interno di un modulo, quando si ritorna da B, la selezione dell'ordine corrente dovrebbe essere memorizzata e ripristinata o prima e dopo che B è chiamato in A stesso o in B all'inizio e al completamento del suo lavoro in modo che la logica del lavoro di A non sia violata in quel punto.