Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
|
кассир5:внешниемодули:доработкаконфигурации [2020/04/15 16:07] dzayonchkovskiy создано |
кассир5:внешниемодули:доработкаконфигурации [2024/12/24 09:50] (текущий) dzayonchkovskiy |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ===== Инструкции по доработке конфигурации ===== | + | |
| - | ==== Возможные способы доработки конфигурации: | + | ====== Инструкции по доработке конфигурации |
| + | ===== Отладка через конфигуратор 1С ===== | ||
| + | Для запуска отладки конфигурации из конфигуратора 1С нужно указать параметры сеанса 1С (указать используемый номер ПОС): | ||
| + | < | ||
| + | |||
| + | Если используется ключ катран, | ||
| + | |||
| + | ===== Возможные способы доработки конфигурации: | ||
| + | |||
| + | Рекомендуем ознакомиться с вебинаром [[https:// | ||
| - пользовательские раскладки клавиатуры | - пользовательские раскладки клавиатуры | ||
| - [[кассир5: | - [[кассир5: | ||
| Строка 11: | Строка 21: | ||
| Способ №2 используется когда нужно добавить дополнительную кнопку в супервизор.\\ | Способ №2 используется когда нужно добавить дополнительную кнопку в супервизор.\\ | ||
| - | Способ №5: Расширенные отчеты используются для вывода какой-то информации на экран или принтер, | + | Способ №3: Расширенные отчеты используются для вывода какой-то информации на экран или принтер, |
| Способ №4 решает большинство задач без необходимости доработок конфигурации и типовых обработок с максимальной совместимостью при обновлении конфигурации.\\ | Способ №4 решает большинство задач без необходимости доработок конфигурации и типовых обработок с максимальной совместимостью при обновлении конфигурации.\\ | ||
| + | [[кассир5: | ||
| + | [[кассир5: | ||
| + | Ниже можно скачать архивы с заготовкой модуля логики. В конце модуля основной формы каждой заготовки есть краткая пошаговая инструкция.\\ | ||
| + | {{ : | ||
| + | {{ : | ||
| + | {{ : | ||
| + | {{ : | ||
| + | {{ : | ||
| Вариант №5 крайне не рекомендуется использовать по следующим причинам: | Вариант №5 крайне не рекомендуется использовать по следующим причинам: | ||
| * Изменение базовой версии конфигурации невозможно. | * Изменение базовой версии конфигурации невозможно. | ||
| + | * Обновление через дистрибутив невозможно, | ||
| * При каждом обновлении конфигурации потребуется переносить изменения вручную. | * При каждом обновлении конфигурации потребуется переносить изменения вручную. | ||
| * В новой версии конфигурации возможно изменение кода, которое потребует дополнительное время на актуализацию доработок. | * В новой версии конфигурации возможно изменение кода, которое потребует дополнительное время на актуализацию доработок. | ||
| - | ==== Основные функции ==== | + | ===== Основные |
| - | При доработке конфигурации наиболее часто используются функции: | + | При доработке конфигурации |
| - | === Работа с составом чека === | + | Список методов в защищенной компоненте описан в статье [[[кассир5: |
| + | Наиболее часто используемые методы описаны ниже.\\ | ||
| + | Формат описания методов: | ||
| + | \\ | ||
| + | Имя метода - описание метода.\\ | ||
| + | Параметры: | ||
| + | Номер параметра: | ||
| + | Пример кода.\\ | ||
| + | |||
| + | ==== Диалоги ==== | ||
| + | **ИнтерфОшибка** - процедура выводит сообщение пользователю.\\ | ||
| + | Параметры: | ||
| + | 1: Строка - строка с текстом сообщения\\ | ||
| + | 2: Строка (" | ||
| + | < | ||
| + | \\ | ||
| + | **ИнтерфВопросДаНет** - глобальная функция открывает окно с переданным текстом | ||
| + | Параметры:\\ | ||
| + | 1: Строка - строка с текстом вопроса\\ | ||
| + | 2: Строка (" | ||
| + | < | ||
| + | Если ИнтерфВопросДаНет(" | ||
| + | // обработка ответа на вопрос | ||
| + | КонецЕсли; | ||
| + | </ | ||
| + | **ИнтерфВопросДаНетОтмена** - глобальная функция открывает окно с переданным текстом и кнопками " | ||
| + | Параметры: | ||
| + | 1: Строка - строка с текстом вопроса\\ | ||
| + | < | ||
| + | Если ИнтерфВопросДаНетОтмена(" | ||
| + | // обработка ответа на вопрос | ||
| + | КонецЕсли; | ||
| + | </ | ||
| + | **ПолучитьКоличество, | ||
| + | < | ||
| + | ФормаЗапросКоличества | ||
| + | Если ФормаЗапросКоличества = Неопределено Тогда | ||
| + | ФормаЗапросКоличества = МенеджерОбъектов.СоздатьОбщуюФорму(" | ||
| + | КонецЕсли; | ||
| + | НеДробноеЧисло = ФормаЗапросКоличества.ПолучитьЧисло(10, | ||
| + | </ | ||
| + | **ВыбратьДату, | ||
| + | 1: Произвольный - в эту переменную запишится дата, которую указал пользователь.\\ | ||
| + | 2: Дата (Неопределено) - значение по-умолчанию.\\ | ||
| + | < | ||
| + | УИД_Формы | ||
| + | ФормаВыбораДаты | ||
| + | Результат | ||
| + | ДатаРождения = Дата(2000, | ||
| + | |||
| + | Если ФормаВыбораДаты.ВыбратьДату(Результат, | ||
| + | ДатаРождения = Результат; | ||
| + | КонецЕсли; | ||
| + | |||
| + | МенеджерОбъектов.ВыгрузитьОбщийОбъект(" | ||
| + | </ | ||
| + | |||
| + | ==== Работа с составом чека ==== | ||
| + | Как получить форму регистрации в коде: | ||
| + | < | ||
| + | \\ | ||
| + | Как получить состав чека формы регистрации: | ||
| + | < | ||
| + | ФормаРегистрации = МенеджерОбъектов.ПолучитьОбщийОбъект(" | ||
| + | КоличествоСтрок = ФормаРегистрации.СоставЧека.Количество(); | ||
| + | </ | ||
| + | Как получить выделенную строку состава чека: | ||
| + | < | ||
| + | ФормаРегистрации = МенеджерОбъектов.ПолучитьОбщийОбъект(" | ||
| + | ТекущаяСтрокаСоставаЧека = ФормаРегистрации.элтСоставЧека.ТекущаяСтрока; | ||
| + | </ | ||
| + | Как добавить товар в состав чека по коду или артикулу (для добавления по артикулу нужно в 2-й параметр передать " | ||
| + | < | ||
| + | ФормаРегистрации = МенеджерОбъектов.ПолучитьОбщийОбъект(" | ||
| + | ЗК = МенеджерОбъектов.ПолучитьОбщийОбъект(" | ||
| + | ЗК.ДобавитьПозициюПоКодуАртикулу(100, | ||
| + | ЗК.ДобавитьПозициюПоКодуАртикулу(200, | ||
| + | ЗК.ДобавитьПозициюПоКодуАртикулу(300, | ||
| + | </ | ||
| + | Как добавить товар в состав чека по штрихкоду: | ||
| + | < | ||
| + | ФормаРегистрации = МенеджерОбъектов.ПолучитьОбщийОбъект(" | ||
| + | ЗК = МенеджерОбъектов.ПолучитьОбщийОбъект(" | ||
| + | ЗК.ДобавитьПозициюПоШтрихкоду(" | ||
| + | ЗК.ДобавитьПозициюПоШтрихкоду(" | ||
| + | -1, // цена (-1 = цена из БД) | ||
| + | ФормаРегистрации, | ||
| + | Ложь,// | ||
| + | Ложь);// | ||
| + | </ | ||
| + | ==== Работа с главным полем ввода ==== | ||
| + | Для установки значения главного поля ввода (ГПВ) используется процедура модуля формы регистрации **УстановитьГлавноеПолеВвода**.\\ | ||
| + | Для установки нечислового значения в настройках должен быть разрешен строковый ввод.\\ | ||
| + | Параметры: | ||
| + | 1: строка или число - значение, | ||
| + | Пример: | ||
| + | < | ||
| + | УстановитьГлавноеПолеВвода("" | ||
| + | УстановитьГлавноеПолеВвода(" | ||
| + | УстановитьГлавноеПолеВвода(1000.50);// | ||
| + | </ | ||
| + | |||
| + | Для получения текущего значения ГПВ используется функция формы регистрации ПолучитьГлавноеПолеВвода, | ||
| + | * 0 - Строка | ||
| + | * 1 - Сумма - Получить значение главного поля ввода, преобразованного к формату суммы | ||
| + | * 2 - Количество - Получить значение главного поля ввода, преобразованного к формату количества | ||
| + | Пример: | ||
| + | < | ||
| + | УстановитьГлавноеПолеВвода(1.456);// | ||
| + | Значение = ПолучитьГлавноеПолеВвода(0);// | ||
| + | Значение = ПолучитьГлавноеПолеВвода(1);// | ||
| + | Значение = ПолучитьГлавноеПолеВвода(2);// | ||
| + | </ | ||
| + | ==== Работа с ККМ ==== | ||
| + | Пример печати произвольного текста на ККМ (из формы регистрации, | ||
| + | < | ||
| + | //ф-я КонвертироватьВМассивДляПечати принимает на вход макет чека, можно использовать тэги форматирования | ||
| + | //< | ||
| + | //< | ||
| + | //< | ||
| + | // | ||
| + | //< | ||
| + | //<s> - штрихкод ean13 | ||
| + | //< | ||
| + | //< | ||
| + | ПС = Символ(182); | ||
| + | Текст = "< | ||
| + | " | ||
| + | "< | ||
| + | "< | ||
| + | "< | ||
| + | "< | ||
| + | " " + ПС + | ||
| + | " " + ПС + | ||
| + | "< | ||
| + | ЗК = МенеджерОбъектов.ПолучитьОбщийОбъект(" | ||
| + | МассивДляПечати = ЗК.КонвертироватьВМассивДляПечати(Текст); | ||
| + | СтрокаККМ = Кассир5_DataAccess.ПолучитьККМ(); | ||
| + | РезультатПечати_бул = ЗК.FnKKM_PrintStringBlock(СтрокаККМ, | ||
| + | </ | ||
| + | === Подключение к ККМ === | ||
| + | Если неизвестно подключен ККМ в данный момент или нет, то нужно выполнить следующий код. | ||
| + | Если ККМ не подключен, | ||
| + | < | ||
| + | Функция ВыполнитьЧтоТоНаККМ() | ||
| + | СтрокаККМ = Кассир5_DataAccess.ПолучитьККМ(); | ||
| + | Если СтрокаККМ = Неопределено Тогда | ||
| + | ИнтерфОшибка(" | ||
| + | Возврат Ложь; | ||
| + | КонецЕсли; | ||
| + | |||
| + | ЗК = МенеджерОбъектов.ПолучитьОбщийОбъект(" | ||
| + | БылПолключен = ЗК.FnKKM_GetParam(СтрокаККМ, | ||
| + | Если НЕ БылПолключен И НЕ МенеджерОбъектов.ПолучитьОбщийОбъект(" | ||
| + | Возврат Ложь; // не удалось подключиться к ККМ | ||
| + | КонецЕсли; | ||
| + | |||
| + | // | ||
| + | Результат = Истина; | ||
| + | |||
| + | Если НЕ БылПолключен Тогда | ||
| + | ЗК.FnKKM_Disconnect(СтрокаККМ, | ||
| + | КонецЕсли; | ||
| + | Возврат Результат; | ||
| + | КонецФункции | ||
| + | </ | ||
| + | ==== Работа со справочниками транзакций ==== | ||
| + | В Кассир 5 есть два типа справочников с транзакциями: | ||
| + | 1. Справочник Временные транзакции - хранит информацию о текущем чеке, при закрытии (или отмене) чека переносятся в справочник Транзакции и удаляются.\\ | ||
| + | 2. Справочник Транзакции - хранит информацию об основных действиях кассира, | ||
| + | Справочник выгружается в файл отчета по [[: | ||
| + | Элементы удаляется только автоматически по регламенту.\\ | ||
| + | \\ | ||
| + | === Работа со справочником Временные транзакции === | ||
| + | Перед работой с временными транзакциями рекомендуется ознакомиться со статьей [[: | ||
| + | Если нужно записать произвольную транзакцию, | ||
| + | Все функции для работы с временными транзакциями находятся в модуле обработки Кассир5_DataAccess.\\ | ||
| + | |||
| + | **ПолучитьВремТранзакцию** - ф-я получает информация о временной транзакции по коду. Если врем. транзакция не найдена, | ||
| + | Параметры: | ||
| + | 1: Число - код временной транзакции для поиска.\\ | ||
| + | < | ||
| + | Транз = Кассир5_DataAccess.ПолучитьВремТранзакцию(100); | ||
| + | </ | ||
| + | **ПолучитьВремТранзакцииПоТипу** - ф-я выполняет отбор временных транзакций по типу (поле ТипТранзакции), | ||
| + | < | ||
| + | Транзакции11 = Кассир5_DataAccess.ПолучитьВремТранзакцииПоТипу(11);// | ||
| + | </ | ||
| + | **ПисатьВремТранзакцию** - ф-я создаёт новый элемент справочника Временные транзакции.\\ | ||
| + | Параметры: | ||
| + | 1: Число - код транзакции (используется для уникальности врем. транзакций и определяет порядок записи в справочник Транзакции). Если передано значение " | ||
| + | 2: Число - поле Тип транзакции\\ | ||
| + | 3: Дата (Неопределено) - поле Дата транзакции (если не указана - подставляется текущая дата)\\ | ||
| + | 4: Число - поле Секция\\ | ||
| + | 5: Строка (до 150 символов) - поле Код товара (поле используется для записи строковых данных)\\ | ||
| + | 6: Число - поле Цена\\ | ||
| + | 7: Число - поле Количество\\ | ||
| + | 8: Число - поле Сумма\\ | ||
| + | 9: Число - номер ККМ (определяет к какому ККМ относится транзакция, | ||
| + | 10: Строка ("" | ||
| + | Пример записи врем. транзакции с типом 777 на чек, с явным указанием кода: | ||
| + | < | ||
| + | КодВремТранзакции = 900000; | ||
| + | // запишем транзакцию на чек, если транзакция с переданным кодом уже существует, | ||
| + | // дата транзакции = ТекущаяДата(), | ||
| + | Кассир5_DataAccess.ПисатьВремТранзакцию(КодВремТранзакции, | ||
| + | </ | ||
| + | Пример записи врем. транзакции на чек, без явного указания кода: | ||
| + | < | ||
| + | ТипТранзакцииДопИнфо = 777; | ||
| + | // удаляем транзакцию с типом 777, чтобы не было дублей | ||
| + | Для Каждого Транз Из Кассир5_DataAccess.ПолучитьВремТранзакцииПоТипу(ТипТранзакцииДопИнфо) Цикл | ||
| + | Кассир5_DataAccess.УдалитьВремТранзакцию(Транз.Код); | ||
| + | КонецЦикла; | ||
| + | // запишем транзакцию на чек, код установится автоматически, | ||
| + | Кассир5_DataAccess.ПисатьВремТранзакцию(0, | ||
| + | </ | ||
| + | См. также в модуле обработки Кассир5_DataAccess: | ||
| + | **ИзменитьВремТранзакциюПоСтруктуре**\\ | ||
| + | **ИзменитьВремТранзакцию**\\ | ||
| + | **УдалитьВремТранзакцию**\\ | ||
| + | **ПолучитьВыборкуСкидок**\\ | ||
| + | **ПолучитьВремТранзакцииЧека**\\ | ||
| + | |||
| + | === Работа со справочником Транзакции === | ||
| + | Для записи транзакции напрямую в справочник Транзакции (транзакции, | ||
| + | Параметры: | ||
| + | 1: Таблица значений (неопределено) - таблица значений, | ||
| + | Пример записи одной транзакции с типом 777: | ||
| + | < | ||
| + | Кассир5_DataAccess.ЗаписатьТранзакции(Кассир5_DataAccess.ДобавитьТранзакциюВТаблицу(Неопределено, | ||
| + | Неопределено,// | ||
| + | 777,// тип транзакции | ||
| + | Неопределено,// | ||
| + | 0,// | ||
| + | "",// | ||
| + | 0,// | ||
| + | 0,// | ||
| + | 0));// | ||
| + | </ | ||
| + | Пример записи нескольких транзакций: | ||
| + | < | ||
| + | ТаблицаТранзакций = Неопределено; | ||
| + | Кассир5_DataAccess.ДобавитьТранзакциюВТаблицу(ТаблицаТранзакций, | ||
| + | Кассир5_DataAccess.ДобавитьТранзакциюВТаблицу(ТаблицаТранзакций, | ||
| + | Кассир5_DataAccess.ЗаписатьТранзакции(ТаблицаТранзакций); | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Работа с правами пользователя ==== | ||
| + | **ПравоДоступно** | ||
| + | 1: Строка - имя права.\\ | ||
| + | 2: Булево (Истина) - если у текущего пользователя право отсутствует, | ||
| + | 3: Булево (Истина) - выводить сообщение об отсутствии права.\\ | ||
| + | 4: Число (Неопределено) - если параметр указан, | ||
| + | 5: Число (Неопределено) - в этот параметр запишится код пользователя, | ||
| + | < | ||
| + | Если НЕ Кассир5_DataAccess.ПравоДоступно(" | ||
| + | // действие при отсутствии права без запроса карты и без вывода сообщения | ||
| + | КонецЕсли; | ||
| + | </ | ||
| + | **ПравоОтсутствует** | ||
| + | 1: Строка - имя права.\\ | ||
| + | 2: Булево (Истина) - если у текущего пользователя право присутствует, | ||
| + | 3: Булево (Истина) - выводить сообщение при наличии права.\\ | ||
| + | 4: Число (Неопределено) - если параметр указан, | ||
| + | < | ||
| + | Если НЕ Кассир5_DataAccess.ПравоДоступно(" | ||
| + | // действие при отсутствии права без запроса карты и без вывода сообщения | ||
| + | КонецЕсли; | ||
| + | </ | ||
| + | |||
| + | ==== Отладка ==== | ||
| + | Большинство действий пользователя (нажатие клавиш, | ||
| + | Иногда нужно проверить - правильно ли отработает программа при определенных входящих данных от оборудования, | ||
| + | Для этого можно (в модуле логики или назначить на кнопку) эмулировать внешнее событие методом GenerateEvent компоненты AddIn.ShtrihContext: | ||
| + | Параметры: | ||
| + | 1: название источника события (для большинства событий не анализируется)\\ | ||
| + | 2: название события\\ | ||
| + | 3: данные события\\ | ||
| + | Пример: | ||
| + | эмуляция работы со сканером: | ||
| + | < | ||
| + | МенеджерОбъектов.ПолучитьОбщийОбъект(" | ||
| + | </ | ||
| + | эмуляция работы с ридером магнитных карт: | ||
| + | < | ||
| + | МенеджерОбъектов.ПолучитьОбщийОбъект(" | ||
| + | </ | ||
| + | Также в настройках сканера можно добавить эмулятор сканера. | ||