Category Archives: D365 Business Central
How to Export Text file from Business Central?
Introduction: Business Central provides you the feature to export the data in Excel in General Ledger entries, Customer Ledger entries, etc. But we can export data in a text file. In this blog, we will see how we can export data in the form of a text file. Steps to achieve the goal: Create a codeunit that will export the data in text. We will be needing Temp Blob Codeunit, Instream, and OutStream to read and write the data in the file. Below is the code which will read and write the data in the text file. You can use dynamic filename also by assigning a field value in the FileName variable; FileName: Rec_ComapanyInformation.FileNameText // FileNameText is the field present in the Company Information Page which will be used as Filename of the exported text file. We will be also using an action that will call the Codeunit function (GenerateTextFile) The output of the above code is To avoid using multiple times Write Text function if there is a lot of data that needs to be pulled from multiple fields. You can use a variable and store all the values in that variable and then assign that variable in the WriteText function. 9. The output of the above code is Conclusion: Thus we saw how we can export data from Business Central in a text file. Thank you very much for reading my work. Hope you enjoyed the article!
Share Story :
Customizing POS Receipt Layout
Introduction POS Receipts are generated after every transaction that occurs on POS. The default receipt provided by LS Central is generally sufficient but as is in all things there are always exceptions. There are two approaches we can use to modify the POS Receipts and we are going to see them both. This is the default receipt provided by LS. I have marked division of sections using color. Red – Header Green – Body Blue – Footer References https://www.archerpoint.com/blog/Posts/learn-how-set-pos-receipt-enhancements-ls-retail https://help.lscentral.lsretail.com/Content/How-Tos-Created-By-Support/How-To-Set-Up-Receipts-LS-Central.htm Pre-requisites Microsoft Dynamics 365 Business Central LS Central Development Environment Setup for Business Central Configuration Using Receipt Printing from POS Terminal / Store Card We can add text directly into the Header or the Footer of the POS Receipts and also define some basic properties like bold, italic or wide for the text. It can be defined at POS Level or Store Level i.e. for individual POS Terminals or for all the POS Terminals in a Store. Go to POS Terminal Card. Go to Printing -> Receipt Printing Here you add static content, like Store Name, GST/VAT No, Store Address, etc in both header and footer. Here you can also define, if you want to specify the Item No. or Barcode in the POS Receipt. Similar, to this, we can also define for Store level, i.e. all the POS Terminals in a Store. Using the “POS Print Utility” procedure: In this method, we will write actual code to modify the receipt. If you are using NAV, then this is pretty straight forward, but in case of Business Central, we only have access to Events which we can subscribe to, to change the behaviour of the procedure. The highlighted four procedures do the majority of the work done in printing. PrintHeader -> Prints the content of the header defined in the Receipt Printing. PrintSubHeader: It prints the Information related to the current Transaction. PrintSalesInfo: It prints the actual Items of the Transaction along with VAT and other details at the bottom. PrintFooter: It prints the Footer Text defined in the Receipt Printing. Now that we know which procedure is responsible for which part of the Receipt, we can subscribe to that procedure’s event. For example, let’s try me modify the “Sub Header” part of the Receipt. As such we need to modify the “PrintSubHeader” procedure, so we subscribe to its event. The parameter, sender gives us a reference to the current instance of “POS Print Utility” codeunit which we can use to call all the procedures of that codeunit with the correct values. TransactionHeader is the current “Transaction Header” record. At the start of the procedure, we need to set the IsHandled variable to True so that once your procedure ends, the parent “PrintSubHeader” procedure exits immediately. DSTR – It is the design String, here we define the design of the Line that will be printed. It is at max up to 40 characters. It follows the pattern “#(alignment)##…”. The Design String is divided into sections, each section contains one piece of data. Value – It is a text array, which defines the data which is to be printed in the sections. The number of values set in the Value should be equal to the sections in the design string. Node – It is used as a Label for the data in the section. The number of values in this array should be the same as the values in Value array. Next, the essential part is the “FormatStr” procedure, the 4 booleans at the end are used to specify whether the String is going to be Wide, Bold, High or Italic respectively. After this, the final piece of the puzzle is the “AddPrintLine” procedure, the first argument is the “Section ID”, it is related to which part of the receipt we are printing in, it is better to set it the same as the procedure from which this event is being triggered. Next argument, specifies the maximum number of Sections that will be in the design string, just make sure it is more than the values you have provided. Next, we pass the Node and Value array, the Design String and specify whether the String is going to be Wide, Bold, High or Italic and the Tray at the end. The value for Tray can be taken directly from the Event’s parameters. Similar to this, we will add one more line and then we will check the results. The “PrintSeperator” procedure is used to draw a horizontal line across the receipt using dashes. Here is the final result: Conclusion: Thus we saw how to customize POS Receipts in LS Central either through POS/Store Receipt Printing or for advanced customizations through Event subscriptions.
Share Story :
Configuring Scheduled Jobs – Part II
Introduction: In the previous Blog, we saw how to configure the Schedule Job Header, this time we will configure the Sub-jobs. In Sub-jobs, we can define the Table structures to be followed, Tables the Data is supposed to be sent to, filters, replication counter fields and so on. References: Repl. Counter Interval, Scheduler Subjob (lsretail.com) From-Location Design, Scheduler Subjob (lsretail.com) Replication Method, Scheduler Subjob (lsretail.com) http://www.apanko.ru/showthread.php?t=3517 Pre-requisites: Microsoft Dynamics 365 Business Central LS Central Configuration: General:- ID:- Unique Identifier for the Sub-job. From-Location Design/To-Location Design:- These fields specify the structure of the tables. If the table structures are same in both sending and receiving locations, then you do not need to set this field. From-Table ID/To Table ID:- These fields specify the IDs of the tables. In most cases, these will be same only exception would be when you want to send data to custom Tables from BC/LS Tables. Replication Method:- It has two options- Normal :- In this method the entire table is transferred but as this is an expensive operation and unsustainable if the data in the table is growing constantly, there is another field “Replication Counter” which resides on the table which is to be transferred, it must be an integer field and every operation which modifies/inserts a record in the table, this replication counter field must be updated. Majority of tables provided by LS have a “Replication Counter” field in them. By Actions:- Every operation we perform on every table is logged into a “Preactions” table by LS. Then these Preactions are converted into “Actions” which are then used to transfer data. Field Transfer Type:- It specifies how to handle the fields of the table. It has three options- All:- All the fields from the “From Table” are transferred in the “To Table”. Include List:- Only the fields specified are transferred. Exclude:- All field except the ones specified are transferred. What to do:- It specifies the operations the transfer can perform. There are the basic operations Add, Update & Delete and then building on them there are combinations of these operations.Note:- Please use the delete operations carefully as it may cause unintended data deletion. For most uses, Update-Add is sufficient. Replication:– Action Table ID:- This field is automatically updated when “Replication Method” is set to “By Actions.” Move Actions:- Specifies whether “Actions” should be transferred along with Data. Use Truncate:- When using “Normal” replication method, if this is set to true, then the destination table is cleared and then new data is inserted in it from the source table. If you are using “Update-Add-Delete” as “What to do” then this is more efficient. Replication Counter:- Specifies which “Integer” field is to be used as the “Replication Counter.” Repl. Counter Interval:- If this value is set then the data to be transferred is divided into blocks. The size of the block is as defined in the field.For instance, as per the replication counter, 1000 records are to be transferred. But since sending a huge amount of data at once may burden the replicator we can specify the “Repl. Counter Interval” at 100, after which the “Sub-job” will run 10 times, replicating 100 records at a time. Update Repl. Counter:- Specifies whether the “Replication Counter” field in the destination table should be updated or not. Mark Sent Records:- In this field we can set a boolean field of the “Source Table” which will automatically be set to true, when the record is set. Please do note that none of the fields mentioned in the “Replication” tab are compulsory but creating a sub-job without using the available replication options may become slower and network intensive as entire tables are transferred. Transfer Field List: Go to Navigate > Sub-job > Transfer Field List Here we specify the field mapping between the source and destination tables. It also allows for some degree of Conversion in transferring, for instance, Set “Conversion Type” to “Constant” and set a value in the “Conversion String” field, then after transferring, the value specified in the “Conversion String” is set on all the records in the specified field. Make sure the field is of type “Text” or “Code” before using this. Another practical example would be, When transferring “User” table, if we simply send the password directly then the proper values are not transferred. This can be resolved by using “Skip Text Conv.” on the “Password” field before transferring. From-Table Filters: Go to Navigate > Sub-job > From-Table Filters Here we can specify filters to be applied to the source table. Linked Tables: Go to Navigate > Linked Data > Linked Tables Here we can specify data from which other tables has to be pulled along the main table, in the above example, as the sub-job is using data from “Customer” table, we have defined that along with that we also want data from “Customer Ledger Entry” table. We can also define field mapping for these tables by going to Navigate > Linked Table> Field List. To define the link and/or filters on this table, go to Navigate > Linked Table > Filters and Links. Conclusion: Thus, we saw how to configure Sub-jobs and a brief overview of the features it offers. Thanks for reading!
Share Story :
How can you set one on one approval workflow in Business Central?
Introduction: One of the scenarios where you want the Person A approval request should be approved by Person B and Person B approval request should be approved by Person A. How to achieve this goal: Go to Workflows page I want to create a Purchase Order Approval Workflow from Templates. Go to New-> New Workflow from Template Then select the Purchase Order Approval Workflow from Workflow Templates Click on Add record restriction in the Response field Select the Create approval request option from the Response tab and then set the values Approve Type to be Approver and Approver Limit Type Direct Approver which means whoever is approver the request will go that user only. And then enable the workflow. Then now go to Approval User Setup where we are going to assign which user’s approval request will be sent to which user. Now I will assign my approval request should be sent to the manager and the manager approval request should be sent to me. Now let’s test it go to Purchase order I am currently in my account and send the approval request from Purchase Order Now my manager will get the request which I have sent. The manager will sign in on his account and then go to the Request to Approve page and approve the request which I have sent. And then once the request is approved by my Manager I will get the status as approved in Purchase order-> Orders-> Approval Let’s try vice versa as well repeat the same steps for the manager as well Now I will be able to see the request from the Manager in the Request to Approve Page Conclusion: Thus we saw how we can set the request approval to be send one on one in Business central Thank you very much for reading my work. Hope you enjoyed the article!
Share Story :
Login Error in BC after changing Server Date
Introduction: While doing some customization testing, which revolved around using different dates, I realized that once the date is switched back to the correct date, I was unable to connect to Business Central. I restarted the server instance, IIS, SQL Server services to no avail. Prerequisite: Business Central On-Premise setup with Web Server and SSL. References: https://serverfault.com/questions/217343/date-header-returned-by-iis7-is-wrong https://support.microsoft.com/en-us/topic/using-net-stop-and-net-start-commands-to-force-iis-services-to-re-read-the-registry-c6fe0d0b-9893-36d0-cc3c-47d03f9ccdde Verification: Logging into Business Central gave no errors, there were no errors in the Event Viewer that explicitly mention that it is a Date related issue. The way I stumbled across it being a date related issue is that in the Response that the Business Central server sent to the Login Request, was carrying the wrong date in it. When I switched the System Date back to the date mentioned in the Response headers, everything seemed to be working again. Solution: This issue is caused because when the system date is changed, the same is changed in IIS but when you change it back IIS does not refresh it and we have to manually reset it. Restarting it does not work, trust me, I tried. One way to do this is to execute the following commands on the Server: net http stop net http start These commands took a lot of time so be sure to have available down time before you run them. The other way, which is much simpler in my opinion, is to simply restart the Server. This stops all the services and restarts them which forces the IIS to reset as well. Conclusion: Thus in this blog, we saw how to resolve the issue of being unable to login after changing Server Date in Business Central. Hope this helps!
Share Story :
Using POS Tags in LS Central
Introduction: Tags are small pieces of Information that we can display on the POS. This information may be a field from a table or just some text. If we are using a field from some table, it is necessary that, the table can be referenced using only the fields available in the current “POS Transaction” record. There are multiple types of Tags available like: System :- These tags display system information. Transaction :- These Tags display information regarding the current Transaction. Session:- These Tags display information regarding the current Session. References: https://help.lscentral.lsretail.com/Content/LS%20Retail/POS/Data/Tags.htm Prerequisite: Microsoft Dynamics 365 Business Central LS Central Demonstration: In most cases, we are going to use “Transaction” type Tags so let take an example. In this example, we are going to create a Tag which will display the manager of the Store. To create a Tag: Search for POS Tag in BC Create a new POS Tag, by convention the naming is <#TagName> so we are going to follow the same. Since the data we need is from the “Store” table we set the “Store” table’s ID in the “Table No.” field and as we need the “Manager Name” from the “Store” record, we set the “Field No.” accordingly. In the “POS Trans. Key Field” we specify which field will be used to reference the table mentioned in the “Table No.” field which, in our case, is Store. This list of fields is from the “POS Transaction” table. In the “Expression” we can specify how the data should be presented, %1 is substituted for the data. On the POS, we can use this Tag in the “Description” field of any and all Menu Lines, for example, we can use this as the name of a button, thus the button will change depending on which Store it is being used on. In this example, I am going to set it on “Manager” button on POS. Right Click on the “Manager” button and click on “Button Properties.“ Click on the three dots and choose the “Tag” that we just created and click on OK. Click on OK again so that the “Button Properties” page closes. The button now shows the “Manager Name” field of the Store, in the expression that we provided. Conclusion: Thus, we saw how to configure and use “Tags” in POS, in LS Central. Thanks for reading!
Share Story :
How to use multiple email account to send different documents using Email Setup.
Introduction: There must be a requirement from client where they want to send different documents using different email accounts.It is possible using Email setup. Steps to achieve the goal: Go to Set up Email -> Click on Next Business Central gives you an option to choose the account type. I am going to use Microsoft 365 account Give Account name and assign the email address from which you need to send the documents. Don’t turn the default button as it will set this account as default and all documents will be shared from this new account which you added and then click on finish. Go to the email accounts page you will be able to see two accounts one account which will be the default one and another account which I created then go to Email Scenarios Assign the Email scenarios to stated which accounts to be used for sending specific documents. I just want the Sales Invoice to be sent from the new account which I added. Click on Ok. You can assign any scenario you want as well you can remove scenarios Go to Feature management to allow all the users to use this feature And then go to Sales invoice -> click on Print/Send action -> A screen appears with from details and to details and then click on send email. Conclusion: Thus we saw how we can use multiple email accounts to send the specific documents. Thank you very much for reading my work. Hope you enjoyed the article!
Share Story :
Configuring Scheduled Jobs – Part I
Introduction: In this blog, we will be seeing Scheduled Job configuration for Data Replication using Data Director. Scheduled Jobs comprise of two parts: the Job Header and Sub-jobs. In the Job Header, we define different parameters for the Jobs like, Error Handling, To and From Locations, Compression Types, Scheduling details and the sub-jobs. In the Sub Jobs, we define where to get the schemas of the table, the tables to replicate, methods of replication, filters on the data to be replicated, linked tables, etc. References: LS Retail Data Director User Guide (ls-one.com) Isolation Levels in SQL Server – SQLServerCentral Distribution Sublocations, Scheduler Job Header (lsretail.com) Distribution Restrictions, Scheduler Job Header (lsretail.com) Pre-requisites: Microsoft Dynamics 365 Business Central LS Data Director Configuration: General: Job ID :- A unique Identifier for this Scheduled Job. Scheduler Job Type Code:- It is a kind of category for this Job, we can use this category as a filter when we configure NAS Services. Subjobs Defined By Job:- Specifies where system is supposed to fetch sub-jobs from for this Job. Generally it is the same as “Job ID” but LS allows you to create a job with its sub-jobs defined in another job. Location Settings: In this tab, we specify where the Data is supposed to come from and where the data is supposed to go. There are multiple ways to configure this, From Multiple Locations to Single Location Set the “From Dist. Restrictions to “Include List”. Click on Navigate -> Jobs -> Sender Location List. Add all the locations that you want to pull the data from. Set “Distribution Restrictions” to “Single Location” Set the Location in “To-Location Code” field. From Single Location to Multiple Locations – This is the similar to the previous one simply reversing where we set the values. Set “From Dist. Restrictions” to Single Location and set the location. Set “Distribution Sublocations” to “Included in Replic.”, this field is used to specify whether Data should be sent to sublocations(POS Terminals) or not. Set “Distribution Restrictions” to “Include List” and Go to Navigate > Jobs > “Receiver Locations Include/Exclude.” Add all the locations you want to send the Data to. From Multiple Locations to Multiple Locations Simply set Include List on both sides and add all the locations that the data is supposed to come from and where it is supposed to go. Schedule Details Here we specify how often this Job is supposed to run. You can schedule the Job to run every day, hour, minute or second as per your needs. In the above example, I have scheduled the Job to run every 15 minutes, every day. Do note that you need to have NAS Services configured for the jobs to run automatically. Data Replication: Here we have to define the “Subjobs”, which are in essence, tables which are to be replicated. Note:- In the DD Setup tab, there are advanced settings which can be used to control the compression type and SQL Isolation levels. More information regarding that can be found in the aforementioned references. Conclusion: Thus, we saw how to create a Scheduled Job Header, there are a lot more things that can be done with this like, using different codeunits for Data Replication, Object Replication Or simply running Codeunits for automating tasks. Thanks for reading!
Share Story :
Using POS Data Tables in LS Central
Introduction: POS Data Tables are used to display data from any table in POS. The default POS Screen that we see where we enter our items for sale also consists of a Data Table. Data Tables are also used with Lookups, Record Zooms and Data Grids. In this blog, we are going to create our own POS Data Table based on the Customer Table. References: https://help.lscentral.lsretail.com/Content/LS%20Retail/POS/Data/Data%20Tables.htm https://help.lscentral.lsretail.com/Content/Fields/T_99001565_11.htm https://help.lscentral.lsretail.com/Content/Fields/T_99001565_14.htm Pre-requisites: Microsoft Dynamics 365 Business Central LS Central Demonstration: The most important fields in the General Tab are: Field Description Data Table ID Specify a unique ID for this Data Table. Table No Specify the ID of the Table, whose data this Data Table will be showing on POS. Table Columns Specifies the columns that will be visible in the Data Table. Table Rows Specifies how many rows should be visible by default, if there are more you can simply scroll. Key Value Fields Specifies the key fields of the select table. Start Position Defines which record should be selected when this Data Table is opened. Selection Mode This is useful when you are using your Data Table in a lookup, the options available are “MultiSelect“, “SelectOne” or “NoSelect.” Default Search Type Specifies the search type, the options available are: “Any Part“, “Beginning” or “Whole.“ Default Search Command You can specify different searching commands like Filter, Search or Find. Distribution Location Specifies where the POS Data Table should get the data from.Do note that Web Service configuration should be done for this to work and if the record you selected does not exist on your local system, you may get an error. For Data Table Columns: In this tab, we specify the columns we want in our Data Table and the properties of those columns. Field Description Column No. Specifies the order of the Columns Field No. Specifies the Field No. to be used from the Table for the column. Key No. Specify a value in this field if you want to search using this field. Fixed Filter Specify a value in this field for filtering the table. Preferred Width Specify the preferred width of the column. Default Column Setting this value to true, makes the current column be selected by default when opening the data table. Sort Fixed Setting this value to true, disables changing the sort order for that column. Special Field Type It is used to identify that the current column is a special type of field, there are very limited options on this field and we usually do not need to use them. Read more at Reference #3. Editable Makes the field modifiable when we use Record Zoom Controls. Validate Input Validates the input when we use Record Zoom Controls. Filter Tags Used to set a filter using “POS Tags” on that column. POS Command Code Used to specify a Command which is to be executed when user clicks on this column. A good example of this is the “Quantity” column of main POS Screen which executes the “Change Quantity” command when clicked on it. Conclusion: Thus, we saw how to create our own Data Table and the different properties associated with a Data Table. Thanks for reading!
Share Story :
How to Modify Existing Report Layout in Business Central
Introduction: To modify the layouts you can remove the fields, tables, or change the position fields. There is an option to extend the Table and Page but to make changes in the existing report there is no extension yet but there is a way you can change the layout of the report. Steps to achieve the goal: Search for Report Layout selection. Select the Report ID which you want to modify. Go to Process ->Custom Layout. Make a copy of the layout file to do that select new action it will ask you to insert RDLC or WORD according to it will create a file. Then go to layout action in Custom Layout Page->Export layout. Make changes in that file again. Import new modified layout using Import layout action. Make sure to update the layout. Import layout will only import your file you need to update as well. And then go to the Report layout selection page choose the selected layout of the report to be Custom Layout and select your modified report file in the Custom layout description. You can test your new report by Reports-> Run Report. Conclusion: Thus we saw how we can change the layout of existing reports using Report Layout Selection. Thank you very much for reading my work. Hope you enjoyed the blog!
