1s 8.3 Mavjud hujjatning shaklini qanday ochish kerak. UV: Form DataInValue, ValueInFormData konstruktsiyalari yordamida hujjatlarni dasturiy yaratish va nusxalash


Chunki Ko'pincha 1C: Enterprise ob'ektlarini "Boshqariladigan shakllar" rejimida dasturiy yaratish / nusxalash / qayta ishlash bilan bog'liq savollar tug'iladi, shuning uchun men ushbu nashrda har bir harakatga sharhlar bilan bunday muammolarni hal qilish misollarini to'plashga qaror qildim. Avvaliga hamma narsa juda chalkashdek tuyuladi, lekin agar siz uni bosqichma-bosqich sindirib, biroz chuqurroq o'rgansangiz, hamma narsa joyiga tushishi kerak.

"Oddiy shakllar" dan "boshqariladigan shakllar" ga o'tishda siz hozir bizda mijoz-server mavjudligini tushunishingiz kerak. variant dasturning ishlashi.

Bu shuni anglatadiki, biz ilgari "oddiy shakllar" dagi ob'ektlarni to'g'ridan-to'g'ri dasturli ravishda o'zgartirishimiz va harakatlarimiz natijasini ekranda ko'rishimiz mumkin bo'lsa, "boshqariladigan shakllar" da serverdagi ob'ekt va mijozdagi ob'ekt (foydalanuvchiga ko'rinadigan) ajratilgan. Serverda va mijozda bajarilishi mumkin bo'lgan funktsiyalar va protseduralar ham qisman ajratilgan. Masalan, serverda asosan murakkab hisob-kitoblar va ma'lumotlar bazasidagi o'zgarishlar bilan bog'liq funksiyalar, mijozda esa oddiy hisoblar va qulaylik funktsiyalari bajariladi.

MISOLLAR:

Quyida men hujjatlarni yaratish/nusxalash/o'zgartirishga misol keltiraman. Ushbu misol batafsil tahlil qilingan va sizga mijoz-server ishining arxitekturasini tushunishga va bu bilimlarni boshqa 1C ob'ektlariga (kataloglar, hisobotlar ...) kengaytirish imkonini beradi.

Vazifa shunday edi: taomlar (ovqatlanish) kiritilgan nomenklatura ma'lumotnomasi mavjud. Har bir idish o'z hisobiga ega (mahsulot tarkibi). Hisob-kitoblar davriy axborot registrida saqlanadi. Element shakli ochiq idishga tegishli hisob-kitoblar bilan dinamik ro'yxatni o'z ichiga oladi (bu har qanday boshqa ma'lumotlar jadvali bo'lishi mumkin). "Xarajatlar smetasini yaratish" (yangi) va "Xarajatlar smetasini nusxalash" (ro'yxatdan faol) ikkita tugmachasini qo'shish kerak edi.

Buning uchun tegishli buyruqlar yaratdim va ularni formaga joylashtirdim.

1. "Xarajatlar smetasini yaratish."

&Mijoz protsedurasi bo'yicha CreateCalculation(Buyruq) // Mijozda ob'ekt/hujjat formasini yaratish mForm = GetForm("Document.Calculation.ObjectForm"); // Ochiq shaklning ob'ektini (ma'lumotlarini) o'zgaruvchiga o'tkazamiz Form Data = mForm.Object; // oddiy amallarni bajarishForm Data.Dish = Object.Link; FormData.Sana = CurrentDate(); // Ob'ektning tugallangan shaklini oching (uni foydalanuvchiga ko'rsatish) mForm.Open(); Jarayonning oxiri

Ushbu versiyada hamma narsa oddiy: biz mijozda protsedura yaratamiz va barcha harakatlarni bevosita mijozda bajaramiz, chunki Biz serverga qo'ng'iroq qilishni talab qiladigan hech narsa qilmaymiz. Ob'ekt formasini yaratamiz/olamiz, Form Ob'ektini Form Data o'zgaruvchisiga o'tkazamiz, Form ma'lumotlari bilan asosiy amallarni bajaramiz va allaqachon to'ldirilgan shaklni ochamiz.

2. "Nusxa ko'chirish hisobi".

Ushbu operatsiya biroz murakkabroq, ba'zi protseduralar mijozda, ba'zilari esa serverda amalga oshiriladi.

&Mijoz protsedurasida CopyCalculation() // Mijozda ob'ekt/hujjat formasini yarating va oching Form = OpenForm("Document.Calculation.Form.DocumentForm",); // Ochiq shaklning ob'ektini (ma'lumotlarini) o'zgaruvchiga o'tkazamiz Form Data = Form.Object; // Biz mavjud hujjatga havolani olamiz (biz uni nusxalashni xohlaymiz) - ishchi oynada dinamik ro'yxatning faol qatori Calculation = Elements.Calculation.CurrentData.Calculation; // Chunki Siz serverga to'g'ridan-to'g'ri havolani yubora olmaysiz, biz uni tuzilishga joylashtiramiz (aks holda u xato beradi) DataStructure = New Structure("Hisoblash", Hisoblash); // Kerakli parametrlarni o'tkazing va CopyDocumentObjectOnServer(FormData, DataStructure) serverida Form Data o'zgaruvchisini boshqaring; // Endi biz Form Data o'zgaruvchisidan o'zgarishlarni biz avval ochgan shaklga o'tkazishimiz kerak - formadagi ma'lumotlarni yangilash uchun CopyFormData(FormData, Form.Object); Jarayonning oxiri

Jarayon quyidagicha: Biz mijozda o'zimizga kerak bo'lgan ob'ektning shaklini yaratamiz va darhol uni ochamiz (OpenForm...). Keyinchalik, avvalgidek, biz Open Form Ob'ektini Form Data o'zgaruvchisiga o'tkazamiz.

Chunki vazifa ma'lumotlar bazasida mavjud bo'lgan hujjatni nusxalashdir (foydalanuvchi dinamik ro'yxatda tanlagan eski hisob), keyin JB ma'lumotlari bilan harakatlar faqat serverda bajarilishi mumkin. Shunday qilib, biz element formasidan kerakli parametrlarni olamiz (mening holimda, eski hisob) va ushbu parametrlarni Struktura orqali server protsedurasiga kontekstsiz Form Data o'zgaruvchisi bilan birga o'tkazamiz: CopyDocumentObjectOnServer(FormData, DataStructure).

&OnServerWithoutContext protsedurasi CopyDocumentObjectOnServer(FormData, DataStructure) // Biz forma ma'lumotlari yordamida serverda oddiy ob'ektni olamiz // Hujjat o'zgartirilsa, turini ko'rsatish bilan foydalanamiz (&OnServerWithoutContext) //Doc = FormDataValue(FormData, Ob(") .Hisoblash")); // Yuqoridagi qator ishlatilmaydi, chunki biz mavjud ob'ektdan nusxa ko'chiryapmiz Doc = DataStructure.Calculation.Copy(); // Biz ob'ekt bilan ishlaymiz (turli xil manipulyatsiyalar) // Doc.RecalculatePrices() ob'ekt modulidan eksport protseduralarini chaqiramiz; // uning tafsilotlarini to'ldiring Doc.Date = CurrentDate(); // Forma ma'lumotlari o'zgaruvchisiga allaqachon o'zgartirilgan ob'ektni (hujjatni) qaytarish ValueInFormData(Doc, FormData); Jarayonning oxiri

Serverda allaqachon FormDataVValue() funktsiyasidan foydalanib, biz FormData-ni "oddiy shakllar" dan bizga tanish bo'lgan hujjat ob'ektiga aylantiramiz va u bilan server protseduralari yordamida ishlaymiz. Biz boshqa hujjatdan ma'lumotlarni nusxalaymiz, ob'ekt modulidan eksport protseduralarini ishga tushiramiz va boshqa tafsilotlarni to'ldiramiz.

Funktsiya FormDataValue() yozishmalarni ko'rsatishni talab qiladi (natijadagi ob'ekt turi): Type("DocumentObject.Calculation").

Shu bilan birga, serverda o'zgartirilgan shakl ma'lumotlari eng boshida bizning yaratilgan va ochilgan shaklimizda tugamaydi, shuning uchun biz protsedurani bajaramiz. CopyFormData(FormData, Form.Object) - shu bilan o'zgarishlarni foydalanuvchiga ko'rinadigan Hisoblash hujjati shakliga kiritamiz (biz undagi ma'lumotlarni yangilaymiz).

Muammoni hal qilishning yuqoridagi misollari yagona emas va har bir alohida holatda optimallashtirish yoki boshqa yo'l bilan hal qilish mumkin.

O'ylaymanki, ushbu maqola 1C mijoz-server arxitekturasini o'rganishni boshlaganlar uchun foydali bo'ladi)

Boshqariladigan 1C ilovasida shakllarni dasturiy ravishda ochish ularni oddiy dasturda ochishdan sezilarli darajada farq qiladi. Avval eski usulni ko'rib chiqaylik. U formani qabul qilish va keyin uni normal yoki modal rejimda ochishdan iborat (modal rejimda ochilganda forma dasturni bloklaydi).

GetForm() . Ochiq()

Bu shakllarni ochishning eng sekin usuli. Biroq, bu shaklni ochishdan oldin uni dasturiy ravishda qayta ishlashga imkon beradi. Kodni qayta ishlash uchun siz biroz o'zgartirishingiz kerak:

Shakl = GetForm ( "Hujjat. Tovar va xizmatlarni qabul qilish. Hujjat shakli") ;
//Bu yerda forma bilan amallarni bajaramiz
Shakl. Ochiq();

Shuni hisobga olish kerakki, ariza qabul qilinganda, boshqa hodisa protsedurasi bajariladi WhenCreatedOnServer.

Keling, boshqariladigan 1C ilovasida shakllarni tezroq va qulayroq ochishga imkon beruvchi boshqa usullarni ko'rib chiqaylik. Muayyan vaziyatga qarab, turli usullardan foydalanish mumkin.

1. Boshqariladigan ilovada ob'ekt formasini qanday ochish mumkin, agar unga havola mavjud bo'lsa.

Bunday holda, hamma narsa juda oddiy.

RefLink = Kataloglar. Nomenklatura. FindByCode("000000001" );
OpenValue (RefLink);

2. Tanlov shaklini qanday ochish va keyin tanlangan qiymatni olish.

Buning uchun funksiya mavjud EnterValue(). Funktsiya 3 ta parametrga ega:

  • Tanlangan qiymat yoziladigan o'zgaruvchi;
  • Tanlash oynasida ko'rsatiladigan maslahat;
  • Tanlangan qiymatlar turlarining tavsifi. Bir nechta turlar bo'lishi mumkin, bu holda ma'lum bir qiymatni tanlashdan oldin sizdan turni tanlashingiz so'raladi.

Funktsiyani bajarish natijasida ko'rsatilgan turdagi ob'ekt uchun standart tanlash shakli ochiladi.

O'zgaruvchan qiymat;
Massiv = yangi massiv;
Massiv. Qo‘shish(Tur( "DirectoryLink.Nomenklatura") ) ;
Massiv. Qo‘shish(Tur( "DirectoryLink. Qarama-qarshi tomonlar") ) ;

TypeDescription= new TypeDescription(Array) ;

Res = EnterValue(Qiymat, "Maslahat" , TypeDescription);

Oldingi usullar faqat ob'ektlar uchun standart shakllarni ochishga imkon berdi (ob'ekt shakli yoki tanlov shakli). Agar siz maxsus shaklni ochishingiz kerak bo'lsa, funksiyadan foydalanishingiz mumkin OpenForm().

Ushbu funktsiya juda ko'p parametrlarga ega. Keling, ulardan ba'zilarini ko'rib chiqaylik:

  • Shakl nomi— bu yerda siz ob'ektning standart shakllaridan birini tanlashingiz mumkin, masalan, Tanlov shakli yoki Ro'yxat shakli. Yoki ishlab chiquvchilar tomonidan yaratilgan maxsus shakl.
  • Variantlar— shakldagi shaklga o'tkazish imkonini beradi tuzilmalar uni ochishdan oldin ba'zi parametrlar, shu bilan chiqish ma'lumotlarini aniqlash. Parametrlar mijozdan serverga uzatilishi mumkin bo'lgan har qanday ma'lumotlar bo'lishi mumkin. Shaklni ochishda o'tgan parametrlar protsedurada qayta ishlanishi mumkin WhenCreatingOnServer() ochilayotgan shaklda.
  • Shaklni ochish rejimi— 3 ta variant mavjud: mustaqil, butun interfeysni bloklash, egasi formasini bloklash.

Funktsiya qanday ishlatilishini ko'rib chiqaylik OpenForm() turli vaziyatlarda.

3. Mavjud obyektning shakli qanday ochiladi

Har bir shakl bitta asosiy atributga ega. Shakl tafsilotlari ro'yxatida qalin shrift bilan ta'kidlangan va odatda chaqiriladi Ob'ekt ma'lumotnomalar va hujjatlarning elementlari shakllarida. Boshqa ob'ektlar boshqa nomga ega bo'lishi mumkin. Mavjud ob'ektning formasini ochish uchun ochilayotgan shaklga parametr o'tkazish kerak Kalit ob'ektga havola sifatida qiymat bilan.

&OnClient
Protsedura buyrug'i 1 (buyruq)
Parametr = yangi tuzilma;
Parametr. Insert("Key" , FindC() );
OpenForm(, Parametr);
Jarayonning oxiri

&Serverda
FindC();
Kataloglarni qaytarish. Qarama-qarshi tomonlar. FindByRequisites ("TIN", "745107734623")
EndFunction

4. Yangi obyekt formasini ochish

Bu yerda oddiy funksiya bajariladi OpenForm() hech qanday parametrlarsiz.

&OnClient
Protsedura buyrug'i 1 (buyruq)
OpenForm( "Katalog. Qarama-qarshi tomonlar. Ob'ekt shakli") ;
Jarayonning oxiri

5. Yangi ob'ekt shaklini qanday ochish va uni biror narsaga asoslanib to'ldirish

Siz parametrni kiritishingiz kerak Baza, uning qiymati to'ldirish asosiy ob'ektiga havola bo'ladi. Bu protsedurani boshlaydi ProcessFill().

&OnClient
Protsedura buyrug'i 1 (buyruq)
Parametr = yangi tuzilma;
Parametr. Insert ("Asosiy", LinkToBuyerAccount) ;
OpenForm( "Hujjat. Tovar va xizmatlarni sotish. Ob'ekt shakli", Parametr);
Jarayonning oxiri

Ushbu misol hujjatni yaratadi Tovar va xizmatlarni sotish va xaridorga to'lov uchun schyot-faktura asosida to'ldiriladi, unga havola uzatiladi.

6. Shaklni ochish va undagi tanlovni o'rnatish

1C shakllari bo'yicha tanlov oddiy yoki murakkab bo'lishi mumkin. Oddiy tanlash kabi ifodalarni o'z ichiga oladi Tashkilot = Horns and Hooves MChJ. Kompleks tanlash boshqa turdagi taqqoslashni o'z ichiga oladi, masalan. Ro'yxatda. Ushbu maqolada biz oddiy tanlovni tashkil qilishni ko'rib chiqamiz va alohida maqola murakkab tanlovga bag'ishlangan.

Oddiy tanlovni tashkil qilish uchun ochilayotgan shaklga kalit bilan parametrni o'tkazish kerak Tanlash, qiymat kalit dinamik ro'yxat maydonining nomi bo'lgan struktura bo'ladi va qiymat izlanayotgan ma'lumotlardir.

Masalan, katalog ro'yxati formasini ochamiz GTD raqamlari va u erda egasi - katalog elementi bo'yicha tanlov qiling Nomenklatura.

&OnClient
Protsedura buyrug'i 1 (buyruq)
Parametr = yangi tuzilma;

Tanlash= yangi tuzilma;
Tanlash. Insert("Egasi", LinkToNomenclature) ;

Parametr. Insert("Tanlash", Tanlash);

OpenForm( "Directory.GTD raqamlari.Ro'yxat shakli", Parametr);
Jarayonning oxiri

7. Axborot reestriga kirish blankasi qanday ochiladi

Buning uchun sizga ma'lumotlar registrini kiritish kaliti kerak bo'ladi.

Yozuv kaliti- bu barcha o'lchovlar va davrning qiymatlari (agar registr davriy bo'lsa). Ya'ni, yozuv kaliti - bu yozuvni yagona aniqlash mumkin bo'lgan parametrlar.

Ochilish algoritmi quyidagicha:

  1. Biz tuzilishga kerakli qiymatlar bilan asosiy yozuv ma'lumotlarini kiritamiz.
  2. Olingan strukturani massivga joylashtiramiz.
  3. Massivdan yozuv kalitini yaratamiz.
  4. Ochilgan formaga parametr o'tkazamiz Kalit qiymat sifatida 3-bosqichdagi yozuv kaliti bilan.

&OnClient
Protsedura buyrug'i 1 (buyruq)
Parametr = yangi tuzilma;

KeyParameters= yangi tuzilma;
Asosiy parametrlar. Insert("Nomenklatura", LinkToNomenklatura) ;
Asosiy parametrlar. Insert("PriceType", LinkToPriceType) ;
Asosiy parametrlar. Insert ("Don", Sana);

KeyArray = Yangi massiv;
KeyArray. Qo'shish (KeyParameters) ;

EntryKey = Yangi( "Axborot registrini qayd etish kaliti. Narxlar nomenklaturasi", KeyArray);

Parametr. Insert("Kalit", RecordKey) ;

OpenForm( "Axborot reestri. Nomenklatura narxlari. Ro'yxatga olish shakli", Parametr);
Jarayonning oxiri

Savol: "Serverda" formasini oling


Quyidagi muammo bor: siz formani serverga o'tkazishingiz kerak. Shunday qilib, siz mijozdagi tuzilmani olishingiz va uni serverga o'tkazishingiz kerakligini tushunaman. Quyidagi kodni tahrirlashga yordam bering
Kod 1C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Hujjat yaratish Xabarnoma (tanlangan qatorlar massivi); Protseduraning oxiri va Serverda ishlash tartibi Hujjat yaratish Xabar berish (PatientsArrayIdentifiers, NotNotify = False) Yangi hujjat = Hujjatlar. st_Notification. Hujjat yaratish(); DocumentForm = Yangi hujjat. GetForm( "Hech qachon xabar bermang"; Aks holda yangi hujjat. Matn = "Xabar qilingan(lar)" ; EndIf; Yangi hujjat. Sana = StartDay(CurrentDate()); Har bir qator identifikatori uchun Kimdan

Javob: Men buni qildim va u ishladi:

Kod 1C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 & OnClient Protsedurasi Notify(Buyruq) Tanlangan qatorlar massivi = Elementlar. Bildirishnomalar. Tanlangan qatorlar; Hujjat yaratish Xabarnoma (tanlangan qatorlar massivi); Jarayonning tugashi va mijoz protsedurasi haqida Hujjat yaratish Xabar berish (PatientsArrayIdentifiers, Don'tNotify = False ) DocumentForm = GetForm( "Document.st_Notification.ObjectForm"); Yangi hujjat = DocumentForm. Ob'ekt; Yangi hujjat. NotNotify = NotNotify; Agar xabar berilmasa, yangi hujjat. Matn ="Follik aytishga qarshi bo'lmang" ; Aks holda yangi hujjat. Matn ="Ma'no(lar)" Kimdan PatientsArrayIdentifiers Cycle NewRow = Yangi Hujjat. Bemorlar. Qo'shish();

Yangi qator. Bemor = Bildirishnomalar. ByIdentifier (StringIdentifier) ​​ni toping. Bemor;


EndCycle; Hujjat shakli. Ochiq();
Jarayonning oxiri
Savol: v7: Shaklni oching (“ishlamaydi!”)!

Javob: Men yozyapman, OpenForm("Document.Reservation_Trimming", Context);

lekin bu xujjatni ochmayapti kim bilsa yordam bering iltimos!


Men turli variantlarni sinab ko'rdim va bu hujjat mavjud.
() Xo'sh, demak... bu siz 0 da yolg'on gapirganingizni anglatadimi? Jamiyatni chalg'itdimi? Muhim ishlardan chalg'iyapsizmi? Kimnidir unutilgan 1C 7.7 ni o'rnatishga majbur qildim va kimdir ma'lumotlar bazasining turli versiyalarida ishni sinab ko'rish uchun SQL serverini o'rnatdimi? Va bularning barchasi Ctrl+C / Ctrl+V tugmalarini to'g'ri bosa olmaganingiz uchunmi?
Savol: "Joriy hisob raqamiga tushum" hujjati uchun "To'lov topshirig'ining" tashqi bosma shakli (BP 3.0)

Xayrli kun, yaxshi odamlar!!!
Choynakka yordam bering!

1C 8.3 Buxgalteriya hisobi tashqi bosma shakl orqali "Joriy hisob raqamiga tushum" hujjatlari bo'yicha to'lov topshiriqnomalarini chop etish uchun kerak bo'ladi, chunki u 1C-da mavjud emas.

Fayldan qo'shimcha ishlov berishni ulash mumkin emas.

Javob:

Bu dasturning ushbu versiyasiga mos kelmasligi mumkin.

(ExternalProcessing.Account.ObjectModule(74,28)): O'zgaruvchi aniqlanmagan (SmallCompanyServerManagement)
Buni qanday tuzatish mumkin?
Fayldan qo'shimcha ishlov berishni ulash mumkin emas.

artsh dedi:

Xayrli kun, yaxshi odamlar!!!
Faqat 8.2 uchun mavjud shakl mavjud, 8.3 ga ulanganda u quyidagilarni beradi:
Kengaytirish uchun bosing...

Bu 8,2 yoki 8,3 masalasi emas! Konfiguratsiya ma'lumotlari muhim ahamiyatga ega..
Siz BP (2.0 yoki 3.0???) UNF uchun moʻljallangan ishlov berishni ochmoqchisiz!

Tabiiyki, BPda "Kichik firma serverini boshqarish" kabi protsedura mavjud emas.


Buxgalteriya hisobini toping, yarating yoki buyurtma bering
Har qanday holatda, siz dastur konfiguratsiyasini aniq ko'rsatishingiz kerak - BP 2.0 yoki 3.0.
Savol: "Serverga fayllarni yuklash" muntazam topshirig'i
Hayrli kun!
Ehtimol, kimdir shunga o'xshash muammoga duch kelgan va uni qanday hal qilishni (yoki ... to'g'ri yo'nalishda yuborishni) aytib berishi mumkinmi?
Dastlabki ma'lumotlar:
1. Uchta turdagi fayllarni yaratuvchi chakana savdo nuqtalari mavjud: CSV, XLS, DB.
2. Fayllar uchta shaxsiy kompyuterga yuboriladi (fayllarni qabul qilish uchun turli kanallar va turli dekodlash tizimlari).
3. Qabul qilingan fayllardan kerakli ma'lumotlarni qabul qiluvchi va ularni fayl axborot xavfsizligi tizimiga yuklaydigan ishlov berish mavjud.
2. Rejalashtirilgan vazifa orqali fayllarni yuklab olishni tashkil qilish.
Muammo(lar):
1. Muntazam vazifalar server protseduralari orqali amalga oshiriladi va fayllarni yuklash va qayta ishlash asosan mijoz protseduralari hisoblanadi.
2. ...?
Savol:
Qanday qilib boshqa kompyuterdagi katalogni muntazam topshiriqdan skanerlashim va topilgan fayllarni yuklab olishim mumkin?

Javob:

Javob allaqachon sizga yozilgan.

Savol: Server "Ma'lumotlar bazasi topilmadi"


Bugun g'alati bir narsa yuz berdi. Bazalardan biri ochilishni to'xtatdi. "Ma'lumotlar bazasi topilmadi" degan xatolik yuz berdi. 1C serverida ham, sqlda ham shunday. Lekin ochilmaydi.
Men uning nusxasini SQL serverida yaratdim, keyin uni 1C serveriga uladim - va hamma narsa yaxshi ishladi. Ammo "eski" bazaga nima bo'ldi? Bunday xatoning oyoqlari qaerdan kelganini qanday aniqlay olasiz?

Javob:

Drako dedi:

Xo'sh, qaysi server va portlar ma'lumotlar bazasiga ulanish sifatida ro'yxatdan o'tganligini tekshiring va bir xil klasterda mavjud yoki yo'qligini va klasterda bir xil portlar bor yoki yo'qligini tekshiring.

artsh dedi:

Men borib Google'dan uni shifrlashini so'rayman

Savol: UPP 1.3 Ishdan bo'shatilgandan keyin hisob-kitobda "Daromad" to'lov varaqasidagidan kamroq. YORDAM


UPP 1.3 T-61 bosma shakldagi "Ishdan bo'shatilgandan keyin hisob-kitob" hujjatida "Daromad" ustunidagi "To'lov varaqasi" bosma shakldagi "Hisoblangan" dan kamroq miqdor "Ishdan bo'shatilgandan keyin hisob-kitoblar" hujjatida. Tashkilot”.

Ko'proq. "Bayram va dam olish kunlari uchun to'lov" hujjatlari uchun to'lovlar to'lov qog'oziga kiritilgan, ammo ishdan bo'shatilgandan keyin T-61da emas.

Menga to'g'ri shamanik harakatlar to'plamini ayting, shunda u joyiga tushadi.

Javob:() yangilanishlar bilan hech narsa bo'lmaydi... bu shakldagi xatolar eng qadimgi xatolardir va ularni hech kim tuzatmaydi.


Javob:

Kimdan xabar bosqich 15

Buni kimga yozdim?

Kimdan xabar GreenkA

Ro'yxat tugmasi sizga etishmayotgan "uchta nuqta" ni beradi. Bu siz uchun avtomatik ravishda ko'rsatilmaydi, chunki “id_Instance” atributining turi String. Agar katalog mavjud bo'lsa, xususiyatlarda biror narsani o'zgartirishga hojat qolmaydi va "Avto" belgisi etarli bo'lar edi.

Kimdan xabar bosqich 15

Siz ko'p marta qayta boshlashingiz mumkin, ammo muammo nima ekanligini tushunmasangiz, natija bir xil bo'ladi. Ehtimol, biror narsani qayta o'qishga arziydimi? Bu mavzu, bu kitob, google uni...

Fayldagi savollarga javoblar

O'qing
Katalog.Kitoblar.Nusxalar <ИмяТаблицы>.<ИмяПоля>, bu yerdan




.

Agar FindString.Quantity() >

Kompilyatsiya direktivalari

&AtClient
&AtServer (&AtServer)

Shakl moduli

Buyruqlar moduli

Umumiy modul
&Mijozda, &Serverda.

Savol: "Elektron kutubxona" diplom loyihasini yaratish


Salom. Men 1 soniyada dipol bilan yozyapman. Raqamli kutubxona. Demak, muammoning mohiyati: “Students”-1 katalogining jadval qismida “Book_Title”-2 atributida ma’lum bir kitobni tanlagandan so‘ng, “id_Instance”-3 atributida mavjud bo‘lganlar ro‘yxati bo‘lishini istardim. nusxalari tanlagan ko'rinadi. Men rasmlardagi belgilarni tirnoq yonidagi raqamlar bilan belgiladim. Albatta, nusxa talabaga yetib kelganida maqom o‘zgarsa yaxshi bo‘lardi, lekin bu ikkinchi darajali vazifa. Iltimos yordam bering. Yana bir savol: Nima uchun maydonga murojaat qilgandan so'ng, joriy maydonga faqat standart "Ism" atributini qo'shishim mumkinmi? E'tiboringiz uchun rahmat. (Iltimos, mening mavzuimga yordam beradigan choynaklar uchun kitoblarni ham tavsiya eting.)

Javob:

Kimdan xabar bosqich 15

Nima uchunligini bilmayman, lekin ro'yxat faqat F4 tugmasini bosganingizda paydo bo'ladi va o'qni bosganingizda hech narsa bo'lmaydi va ellips bir joyda g'oyib bo'ldi.

Buni kimga yozdim?

Kimdan xabar GreenkA

"id_Instance" forma elementining xususiyatlarida "Ro'yxat tugmasi" ni yoqishni unutmang.

Ro'yxat tugmasi sizga etishmayotgan "uchta nuqta" ni beradi. Bu siz uchun avtomatik ravishda ko'rsatilmaydi, chunki “id_Instance” atributining turi String. Agar katalog mavjud bo'lsa, xususiyatlarda biror narsani o'zgartirishga hojat qolmaydi va "Avto" belgisi etarli bo'lar edi.

Kimdan xabar bosqich 15

Bu men 6 soat va 8 dan ortiq qayta yaratilgan konfiguratsiyada erishgan narsam

Siz ko'p marta qayta boshlashingiz mumkin, ammo muammo nima ekanligini tushunmasangiz, natija bir xil bo'ladi. Ehtimol, biror narsani qayta o'qishga arziydimi? Bu mavzu, bu kitob, google uni...

Fayldagi savollarga javoblar


StandardProcessing = False; - (Men tushunganimdek, kitob to'ldirilmasa, nusxalar ro'yxatini ko'rsatadigan ishlov berilmasa, bu nima uchun.)
Hodisa tavsifi ishlashi uchun standart shakl elementi hodisasini qayta ishlashni o‘chirib qo‘yish.
Sizning konfiguratsiyangizga misol: Book_Name atributi bilan bog'langan shakl elementi mavjud (ReferenceLink.Books turi). Ushbu elementning StartSelection() hodisasini standart qayta ishlash Kitob katalogini tanlash formasini ochishga olib keladi. Agar biz u erda qo'shimcha parametrlarni o'tkazmoqchi bo'lsak, masalan, tanlovni o'rnatamiz, boshqa shaklni ochamiz, biz standart ishlov berishni o'chirib qo'yamiz va ushbu hodisa uchun nima qilishni xohlayotganimizni yozamiz.

&Kontekstsiz serverda (Kontekstli va kontekstsiz server o'rtasidagi farq nima va nima uchun aynan shu server tanlangan)
1C da direktivalar haqida o'qing. Ko'p, lekin foydali.

O'qing
Ayniqsa sizning savollaringiz uchun: bu jadvalga tegishli so'rov matni Katalog.Kitoblar.Nusxalar(Instances jadvalli qismi), so'rovdagi jadval nomini o'zgartirish mumkin, bu erda u BooksInstances sifatida belgilanadi; Shuning uchun biz barcha hosil bo'lgan maydonlarni quyidagicha belgilaymiz<ИмяТаблицы>.<ИмяПоля>, bu yerdan
BooksInstances.id_Instance. "BooksInstances.Link = &Link" - Kitoblar katalogidagi ma'lum bir element uchun so'rovda yozuvlarni tanlash, biz keyinchalik parametr sifatida o'rnatamiz - "Request.SetParameter("Link", Book);".

Books_Studentid_InstanceWhenChangedOnServer(CurrentLine.Book_Title, CurrentLine.id_Instance); (Bu quyidagi protseduraga yo'naltirishning bir turi)
Bu savolmi yoki bayonotmi? Ha kabi)

FindRow = CurrentBook.Instances.FindLines(New Structure("id_Instance", id_Instance)); (Men bu erda hech narsani tushunmayapman va nima uchun bizga tuzilma kerak)
Sintaksis yordamchisidan qanday foydalanishni bilasizmi? Ctrl+f1 tugmalariga qo'ng'iroq qiling, agar bu vaqtda kursorni tushunarsiz narsaga qo'ysangiz, u darhol tavsif va misollar bilan u haqida ma'lumot topishga harakat qiladi.
FindRows() usulining tavsifi: jadval bo'limida belgilangan qidirish shartiga mos keladigan qatorlarni qidiradi.
Qidiruv shartlari qavslar ichida tuzilma shaklida ko'rsatilgan, bu erda boshida “id_Instance” struktura kaliti, qidiruv ustunining nomi, so'ngra strukturaning qiymati id_Instance (tirnoqsiz). Jarayonni chaqirishda biz ushbu qiymatdan o'tdik Books_Studentid_InstanceWhenChangedOnServer(Kitob, id_Instance).

Agar FindString.Quantity() > 0 bo'lsa, keyin () (Agar biz misollardan bir qatorni tanlasak, uni noto'g'ri qilamizmi?)
Yolg'on - bu qanday? Ushbu satrda biz jadval bo'limidagi qatorlar ko'rsatilgan qidiruv parametrlari bo'yicha topilganligini tekshiramiz, shuning uchun indeks bo'yicha qiymat olishga harakat qilishda xatoliklar bo'lmaydi.

Kompilyatsiya direktivalari


Shakl moduli, buyruq moduli va boshqariladigan ilovaning umumiy modulining har bir protsedurasi va funksiyasi oldidan ushbu protsedura uchun bajarilish muhitini belgilaydigan kompilyatsiya direktivasi mavjud. Direktivdan oldin "&" belgisi qo'yiladi. Amaldagi ko'rsatmalar:

&AtClient- mijoz protsedurasini (funktsiyasini) belgilaydi;
&AtServer (&AtServer)- server protsedurasini (funktsiyasini) belgilaydi;
&OnServerNoContext (&AtServerNoContext)- forma kontekstidan tashqarida serverda bajariladigan server protsedurasini (funktsiyasini) belgilaydi. O'zgaruvchilar kontekstdan tashqarida bo'lishi mumkin emas. Bunday usullarda shakl konteksti (jumladan, shakl ma'lumotlari) mavjud emas. Faqat boshqa kontekstdan tashqari usullarga qo'ng'iroqlar haqiqiydir. Ushbu usullarni chaqirish forma ma'lumotlarini serverga va serverdan o'tkazmaydi. Kontekstdan tashqari usullardan foydalanish mijoz dastur muhitidan server protsedurasini chaqirishda uzatiladigan ma'lumotlar hajmini sezilarli darajada kamaytirish imkonini beradi;
&OnClientAtServerNoContext (&AtClientAtServerNoContext)- mijoz va serverda forma modulida bajariladigan, shakl kontekstiga, shakl ma'lumotlariga, o'zgaruvchilarga kirish imkoniga ega bo'lmagan, lekin umumiy modullarning protseduralari va funktsiyalariga kirish huquqiga ega bo'lgan protsedurani (funktsiyani) belgilaydi - server, bo'lmagan. -global va bir vaqtning o'zida server va mijoz. Protseduraning (funktsiyaning) o'zi forma modulining mijoz, server kontekstli va kontekstli bo'lmagan protseduralari va funktsiyalari uchun mavjud. Shaklning server tomonidagi kontekst bo'lmagan usullaridan umumiy modullarning server usullarini chaqirishga ruxsat beriladi;
&AtClientAtServer (&AtClientAtServer)- mijoz va serverda bajariladigan buyruq modulida bajariladigan, umumiy modullarning - server, global bo'lmagan va server va mijozning protseduralari va funktsiyalariga bir vaqtning o'zida kirish huquqiga ega bo'lgan, kirish imkoniga ega bo'lmagan protsedurani (funktsiyani) belgilaydi. o'zgaruvchilarga. Protseduraning (funktsiyaning) o'zi mijoz-server protseduralari va buyruq moduli funktsiyalari uchun mavjud.
Mijoz protsedurasi (funktsiyasi) mijoz dastur muhitida bajariladi. Bunday protsedurada shaklning mijoz konteksti va har qanday modul protseduralariga qo'ng'iroqlar mavjud.

Server dastur muhitida server protsedurasi (funktsiyasi) bajariladi. Bunday protsedurada shakl ma'lumotlari mavjud, formaning server konteksti mavjud va serverga qo'ng'iroqlar va modulning server tomonidagi kontekstdan tashqari protseduralari mavjud. Bunday protsedurani chaqirganda, ariza ma'lumotlari mijozdan serverga va orqaga (qo'ng'iroq oxirida) uzatiladi.

Shakl kontekstidan tashqarida (kontekstdan tashqarida) bajariladigan server protsedurasi (funktsiyasi) server dastur muhitida bajariladi. Bunday protsedurada (funktsiyada) shakl konteksti (jumladan, shakl ma'lumotlari) mavjud emas. Faqat boshqa kontekstdan tashqari protseduralarga (funktsiyalarga) qo'ng'iroqlar haqiqiydir. Ushbu protseduralar (funktsiyalar) chaqirilganda, forma ma'lumotlari serverga va orqaga o'tkazilmaydi. Kontekstdan tashqari protseduralardan (funktsiyalardan) foydalanish mijoz dastur muhitidan server protsedurasini (funktsiyasini) chaqirishda uzatiladigan ma'lumotlar hajmini sezilarli darajada kamaytirish imkonini beradi.

Protsedura (funktsiya) oldidan kompilyatsiya direktivasining yo'qligi standart direktivdan foydalanilganligini anglatadi. Standart direktiva &OnServer hisoblanadi. Bitta protsedura (funktsiya) oldidan bir nechta kompilyatsiya direktivalaridan foydalanishga yo'l qo'yilmaydi. Faqat kompilyatsiya direktivalari bilan farq qiladigan bir xil nomdagi protseduralar (funksiyalar) bo'lishiga yo'l qo'yilmaydi.

Boshqariladigan shakl moduli protsessor ko'rsatmalaridan foydalanishga imkon beradi. Preprotsessor ko'rsatmalaridan faqat protseduralar (funktsiyalar) ichida foydalanish tavsiya etiladi. Natijani tushunish uchun preprotsessor ko'rsatmalari protsedura (funktsiya) chegaralarini kesib o'tganda, preprotsessor ko'rsatmalariga ishlov berish kompilyatsiya direktivalarini qayta ishlashdan oldin amalga oshirilishini hisobga olish kerak.

Buyruqlar modulida oldindan belgilangan ishlov beruvchi ProcessCommand protsedurasidan oldin &OnClient direktivasi bo'lishi kerak, chunki buyruq mijoz ilovasida bajariladi.

Shakl moduli
Kompilyatsiya direktivalari - forma modulida mavjud &Mijozda, &Serverda, &Serverda Kontekstsiz, &Mijozda Kontekstsiz Serverda.
Buyruqlar moduli
Kompilyatsiya direktivalari - buyruq modulida mavjud &OnClient, &OnServer, &OnClientOnServer.
Umumiy modul
Kompilyatsiya direktivalari umumiy modulda mavjud - &Mijozda, &Serverda.

Savol: 1C serveri bilan tashqi komponent bilan ishlash...


Hayrli kun,

C++ da yozilgan tashqi komponent mavjud bo'lib, uning vazifasi tashqi ma'lumotlar bazasidan ma'lumot olish va so'rov natijasini 1C da qiymatlar jadvali ko'rinishida qaytarishdir.
Hozirgi vaqtda qiymatlar jadvalini yaratish uchun Init() funksiyasida parametr sifatida qabul qilingan IDispatch* pBackConnection interfeysi ishlatiladi. Keyinchalik, qiymatlar jadvalini yaratish, uni to'ldirish va CallAsFunc(...) dagi ikkinchi parametrga qaytarish uchun oddiygina 1C funktsiyalaridan foydalanaman.
Muammolar 1C nozik mijozlarga o'tish bilan boshlandi. Server tomonida tashqi komponent aslida ishga tushmaydi. Siz uni mijoz tomonida ishga tushirishingiz mumkin, ammo barchasi tayoqchaga o'xshaydi va 1Cda umumiy "mijoz-server" mantig'idan chiqib ketadi. Masalan, mijoz qiymatlar jadvali nima ekanligini, "global" o'zgaruvchilar bilan bog'liq muammolar, sessiyalar va boshqalarni tushunmaydi.
NativeAPI bu borada yanada cheklangan.
Daf bilan raqsga tushish men 1C serveri ostida tashqi komponentni ishga tushirishga muvaffaq bo'lganimga olib keldi, LEKIN ish pBackConnection-da Invoke-ga qo'ng'iroq qilishga urinmaguncha davom etadi. 8.2 serverning 64-bitli versiyasi vaqt tugamaguncha biror narsa qilishga harakat qiladi, 32-bitli versiya (VK tabiiy ravishda 32-bit) darhol tushib ketadi.
1C serveri ushbu ish rejimini qo'llab-quvvatlamaydi deb o'ylayman.
Shunga ko'ra, savollar tug'iladi: bu vaqtinchalikmi yoki 1C mantig'i ushbu ish sxemasini bekor qilish uchun qaynaydimi? Agar shu tarzda ichki 1C tuzilmalarini (qiymatlar jadvali) yaratishning iloji bo'lmasa, uni C++ da yaratishga harakat qilish uchun, printsipial jihatdan, tizim darajasida qiymatlar jadvali nima ekanligini tavsiflash mumkinmi? uni to'ldiring va keyin uni qaytarish parametri sifatida 1C ga o'tkazing? Men hech bo'lmaganda qaysi yo'nalishda qazish kerakligini aniqlamoqchiman.

Rahmat.

Javob:

Siz bir narsani yozasiz va boshqa narsani nazarda tutasiz.
1C muhitida turli seanslarda ko'rinadigan o'zgaruvchilarni e'lon qilish hozir imkonsiz emas va ilgari bunday imkoniyat yo'q edi. Yana bir seans jismoniy jihatdan boshqacha jarayondir.
Seans - bu ma'lumotlar bazasiga ulanadigan sessiya, ya'ni. foydalanuvchi sessiyasi. Yoki siz ushbu kontseptsiyaga o'zingizning biror narsangizni kirityapsizmi?

Bir seans ichida seans modulida yashash va turli joylardan ko'rinadigan o'zgaruvchilarni seans modulida e'lon qilish mumkin edi va endi ham mumkin... aslida ulardan 4 tasi bor.
- sessiya moduli;
- oddiy dastur moduli;
- Boshqariladigan dastur moduli;
- Tashqi ulanish moduli.

Albatta, siz kontekstni eslab qolishingiz kerak. Server konteksti mijoz tomonida bevosita mavjud emas va aksincha.

Aslida, 1C arxitekturasi ma'lumotlar almashinuvi quyidagicha amalga oshirilishini nazarda tutadi:
- protseduralar/funksiyalar parametrlari/qaytishi orqali;
- sessiya parametrlari (ob'ektlar bo'lishi mumkin emas, lekin aslida palitrada ko'rinadigan) yordamida.

Shakldagi jadval... u qandaydir ob'ekt jadvaliga ulanganmi (masalan, ishlov berish)? yoki yo'q. Ha bo'lsa, u serverda (&OnServer) mavjud va u erda tahrirlang....

Va shunga qaramay, ha, qiymatlar jadvali mijoz tomonida UVda mavjud emas. Xo'sh, 1C shunday qaror qildi.

Qo'ysangchi; qani endi! U Excel bilan ishlaydi, FSO va boshqa bir qancha narsalar bilan ishlaydi, lekin bu erda ishlamaydi. Xatoni toping va tahlil qiling....

Urinish
...
sizning harakatlaringiz
...
Istisno
str = ErrorDescription();
EndAttempt;

Zamonaviy apparat imkoniyatlari bilan bu umuman argument emas.

To'g'ri shaxsiy fikringiz. Haqiqatga hech qanday aloqasi yo'q. Hech qanday tarzda emas. Yana bir bor takrorlayman, 1C COM bilan ajoyib ishlaydi. In-proc va out-proc bilan ham.

Iltimos, yuklab olish uchun foydalanadigan kodni kiriting va VK bilan bog'laning.

Aytgancha, VK... sizning holatingizda bu COM yoki Native APImi?
Agar COM bo'lsa, siz uni regsvr32 orqali ... sifatida ro'yxatdan o'tkazasiz ... qanday qilib bit chuqurligi masalasini "hal qilasiz"?

Savol: COMObject("Excel.Application"). Mijoz va serverda


Salom.

Men muammoga duch keldim:
Men Excelni ishga tushiradigan, faylni o'qiydigan, to'ldiradigan va yozadigan ishlov berishni yaratdim.
Mijozda hamma narsa ajoyib ishlaydi.
Men buni serverda ma'lum bir vaqtda bajaradigan odatiy vazifani yaratdim.
Serverda bajarilganda, MS Excel faylga kira olmaganligi haqida xatolik paydo bo'ladi. Shu bilan birga, aniq ma'lumki, com. Excel ob'ekti hatto yaratilmagan (u vazifa menejeri jarayonlarida emas).
Shunisi e'tiborga loyiqki, agar siz mijoz tomonidan 1C serveri o'rnatilgan mashinadan ishlov berishni boshlasangiz, unda hamma narsa bajariladi.

Excel = Yangi COMObject("Excel.Application"); Kitob = Excel.WorkBooks.Open("D:\Dst\Order.xls");

Menimcha, bu yerda gap shundaki, mijozdan ishlaganda Excel foydalanuvchi ostida real seansda, serverda esa foydalanuvchi ostida to‘liq huquqlarga ega bo‘lsa-da, lekin ishlayotgan seanssiz ishga tushiriladi.

Windows Server 2008 R2 standart serveri. Xizmat paketi 1
Buni qanday aylanib o'tish mumkin?

Javob:

Kimgadir kerak bo'lsa
Biz "mmc comexp.msc /32" buyrug'ini bajaramiz, bu DCOMCONFIG bilan bir xil ishlaydi, lekin 32-bitli komponentlarni ko'rish imkonini beradi.
Muharrir tanlovi
Mazali ovqatlanish va vazn yo'qotish haqiqiydir. Tanadagi yog'larni parchalaydigan lipotropik mahsulotlarni menyuga kiritishga arziydi. Bu dieta olib keladi ...

Anatomiya eng qadimgi fanlardan biridir. Ibtidoiy ovchilar hayotiy organlarning holati to'g'risida allaqachon bilishgan, shundan dalolat beradi ...

Quyoshning tuzilishi 1 – yadro, 2 – radiatsiyaviy muvozanat zonasi, 3 – konvektiv zona, 4 – fotosfera, 5 – xromosfera, 6 – toj, 7 – dog‘lar,...

1. Har bir yuqumli kasalliklar shifoxonasi yoki yuqumli kasalliklar bo'limi, yoki ko'p tarmoqli shifoxonalarda zarur bo'lgan joylarda tez tibbiy yordam bo'limi bo'lishi kerak...
ORFOEPIK LUG'ATLAR (qarang: orfoepiya) - zamonaviy rus adabiy tilining lug'ati ... bilan taqdim etilgan lug'atlar.
Ko'zgu - bu har doim odamlarda ma'lum bir qo'rquvni uyg'otgan sirli ob'ekt. Ko'p kitoblar, ertaklar va hikoyalar bor, ularda odamlar ...
1980 yil qaysi hayvon yili? Bu savol, ayniqsa, ko'rsatilgan yilda tug'ilgan va munajjimlar bashoratiga ishtiyoqli bo'lganlarni tashvishga soladi. Aloqada...
Ko'pchiligingiz buyuk Mahamantra Mahamrityunjaya mantrasi haqida eshitgansiz. U keng tarqalgan va keng tarqalgan. Bundan kam mashhurlik yo'q ...
Agar qabristondan o'tish uchun omadingiz bo'lmasa, nega orzu qilasiz? Tush kitobi aniq: siz o'limdan qo'rqasiz yoki siz dam olish va tinchlikni xohlaysiz. Sinab ko'ring...