Blog

  • Understand dependency injection

    ASP.NET Core apps often need to access the same services across multiple components. For example, several components might need to access a service that fetches data from a database. ASP.NET Core uses a built-in dependency injection (DI) container to manage the services that an app uses.

    red hat certified system administrator rhcsa malaysia

    Dependency injection and Inversion of Control (IoC)

    The dependency injection pattern is a form of Inversion of Control (IoC). In the dependency injection pattern, a component receives its dependencies from external sources rather than creating them itself. This pattern decouples the code from the dependency, which makes code easier to test and maintain.

    Consider the following Program.cs file:

    C#

    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Http;
    using Microsoft.Extensions.DependencyInjection;
    using MyApp.Services;
    
    var builder = WebApplication.CreateBuilder(args);
        
    builder.Services.AddSingleton<PersonService>();
    var app = builder.Build();
    
    app.MapGet("/", 
        (PersonService personService) => 
        {
            return $"Hello, {personService.GetPersonName()}!";
        }
    );
        
    app.Run();
    

    And the following PersonService.cs file:

    C#

    namespace MyApp.Services;
    
    public class PersonService
    {
        public string GetPersonName()
        {
            return "John Doe";
        }
    }
    

    To understand the code, start with the highlighted app.MapGet code. This code maps HTTP GET requests for the root URL (/) to a delegate that returns a greeting message. The delegate’s signature defines an PersonService parameter named personService. When the app runs and a client requests the root URL, the code inside the delegate depends on the PersonService service to get some text to include in the greeting message.

    Where does the delegate get the PersonService service? It’s implicitly provided by the service container. The highlighted builder.Services.AddSingleton<PersonService>() line tells the service container to create a new instance of the PersonService class when the app starts, and to provide that instance to any component that needs it.

    Any component that needs the PersonService service can declare a parameter of type PersonService in its delegate signature. The service container will automatically provide an instance of the PersonService class when the component is created. The delegate doesn’t create the PersonService instance itself, it just uses the instance that the service container provides.

    agile project management certification training courses malaysia

    Interfaces and dependency injection

    To avoid dependencies on a specific service implementation, you can instead configure a service for a specific interface and then depend just on the interface. This approach gives you the flexibility to swap out the service implementation, which makes the code more testable and easier to maintain.

    Consider an interface for the PersonService class:

    C#

    public interface IPersonService
    {
        string GetPersonName();
    }
    

    This interface defines the single method, GetPersonName, that returns a string. This PersonService class implements the IPersonService interface:

    C#

    internal sealed class PersonService : IPersonService
    {
        public string GetPersonName()
        {
            return "John Doe";
        }
    }
    

    Instead of registering the PersonService class directly, you can register it as an implementation of the IPersonService interface:

    C#

    var builder = WebApplication.CreateBuilder(args);
        
    builder.Services.AddSingleton<IPersonService, PersonService>();
    var app = builder.Build();
    
    app.MapGet("/", 
        (IPersonService personService) => 
        {
            return $"Hello, {personService.GetPersonName()}!";
        }
    );
        
    app.Run();
    

    This example Program.cs differs from the previous example in two ways:

    • The PersonService instance is registered as an implementation of the IPersonService interface (as opposed to registering the PersonService class directly).
    • The delegate signature now expects an IPersonService parameter instead of a PersonService parameter.

    When the app runs and a client requests the root URL, the service container provides an instance of the PersonService class because it’s registered as the implementation of the IPersonService interface.

     Tip

    Think of IPersonService as a contract. It defines the methods and properties that an implementation must have. The delegate wants an instance of IPersonService. It doesn’t care at all about the underlying implementation, only that the instance has the methods and properties defined in the contract.

    Testing with dependency injection

    Using interfaces makes it easier to test components in isolation. You can create a mock implementation of the IPersonService interface for testing purposes. When you register the mock implementation in the test, the service container provides the mock implementation to the component being tested.

    For example, say that instead of returning a hard-coded string, the GetPersonName method in the PersonService class fetches the name from a database. To test the component that depends on the IPersonService interface, you can create a mock implementation of the IPersonService interface that returns a hard-coded string. The component being tested doesn’t know the difference between the real implementation and the mock implementation.

    Also suppose your app maps an API endpoint that returns a greeting message. The endpoint depends on the IPersonService interface to get the name of the person to greet. The code that registers the IPersonService service and maps the API endpoint might look like this:

    C#

    var builder = WebApplication.CreateBuilder(args);
    
    builder.Services.AddSingleton<IPersonService, PersonService>();
    
    var app = builder.Build();
    
    app.MapGet("/", (IPersonService personService) =>
    {
        return $"Hello, {personService.GetPersonName()}!";
    });
    
    app.Run();
    

    This is similar the previous example with IPersonService. The delegate expects an IPersonService parameter, which the service container provides. As mentioned earlier, assume that the PersonService that implements the interface fetches the name of the person to greet from a database.

    Now consider the following XUnit test that tests the same API endpoint:

     Tip

    Don’t worry if you’re not familiar with XUnit or Moq. Writing unit tests is outside the scope of this module. This example is just to illustrate how dependency injection can be used in testing.

    C#

    using Microsoft.AspNetCore.Mvc.Testing;
    using Microsoft.Extensions.DependencyInjection;
    using Moq;
    using MyWebApp;
    using System.Net;
    
    public class GreetingApiTests : IClassFixture<WebApplicationFactory<Program>>
    {
        private readonly WebApplicationFactory<Program> _factory;
    
        public GreetingApiTests(WebApplicationFactory<Program> factory)
        {
            _factory = factory;
        }
    
        [Fact]
        public async Task GetGreeting_ReturnsExpectedGreeting()
        {
            //Arrange
            var mockPersonService = new Mock<IPersonService>();
            mockPersonService.Setup(service => service.GetPersonName()).Returns("Jane Doe");
    
            var client = _factory.WithWebHostBuilder(builder =>
            {
                builder.ConfigureServices(services =>
                {
                    services.AddSingleton(mockPersonService.Object);
                });
            }).CreateClient();
    
            // Act
            var response = await client.GetAsync("/");
            var responseString = await response.Content.ReadAsStringAsync();
    
            // Assert
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
            Assert.Equal("Hello, Jane Doe!", responseString);
        }
    }
    

    The preceding test:

    • Creates a mock implementation of the IPersonService interface that returns a hard-coded string.
    • Registers the mock implementation with the service container.
    • Creates an HTTP client to make a request to the API endpoint.
    • Asserts that the response from the API endpoint is as expected.

    The test doesn’t care how the PersonService class gets the name of the person to greet. It only cares that the name is included in the greeting message. The test uses a mock implementation of the IPersonService interface to isolate the component being tested from the real implementation of the service.

    microsoft windows server certification training courses malaysia

  • Introduction

    When an ASP.NET Core app receives an HTTP request, it passes through a series of components that are responsible for processing the request and generating a response. These components are called middleware. ASP.NET Core includes a set of built-in middleware, and you can also create custom middleware to handle specialized requirements.

    java ee enterprise edition training courses malaysia

    Example scenario

    Suppose you’re an entry-level ASP.NET Core developer at a small company. Your team is building a new web app. The requirements include URL redirection, and real-time console output for monitoring purposes. Your team lead asked you to with implement the built-in middleware for URL redirection, and create a custom middleware component to log the request details.

    itil certification training courses malaysia

    What will we be doing?

    In this module, you use the .NET SDK to create a boilerplate ASP.NET Core web application. After ensuring it runs correctly, you’ll implement the built-in UrlRewriter middleware to rewrite URLs in the app. You’ll then create a custom middleware component to log request details to the console.

    What is the main goal?

    By the end of this module, you’ll be able to implement built-in and custom middleware in an ASP.NET Core app. You’ll also understand how middleware components work together to process HTTP requests and generate responses.

    istqb software testing certification training courses malaysia

  • Introduction

    The C# programming language allows you to build many types of applications, like:

    • Business applications to capture, analyze, and process data
    • Dynamic web applications that can be accessed from a web browser
    • Games, both 2D and 3D
    • Financial and scientific applications
    • Cloud-based applications
    • Mobile applications

    oracle certification malaysia

    But how do you begin to write an application?

    Applications are all made up of many lines of code that work together to achieve a task. By far, the best way to learn how to code is to write code. It’s encouraged that you write code along with the exercises in this module and the others in this learning path. Writing code yourself in each exercise and solving small coding challenges will accelerate your learning.

    nutanix certification malaysia

    You’ll also begin learning small foundational concepts and build on them with continual practice and exploration.

    In this module, you’ll:

    • Write your first lines of C# code.
    • Use two different techniques to print a message as output.
    • Diagnose errors when code is incorrect.
    • Identify different C# syntax elements like operators, classes, and methods.

    By the end of this module, you’ll be able to write C# code to print a message to the standard output of a console, like the Windows Terminal. These lines of code will give you your first look at the C# syntax, and immediately provide invaluable insights.

    microsoft certification malaysia

  • Introduction

    In this module, you create your first ASP.NET Core web app with .NET and C#.

    Example scenario

    You’re just getting started with ASP.NET Core. You want to understand how to quickly build your first web app and get familiar with the structure of a basic project. You want to understand how to run and serve a minimal web app on your local machine to view it in a browser.

    visual studio net training courses malaysia

    What will we be doing?

    In this module, you:

    • Review ASP.NET Core default project templates available in the .NET SDK.
    • Create an ASP.NET Core web app project from a template.
    • Examine the structure of the created project.
    • Run your web app locally and view it in a browser.
    • Review how the web app is served.
    • Make code changes during local development.

    At the end of this module, there are links to content providing deeper dives for ASP.NET Core web application development.

    microsoft system center certification training courses malaysia

    Required tools

    This module uses Visual Studio Code with the C# Dev Kit extension to demonstrate creating and running an ASP.NET Core web app.

    The following tools are required:

    • The latest version of .NET SDK installed from the .NET website
    • The latest versions of Visual Studio Code with C# Dev Kit extension installed.

    microsoft sql server certification training courses malaysia

  • Summary

    In this module, you learned that Blazor is a modern full stack web UI framework based on HTML, CSS, and C#. You learned that Blazor apps are made up of components that can run from the server or client. You also learned some criteria to help decide whether to choose Blazor for your next web app project.

    cisco certification malaysia

    Are you ready to build your first Blazor web app? Continue on to the next module to get started.

    checkpoint certification malaysia

    Also, check out the following resources to learn more about Blazor.

    References

    • Blazor home page
    • Blazor docs
    • Blazor customer showcase

    aws certification malaysia

  • Checking Availability and Missing Parts

    Types of Availability Check

    There are two types of availability check.

    • Static availability check:Availability check of the stock types in inventory management 
    • Dynamic availability check:Check of available stocks from the viewpoint of material requirements planning

    Availability Check of the Stock Types (Static Availability Check)

    For every material movement, the system automatically performs an availability check of the stock types. This availability check prevents the book inventory balance of the various physical stock types (for example, unrestricted-use stock) from becoming negative. With this type of availability check, only the stocks available at the time of entry are taken into account. This check is carried out automatically, and no settings can be made for it in the system.

    The static availability check covers the relevant stock affected at plant, storage location, and special stock level. The stocks affected are determined via the movement type. Nonavailability leads to an error message.

    For example, you enter a transfer posting for a material with movement type 321, transferring 20 pieces from stock in quality inspection to unrestricted-use stock. The system then checks whether 20 pieces of the material actually exist in stock in quality inspection at the specified plant and storage location.

    infrastructure services

    Check of available stocks from the viewpoint of material requirements planning (Dynamic Availability Check)

    In addition to checking the stocks that physically exist in the warehouse, available stock can also be checked from the viewpoint of Material Requirements Planning. With the dynamic availability check, planned receipts and issues can also be taken into account. This check enables you to prevent an already reserved quantity from being withdrawn or reserved for another purpose, for example.

    For example, today there are 100 pieces of a material in unrestricted-use stock in the warehouse. Thirty pieces of the material are reserved for withdrawal tomorrow, and another 20 pieces are reserved for withdrawal the day after. Consequently, only 50 pieces of the material are available today, because the rest have already been reserved for other purposes. If you tried withdrawing 60 pieces today, the system would display a warning or error message, depending on the configuration.

    This type of availability check is used in several applications, for example, in:

    • Inventory Management when creating a reservation or entering a goods issue
    • Sales and Distribution when creating a sales order
    • Production when creating a production order
    • Purchasing when creating a stock transport order

    Settings for Dynamic Availability Check in Inventory Management

    You maintain the settings for the availability check in Customizing as follows:

    • For goods movements:Go to Customizing for Materials Management under Inventory Management and Physical InventoryGoods Issue/Transfer PostingsConfigure Scope of Availability Check (OMCP); or under Inventory Management and Physical InventoryGoods ReceiptSet Dynamic Availability Check (OMCM).
    • For reservations:Go to Customizing for Materials Management under Inventory Management and Physical InventoryReservationConfigure Scope of Availability Check (OMB1).

    Specification of the Checking Rule in Detail – Scope of Availability Check


    Normally, the replenishment lead time (RLT = purchasing processing time + planned delivery time + GR processing time) is taken into account in the availability check. If, for example, there is not sufficient stock for a requirement in four weeks, but the RLT is only two weeks, no message due to unavailability is issued.

    If you do not want the RLT to be taken into account in the availability check, you can adjust the settings for the Check Horizon (corresponds to the RLT).

    If the RLT is not to be taken into account, that is, a message is always issued in case of unavailability, regardless of the RLT, then select the entry Ignore Check Horizon for the Result After Check Horizon field

    If the RLT is to be taken into account in the availability check, select the entry Full Confirmation for the Result After Check Horizon field

    hrms

    Missing Parts Check

    A missing part is a stock of material that is already assigned to a GI at the time of GR and represents a requirement that could not be covered from existing stock because of a shortage of material or requirement undercoverage.

    Often, a missing part bypasses the warehouse and, upon receipt, is directly forwarded to the location where it is needed. However, this is only possible if the person entering the goods receipt and the responsible materials planner are both informed of this missing part situation.

    You can use the missing parts check to ensure that the warehouse clerk and the materials planner are automatically informed in case of such a shortage of requirements when a goods receipt is entered.

    The missing parts check builds upon the dynamic availability check. The same elements, checking group, checking rule, and availability check control are used for both.

    You can specify the settings for the missing parts check in Customizing for Materials Management under Inventory Management and Physical InventoryGoods ReceiptSet Missing Parts Check (OMBC).

    The following settings must be made in Customizing:

    • Activate missing parts check per plant.For a specific plant, you can specify whether the missing part message is to be output in a summarized or nonsummarized form.​
      • In nonsummarized missing part messages, a separate e-mail with a maximum of five MRP elements is sent per missing part material.
      • In summarized missing part messages, a list of missing part materials without specification of MRP elements is generated per MRP controller, material document, and plant.
    • Define a checking rule.
    • Specify the details for controlling the availability check.To use the missing parts check in the future for uncovered requirements, you must enter a checking horizon for the missing parts check. The checking horizon indicates the number of days in the future for which the system checks whether shortfall quantities exist for the material. If you do not specify a checking horizon, only past uncovered requirements are taken into account during the check.
    • Assignment of checking rule.At transaction level, the missing parts check uses the same checking rules as the availability check. However, you can maintain various checking rules at movement type level. The checking rule of the movement type takes precedence over that of the transaction. Note that an entry for the movement type without an entry for the transaction has no effect.
    • Specification of the mail recipient (e-mail user).If a user ID is assigned to the materials planner, the system sends the missing part message to the materials planner (MRP controller) responsible for the material.
    • Specification of missing part expediter.
    • If no user ID is assigned to the responsible materials planner, the message is sent to the central missing part expediter responsible for the plant. This person is defined per plant.

    financial

  • Summary

    In this module, you learned the basics of Razor Pages. You learned how to create a Razor Page, add a model, and add a page handler. You also learned how to use tag helpers to bind HTML elements to model properties and to generate URLs. Additionally, you learned how to use dependency injection to inject a service into a Razor Page.

    dynamics 365 training courses malaysia

    Next steps

    Take a deeper dive into the documentation. The following ASP.NET Core features and concepts were introduced in this module:

    • Razor Pages
    • Razor syntax reference
    • Tag Helpers
    • Partial views
    • Layout
    • Routing
    • Dependency injection
    • Make HTTP requests using a typed client pattern

    dynamics 365 supply chain training courses malaysia

    Learn more with a .NET video series

    • .NET for Beginners
    • ASP.NET Core for Beginners

    dynamics 365 sales training courses malaysia

  • Setting Up Date Checks to Goods Receipt for Purchase Order

    Shelf Life Expiration Date Check

    When you receive goods from a supplier, the system may check the minimum shelf life of the goods during the goods receipt. You can therefore ensure that goods are only placed in storage if their shelf life corresponds with your requirements.

    crm

    Checking the Minimum Shelf Life (with Total Shelf Life)

    For materials without a batch management requirement, you can enter and check the minimum SLED for only the GR. You can also print the minimum SLED on the GR and goods issue (GI) slip.

    cyber security

    For materials with a batch management requirement, it is possible to use the SLED in batch determination for GIs and analyses for batches.

    data analytics

    Too Early or Too Late Delivery

    For each purchase order item, Purchasing specifies a delivery date. The system may check during the GR posting whether the goods are delivered too early or late.

    digital transformation

    To check whether the delivery is made before the planned delivery date, you must set message number 254 (work area M7) as the warning or error message in Customizing.

    erp

    Define the attributes of system messages in Customizing for Materials Management under Inventory Management and Physical InventoryDefine Attributes of System Messages (OMCQ).

    feature

    If the GR date lies before the planned delivery date in the PO, the system then issues the message Earliest delivery date is … according to your settings.

    financial

    If you have set the message 254 as an error message, you can still post prematurely delivered goods to non-valuated or valuated GR blocked stock. If the delivery date is achieved, you can release the GR blocked stock. The check for premature delivery may be useful if your storage capacity is limited.

    hrms

  • Understand when and why to use Razor Pages

    In this unit, you’ll learn when and why to use Razor Pages for your ASP.NET Core app.

    lean six sigma certification training courses malaysia

    The benefits of Razor Pages

    Razor Pages is a server-side, page-centric programming model for building web UIs with ASP.NET Core. Benefits include:

    • Easy setup for dynamic web apps using HTML, CSS, and C#.
    • Organized files by feature for easier maintenance.
    • Combines markup with server-side C# code using Razor syntax.

    Razor Pages utilize Razor for embedding server-based code into webpages. Razor syntax combines HTML and C# to define the dynamic rendering logic. This means you can use C# variables and methods within your HTML markup to generate dynamic web content on the server at runtime. It’s important to understand that Razor Pages are not a replacement for HTML, CSS, or JavaScript, but rather combines these technologies to create dynamic web content.

    application services

    Separation of concerns

    Razor Pages enforces separation of concerns with a C# PageModel class, encapsulating data properties and logic operations scoped to its Razor page, and defining page handlers for HTTP requests. The PageModel class is a partial class that is automatically generated by the ASP.NET Core project template. The PageModel class is located in the Pages folder and is named after the Razor page. For example, the PageModel class for the Index.cshtml Razor page is named IndexModel.cs.

    crm

    When to use Razor Pages

    Use Razor Pages in your ASP.NET Core app when you:

    • Want to generate dynamic web UI.
    • Prefer a page-focused approach.
    • Want to reduce duplication with partial views.

    cyber security

    Razor Pages simplifies ASP.NET Core page organization by keeping related pages and their logic together in their own namespace and directory.

    data analytics

     Note

    ASP.NET Core also supports the Model-View-Controller (MVC) pattern for building web apps. Use MVC when you prefer a clear separation between Model, View, and Controller. Both Razor Pages and MVC can coexist within the same app. MVC is outside the scope of this module.

    In the next unit, you’ll take a tour of a Razor Pages app.

    digital transformation

  • Posting a Goods Receipt Without Reference

    Other Goods Receipt

    If you enter a goods receipt without reference to another document, it is known as an other goods receipt. Such goods receipts belong to unplanned goods movements because no information on the material, quantity, delivery date, receiving plant, or origin is stored in the system prior to the actual posting.

    red hat linux certification malaysia

    Other goods receipts are depicted using various movement types. This is done for the following reasons:

    • The movement type controls quantity and value updating.
    • The movement type can influence the account determination for the offsetting entry to the stock posting.
    • The movement type influences field selection.
    • The movement type influences message determination.

    red hat linux administration training courses malaysia

    Initial Entry of Stock Balances

    You must carry out an initial entry of stock balances when implementing the SAP system in order to transfer physical warehouse stocks or book inventories from an existing system into the SAP system as book inventories. No physical material movement occurs during this process. The initial entry of stock balances can be carried out for the following three stock types:

    • Unrestricted-use stock (movement type 561)
    • Stock in quality inspection (movement type 563)
    • Blocked stock (movement type 565)

    The quantity recorded is posted to the selected stock type and increases the total valuated stock of the material.

    red hat enterprise linux rhel training courses malaysia

    The movement types can also be used together with all special stock indicators. This means that the initial entry of stock balances can be done for consignment stock with vendors and customers, for example, or the project and sales order stock.

    red hat certified specialist in server hardening malaysia

    The valuation of the stocks to be recorded depends on the following factors:

    • The data in the material master record (valuation class, price control, and current valuation price)
    • Whether you enter a value for the quantity to be recorded in the initial entry of stock balances (External Amount in Local Currency field in the item details on the Quantity tab page)

    If no external amount is specified in local currency in the initial entry of stock balances, the quantity to be recorded is valuated based on the valuation price from the material master record (that is, at the moving average price (MAP) or standard price).

    red hat certified specialist in linux performance tuning malaysia

    If an external amount is entered,  the quantity to be recorded is valuated at this amount. In this case, if the material involved is valuated at moving average price, the latter is then adjusted accordingly.

    veeam certification malaysia

    The offsetting posting to the stock posting is made to a special account for the initial entry of stock balances.

    red hat certification malaysia

    Goods Receipt Without a Purchase Order or a Production Order

    If you receive an external receipt of goods without having previously created a corresponding purchase order in the SAP system, you must enter it as an other goods receipt. The same scenario also applies to an internal receipt from production for which no production order has been previously created. The lack of preceding documents for external or internal procurement may be because the relevant application area has not been implemented.

    oracle certification malaysia

    For these goods receipts, you can also decide in which of the following stock type the goods receipt takes place:

    • Unrestricted-use stock (without purchase order: movement type 501, without production order: movement type 521)
    • Stock in quality inspection (without purchase order: movement type 503, without production order: movement type 523)
    • Blocked stock (without purchase order: movement type 505, without production order: movement type 525)

    nutanix certification malaysia

    Free-of-Charge Delivery

    If you receive a free-of-charge delivery from a vendor without a previously issued purchase order, you post the delivery as an Other Goods Receipt. The standard movement type for the free-of-charge delivery is 511. The Vendor and Text fields are required fields for this movement type.

    microsoft certification malaysia

    For the valuation of materials delivered free of charge, note which price controls is defined in the material master record:

    • If the material is valuated at moving average price, the stock figure is updated on a quantity basis only and not on a value basis. Therefore, the total stock quantity increases but the total value of the stock remains unchanged, resulting in a reduction in the moving average price.
    • If the material is valuated at the standard price, the stock figure is updated on a quantity and a value bases. The receipt is valuated based on the standard price. The offsetting posting to the stock account is made to a revenue account for price differences.

    juniper certification malaysia

    Functions for Entering Other Goods Receipts

    Various functions in SAP S/4HANA are available to you for entering other GRs.

    • SAP Fiori app Post Goods Movements respectively transaction MIGO
    • SAP Fiori app Manage Stock (Initial entry of stock balances only)
    • SAP Fiori app Post Goods Receipt without Reference (without purchase order only)

    istqb certification malaysia

    SAP Fiori App Post Goods Movement and Transaction MIGO

    You can enter all Other GRs using the Post Goods Movement app or the MIGO transaction. To do this, proceed as follows:

    1. Start the Post Goods Movement app (or the MIGO transaction).
    2. Choose Goods Receipt as transaction and Other as reference.
    3. Check the default value for the movement type and change it if necessary to the correct MvT. Confirm the change of the default value with enter.
    4. Enter material number, quantity, storage location, and plant for the items to be entered.
    5. Post the document.

    database training courses malaysia

    SAP Fiori App Manage Stock

    The Manage Stock app can be used to enter an initial entry of stock balances for Standard Stock and for the special stock types Project Stock (Q) and Supplier Consignment (K).

    kubernetes containarization training courses malaysia

    In addition, it is possible to first collect several initial entries of stock balances to be posted in an item list, for example, for one material, initial entries of stock balances in the different stock types, or initial entries of stock balances for different materials. Once all items are collected, the goods movements can be posted in one step. The result is a material document with all posted items.

    cloud computing training courses malaysia

    SAP Fiori App Post Goods Receipt without Reference

    To post a goods receipt without purchase order (movement types 501, 503, 505) you can use the Post Goods Receipt without Reference app. The app is part of the Business Role Warehouse Clerk (SAP_BR_WAREHOUSE_CLERK).

    ai artificial intelligence training courses malaysia

    Similar to the MIGO transaction, you have to enter the material, quantity, plant, storage location, and stock type manually. However, the entry of the movement type is not explicitly required. The movement type is determined by the app and the choice of stock type. In the app, the special stocks Orders on Hand (E), Supplier Consignment (K) and Project Stock (Q) are allowed.

    lean it certification training courses malaysia