Для того, чтобы произвести поиск чеков в БД SetCentrum5 или SetRetail5, в SetRetail10 включите такую возможность во внешних системах:
1. Интеграция → Внешние процессинги → кликните .
2. Установите флажок Протокол Set Retail 5 → кликните .
3. Кликните Протокол Set Retail 5.
4. Перейдите на вкладку ЭКСПОРТ ДАННЫХ → установите необходимые типы данных для экспорта.
5. Перейдите на вкладку НАСТРОЙКИ СЕРВЕРА → установите настройки подключения → кликните .
Поиск чека в SetRetail5 осуществляется только через поле [Штрих-код] посредством сканирования штрих-кода чека. |
Пример: 009ZWDS.1JBY41
import org.joda.time.DateTimeConstants; import org.joda.time.LocalDate; public class SetRetail10DocumentBarcode { public static void main(String[] args) { parseDocumentBarcode(); } public static void parseDocumentBarcode() { // Исходный штрихкод (в нем закодирован документ №2, касса 10, смена 43, магазин 2380, дата 28.03.2014) String documentBarcode = "0050PHO.03CUOC"; // разбивается по точке на строки String[] splittedDocumentBarcode = documentBarcode.split("\\."); // Первая (0050PHO) и вторая (03CUOC) части String firstPartBase36String = splittedDocumentBarcode[0]; String secondPartBase36String = splittedDocumentBarcode[1]; // Конвертируем полученные строки в long, используя 36-ричную систему: // первая (8431116) и вторая (5638476) части long firstPart = Long.parseLong(firstPartBase36String, 36); long secondPart = Long.parseLong(secondPartBase36String, 36); // Извлекаем нужные данные с помощью битовых операций: сдвиг вправо (>>) и побитовое И (&) // Номер документа (2) long documentNumber = (firstPart >> 22) & (0x1000 - 1); // Номер кассы (10) long cashNumber = (firstPart >> 12) & (0x400 - 1); // Номер смены (43) long shiftNumber = (secondPart >> 17) & (0x2000 - 1); // Номер магазина (2380) long shopNumber = secondPart & (0x20000 - 1); // Дата документа в виде количества дней, прошедших с начала текущего десятилетия (1548) long documentDayOfDecade = (firstPart) & (0x1000 - 1); // При необходимости использования даты, восстанавливаем полную дату (28.03.2014 при условии, что на дворе 2010-2019 годы) LocalDate fullDocumentDate = calculateFullDocumentDate((int) documentDayOfDecade); } protected static LocalDate calculateFullDocumentDate(int dayOfDecade) { // Текущая дата (без времени или со временем в полночь - 00:00:00.0000) LocalDate currentDate = LocalDate.now(); // Вычисляем первый год десятилетия (2010) int firstYearOfDecade = currentDate.getYear() / 10 * 10; // Создаем дату первого дня десятилетия (1 января 2010) (без времени или со временем в полночь 00:00:00.0000) LocalDate firstDayOfDecade = new LocalDate().withYear(firstYearOfDecade).withMonthOfYear(DateTimeConstants.JANUARY).withDayOfMonth(1); // Прибавляем к дате первого дня десятилетия количество дней из документа и получаем дату документа (28.03.2014) LocalDate fullDocumentDate = firstDayOfDecade.plusDays(dayOfDecade - 1); // Если получилось, что дата из будущего (более чем на один день) if (fullDocumentDate.isAfter(currentDate.plusDays(1))) { // значит, этот документ из прошлого десятилетия и нужно скорректировать год на 10 лет назад fullDocumentDate = fullDocumentDate.minusYears(10); } return fullDocumentDate; } } |
Пример: 003.1190.130715.0007
В данном ШК через точку указаны следующие поля: номер кассы.номер смены.день.номер чека
Пример: 00311900000700280000