| | | 1 | | @using Services.BackgroundJobsServices |
| | | 2 | | @{ |
| | 0 | 3 | | var msk = RussianTimeZoneHelper.Zone; |
| | 0 | 4 | | var nowLocal = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, msk); |
| | 0 | 5 | | var yesterday = nowLocal.Date.AddDays(-1); |
| | 0 | 6 | | var downloadFrom = yesterday.AddDays(-ReportDeliveryDateFilter.TransactionJobReportDownloadDays); |
| | 0 | 7 | | var downloadDays = ReportDeliveryDateFilter.TransactionJobReportDownloadDays; |
| | | 8 | | } |
| | | 9 | | |
| | | 10 | | <div class="card border-info mb-4" id="processingPipelineHelp"> |
| | | 11 | | <div class="card-header bg-info bg-opacity-10 py-2"> |
| | | 12 | | <h6 class="mb-0"> |
| | | 13 | | <i class="fas fa-info-circle me-2 text-info"></i> |
| | | 14 | | Как работает задание при каждом запуске |
| | | 15 | | </h6> |
| | | 16 | | </div> |
| | | 17 | | <div class="card-body small"> |
| | | 18 | | <p class="mb-3"> |
| | | 19 | | Логика совпадает с ручной загрузкой на странице |
| | | 20 | | <strong>Транзакции → Загрузка файла</strong>: |
| | | 21 | | сначала запрашивается <strong>широкий</strong> отчёт у Ozon, затем из файла отбираются строки только за |
| | | 22 | | <strong>вчера (MSK)</strong> по столбцу даты — как при выборе одной галочки в предпросмотре дат. |
| | | 23 | | </p> |
| | | 24 | | |
| | | 25 | | <div class="row g-3 mb-3"> |
| | | 26 | | <div class="col-md-6"> |
| | | 27 | | <div class="border rounded p-3 h-100 bg-light"> |
| | | 28 | | <div class="fw-semibold mb-2"> |
| | | 29 | | <span class="badge text-bg-secondary me-1">1</span> |
| | | 30 | | Загрузка отчёта у Ozon (API) |
| | | 31 | | </div> |
| | | 32 | | <ul class="mb-0 ps-3"> |
| | | 33 | | <li> |
| | 0 | 34 | | Период запроса: примерно <strong>@downloadDays дней</strong> — |
| | 0 | 35 | | с <strong>@downloadFrom.ToString("dd.MM.yyyy")</strong> |
| | 0 | 36 | | по <strong>@nowLocal.ToString("dd.MM.yyyy")</strong> (MSK). |
| | | 37 | | </li> |
| | | 38 | | <li> |
| | | 39 | | Ozon отдаёт отправления по полю <strong>«Принят в обработку»</strong> |
| | | 40 | | (<code>ProcessedAt</code>), не по дате доставки. |
| | | 41 | | </li> |
| | | 42 | | <li> |
| | | 43 | | Поэтому в файл попадают и заказы, принятые раньше, но переданные в доставку «вчера». |
| | | 44 | | </li> |
| | | 45 | | </ul> |
| | | 46 | | </div> |
| | | 47 | | </div> |
| | | 48 | | <div class="col-md-6"> |
| | | 49 | | <div class="border rounded p-3 h-100 bg-light"> |
| | | 50 | | <div class="fw-semibold mb-2"> |
| | | 51 | | <span class="badge text-bg-secondary me-1">2</span> |
| | | 52 | | Отбор строк в CSV (как вручную) |
| | | 53 | | </div> |
| | | 54 | | <ul class="mb-0 ps-3"> |
| | | 55 | | <li> |
| | | 56 | | День отбора: <strong>вчера</strong> — |
| | 0 | 57 | | <strong>@yesterday.ToString("dd.MM.yyyy")</strong> (MSK). |
| | | 58 | | </li> |
| | | 59 | | <li class="job-help-commissioner"> |
| | 0 | 60 | | Столбец: <strong>«@ReportDeliveryDateFilter.DeliveryDateColumnName»</strong>. |
| | | 61 | | </li> |
| | | 62 | | <li class="job-help-return d-none"> |
| | 0 | 63 | | Столбец: <strong>«@ReportDeliveryDateFilter.ReturnsStatusDateColumnName»</strong>. |
| | | 64 | | </li> |
| | | 65 | | <li> |
| | | 66 | | В обработку попадают только строки, у которых дата в этом столбце (без учёта времени) = |
| | | 67 | | вчерашний день. |
| | | 68 | | </li> |
| | | 69 | | </ul> |
| | | 70 | | </div> |
| | | 71 | | </div> |
| | | 72 | | </div> |
| | | 73 | | |
| | | 74 | | <div class="alert alert-warning mb-3 py-2"> |
| | | 75 | | <i class="fas fa-exclamation-triangle me-1"></i> |
| | | 76 | | <strong>Важно:</strong> если запрашивать у Ozon только один день по «Принят в обработку», заказы с доставкой |
| | | 77 | | но принятые раньше, <strong>не попадут</strong> в файл. Широкая загрузка это исправляет. |
| | | 78 | | </div> |
| | | 79 | | |
| | | 80 | | <div id="helpShippedToCommissioner" class="job-type-help d-none"> |
| | | 81 | | <p class="fw-semibold mb-2">Дальше — «Отгружен комиссионеру»</p> |
| | | 82 | | <ol class="mb-0 ps-3"> |
| | | 83 | | <li>Сопоставление с заказами в БД (номер отправления + артикул).</li> |
| | | 84 | | <li>Исключение уже проведённых и отменённых.</li> |
| | | 85 | | <li> |
| | | 86 | | Склад отправителя для 1С — из <a href="/Studio2/WarehouseMapping" target="_blank">связей складов</a> |
| | | 87 | | (<code>OzonClient</code> + склад отгрузки → Bitrix), либо значение «Засыл» из расширений заказа. |
| | | 88 | | </li> |
| | | 89 | | <li>Группировка по складу, создание транзакций в системе.</li> |
| | | 90 | | <li>Проводка в 1С (до 3 попыток). Заказы «Отгружен реализатором» — только смена статуса, без 1С.</li> |
| | | 91 | | </ol> |
| | | 92 | | </div> |
| | | 93 | | |
| | | 94 | | <div id="helpCustomerReturn" class="job-type-help d-none"> |
| | | 95 | | <p class="fw-semibold mb-2">Дальше — «Возврат покупателя»</p> |
| | | 96 | | <ol class="mb-0 ps-3"> |
| | | 97 | | <li>Сопоставление по номерам отправлений из отчёта возвратов.</li> |
| | | 98 | | <li>Исключение заказов, у которых уже статус «Возврат покупателя».</li> |
| | | 99 | | <li> |
| | | 100 | | Склад отправителя — <strong>склад покупателя</strong> из карточки Ozon-клиента; |
| | | 101 | | склад получателя — из <a href="/Studio2/WarehouseMapping" target="_blank">связей складов</a> |
| | | 102 | | по складу отгрузки заказа. |
| | | 103 | | </li> |
| | | 104 | | <li>Сначала проводка в 1С, затем транзакция и статус в системе.</li> |
| | | 105 | | </ol> |
| | | 106 | | </div> |
| | | 107 | | |
| | | 108 | | <div id="helpJobTypePlaceholder" class="text-muted job-type-help"> |
| | | 109 | | Выберите тип задания выше — появится описание следующих шагов. |
| | | 110 | | </div> |
| | | 111 | | |
| | | 112 | | <hr class="my-3" /> |
| | | 113 | | |
| | | 114 | | <p class="mb-1 text-muted"> |
| | | 115 | | <i class="fas fa-clock me-1"></i> |
| | | 116 | | Часовой пояс расписания и отбора дат: <strong>MSK (Russian Standard Time)</strong>. |
| | | 117 | | Подробные логи каждого запуска — в |
| | | 118 | | <a href="/Studio2/JobLogs?tab=transactions">журнале Transaction Jobs</a>. |
| | | 119 | | </p> |
| | | 120 | | </div> |
| | | 121 | | </div> |