О системах планирования ресурсов предприятия Scala, iScala
“ С внедрением процедуры отслеживания маркировки товара иногда процесс занимает некоторое время, за которое период успевают закрыть и проводка по перемещению, которую пользователь должен утвердить в мониторе задач, не может быть сделана датой, попадающей в закрытый период. Было решено изменять дату на сегодняшнюю. Но если это делать "вручную" в мониторе задач, то это сумасшедшая работа, ведь проводка по перемещению может содержать десятки, а то и сотни строк. Договорились, что это должно делаться автоматически. Но, интересный вопрос: на какую дату поменять понятно, а какую исходную дату нужно изменить? Иными словами "Как заменить то, не знаю что, на то, что надо?" :)
  • Главная
    • О проекте
      • Разъяснение о проекте и его участниках
      • Заявление / Memorandum
    • Новости проекта
    • Список опубликованных материалов основного раздела
    • Информация, перенесённая из старых форумов
    • Подписаться на новостную рассылку
  • Статьи
    • Статьи
    • Избранное
    • Мысли вслух
  • Процедуры
  • Доходчиво о сложном
    • Обучение
    • Как сделать?
    • iScala «для чайников»
    • Оч.умелые ручки
  • Структура таблиц
    • Scala 5.1 SR13
    • iScala 2.2 HF 2.3318
    • Tables structure changes history from iScala 2.2 SR2 to iScala 3.0 FSP4
    • Epicor iScala 2.3 — 2.03.3363
    • Epicor iScala 2.3 SR1
    • Epicor iScala 2.3 SR2
    • Epicor iScala 2.3 SR3
    • Epicor iScala 3.00 FSP 2 — 3.00.02254
    • Epicor iScala 3.0 FSP4 — 3.0.4267
    • Изменение структуры таблиц iScala 3.1 по сравнению с iScala 3.0 FSP4 / Table structure changes between iScala 3.0 FSP4 and iScala 3.1
    • Epicor iScala 3.1 — 3.1.0511
    • Epicor iScala 3.2 — 3.2.0317
    • Epicor iScala 3.3 — 3.3.0419
    • Epicor iScala 3.4 — 3.4.0399
    • Epicor iScala 3.5 — 3.5.0.0429
    • Изменение полей в таблицах БД iScala 3.4 по сравнению с iScala 3.2 / Difference between DB structure of iScala 3.4 and iScala 3.2
    • Изменение полей в таблицах БД iScala 3.5 по сравнению с iScala 2.2 / Difference between DB structure of iScala 3.5 and iScala 2.2
  • Материалы по модулям iScala
    • Главная Книга
    • Основные Средства
    • Книга Закупок
    • Книга Продаж
    • Заказы на Закупку
      • Требования
    • Заказы на Продажу
    • Управление Запасами
    • Установка, Администрирование
      • Настройка определений документов MSRS
    • Заработная плата
    • Структура базы данных
    • Отчётность SSRS
    • Отчётность AFR
    • Примеры отчётов
    • Примеры отчётов AFR
    • Интеграция с другими системами
    • Epicor Service Connect
  • English
  • Контакты
  • Поиск
Главная  »»»  SQL Server  »»»  Как заменить то, не знаю что, на то, что надо?

Как заменить то, не знаю что, на то, что надо?

02.03.2021 Автор Алексей Васильев

Относительно недавно, хотя это начали обсуждать ещё в прошлом году, возникла интересная задачка. В компании реализована интеграция iScala с системой провайдера складских услуг. В частности, как только провайдер склада посылает сообщение о выпуске продукции с таможенного склада (в iScala это перемещение между складами), сообщение обрабатывается механизмом Epicor Service Connect и возникает задача для пользователя по утверждению данной операции. Почему это в своё время потребовалось? В первую очередь для того, чтобы перемещение с таможенного склада на склад продаж было выполнено только тогда, когда начислены все необходимые затраты, как то таможенные пошлины, услуги по сертификации и т.п. Пользователь заходит в монитор задач, выбирает задачу, связанную с определённым заказом на закупку и разрешает перемещение. В iScala происходит перемещение той датой, которая содержалась в XML сообщении, присылаемом складской системой.

Монитор задач

С внедрением процедуры отслеживания маркировки товара иногда процесс занимает некоторое время, за которое период успевают закрыть и проводка по перемещению не может быть сделана датой, попадающей в закрытый период. Было решено изменять дату на сегодняшнюю. Но если это делать «вручную» в мониторе задач, то это сумасшедшая работа, ведь проводка по перемещению может содержать десятки, а то и сотни строк. Договорились, что это должно делаться автоматически. Но, интересный вопрос: на какую дату поменять понятно, а какую исходную дату нужно изменить? Иными словами «Как заменить то, не знаю что, на то, что надо?» 🙂

Известно даже, в какой таблице хранится запись, где старую дату нужно изменить на новую. Но как понять, что нужно заменить?

В результате возник вот такой запрос:

update [ScaSystemDB].[dbo].[ScaAssignedTasks]
set [MsgIn]=replace(cast([MsgIn] as Nvarchar(max)),'<dta:TransDate>'+substring([MsgIn],15+PATINDEX ( '%<dta:TransDate>%' , [MsgIn] ),10)+'</dta:TransDate>','<dta:TransDate>'+format(getdate(),'yyyy-MM-dd')+'</dta:TransDate>')
where MsgIn like '%<msg:MsgType>Stock Transaction</msg:MsgType>
<msg:Action>Wait</msg:Action>%'

Самое интересное место здесь вот это:

'<dta:TransDate>'+substring([MsgIn],15+PATINDEX ( '%<dta:TransDate>%' , [MsgIn] ),10)+'</dta:TransDate>'

Это и есть «то, не знаю что». То есть мы ищем содержимое того, что находится между тегами <dta:TransDate> и </dta:TransDate> и меняем его на сегодняшнюю дату. На сервере баз данных создано задание, которое запускается каждый день в 4 часа утра и меняет старую дату на новую, вот и всё 🙂

Рубрика: SQL Server, Избранное Метки: SQL Server, task monitor, как сделать?, монитор задач
VK Telegram

Copyright © 2023 О системах планирования ресурсов предприятия Scala, iScala.

Gammapolis WordPress Theme by ERP & Business Consulting

Прокрутка вверх