Advertisement
Guest User

Untitled

a guest
Feb 20th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 8.64 KB | None | 0 0
  1. -- Объединение данных через MERGE для ОПст
  2. DECLARE @id_module_solvo INT = (SELECT id FROM dbo.vw_A_Module WHERE name = 'SOLVO'); -- ид модуля Solvo
  3. DECLARE @id_action_status_acceptance INT = (SELECT id FROM dbo.vw_A_Action_Status WHERE name = 'Приёмка') -- ид статуса ОПст - Приёмка
  4. DECLARE @id_action_status_waiting INT = (SELECT id FROM dbo.vw_A_Action_Status WHERE name = 'Ожидание') -- ид статуса ОПст - Ожидание
  5. DECLARE @wms_last_sync_date DATETIME = (SELECT SyncDT FROM dbo.tbr_A_WMS_Sync WHERE DataName = 'Incoming') -- дата последней синхронизации
  6. DECLARE @id_document_type_supplier_shipment INT = (SELECT id FROM dbo.vw_A_Document_Type WHERE code = 'ОПст') -- тип документа ОПст
  7. DECLARE @id_document_type_client_goods_return INT = (SELECT id FROM dbo.vw_A_Document_Type WHERE code = 'ВКл') -- тип документа ОПст
  8.  
  9. -- Общие
  10. DECLARE @id_owner INT = 0
  11.  
  12. -- Шапка документа
  13. DECLARE @priority INT = 1
  14. DECLARE @wms_status NVARCHAR(50) = ''
  15.  
  16. -- Строки документа
  17. DECLARE @quantity_fact INT = 0
  18. DECLARE @lot NVARCHAR(100) = '-'
  19. DECLARE @uom NVARCHAR(100) = '0'
  20. DECLARE @category INT = 1
  21. DECLARE @id_category INT = 0
  22.  
  23. SELECT DISTINCT
  24.   id_doc                    = dss.id,                              -- Ссылка на документ-основание(ОПст)
  25.   id_document_type          = @id_document_type_supplier_shipment, -- Ссылка на документ-основание (ОПСТ, ВКЛ)
  26.   doc_number                = dss.id_key_splitted,                 -- Номер документа (id_key_splitted)
  27.   id_acceptance_storage     = dss.id_acceptance_storage,           -- ID склада в системе ADTS
  28.   [priority]                = @priority,                           -- Приоритет приемки(пока = 1, не заполнять)
  29.   id_contractor             = dss.id_contractor,                   -- ID поставщика
  30.   id_contract               = dss.id_contractor_contract,          -- ID договора по которому осуществляется поставка
  31.   id_owner                  = @id_owner,                           -- Владелец товара. (пока = 0, не заполнять)
  32.   wms_status                = @wms_status,                         -- Статус документа из системы WMS
  33.   date_estimated_acceptance = dss.date_estimated_acceptance,       -- Планируемая дата приемки
  34.   last_update                 = dss.time_edit,                       -- Дата последнего обновления записи
  35.   note                      = dss.note,                            -- Комментарий документа
  36.   hash_key                  = HASHBYTES('SHA2_256',
  37.                                 CONCAT
  38.                                 (
  39.                                   RTRIM(LTRIM(COALESCE(dss.id_key_splitted, ''))), ';',
  40.                                   RTRIM(LTRIM(COALESCE(dss.id_acceptance_storage, ''))), ';',
  41.                                   RTRIM(LTRIM(COALESCE(@priority, ''))), ';',
  42.                                   RTRIM(LTRIM(COALESCE(dss.id_contractor, ''))), ';',
  43.                                   RTRIM(LTRIM(COALESCE(dss.date_estimated_acceptance, ''))), ';',
  44.                                   (
  45.                                     SELECT
  46.                                       CONCAT(HashData.ConcatenatedRowIds,';', HashData.ConcatenatedRowData)
  47.                                     FROM
  48.                                     (
  49.                                       SELECT
  50.                                         dssi.id,
  51.                                         STUFF
  52.                                         (
  53.                                           (
  54.                                             SELECT
  55.                                               ';' + CAST(dssei.id AS NVARCHAR(MAX))
  56.                                             FROM dbo.vw_D_Doc_Supplier_Shipment dssi
  57.                                               INNER JOIN dbo.vw_DE_Doc_Supplier_Shipment_Entry dssei ON dssei.id_doc_supplier_shipment = dssi.id
  58.                                             WHERE dssi.id = dss.id
  59.                                             ORDER BY dssei.id ASC -- Если убрать оба ORDER BY - запрос выполняется в 3 раза быстрее
  60.                                             FOR XML PATH ('')
  61.                                           ), 1, 1, ''
  62.                                         ) AS ConcatenatedRowIds,
  63.                                         STUFF
  64.                                         (
  65.                                           (
  66.                                             SELECT
  67.                                               ';' + CAST(dssei.id_goods_unit AS NVARCHAR(MAX)) +
  68.                                               ';' + CAST(1 AS NVARCHAR(MAX)) +
  69.                                               ';' + CAST(0 AS NVARCHAR(MAX)) +
  70.                                               ';' + '-' +
  71.                                               ';' + CAST(dssei.quantity AS NVARCHAR(MAX))
  72.                                             FROM dbo.vw_D_Doc_Supplier_Shipment dssi
  73.                                               INNER JOIN dbo.vw_DE_Doc_Supplier_Shipment_Entry dssei ON dssei.id_doc_supplier_shipment = dssi.id
  74.                                             WHERE dssi.id = dss.id
  75.                                             ORDER BY dssei.id ASC -- Если убрать оба ORDER BY - запрос выполняется в 3 раза быстрее
  76.                                             FOR XML PATH ('')
  77.                                           ), 1, 1, ''
  78.                                         ) AS ConcatenatedRowData
  79.                                       FROM dbo.vw_D_Doc_Supplier_Shipment dssi
  80.                                         INNER JOIN dbo.vw_DE_Doc_Supplier_Shipment_Entry dssei ON dssei.id_doc_supplier_shipment = dssi.id
  81.                                       WHERE dssi.id = dss.id
  82.                                       GROUP BY dssi.id
  83.                                     ) AS HashData
  84.                                   )
  85.                                 )
  86.                               )
  87. FROM dbo.vw_D_Doc_Supplier_Shipment dss
  88.   INNER JOIN dbo.vw_S_Abstract_Storage [as] ON dss.id_acceptance_storage = [as].id
  89.   LEFT  JOIN dbo.vw_S_Storage          s    ON s.id = [as].id_storage
  90.   LEFT  JOIN dbo.vw_S_Storage_Group    sg   ON sg.id = [as].id_storage_group
  91.   LEFT  JOIN dbo.vw_A_Module           m    ON m.id = s.id_module
  92.                                             OR m.id = sg.id_module
  93.   INNER JOIN (
  94.     SELECT
  95.       id_wms_incoming = dsse.id_doc_supplier_shipment, -- Ссылка на шапку
  96.       id_doc_entry    = dsse.id,                       -- ИД строки документа (например, из id таблицы vw_DE_Doc_Supplier_Shipment_Entry)
  97.       id_goods_unit   = dsse.id_goods_unit,            -- Ключ на справочника номенклатуры
  98.       category        = @category,                     -- Код категории груза в справочнике категорий грузов. Значение по умолчанию: 1 (Норма)
  99.       id_owner        = @id_owner,                     -- Владелец товара. (пока = 0, не заполнять)
  100.       id_category     = @id_category,                  -- Заполнять 0
  101.       lot             = @lot,                          -- Товарная партия или серия. Значение по умолчанию: “-”
  102.       quantity_plan   = dsse.quantity,                 -- Плановое количество к приемке
  103.       quantity_fact   = @quantity_fact,                -- Фактическое количество к приемке (заполняется после завершения приемки на стороне WMS)
  104.       uom             = @uom,                          -- 0 («Не задано»)
  105.       note            = ISNULL(dsse.note, '')          -- Комментарии к строке документа – «Примечание к товару». Значение по умолчанию: “” (пусто)    
  106.     FROM dbo.vw_DE_Doc_Supplier_Shipment_Entry dsse
  107.   ) AS sse ON sse.id_wms_incoming = dss.id
  108.  
  109. WHERE m.id = @id_module_solvo
  110.   AND (dss.id_action_status = @id_action_status_acceptance OR dss.id_action_status = @id_action_status_waiting)
  111.   AND dss.time_edit >= @wms_last_sync_date
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement