- Изменение конфигурации УПП.
Для того чтобы конфигурация УПП, редакция 1.2(1.2.19.1) смогла обмениваться заказами с ККТ Штрих-МПЕЙ-Ф используем логику обмена конфигурации и Штрих-М Кассира текстовыми файлами.
Во-первых, включим в документе “ЗаказПокупателя”(Форма документа) поддержку обработки
Функция ПоддерживаетсяВидТО(Вид) Экспорт
Результат = Ложь;
Если Вид = Перечисления.ВидыТорговогоОборудования.СканерШтрихКода
Или Вид = Перечисления.ВидыТорговогоОборудования.СчитывательМагнитныхКарт
Или Вид = Перечисления.ВидыТорговогоОборудования.ККМOffLine Тогда//>>
Результат = Истина;
КонецЕсли;
Возврат Результат;
КонецФункции // ПоддерживаетсяВидТО()
Добавим на форме заказа новую кнопку “в М-ПЕЙ”, означающую выгрузку данных из документа и процедурой:
Процедура ОсновныеДействияФормыМ_ПЕЙ(Кнопка)
Если Товары.Количество() = 0 Тогда
Предупреждение("Список товаров пуст.");
Возврат;
КонецЕсли;
мСерверТО = ПолучитьСерверТО();
МассивККМ = мСерверТО.ПолучитьСписокУстройств(
Перечисления.ВидыТорговогоОборудования.ККМOffLine,
Справочники.КассыККМ.ПустаяСсылка());
мСписокККМ = Новый СписокЗначений();
ККМ = Неопределено;
Вид = Неопределено;
Представление = Неопределено;
Для Каждого ККМ Из МассивККМ Цикл
мСерверТО.ПолучитьПредставлениеУстройства(ККМ, Вид, Представление);
Если (Представление="Штрих-М: MPAY-Ф") Тогда
мСписокККМ.Добавить(ККМ, Представление);
ККМOffline = мСписокККМ[0].Значение;;
Прервать;
КонецЕсли;
КонецЦикла;
Шапка = ЗаполнитьШапку();
Результат = мСерверТО.ВыгрузитьЗаказыККМ(ККМOffline, Ссылка, Шапка);
Если НЕ ЗначениеЗаполнено(Результат) Тогда
КолВо = Товары.Количество() + Услуги.Количество();
ОписаниеРезультата = "Выгрузка заказов завершена успешно.
|Выгружено " + СокрЛП(КолВо) + " строк.";
Иначе
ОписаниеРезультата = мСерверТО.ПолучитьТекстОшибкиККМOfflineТО(Результат);
КонецЕсли;
Предупреждение(ОписаниеРезультата);
КонецПроцедуры//<<
И описание функций “СтатусЗаказа” и “ЗаполнитьШапку”
Функция ЗаполнитьШапку()
СтрукВз = Новый Структура("store, date, number, externalnumber, doctype, uuid, posted, status, deliveryaddress, customer, prepayment");
СтрукВз.store = Ссылка.СкладГруппа.Код;
СтрукВз.date = Ссылка.Дата;
СтрукВз.number = Ссылка.Номер;//Ссылка.НомерИнтернетЗаказа;
СтрукВз.externalnumber = Ссылка.Номер;
СтрукВз.doctype = "30";
СтрукВз.uuid = Строка(Ссылка.УникальныйИдентификатор());
СтрукВз.posted = ?(Ссылка.Проведен,1,0);
СтрукВз.status = СтатусЗаказа();
СтрукВз.deliveryaddress = Ссылка.АдресДоставки;
СтрукВз.customer = Ссылка.Контрагент.Наименование;//Ссылка.НаименованиеПокупателя;
СтрукВз.prepayment = Ссылка.СуммаОплаты;
Возврат СтрукВз;
КонецФункции
//>>
Функция СтатусЗаказа()
Если (Ссылка._СтатусЗаказа = Перечисления.MI_СтатусЗаказаПокупателя.НеВыполненныйЗаказ) Тогда
возврат "open";
ИначеЕсли (Ссылка._СтатусЗаказа = Перечисления.MI_СтатусЗаказаПокупателя.ЗаказВыполнен) Тогда
Возврат "close";
ИначеЕсли (Ссылка._СтатусЗаказа = Перечисления.MI_СтатусЗаказаПокупателя.ЗаказОтменен) Тогда
Возврат "cancel";
ИначеЕсли (Ссылка._СтатусЗаказа = Перечисления.MI_СтатусЗаказаПокупателя.ОтказОтВыполненияНаТекущейКкм) Тогда
Возврат "reject";
Иначе
Возврат "";
КонецЕсли;
КонецФункции
Как видно из функции “СтатусЗаказа” необходимо добавить новое перечисление “ MI_СтатусЗаказаПокупателя ”, которое будет использоваться в статусе документа “Заказпокупателя”
Добавим в документ реквизит “_СтатусЗаказа”, который будет влиять на выгрузку в МПЕЙ:
Также необходимо изменить обработку “ТОСервер”(Модуль объекта), добавим функция “ВыгрузитьЗаказыККМ”:
Функция ВыгрузитьЗаказыККМ(Идентификатор, Товары, Шапка) Экспорт
Обработка = Неопределено;
Объект = Неопределено;
Результат = ПолучитьОбъектДрайвера(Идентификатор, Обработка, Объект);
Если НЕ ЗначениеЗаполнено(Результат) Тогда
Результат = Обработка.ВыгрузитьЗаказы(Объект, Товары, Шапка);
мОписаниеОшибки = Объект.ОписаниеОшибки;
Иначе
мОписаниеОшибки = ПолучитьТекстОшибкиПодключенияТО("ККМ Off-Line");
КонецЕсли;
Возврат Результат;
КонецФункции
2. Создание обработки для выгрузки в МПЕЙ
Создадим обработку “ShtrihMPAYOffline_v1.epf”:
Отредактируем основную функцию “ВыгрузитьТовары”:
Функция ВыгрузитьТовары(Объект, Товары, ЧастичнаяВыгрузка = Неопределено) Экспорт
Результат = мНетОшибки;
Файл = Новый ТекстовыйДокумент();
Товар = Неопределено;
Разделитель = ";";
Файл.ДобавитьСтроку("##@@&&");
Файл.ДобавитьСтроку("#");
Если ЧастичнаяВыгрузка <> Неопределено Тогда
Если ЧастичнаяВыгрузка Тогда
Файл.ДобавитьСтроку("$$$ADD");
Иначе
Файл.ДобавитьСтроку("$$$CLR");
КонецЕсли;
КонецЕсли;
//>>
ЗаполнитьГруппыТоваров(Файл,Товары);
//<<
Для Каждого Товар Из Товары Цикл
Если ТипЗнч(Товар.КодТовара) <> Тип("Массив") Тогда
Гр_Родитель_Код = Справочники.Номенклатура.НайтиПоНаименованию(Товар.Номенклатура).Родитель.Код;
КодГр = Преоб(Гр_Родитель_Код);
Если КодГр=-1 Тогда
КодГр = 0;;
КонецЕсли;
Строка = Формат(Товар.ПЛУ, "ЧЦ=13; ЧДЦ=0; ЧГ=0") + Разделитель +
Формат(Товар.КодТовара, "ЧЦ=13; ЧДЦ=0; ЧГ=0") + Разделитель +
ИсключитьСпецСимв(Товар.Номенклатура) + Разделитель +
ИсключитьСпецСимв(Товар.Номенклатура) + Разделитель +
Формат(Товар.Цена, "ЧЦ=15; ЧДЦ=2; ЧРД=.; ЧГ=0") + Разделитель +
Формат(Товар.Остаток, "ЧЦ=17; ЧДЦ=3; ЧРД=.; ЧГ=0") + Разделитель +
"0" + Разделитель +
?(Товар.ВесовойТовар, "1", "0") + Разделитель +
"0" + Разделитель +
"0" + Разделитель +
"0" + Разделитель +
"0" + Разделитель +
"0" + Разделитель +
"0" + Разделитель +
"0" + Разделитель +
Формат(КодГр, "ЧЦ=13; ЧДЦ=0; ЧГ=0") + Разделитель + //16-Код род группы
"1";
Файл.ДобавитьСтроку(Строка);
Иначе
Где функция “ЗаполнитьГруппыТоваров”:
Функция ЗаполнитьГруппыТоваров(Файл,Товары)
Для каждого Товар из Товары Цикл
Тов = Справочники.Номенклатура.НайтиПоНаименованию(Товар.Номенклатура);
Если Тов.Пустая() Тогда
Сообщить("Для товара "+ Товар.Номенклатура+" не нашли соответствие!");
Иначе
ДобавитьРодителя(Тов.Родитель);
КонецЕсли;
КонецЦикла;
Разделитель = ";";
Для каждого Гр из ТабГрупп Цикл
КодГр = Преоб(Гр.Группа.Код);
Если КодГр=-1 Тогда
Продолжить;
КонецЕсли;
КодГрР = Преоб(Гр.Группа.Родитель.Код);
Строка = Формат(КодГр, "ЧЦ=13; ЧДЦ=0; ЧГ=0") + Разделитель +
"" + Разделитель +
Гр.Группа.Наименование + Разделитель +
Гр.Группа.наименование + Разделитель +
"" + Разделитель +
"" + Разделитель +
"0" + Разделитель +
"0" + Разделитель +
"0" + Разделитель +//9
"0" + Разделитель +
"0" + Разделитель +
"0" + Разделитель +
"0" + Разделитель +
"0" + Разделитель +
"0" + Разделитель +
Формат(КодГрР, "ЧЦ=13; ЧДЦ=0; ЧГ=0") + Разделитель +//16-Код род группы
"0" + Разделитель ;//17-Товар или группа: для группы “0”
Файл.ДобавитьСтроку(Строка);
КонецЦикла;
Возврат Истина;
КонецФункции
И другие дополнительные функции:
Функция ИсключитьСпецСимв(НаимТовара)
Если Найти(НаимТовара,";")>0 Тогда
Врем = СтрЗаменить(НаимТовара,";","##");
Возврат Врем;
КонецЕсли;
Возврат НаимТовара;
КонецФункции
Процедура ДобавитьРодителя (Родитель)
Если Родитель.Пустая() Тогда
Возврат;
Иначе
СтрПоиска = Новый структура("Группа",Родитель.Ссылка);
Масс = ТабГрупп.НайтиСтроки(СтрПоиска);
Если Масс.Количество()=0 Тогда
стр = ТабГрупп.Добавить();
стр.Группа = Родитель.Ссылка;
КонецЕсли;
ДобавитьРодителя(Родитель.Родитель);
КонецЕсли;
КонецПроцедуры
Функция Преобразовать(Строка) Экспорт
ии=1;
Сум="";
Пока ии<СтрДлина(Строка)+1 Цикл
Стр = Сред(Строка,ии,1);
Попытка
а=Число(Стр);
Сум=Сум+Стр;
Исключение
ф=0;
КонецПопытки;
ии=ии+1;
КонецЦикла;
Возврат Сум;
КонецФункции
Функция Преоб(Б)
Попытка
А = Число(Б);
Возврат Преобразовать(А);
Исключение
Возврат -1;
КонецПопытки;
КонецФункции
- Настройка
Подключить обработку «ShtrihMPAYOffline_v1.epf»
-
- Открыть «Подключение и настройка торгового оборудования»
-
- Заполнить параметры выгрузки заказа. Путь файл заказа «…pos.spr» - файл который по умолчанию стоит в МПЕЙ
-
- Нажать кнопку «Проверка», если все корректно то выйдет сообщение «торговое оборудование настроено корректно».
- Создадим заказ покупателя и заполним все поля. Статус заказ и т.д.
- Выгрузка происходит по кнопке «Выгрузка заказа-> в- МПЕЙ».
- Полученные данные на флэшке(они должны находится в корне), вставляем в МПЕЙ
- Заходим в «Меню», «0.Еще…» -> «1.Обмен» -> «1.Файловый обмен» -> «1.Загрузка справочника». Если все успешно, система сообщит сколько строк было загружено
Просмотр заказа «Меню» -> «9.Подбор заказа»
4. Примечание:
- Описание работы с Штрих-М ПЕЙ-Ф https://wiki.sftserv.ru/index.php/Выгрузка_товаров_в_ККТ_ШТРИХ-МПЕЙ-Ф
- Ссылка для загрузки заказа https://kkm.solutions/wiki/doku.php?id=кассир5:форматобменаданными:заказпокупателя