В стандартном функционале РМК присутствует возможность скрытия из визуального поиска товаров с нулевым или отрицательным остатков. Но при этом сама продажа таких товаров не блокируется, если товар добавили в чек по штрихкоду. Если нужно все же заблокировать продажу товаров без остатка, то в карточке схемы РМК на вкладке "ЕГАИС и скрипты" в скрипт "Проверка возможности продажи товара" нужно добавить следующий скрипт:
//если операция отличается от ПРОДАЖА, ПРОЧЕЕ, ВОЗВРАТ ПРИХОДА, то проверку не выполняем
IF ( !ВСПИСКЕ( ПРОПИСНЫЕ( _ОПЕРАЦИЯ ), "ПРОДАЖА", "ПРОЧЕЕ", "ВОЗВРАТ ПРИХОДА" ) )
RETURN true;
//указывается код склада, по которому нужно проверять остаток, если пусто, то проверяется общий по всем складам
КОДСКЛАДАОСТАТКА = "";
//можно определить код склада из схемы РМК для текущего рабочего места
//запрос выберет склад для остатка, а если значение не заполнено, то будет использован склад цены
//КОДСКЛАДАОСТАТКА = ЗАПРОС("SELECT CASE WHEN skladrmd = '' THEN sklad ELSE skladrmd END FROM specrmkschem WHERE code = '" + _РМКСХЕМА + "' AND rmk = '" + _РМККОД + "' AND element_type = 1");
//вычисляем остаток по складу или всем складам
Остаток = ЗАПРОС( "SELECT dbo.fn_calcsklad( '" + @Товар + "', '', '" + КОДСКЛАДАОСТАТКА + "', '001', '' )" );
//опционально можно исключить собираемые товары из проверки остатков
МожетБытьСобран = ЗАПРОС("SELECT f_make FROM sprres WHERE code = '" + @Товар + "'");
IF ( Остаток <= 0 AND !МожетБытьСобран )
{
СООБЩЕНИЕ( "На складе не хватает остатка товаров для продажи" );
RETURN false;
}
RETURN true;
Начиная с версии 4.6.2 в схеме РМК имеется возможность включения контроля наличия введенного сертификата при выбранной оплате Сертификатом без использования дополнительных скриптов.
Для предыдущих версий можно воспользоваться скриптом из этого описания.
При работе с подарочными картами ввод оплаты сертификатом поумолчанию доступен и без ввода подарочного сертификата. Реализована это для поддержки бумажных сертификатов совместно с электронными. Чтобы запретить использование бумажных сертификатов и оплаты Сертификатом без ввода электронного сертификата необходимо в схеме РМК в скрипт "Проверки перед записью чека" добавить следующий скрипт:
IF ( ВСЕГОСЕРТИФИКАТЫ <> 0 )
{
нпп = 0;
_ЕСТЬСЕРТИФИКАТ = false;
WHILE ( нпп < КОЛИЧЕСТВОПЛАТЁЖНЫХКАРТ )
{
_ЕСТЬСЕРТИФИКАТ = ЗАПРОС("SELECT cardkind FROM sprmcard WHERE cardn = '" + ПЛАТЁЖНЫЕКАРТЫ[ нпп ] + "'") == 1;
IF ( _ЕСТЬСЕРТИФИКАТ ) BREAK;
нпп++;
}
IF ( !_ЕСТЬСЕРТИФИКАТ )
{
СООБЩЕНИЕ("Запрещено закрывать чек с видом оплаты ""Сертификатом"" без ввода подарочной карты","ВНИМАНИЕ!");
RETURN false;
}
}
RETURN true;
Функционал автоматической установки свойства "ЭтоТоварныйЧек" в зависимости от типа создаваемого документа доступен начиная с версии РМК 4.5.4.
В РМК доступен функционал формирования различных типов документов при оформлении продаж, таких как "Расходная накладная", "Инвентаризация", "Списание" и прочие.
Выбор типа документа осуществляется в Параметрах чека.
По умолчанию для всех чеков устанавливается тип "Документ кассовой смены" и все чеки фискализируются на подключенной ККТ. Для остальных типов документов, за исключение "Вскрытие тары" так же происходит фискализация чека на подключенной ККТ. Чтобы отключить фискализацию для всех прочих документов, необходимо создать дополнительное свойство чека "ЭтоТоварныйЧек" и добавить его в список дополнительных свойств чека в рабочей схеме РМК.
Далее в схеме РМК на вкладке "ЕГАИС и скрипты" в скрипт проверки перед записью чека необходимо вставить следующий скрипт:
//получим значение в поле с типом документа
ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕПОЛУЧИТЬЗНАЧЕНИЕПОЛЯ, "doccode");
КодДокумента = _ЗНАЧЕНИЕПОЛЯ;
//если выбрана 002 - Расходная накладная, 003 - Списание, 007 - Инвентаризация, 020 - Заказ от покупателя,
//то производим действия по установке признака ЭтоТоварныйЧек и, при необходимости, признака формирования отдельного документа
IF ( ВСПИСКЕ( КодДокумента, "002", "003", "007", "020" ) )
{
//установка признака товарного чека (для печати нефискального чека)
ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯ, "ЭтоТоварныйЧек", true);
//установка текста в 5й строке
ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯ, "pextextview", "ТОВАРНЫЙ ЧЕК");
//установка признака формирования отдельного документа
ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯ, "separetedoc", true);
}
ELSE
{
//в иных случаях устанавливаем стандартные значения
ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯ, "ЭтоТоварныйЧек", false);
ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯ, "separetedoc", false);
ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯ, "pextextview", "ФИСКАЛЬНЫЙ ЧЕК");
}
RETURN true;
Внимание! Согласно 54-ФЗ покупателю должен быть выдан бумажный кассовый чек, либо отправлен электронный кассовый чек в виде ссылки в смс на указанный номер телефона или на указанную электронную почту покупателя.
Использование указанного ниже скрипта подразумевается только для целей отладки или тестирования пробития чеков с целью экономии чековой ленты при таком тестировании.
Ответственность за несоблюдений требований 54-ФЗ лежит на владельце контрольно кассовой техники.
Для отключения печати кассовых чеков в РМК необходимо в рабочей схеме(схемах) РМК на вкладке "ЕГАИС и скрипты" в скрипт проверки перед записью чека добавить следующий скрипт:
IF ( СООБЩЕНИЕ("Напечатать бумажный чек ", "Экономим ленту", 4 ) <> 6 ) {
ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯ, "echeque", true );
ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯ, "telemail", "mail@mail.ru" );
}
RETURN true;
где вместо mail@mail.ru
необходимо указать адрес электронной почты, на который нужно отправлять пробиваемые электронные чеки.
В случае необходимости запрета на снятие X и Z отчетов через соответствующие отдельные функции, нужно встроить следующий скрипт в рабочей схеме(схемах) РМК на вкладкее "ЕГАИС и скрипты" в скрипт Проверки значений и прав доступа. При добавлении такого скрипта возможность формирования X и Z отчетов будет только у Администраторов, а Кассиры и Системный администратор не смогут формировать такие отчеты.
IF ( _ИМЯПОЛЯ == "otherfuncion" AND ВСПИСКЕ( _ЗНАЧЕНИЕПОЛЯ, 6, 7 ) )
{
//получим код профиля сотрудника и по нему определим роль пользователя
ПрофильСотрудника = VAL( ЗАПРОС("SELECT profile FROM sprempl WHERE code = '" + _КАССИР + "'") );
ЭтоКассир = false;
ЭтоАдминистратор = false;
ЭтоСисАдмин = false;
IF ( ПрофильСотрудника == 29 )
ЭтоАдминистратор = true;
ELSE IF ( ПрофильСотрудника == 30 )
ЭтоСисАдмин = true;
ELSE
ЭтоКассир = true;
//если пользователь не является администратором, то запрещаем действие
IF ( !ЭтоАдминистратор )
{
СООБЩЕНИЕ("У вас нет прав на выполнение данного действия", "Ошибка доступа");
RETURN false;
}
}
RETURN true;
Если для товара в карточке указаны модификаторы, то при добавлении такого товара в чек в РМК можно выполнять выбор модификаторов через клавиатурную функцию или контексное меню позиции.
Для автоматического запроса списка модификаторов для товара с заданными модификаторами необходимо в карточке схемы РМК на вкладке "ЕГАИС и скрипты" в скрипт "Проверка значений и прав доступа" добавить следующий скрипт:
IF ( _ИМЯПОЛЯ == "ware" )
{
ЗапрашиватьПодтверждение = false; //значение переменной определяет, нужно ли запрашивать подтверждение у пользователя на добавление модификаторов
IF ( ЗАПРОС("SELECT dbo.fn_waremodifiers_status( '" + _ЗНАЧЕНИЕПОЛЯ + "' ) " ) > 0 )
{
ВывестиЗапросМодификаторов = true;
//если нужно запрашивать подтверждение, то выведем вопрос пользователю
IF ( ЗапрашиватьПодтверждение )
IF ( СООБЩЕНИЕ( "Добавить модификаторы?", "Вопрос", 4 ) != 6 )
ВывестиЗапросМодификаторов = false;
//если пользователь подтвердил, либо подтверждение не требуется, то выводим запрос модификаторов
IF ( ВывестиЗапросМодификаторов )
{
Сервис.РМККоманда("ВЫБРАТЬ", "РЕГИСТРАЦИЯ" );
//установим для строки признак отключения обединения
ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "f_separate", 1 );
//установим признак включения цены модификатора в цену итогового продукта в параметре f_addmdfprice (1 - добавлять, 0 - не добавлять)
//При установке значения 1 стоимость позиции увеличится на стоимость модификаторов. Для значения 0 стоимость позиции меняться не будет
ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕУСТАНОВИТЬЗНАЧЕНИЕПОЛЯВСТРОКЕ, "f_addmdfprice", 1 );
//вызовем запрос модификаторов
ОТПРАВИТЬСООБЩЕНИЕ( _ДЕСКРИПТОРОКНА, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ЗАПРОСИТЬМОДИФИКАТОРЫ" );
//пересчитаем суммы и скидки
Сервис.РМККоманда("ПЕРЕСЧИТАТЬРЕГИСТРАЦИЮ");
Сервис.РМККоманда("ПЕРЕСЧИТАТЬСКИДКИ");
}
}
}
После добавления скрипта при добавлении позиции с модификаторами в чек будет автоматически выводиться диалог выбора модификаторов для позиции.
Для ввода номера карты скрипт вызывает диалог запроса параметров, с виртуальной клавиатурой. Скрипт можно привязать к клавише, либо сгенерировать штрихкод для вызова его сканированием специального штрихкода.
ВыводитьКлавиатуру = true;
ШиринаКлавиатуры = 750;
ПараметрыЗапросаКарты = "<?xml version=""1.0"" encoding=""UTF-8""?>
<Settings>
<Page Caption=""Ввод номера карты"">
<Parameter Name=""cardNumber"" Caption=""№"" TypeValue=""String"" DefaultValue=""""></Parameter>
</Page>
<Settings virtualkbd=""" + ЕСЛИ( ВыводитьКлавиатуру, "true", "false" ) + """ virtualkbd_width=""" + ШиринаКлавиатуры + """>
</Settings>";
ОТПРАВИТЬСООБЩЕНИЕ( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕВЫПОЛНИТЬКОМАНДУ, "ЗАПРОСПАРАМЕТРОВ", ПараметрыЗапросаКарты );
IF ( !_РЕЗУЛЬТАТВВОДАПАРАМЕТРОВ )
RETURN "";
__SQL( "КартыКлиентов" )
{
SELECT code FROM sprmcard WHERE cardn = '[[ cardNumber ]]'
}
SQLERROR
{
СООБЩЕНИЕ("Ошибка поиска карты: " + _ERRORDESCRIPTION, "Ввод карты клиента" );
RETURN "";
}
IF ( КОЛИЧЕСТВОСТРОК( "КартыКлиентов" ) == 0 )
{
СООБЩЕНИЕ("Указанная карта не найдена в справочнике карт", "Ввод карты клиента" );
УДАЛИТЬКОНТЕКСТ( "КартыКлиентов" );
RETURN "";
}
УДАЛИТЬКОНТЕКСТ( "КартыКлиентов" );
Сервис.РМККоманда( "ДОБАВИТЬКАРТУ", cardNumber );