PDA

View Full Version : نمایش غلط رشته در برنامه سازمان امور مالیاتی



khoshblagh
دوشنبه 09 اسفند 1395, 07:37 صبح
با سلام خدمت دوستان
برنامه مالیات حقوق سازمان امور مالیاتی در نسخه جدید آن 3 فایل تکس را از موئدیان مالیاتی به صورت تکس میگیرد. البته برای کنترل اطلاعات شما میتوانید این فایلها که ساختار مشخصی دارد را در برنامه شخصی خود ایجاد و آنها را در برنامه آن سازمان مالیاتی تست و کنترل کنید. تمام فرایند مورد نظر را در برنامه شخصی تولید و 3 فایل تکس مورد نظر را نوت پد ویندوز7 بدرستی نمایش میدهد . ولی در برنامه سازمان مالیاتی فایلی که اسامی کارکنان را نمایش میدهد به صورت علامت شبیه لوزی نشان داده میشود. البته خود برنامه سازمان مالیاتی ایرادی به ساختار و یا اطلاعات فایلها نمیگیرد.( برنامه آنها طوری تهیه شده که اگر مشکلی در آنها فایلها موجود باشد ، موارد مورد اشکال در تب بعدی نمایش داده میشود). سئوال این است که برنامه با xe4 و در محیط ویندوز 7 تهیه و کامپایل شده که هر اینها یونیکد میباشند(البته بانک اکسس بکار رفته فرمت Acsses2000 میباشد) پس چرا باز هم مشکل ناسازگاری فارسی پیش میآید؟این مشکل چگونه قابل رفع میباشد؟ متشکرم144593
البته فایل اکسس آنها نسخه 2002-20003 میباشد.

hamid-nic
دوشنبه 09 اسفند 1395, 08:21 صبح
اون فایل های txt را با enconding های مختلف ذخیره و در برنامه مالیات تست کنید ببینید در کدوم حالت برنامه مالیات درست نمایش می دهد بعد که encoding مورد نظر را پیدا کردید طبق همون از برنامتون خروجی بگیرید .

khoshblagh
دوشنبه 09 اسفند 1395, 10:39 صبح
اون فایل های txt را با enconding های مختلف ذخیره و در برنامه مالیات تست کنید ببینید در کدوم حالت برنامه مالیات درست نمایش می دهد بعد که encoding مورد نظر را پیدا کردید طبق همون از برنامتون خروجی بگیرید .
با سلام
من تجربه ای در رابطه enconding ندارم. در صورت امکان یک نمونه ارائه بفرمائید . متشکرم.

hamid-nic
دوشنبه 09 اسفند 1395, 20:00 عصر
اون فایل txt نهایی را در یک ادیتوری مثل ++Notepad باز کنید (منوی encoding اختصاصی داره) و با encoding های مختلف ذخیره و با نرم افزار مالیات باز کنید ببنید در کدوم حالت نمایش صحیح اطلاعات را دارید .
با encoding های زیر تست کنید :
UTF8
UTF8 Without BOM
ANSI
Windows-1256

khoshblagh
سه شنبه 10 اسفند 1395, 22:46 عصر
با سلام
با تشکر از جناب hamid-nic که با راهنمایی های موثر باعث حل مسئله شد. مشخص شد که فایلهای تولیدی در برنامه از نوع
ANSI بوده که همین باعث ایجاد مشکل شده بود. اما همچنان سئوال باقیست که با توجه به پشتیبانی کامل xe4 و ویندوز 7 از یونی کد باز هم فایلهای متنی خروجی برنامه به صورت ANSI میباشد؟

hamid-nic
چهارشنبه 11 اسفند 1395, 08:30 صبح
خواهش میکنم
xe4 با یونیکد مشکل نداره اما در ایجاد فایل خروجی باید بررسی بیشتری انجام بشه . اگر امکان داره نمونه کد ایجاد کننده فایل خروجی را بزارید .

khoshblagh
چهارشنبه 11 اسفند 1395, 22:00 عصر
با سلام و تشکر
نمونه کد مورد استفاده به شرح ضمیمه میباشد. البته 2 خط آخر را با راهنمایی جنابعالی به آن اضافه نمودم و مشکل حل شد. ولی من به دنبال علت این مسئله میگردم تا رفع ابهام شود. متشکرم

FileName:='WK'+IntToStr(spnSalTax.Value)+cbbMahTax .Value+'.TXT';
AssignFile(txt, FileName);
Rewrite(txt);
strMatn:=qryKholaseListTaxSal.AsString+','+
qryKholaseListTaxMah.AsString+','+
qryKholaseListTaxBdhiMaliyatiMahJari.AsString+','+
qryKholaseListTaxBdhiMaliyatiMahGhabl.AsString+',' +
qryKholaseListTaxTarikhDaftarRoznameh.AsString+',' +
qryKholaseListTaxNoaPardakht.AsString+','+
qryKholaseListTaxSeryalChek.AsString+','+
qryKholaseListTaxTarikhChek.AsString+','+
qryKholaseListTaxCodNamBank.AsString+','+
qryKholaseListTaxNamShobehBank.AsString+','+
qryKholaseListTaxShomarHesabBank.AsString+','+
qryKholaseListTaxMablaghPardakht.AsString+','+
qryKholaseListTaxTarikhPardakhtKhazaneh.AsString+' ,'+
qryKholaseListTaxMablaghPardakhtKhazaneh.AsString;
WriteLn(txt,strMatn);
CloseFile(txt);
edtFileKholaseList.lines.loadfromfile(FileName);
edtFileKholaseList.Lines.SaveToFile(FileName,TEnco ding.UTF8);

hamid-nic
شنبه 14 اسفند 1395, 08:27 صبح
از دلفی xe2 به تابع AssignFile یک پارامتر codepage اضافه شده که می تونید در حین ساختن متن با کد پیج مورد نظر در اون بنویسید به این شکل :

AssignFile (F, ' Test.txt ', CP_UTF8);

اما راه بهتر دیگه استفاده از TStreamWriter هست به این شکل :

var
Writer : TStreamWriter;
begin
Writer := TStreamWriter.Create('testing123', false, TEncoding.UTF8); //
try
Writer.WriteLine(AUnicodeString);
finally
Writer.Free;
end;
end;