سلام
در نسخه 403 امکاناتی برای پر کردن مستقیم یک فایل Access با
اطلاعات فروش فراهم کردهایم. این امکانات تا اندازه زیادی حالت عمومی
دارند؛ اما اصولا با توجه به TTMS (سازوکار ارائه شده توسط سازمان امور
مالیاتی برای دریافت اطلاعات فروش – عوارض و مالیات بر ارزش افزوده مودیان)
طرح شده است. همانند روال متداول در کل سیستم یکپارچه نوسا XP، راهکار
جدید مبتنی بر "تعریف" روشهای صدور اطلاعات است. عملیات صدور از گزارش
فهرست سطرهای برگههای فروش آغاز میشود. یکی از روشهای صدور تعریف شده
قبلی انتخاب میشود و در ادامه همه سطرهای گزارش شده یا سطرهای انتخاب شده
یا فقط سطر تحت مکان نما صادر خواهد شد.
یک فایل Access از تعدادی
جدول تشکیل شده است. فیلدهای یکی از این جدولها مقصد عملیات صدور اند. به
این ترتیب در روش صدور باید یک فایل Access (به عنوان الگو و برای بدست
آوردن جدولها و فیلدها) انتخاب شود. در ادامه یکی از جدولهای موجود در
فایل هم باید معلوم شود. فیلدهای آن جدول، مقاصد صدور اطلاعات خواهند بود.
TTMS دارای یک فایل Access با ساختار از پیش معلوم است (با نام TTMS.mdb).
در این فایل یک جدول به نام Foroush_Detail وجود دارد که مورد توجه ما است.
در
مقایسه تعریف روش صدور اطلاعات فروش به Access با روش صدور اطلاعات
دستمزد، شباهت قابل توجهی با گونه DBF دیده خواهد شد. در تعریف روش صدور به
DBF هم باید یک فایل از ابتدا به عنوان الگو انتخاب شود – به این دلیل که
مقاصد نهایی اطلاعات، فیلدها اند و این فیلدها باید از یک فایل DBF موجود
(با همان ساختار فایل نهایی مورد نیاز) انتخاب شوند. هر فایل DBF حاوی یک
جدول است اما هر فایل Access تعدادی جدول دارد – پس در Access باید علاوه
بر فایل، یکی از جدولهای موجود در فایل را هم به عنوان مقصد انتخاب کنیم.
جز این، فایل DBF ماهیت Ansi دارد، یعنی عبارتهای فارسی به صورت
غیریونیکد در آن درج میشوند و به همین دلیل با بحث کدگذارزی حروف فارسی
مواجه بودیم. عبارتهای درج شده در Access همه یونیکد اند و به همین دلیل
کدگذاری در مورد آن مطرح نیست.
با اینکه تا به حال نیاز آن دیده نشده
است، اما با اندکی آیندهنگری و توجه به غیرقابل پیشبینی بودن طراحان
سیستم در سازمانهای دولتی، امکان صدور اطلاعات سرجمع و نیز متغیرهای روش
صدور را دقیقا با الگوی فایلهای موردنیاز برای مالیات حقوق، در اینجا هم
تعبیه کردهایم. مفهوم و روش تعریف و استفاده از آنها کاملا شبیه به صدور
اطلاعات دستمزد است.
مطابق روال همیشگی تعریف اینگونه روشها، در
هر روش صدور مشخصات عمومی روش و پس از آن فهرستی از آیتمهایی که صادر
میشوند را به عنوان سطرهای روش صدور اطلاعات تعریف میکنیم. هر سطر برای
پرکردن یکی از فیلدهای جدول مقصد تعریف میشود. محتوای قابل صدور یکی از
انواع زیر خواهد بود:
• ردیف
• یکی از فیلدها (از گزارش فهرست سطرهای برگههای فروش)
• کد برگشت (دارایی)
• نوع خریدار (دارایی)
• کد استان (دارایی)
• کد شهر (دارایی)
• شماره فصل
• نام فصل
• سال دورقمی
• سال چهار رقمی
• تاریخ روز
• یکی از متغیرهای روش صدور
• خالی
عمده
اطلاعات از فیلدهای سیستم (همان فیلدهایی که در گزارش فهرست سطرهای
برگههای فروش بدست میآیند) استخراج خواهد شد. با این همه مواردی چون فصل،
سال، تاریخ روز، متغیرهای روش صدور، خالی و ردیف انواع محتویاتی اند که به
صورت اختصاصی برای صدور اطلاعات آماده کردهایم. فصل و سال از تاریخ فروش
استخراج میشوند. فصل به صورت یک عدد 1 تا 4 یا عبارتهای بهار تا زمستان
قابل صدور است. در صورتی که فایل حاصله به صورت سرجمع باشد، فصل و سال از
محدوده اخذ گزارش استخراج میشوند – اگر محدوده تعیین نشده باشد از ابتدای
سال مالی جاری و اگر گزارش از همه سالها اخذ شده باشد از تاریخ شروع سیستم
اطلاعاتی بدست میآیند.
TTMS دارای 5 فیلد عجیب و غریب است که
لزوما با تعریف فیلدها در سیستم ما مطابقت ندارند. 4 فیلد را در فهرست بالا
مشاهده میکنید (پسوند "دارایی" در نوع محتوای آنها درج شده است). کد
برگشت برای سطرهای "فروش" صفر و برای سطرهای برگشت، یک خواهد بود. نوع
خریدار با ترکیب اطلاعات حقیقی، حقوقی و نوع شخص حقوقی بدست میآید: 1)
حقیقی، 2) حقوقی غیردولتی 3) حقوقی دولتی. کدهای استان و شهر با سازوکار
خاصی از درخت محلهای جغرافیایی استخراج میگردد.
از قبل، در فرمهای نهایی برگههای فروش، در مشخصات خریدار، فیلدهای
استان، شهرستان و شهر وجود داشتهاند. هر 3 این فیلدها از محل جغرافیایی
مشتری یا محل جغرافیایی مشتری متفرقه بدست میآیند. روش کار چنین است که در
درخت محلهای جغرافیایی میتوانیم تقسیمات کشوری را به همان صورت (استان،
شهرستان، شهر) تعیین کنیم. امکاناتی هم برای تعیین یکباره این فیلد برای
محلهای همگروه تعبیه شده است. در حین تعریف محل جغرافیایی جدید در
زیرگروه یک استان، تقسیم کشوری به صورت پیشفرض "شهرستان" خواهد بود و با
تعریف زیرگروه جدید برای یک شهرستان، مقدار پیشفرض همین فیلد "شهر" خواهد
بود.
به این ترتیب با در اختیار داشتن یک محل جغرافیایی
میتوانیم با بررسی درخت (در سطوح بالاتر) شهر، شهرستان و استان را تشخیص
دهیم و در فاکتور فروش بازنمایی یا چاپ کنیم.
در فایل Access
مربوط به نرمافزار گزارش خرید و فروش سازمان امور مالیاتی (TTMS)، از
کدهای خاصی برای شهر و استان استفاده شده است. البته همیشه دو رقم ابتدای
کد شهر، همان کد استان است و تکرار اطلاعات برای ما عجیب است. در خود
نرمافزار، البته با روش معقولی باید ابتدا استان انتخاب شود و سپس یکی از
شهرهای همان استان انتخاب گردد.
برای تولید این کد باید روشی داشته باشیم که همزمان بتوانیم فرم نهایی فاکتور و گزارش فروش دارایی را پشتیبانی کنیم.
با بررسی دقیقتر کدهای شهر معلوم میشود که این کدها هم از همان
تقسیمبندی استان-شهرستان-شهر پیروی میکنند. دو رقم برای استان، دو رقم
برای شهرستان و 3 رقم برای شهر تخصیص داده شده است. 3 رقم شهر برای
"شهرستان"ها صفر است. مثلا
استان تهران 10/00/000
تهران 10/01/000
کن 10/01/200
دماوند 10/03/000
آبعلی 10/03/105
همانطور که دیده میشود، میتوانیم استان و شهرستان را در کد هر شهر تشخیص
دهیم. البته هر شهرستان باید به عنوان یک شهر هم در درخت محلهای
جغرافیایی وجود داشته باشد که شماره اختصاصی آن در بین محلهای هم گروه،
صفر خواهد بود.
اگر بخواهیم از همین تقسیمات محل جغرافیایی (که
در فرم نهایی فاکتور به آنها نیاز داریم) برای بدست آوردن کد استان و کد
شهر (مورد نیاز در گزارش فروش) هم استفاده کنیم، میتوانیم با فرضیات زیر
پیش برویم:
* نیازی نیست که استان در درخت محلهای جغرافیایی در
سطح 1 باشد - به همان صورتی که الآن هم باید عمل شود، کافی است که یک محل
جغرافیایی مناسب به عنوان "استان" مشخص شده باشد (و نام آن مثلا تهران
باشد).
* به صورت مشابه به محلهایی برای شهرستان تهران، شهر تهران و شهر کن نیاز خواهیم داشت.
* شماره اختصاصی محلهایی که به عنوان استان علامتگذاری شدهاند باید
حاوی دو رقم استان باشند. در مثال فوق، استان تهران باید دارای شماره 10
باشد. اگر این استان سطح اول درخت نیست ممکن است کد محل جغرافیایی استان
تهران، مثلا 01/10 باشد (که در زیر "ایران" تعریف شده است).
* به همین
ترتیب شماره اختصاصی محلهای شهرستان باید حاوی دو رقم مربوط به شهرستان و
شماره اختصاصی محلهای شهر باید حاوی 3 رقم مربوط به شهر باشد. در مثال
فوق، شهرستان تهران دارای شماره 1 و شهرستان دماوند دارای شماره 3 خواهد
بود. شر تهران دارای شماره صفر، کن 200، دماوند صفر و آبعلی 105 خواهد بود.
سیستم قادر است کدهای مناسب برای TTMS را از درخت محل
جغرافیایی که به صورت فوق تنظیم شده باشند استخراج نماید. یادآوری میکنیم
که تعیین تقسیمات کشوری در هر محل جغرافیایی و درج قسمتهای اختصاصی کدها
به عنوان شماره هر محل جغرافیایی ضرورت دارد. توجه کنید که در زیر هر
شهرستان، یک شهر با شماره اختصاصی صفر (برای بازنمایی همان شهرستان به صورت
شهر) هم لازم داریم.
فیلد
اختصاصی پنجم در TTMS، روش فروش است که با نام ابتکاری و فوقالعاده جالب
HCKharidarType1Code در فایل Access تعریف شده است. قرار است کدهای متفاوتی
برای فروش عادی، فروش توسط ماشینها فروش و فروش به طرف خارجی (بدون
نمایندگی در داخل کشور) در آن درج شود. از آنجا که پشتیبانی از این فیلد در
سیستم ما پیچیدگی بسیار زیادی را ایجاد میکرد و از طرف دیگر حدس میزنیم
که برای 90 درصد از کاربران ما عموما با یک روش فروش مواجه باشیم، تصمیم
گرفتیم که این فیلد را در انواع محتوای خود پیشبینی نکنیم و به جای آن
عدد مناسب را به صورت عبارت ثابت در روش صدور تعریف کنیم.
کاربرانی
که فقط فروش عادی دارند کافی است عدد ثابت 2 را در این فیلد درج کنند.
برای فروش توسط ماشینهای فروش عدد یک و برای فروش به طرف خارجی (پس از
اینکه کاربران تعریف این روش فروش را دقیقا متوجه شدند و امیدواریم آن
تعریف را به ما هم آموزش دهند) عدد 3 را درج نمایند. قاعدتا تفاوت این
روشها به صورتی (مثلا با نوع فروش) در سیستم ما مشخص شده است. پس کاربرانی
که روشهای متنوع فروش دارند میتوانند بیش از یک روش صدور تعریف کنند (با
عددهای ثابت متفاوت) و پیش از صدور اطلاعات با تنظیم شرایط مناسب فهرستی
از فروش با هر روش (مثلا از هر نوع فروش) را بدست آورند و از روش صدور
مناسب (که از قبل تعریف کردهاند) استفاده نمایند. این روال حتما برای
بسیاری از کاربران دردسر کمتری دارد و برای گروه اندکی که نیاز به روش
ترکیبی دارند هم راه حل میانه و نهچندان پیچیدهای است.
پارامترهای گزارش: در
گزارش فهرست سطرهای برگههای فروش، اخذ گزارش از سطرهای اصلی و جنبی
امکانپذیر است. در TTMS فقط با سطرهای اصلی سروکار داریم؛ پس در زمان صدور
اطلاعات باید سطرهای جنبی را احضار نکنیم (یا آنها را برای صدور انتخاب
نکنیم). یک تنظیم دیگر مربوط به سطرهای برگشت است. در گزارش ما، سطرهای
برگشت با علامت منفی بازنمایی میشوند (قصدمان این بوده که جمع ستونهای
مبلغ منطقیتر باشند). اما TTMS به صراحت ذکر کرده که برگشتها حتما باید
به صورت اعداد مثبت درج شوند و در مقابل کد برگشت برای آنها معلوم شود.
برای صدور اطلاعات به TTMS لازم است تا از گزینه "مبالغ برگشت بدون علامت
منفی لحاظ شوند" استفاده شود.
مشتری متفرقه: در برگههای
فروش، درج مستقیم اطلاعات خریدار (مشتری) به عنوان اطلاعات مشتری متفرقه
میسر است. هر فیلدی که به عنوان متفرقه وارد شده باشد جایگزین فیلد مربوط
از اطلاعات مشتری اصلی خواهد شد. هدف این بوده که برای مشتریان گذری، صرفا
یک مرکز مشتری تعریف شود و مشخصات خریدار به عنوان متفرقه وارد شود. این
روش تا به حال در فرمهای نهایی برگههای فروش به خوبی کار کرده است. برای
اینکه در صدور اطلاعات هم این فیلدها را در اختیار داشته باشیم ترتیبی
دادهایم که اطلاعات مشتری متفرقه در فهرست سطرهای برگههای فروش هم در
اختیار باشند.
اما برخی از فیلدها به عنوان متفرقه تعریف نشدهاند:
نام (شخص حقیقی)، شماره تلفن، پیششماره تلفن از آن جملهاند که البته
هیچیک حیاتی نیستند. فرض بر این بوده که برای مشتریان متفرقه حقیقی، نام و
نام خانوادگی با هم وارد میشود و شماره تلفن هم اگر لازم باشد در نشانی
درج میشود.
اما دو فیلد نوع (حقیقی، حقوقی) و نوع شرکت (سازمان)
در دفتر تلفن و نشانی وجود دارند که فاقد فیلد متفرقه مربوط اند و از قضا
برای ما خیلی اهمیت دارند. از این فیلدها برای بدست آوردن نوع خریدار
(دارایی) استفاده میکنیم. واقعا اضافه کردن این فیلدها به عنوان متفرقه
توجیه ندارد، ضمن اینکه تعداد زیادی برگه با اطلاعات متفرقه از قبل در
سیستمهای کاربران ما وجود دارند که قاعدتا این دو فیلد در آنها درج نشده
است.
قاعدتا کاربرانی که قصد دارند اطلاعات خود را به TTMS صادر
نمایند بهتر است اصلا از مشتری متفرقه استفاده نکنند! یا اینکه 3 مرکز
مشتری متفرقه تعریف کنند (حقیقی، حقوقی غیردولتی و دولتی). در زمان تنظیم
برگه فروش با اطلاعات مشتری متفرقه، حسب مورد یکی از 3 مرکز پیشگفته را به
عنوان مشتری برگه انتخاب کنند و سپس به دلخواه به تنظیم اطلاعات مشتری
متفرقه در برگه بپردازند.
برای صدور اطلاعات، همانطور که پیش از
این اشاره کردیم تکمهای به فهرست سطرهای برگههای فروش اضافه کردهایم.
به دو صورت میتوان از این امکان استفاده کرد. اگر تعدادی سطر به صورت بلوک
انتخاب شده باشند، گزینه صدور اطلاعات سطرهای مزبور دیده خواهد شد. اگر
بلوک وجود نداشته باشد همان گزینه برای صدور اطلاعات سطر تحت مکاننما
خواهد بود. به جز این گزینهای برای صدور یکباره همه سطرهای گزارش هم
داریم.
در ادامه یکی از روشهای صدور اطلاعات (تعریف شده قبلی)
انتخاب میشود و پس از آن محاورهای برای تعیین مسیر و نام فایل نهایی
(مقصد اطلاعات) خواهیم داشت. اگر متغیرهای روش صدور تعریف شده باشند، آن
متغیرها هم در همین محاوره برای تعیین مقدار بازنمایی خواهند شد.
اگر فایل Access از قبل دارای رکورد باشد، کاربر اختیار خواهد داشت که اطلاعات قبلی را حذف یا حفظ نماید.
روشهای
صدور تعریف شده در قالب قوانین سیستم فروش و به عنوان بخشی از فایل صادره
متمرکز، قابل صدور اند. به همان صورت متمرکز (یعنی از مسیر سیستم|فراخوانی
فایل صادره) قابل فراخوانیاند.