Bir siparişin seçili olup olmadığı nasıl kontrol edilir - sayfa 18

 
Aslında hata ilk mesajda tartışılıyor, konu başlatıcının aksine, tüm hareketleri kaydettim, yani. Sadece kontrol edilenler hakkında yazıyorum
 
keekkenen :
kod nasıl yazılır hakkında ne düşündüğünüz önemli değil asıl olan kodunuzu getirip sümük yanlışı nereye yaydığımızı sormak yerine kodun düzgün çalışmasıdır.. bilet doğru

Söylediğiniz şey doğru değil, çünkü bir bilet iletmesi gerekmeyen işlevler çağrılırken 4105 hatası oluşuyor.

Örneğin, OrderTicket()'i çağırırken, OrderTicket()'i çağırmadan önce OrderSelect()'e bir çağrı yapılmadıysa - bu tam olarak bu başlıkta tartışılan durumdur.

 

Hayır, şimdi dışa geçişlerden (çıkışlardan) bağımsız olarak her bir fonksiyon için siparişimin garantili seçimini kastettim.

yani, her bir işlevi için son seçilen sırayı kaydetme

 
FAQ :

Hayır, şimdi dışa geçişlerden (çıkışlardan) bağımsız olarak her bir fonksiyon için siparişimin garantili seçimini kastetmiştim.

yani, her bir işlevi için son seçilen sırayı kaydetme

Son seçilen sıranın kontrolüne sahip birkaç iç içe işlev varsa - ör. birbirinden üçüncüsü, diğerinden üçüncüsü çağrılır, sonra her işlev çağrı sırasında sıra seçimini kaydeder ve soruyu doğru anladıysam geri döndüğünde seçimi bu duruma döndürür. Ancak bu, gerçekten son derece karmaşık çözümler için zaten geçerlidir. Genellikle birden fazla yuvalama seviyesi olması olası değildir. Ana şey, bu işlevlerin her birinin ortamını kontrol etmektir, böylece bu işlevi çağırmak, önceki sipariş seçiminin sıfırlanması nedeniyle mantıksal hatalara yol açmaz. Bu yalnızca, yinelenen siparişlerin ana döngüsünden çağrılabilen ve aynı zamanda bir şeyi saymak için siparişlerin üzerinde yinelenen hizmet işlevleri için gereklidir.

 

Bu arada, hizmet işlevi kütüphanedeyse, "işaretçiyi" ( sipariş seçimi ) kaydetmeye gerek yok gibi görünüyor, değil mi? Ana Uzman Danışman ve kütüphanenin kendi "işaretçileri" olduğundan, yani. kütüphanede seçilen bir sipariş EA'da seçilmeyecektir ve bunun tersi de geçerlidir.

Bu, hem A hem de B fonksiyonları aynı modül içinde yer almıyorsa, problem için ideal çözüm gibi görünüyor.

 

İdeoloji: sıra seçim işlevini (herkes için bir tane) gerekli filtrelerle dışarıya taşıyın (her neyse, her işlevde bir yerdesiniz (büyük olasılıkla bu sıra en başta seçilmelidir))

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

önceden seçilen siparişin biletini iade etmesi (bu fonksiyonda) veya belirtilen filtrelerle yeni bir arama gerçekleştirmesi garanti edilecektir.

bu durumda, inşaat bileti = OrdersTicket(); sorunsuz çalışacaktır.

 
Ant_TL :

Söylediğiniz şey doğru değil, çünkü bir bilet iletmesi gerekmeyen işlevler çağrılırken 4105 hatası oluşuyor.

Örneğin, OrderTicket()'i çağırırken, OrderTicket()'i çağırmadan önce OrderSelect()'e bir çağrı yapılmadıysa - bu tam olarak bu başlıkta tartışılan durumdur.


ve bileti danışmanın ayarlarından, harici dosyadan nereden alıyorsunuz - nereden?

eğer öyleyse, o zaman evet, bir hata olacaktır, çünkü OrderSelect()'i çağırma gerçeği, sonraki kenelerde başlangıçta kalır (en azından test cihazında), ..

 
Ant_TL :

Bu arada, hizmet işlevi kitaplıktaysa, "işaretçiyi" (sipariş seçimi) kaydetmenize gerek yok gibi görünüyor, değil mi? Ana Uzman Danışman ve kütüphanenin kendi "işaretçileri" olduğundan, yani. kütüphanede seçilen bir sipariş EA'da seçilmeyecektir ve bunun tersi de geçerlidir.

Bu, hem A hem de B fonksiyonları aynı modül içinde yer almıyorsa, problem için ideal çözüm gibi görünüyor.


Her şey dış değişkenin küresellik derecesine bağlıdır.
 
Ant_TL :

Bu arada, hizmet işlevi kitaplıktaysa, "işaretçiyi" (sipariş seçimi) kaydetmenize gerek yok gibi görünüyor, değil mi? Ana Uzman Danışman ve kütüphanenin kendi "işaretçileri" olduğundan, yani. kütüphanede seçilen bir sipariş EA'da seçilmeyecektir ve bunun tersi de geçerlidir.

Bu, hem A hem de B fonksiyonları aynı modül içinde yer almıyorsa, problem için ideal çözüm gibi görünüyor.


Geçtim. Yardım etmek için yapabileceğim başka bir şey yok. Bensiz etrafta ve etrafta!!!
 
FAQ :

Her şey dış değişkenin küresellik derecesine bağlıdır.

Spesifik olarak, "işaretçi" - mevcut sipariş seçiminin durumu - modül içinde globaldir, yani. bir kitaplık için bu işaretçi birdir ve bir program modülü için farklıdır. Bunun anlamı, programdaki fonksiyon A bir döngüde bir sıra seçer ve ardından kütüphaneden yardımcı fonksiyon B'yi çağırırsa, o zaman B, çalışması sırasında başka bir sıra seçse bile, fonksiyon A'daki sıra seçimi yapılmamalıdır. dönüşte ihlal edilebilir. Ancak her iki işlev de modül içindeyse, o zaman B işlevinden dönerken - ya A işlevinin kendisinde B'yi çağırmadan önce ve sonra ya da B işlevinde işin başında ve tamamlandıktan sonra - hatırlamak ve geri yüklemek gerekir. mevcut sipariş seçimi, böylece bu yerdeki iş fonksiyonu A'nın mantığı ihlal edilmedi.