Developing a Dropshipping Schema with Suppliers on 1C-Bitrix

Our company is engaged in the development, support and maintenance of Bitrix and Bitrix24 solutions of any complexity. From simple one-page sites to complex online stores, CRM systems with 1C and telephony integration. The experience of developers is confirmed by certificates from the vendor.
Showing 1 of 1All 1626 services
Developing a Dropshipping Schema with Suppliers on 1C-Bitrix
Medium
~1-2 weeks
Frequently Asked Questions

Our competencies:

Development stages

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1356
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Website development for FIXPER company
    943
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    693
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    828
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    731
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    1073

Developing a Dropshipping Schema with Suppliers on 1C-Bitrix

When processing orders manually with 10 suppliers, up to 15% errors occur — lost orders, duplicates, incorrect stock levels. Scaling to 50 suppliers makes the process unmanageable. We have designed over 30 dropshipping schemas on 1C-Bitrix that process up to 5,000 orders per day without manual intervention. The key challenges are real-time stock synchronization and correct routing with multiple suppliers. Off-the-shelf modules cannot handle these tasks. A poorly designed schema breaks when adding a second supplier or when volume exceeds 100 orders per day. Our experience: 7+ years in Bitrix development and 30+ projects. We guarantee correct routing and timely stock syncing. Contact us for a free assessment of your project — we will analyze your current infrastructure and prepare a solution.

Why Standard Modules Are Not Suitable for Dropshipping?

Ready-made modules often offer simple supplier substitution but ignore complex routing, multiple stock sources, and rejection automation. We have to design a custom data model and handlers adaptable to any supplier.

Data Model for Linking Products and Suppliers

The central question: how to link a product to a supplier and store data for order routing.

The product information block (b_iblock_element, b_iblock_element_property) stores retail data: name, description, images, properties. We leave that untouched.

HL-block Supplier — supplier directory:

b_uts_supplier (auto-generated table of the HL-block)

  • ID
  • UF_NAME — supplier name
  • UF_EMAIL — email for notifications
  • UF_WEBHOOK_URL — URL for POST notifications
  • UF_API_KEY — API key for supplier access
  • UF_FEED_URL — URL of the stock feed (XML/CSV/JSON)
  • UF_FEED_FORMAT — feed format
  • UF_LEAD_TIME — order processing time (days)
  • UF_ACTIVE — active flag

HL-block SupplierProduct — link between products and suppliers:

b_uts_supplier_product

  • ID
  • UF_PRODUCT_ID — ID of the info-block element (b_iblock_element.ID)
  • UF_SUPPLIER_ID — ID of the supplier (b_uts_supplier.ID)
  • UF_SUPPLIER_SKU — supplier's SKU
  • UF_PURCHASE_PRICE — purchase price
  • UF_CURRENCY — purchase currency
  • UF_STORE_ID — supplier's warehouse (b_catalog_store.ID)
  • UF_MIN_QUANTITY — minimum order quantity
  • UF_IS_PRIMARY — primary supplier (if multiple)

Warehouses (b_catalog_store) — one per supplier. Stock in b_catalog_store_product. This is the standard Bitrix mechanism, no need to reinvent the wheel.

How to Design Order Routing?

The router's task: when an order is created, split the cart, group items by supplier, and transmit each part to the respective supplier. The complication: one product may have multiple suppliers. We need selection logic: by price, availability, priority. We implement this via UF_IS_PRIMARY combined with current stock check.

namespace Local\Dropshipping;

use Bitrix\Highloadblock\HighloadBlockTable;
use Bitrix\Main\Application;

class SupplierResolver
{
    /**
     * Returns the best supplier for a product:
     * first the primary supplier with stock > 0, otherwise any with stock
     */
    public static function resolve(int $productId, int $quantity): ?array
    {
        $conn = Application::getConnection();

        // Find suppliers with sufficient stock
        $result = $conn->query("
            SELECT sp.UF_SUPPLIER_ID, sp.UF_SUPPLIER_SKU, sp.UF_PURCHASE_PRICE,
                   sp.UF_IS_PRIMARY, csp.AMOUNT
            FROM b_uts_supplier_product sp
            JOIN b_catalog_store_product csp
                ON csp.PRODUCT_ID = sp.UF_PRODUCT_ID
                AND csp.STORE_ID  = sp.UF_STORE_ID
            WHERE sp.UF_PRODUCT_ID = {$productId}
              AND csp.AMOUNT       >= {$quantity}
            ORDER BY sp.UF_IS_PRIMARY DESC, sp.UF_PURCHASE_PRICE ASC
            LIMIT 1
        ");

        return $result->fetch() ?: null;
    }
}

Transmitting the Order to the Supplier

Three transmission channels, in order of preference:

  1. Webhook (REST API of the supplier) — the best option. We POST a JSON with order data to the supplier's URL, and they respond with confirmation:
private static function sendWebhook(string $url, string $apiKey, array $payload): bool
{
    $http = new \Bitrix\Main\Web\HttpClient();
    $http->setHeader('Content-Type', 'application/json');
    $http->setHeader('Authorization', 'Bearer ' . $apiKey);
    $http->setTimeout(10);

    $response = $http->post($url, json_encode($payload));
    $status   = $http->getStatus();

    \Bitrix\Main\Diag\Debug::writeToFile(
        ['url' => $url, 'status' => $status, 'response' => $response],
        'Dropshipping webhook',
        '/local/logs/dropshipping.log'
    );

    return $status === 200;
}
  1. Email with an HTML table — when the supplier has no API. Email template via CEvent::Send, event DROPSHIPPING_ORDER_NEW. Table of line items, delivery address, transfer amount.

  2. File exchange via FTP/SFTP — for suppliers working with 1C. We generate XML in CommerceML format and place it on the supplier's FTP. They pick it up on schedule.

Stock Synchronization

Stock becomes outdated quickly — the main challenge of any dropshipping schema. Three strategies:

Strategy Description Latency Supplier Requirements
Push from supplier Webhook when stock changes Minutes API with callback
Pull on schedule Agent downloads feed every N minutes 15-30 min Feed (XML/CSV/JSON)
Reservation Reduce stock at order creation Instant None
  • Push from supplier — the supplier notifies us via webhook on stock change. We implement an endpoint with API key validation.
  • Pull on schedule — a Bitrix agent downloads the supplier's feed every 30 minutes and updates stock. Feeds come in XML (1C format), CSV, JSON.
  • Reservation — if pull is impossible, we decrease stock in b_catalog_store_product after order creation. Not precise but better than nothing.

Margin Calculation

Purchase price is stored in UF_PURCHASE_PRICE of the HL-block. Retail price is in b_catalog_price. The difference is the margin. A margin report can be queried directly from the database:

SELECT
    be.NAME                                         AS product_name,
    cp.PRICE                                        AS retail_price,
    sp.UF_PURCHASE_PRICE                            AS purchase_price,
    cp.PRICE - sp.UF_PURCHASE_PRICE                 AS margin_abs,
    ROUND((cp.PRICE - sp.UF_PURCHASE_PRICE)
          / cp.PRICE * 100, 1)                      AS margin_pct
FROM b_iblock_element be
JOIN b_catalog_price cp     ON cp.PRODUCT_ID = be.ID AND cp.CATALOG_GROUP_ID = 1
JOIN b_uts_supplier_product sp ON sp.UF_PRODUCT_ID = be.ID AND sp.UF_IS_PRIMARY = 1
WHERE be.IBLOCK_ID = :catalog_iblock_id
  AND be.ACTIVE   = 'Y'
ORDER BY margin_pct ASC;

How Are Supplier Rejections Handled?

A supplier may reject an order (out of stock, address error). We need a status HL-block for tracking:

b_uts_supplier_order

  • UF_ORDER_ID — Bitrix order ID (b_sale_order.ID)
  • UF_SUPPLIER_ID — supplier ID
  • UF_STATUS — pending / confirmed / rejected / shipped / delivered
  • UF_SUPPLIER_ORDER — order number at the supplier
  • UF_TRACKING — tracking number
  • UF_REJECT_REASON — rejection reason
  • UF_DATE_UPDATE — last update date

On status rejected, an agent notifies the manager and, if an alternative supplier for the same product exists, automatically redirects the order.

Step-by-Step Setup of Dropshipping

How to implement the schema in 5 steps (expand)
  1. Audit — analyze the current catalog, integrations, number of suppliers, and order volume (average 500-1000 orders per day).
  2. Model design — create HL-blocks Supplier and SupplierProduct, set up warehouses for each supplier.
  3. Router development — write the logic for selecting a supplier by priority and stock.
  4. Transmission channel integration — webhooks, email, or FTP depending on supplier capabilities.
  5. Testing and launch — load test with 1000+ orders, monitor for a week.

Timelines

Configuration Components Duration
Single supplier, email notifications HL-blocks + handler + template 1–2 weeks
Multiple suppliers, webhooks + router + sync API 3–4 weeks
Full schema with feeds, cabinet, and analytics + pull feeds + supplier portal + margin report 6–8 weeks

What Is Included in the Result

  • Data model (HL-blocks Supplier and SupplierProduct) with fields tailored to your suppliers.
  • Order router supporting N suppliers with priority-based selection.
  • Integration with suppliers: webhooks, email, or FTP — individually for each.
  • Near-real-time stock synchronization.
  • Rejection handling with automatic redirection to an alternative supplier.
  • Architecture documentation and an operations manual.
  • Manager training (2 hours) and technical support for 30 days.

Contact us for a free assessment of your task. We will analyze the number of suppliers, order volumes, and existing infrastructure. Order the development of a turnkey dropshipping schema — get a reliable solution that won't break as your business grows.

Dropshipping setup on 1C-Bitrix: Online store without a warehouse

The main technical challenge of a dropshipping store is not the showcase, but stock synchronization. A customer places an order, and the product ran out at the supplier 10 minutes ago — and you get a return, negative review, and a black mark on the marketplace. We build dropshipping stores on 1C-Bitrix with full chain automation: catalog parsing, stock synchronization every 5–15 minutes, automatic order transfer to supplier, tracking in the personal account. Dropshipping setup services on 1C-Bitrix cover the full cycle: from first contact with the supplier to SEO optimization of the storefront. With over 8 years of e‑commerce development on Bitrix and 50+ dropshipping projects delivered, we know each pitfall.

Why does 1C-Bitrix outperform custom solutions for dropshipping?

The platform offers ready-made e-commerce tools: the 'Online Store' module, cart, payment processors, personal account — all out of the box. No need to assemble a store from plugins. Exchange via CommerceML with suppliers on 1C can be set up in a couple of days: export catalog.xml + offers.xml → automatic import.

Multi-supplier supports one product from three suppliers with different prices. Bitrix via price types (b_catalog_group) and multi-warehouse (b_catalog_store) allows managing everything in one storefront and using the best offer. SEO block: bitrix:catalog.seo.filter for indexable filters, meta-tag templates with infoblock property substitution, auto-generation of human-readable URLs. Scalability — from 100 to 500,000+ products. With proper faceted index setup (b_catalog_iblock_index), a catalog of half a million SKUs works without degradation.

Architecture: Catalog Import

Suppliers provide data in various ways — each requires a specific approach:

  • YML/XML feeds (Yandex.Market format) — the most common. We parse using XMLReader (not SimpleXML — on large 500 MB feeds it consumes all memory)
  • CSV/Excel — field mapping via config, validation, handling of messy encodings (yes, suppliers still send CSV in Windows-1251)
  • Supplier API — direct real-time access to the catalog, the most reliable option
  • CommerceML — standard exchange format with 1C
Format Performance Data Reliability Setup Time
YML/XML Average (depends on volume) Average (needs parser) 1–2 days
CSV/Excel Low (validation required) Low (encoding errors, type issues) 2–3 days
API High (real-time) High 3–5 days
CommerceML High (incremental) High 1–2 days

Our importer handles the routine:

  • Scheduled loading via Bitrix agent (CAgent::AddAgent) — every 15–60 minutes, configurable per supplier
  • Supplier category mapping → catalog infoblock sections. No manual dragging — rules are set once
  • Image download and optimization: resize via CFile::ResizeImageGet, compression, conversion to WebP
  • Incremental price and stock updates — without recreating infoblock elements. We only update changed fields via CIBlockElement::SetPropertyValues and CCatalogProduct::Update
  • Unique description generation — paraphrasing or AI services
  • Markup by rules: percentage, fixed, separate by catalog sections

Without deduplication, product duplicates appear — we solve by mapping by SKU or EAN. If alerts for feed failures are not set up, the store sells non-existent products — we configure notifications to the manager via email and Telegram.

How to set up stock synchronization without losses?

In dropshipping, you don't control the warehouse. Discrepancy between feed and actual stock leads to direct losses — up to 30% of orders may fail. We set up synchronization every 5–60 minutes (depends on supplier API/feed). Auto-hide products with zero stock — CIBlockElement::Update(['ACTIVE' => 'N']). No 'empty' cards in catalog.section. Alerts to the manager for mass discrepancies — if suddenly 30% of the catalog zeros out, it's likely a feed failure, not a real sale. Multi-supplier: one product from multiple sources — via different warehouses in b_catalog_store. The system substitutes the offer with availability and best price, achieving 99.8% sync accuracy.

Order Processing and Logistics

Automatic order transfer to supplier — no manual copying. Send via API, email (template from b_event_message) or upload to supplier's personal account. Distribution of items between suppliers — if sale.basket has products from different sources, the order is split into shipments. Get tracking number → write to order property → notify customer via \Bitrix\Sale\Notify. Partial availability handling: product available from one supplier, not from another — automatic order splitting. This reduces manual order processing time by 75% and cuts returns by 40%.

Delivery in dropshipping is the supplier's zone, but the customer sees your brand. Delivery times include processing time at the supplier — not just the shipping company's time. Tracking in personal account via API of CDEK, Boxberry, Russian Post. Combining shipments from multiple suppliers (if an intermediate warehouse exists). Returns — coordination between customer and supplier via a unified admin interface. Branded packaging by agreement.

Pricing and Multi-Supplier

Markup is where margin is built. Percentage: 30% markup on purchase price for the entire catalog. Tiered: for low-cost items up to a threshold → 50%, medium-cost → 30%, high-cost → 20%. On cheap items, absolute margin is minimal — a high percentage is needed. By category: electronics 15%, accessories 60%. Each niche has its own rules. Psychological rounding — e.g., rounding to a psychological price point via custom markup rule. Competitor monitoring — price parsing and auto-adjustment. RRP — recommended retail price from supplier as upper limit.

Multi-supplier expands assortment and provides insurance. Combining catalogs into a single infoblock section structure. Deduplication — by SKU (PROPERTY_ARTICLE) or EAN. One product = one infoblock element, multiple offers in b_catalog_store. Automatic supplier selection: availability → price → delivery speed. Separate accounting: purchase prices in a separate price type (PURCHASE), order history, statistics. Panel with reliability rating — who misses deadlines, who has stock discrepancies.

Content Uniqueness and SEO

Dozens of stores copy descriptions from supplier feeds — and lose in SEO. Unique descriptions for top categories that drive the main traffic. The rest — template generation from properties. Meta-tags by template: title and description via infoblock SEO settings: {=this.Name} buy in Minsk | {=parent.Name} — price from {=this.catalog.price.BASE} rub.. UGC — reviews (iblock.vote), Q&A, customer photos. Live content works better than copywriting. SEO filters — bitrix:catalog.seo.filter creates indexable intersection pages: 'red Nike sneakers size 42' with unique meta-tags.

Legal Aspects

Commission or agency agreement with supplier — legal foundation. Integration with fiscal data operator under 54-FZ — receipt fiscalization via sale.cashbox. Warranty: you are responsible to the customer regardless of the shipper. Setup of business processes (Bizproc) for return automation.

How We Launch a Project: Step-by-Step Scheme

  1. Supplier Audit — collect feed specifications, APIs, agree on mapping.
  2. Import Setup — write parser, validation, sync agents.
  3. Store Setup — design, payment gateways, shipping services.
  4. Order Automation — integration of order transfer, tracking, returns.
  5. SEO and Uniqueness — meta-tags, descriptions, filters.
  6. Testing — test scenarios, load tests.
  7. Deploy and Monitoring — launch, alerts, documentation.

What's Included

  • Full documentation: integration settings, import parameters, API keys.
  • Access transfer: admin panel, hosting, API.
  • Team training: working with import, order management, reports.
  • Post-launch support: 2 weeks unlimited consultations, then by SLA.
Common pitfalls we eliminate
  • Feed encoding failures: Supplier sends CSV in Windows-1251 without BOM → import breaks. We add automatic encoding detection and conversion to UTF-8.
  • Duplicate products: Two suppliers sell the same item under different SKUs. We merge by EAN or a custom match rule.
  • Stock glitches: A supplier's API returns zero stock incorrectly. We apply sanity checks (if 80% of catalog zeros out → trigger an alert, don't hide products).
  • Order splitting: When only part of an order is available, we handle partial fulfillment automatically and notify the customer.

Timeline and Stages

Stage Timeline
Connecting 1 supplier (catalog import) 3–5 days
Store setup (design, payment, shipping) 1–2 weeks
Order automation 3–5 days
SEO setup and uniqueness 1–2 weeks
MVP launch 3–4 weeks
Connecting additional suppliers 2–3 days each

We launch dropshipping stores with minimal investment and help scale — from one supplier to dozens, from a hundred SKUs to hundreds of thousands. Get a consultation — contact us, we will assess the task and offer an optimal turnkey solution. Request a dropshipping audit and we'll design your architecture.