Программирование в Штрих-М Кассир 5

13.03.20

Разработка - Механизмы типовых конфигураций

Методы и свойства для программирования в Штрих-М Кассир 5.

15

 

Введение

Основная задача этого материала - это ознакомление с методиками программирования в программе Штрих-М Кассир 5.

 

Пред обработчики в Штрих-М Кассир 5

    1. Случаи применения

Пред обработчики сильнейший инструмент  - используются для того, чтобы обработать аргументы перед выполнением функции или дать функции свои аргументы для обработки, или пропустить выполнение функции при определенных условиях.

    1. Синтаксис для пред обработчиков

 

Для того чтобы пред обработчики стали работать, необходимо помещать обработки в каталог «ExtForms\ LogicalModules», наименование обработки не имеет никакого значения, расширения "epf".

Схематическое изображение обработки:

Обязательные реквизиты «Формы» в обработке, показаны ниже на рисунке:

 

Чтобы программа увидела ваш обработчик ее нужно инициализировать, рассмотрим на примере функции «Функция ЗакрытьЧек(Отмена = 0) Экспорт»  из обработки «Регистрация»:

Процедура ИнициализироватьМодуль() экспорт

       Если Метаданные.Имя = "ШтрихМ_Кассир" Тогда                                 

              МенеджерОбъектов.ПолучитьОбщийОбъект("LogicalModules").НазначитьОбработчик("Регистрация.ЗакрытьЧек.ПредОбработка", ЭтаФорма, Неопределено);

       КонецЕсли;

КонецПроцедуры

и соответственно при завершении работы кассира деинициализировать:

Процедура ДеИнициализироватьМодуль() экспорт

       Если Метаданные.Имя = " ШтрихМ_Кассир " Тогда

              МенеджерОбъектов.ПолучитьОбщийОбъект("LogicalModules").СнятьОбработчик("Регистрация.ЗакрытьЧек.ПредОбработка", ЭтаФорма, Неопределено);

       КонецЕсли;

КонецПроцедуры

Причем  Метаданные.Имя обязательно должны быть сравнимы с именем «ШтрихМ_Кассир», иначе программа не инициализирует вашу доработку.

И наконец вызов самой функции:

Функция Регистрация_ЗакрытьЧек_ПредОбработка(Отмена) Экспорт

       Обработчик = МенеджерОбъектов.ПолучитьОбщийОбъект("LogicalModules").ПолучитьОбработчик("Регистрация.ЗакрытьЧек.ПредОбработка", _Источник, ЭтаФорма);

       Если Обработчик <> Неопределено Тогда

                      _РезультатВызова =

                      Обработчик.Регистрация_ЗакрытьЧек_ПредОбработка(Отмена);

                      Если Обработчик._Отказ Тогда

                                      Возврат _РезультатВызова;

                      КонецЕсли;

       КонецЕсли;

…

КонецФункции

1-я часть шапка самой функции, она является вызовом с главной функции, затем идет тело функции, здесь код программиста, и конец возврат какого значения или же ничего.

Если присвоить переменной «Обработчик._Отказ»  истину, в этом случае функция в основном теле программы после обработчика выйдет из функции, т.е. пропустит ее выполнение.

 

    1. Доступ к основной форме (источник)

 

Иногда необходимо обратиться к некоторым методам чтобы узнать или изменить что-либо на форме или в содержании программы, для этого есть возможность обратиться к функциям основной программы, если они имеют реквизит «Экспорт», Примеры:

_Источник.ФункцияФормыРегистрации_Вниз()

– спускает курсор вниз по табличному полю

_Источник.ФункцияФормыРегистрации_ПросмотрПечатьЧека()

– просмотр и печать закрытого чека

 

Обращение к переменным основной программы, примеры:

_Источник. ГлавноеПолеВвода 

Значение главного поля ввода

_Источник.СоставЧека

– Состав чека в виде табличного значения

 

    1. Способы передачи данных

 

Между обработок необходимо передавать данные, один из универсальных способов это сохранять данные в текстовый файл, а затем его считывание, пример:

Сохранение данных-

ИмяФайла = Кассир5_DataAccess.КаталогВнешнихКомпонент + "data.ini";

ЗначениеВФайл(ИмяФайла,ПАР);

ПАР – это переменная или структура данных

 

Загрузка данных-    

Перем ПАР;

       ПАР = Новый Структура;

       ПАР.Вставить("Имя1");

      …

       ПАР.Вставить("ИмяN");



       //Считать из файла

       ИмяФайла = Кассир5_DataAccess.КаталогВнешнихКомпонент + "data.ini";

       Файл = Новый Файл(ИмяФайла);

       Если Файл.Существует() Тогда

                      ФайлЗагрузки = Новый ТекстовыйДокумент();

                      Попытка

                                      ФайлЗагрузки.Прочитать(ИмяФайла, КодировкаТекста.ANSI);

                                      ФайлЗагрузки = Неопределено;

                      Исключение

                                      Возврат ПАР;

                      КонецПопытки;

                     

                      ПолученноеЗначение = ЗначениеИзФайла(ИмяФайла);

                      Для каждого эл из ПолученноеЗначение Цикл

                                      Попытка

                                                      ПАР[эл.Ключ] = эл.Значение;

                                      Исключение

                                      КонецПопытки;               

                      КонецЦикла;      

                      Возврат ПАР;

       КонецЕсли;

       Возврат ПАР;

 

Еще один метод, расположить все функции в одной обработке, а переменные сохранять на форме.

 

    1. Пример
Процедура ДеИнициализироватьМодуль() экспорт

       Если Метаданные.Имя = "ШтрихМ_Кассир" Тогда

              МенеджерОбъектов.ПолучитьОбщийОбъект("LogicalModules").СнятьОбработчик("Регистрация.ФункцияФормыРегистрации_ПродолжитьОтложенныйЧек.ПредОбработка", ЭтаФорма, Неопределено);

       КонецЕсли;

КонецПроцедуры// ДеИнициализироватьМодуль()



Процедура ИнициализироватьМодуль() экспорт

       Если Метаданные.Имя = "ШтрихМ_Кассир" Тогда                                 

              МенеджерОбъектов.ПолучитьОбщийОбъект("LogicalModules").НазначитьОбработчик("Регистрация.ФункцияФормыРегистрации_ПродолжитьОтложенныйЧек.ПредОбработка", ЭтаФорма, Неопределено);

       КонецЕсли;

КонецПроцедуры // ИнициализироватьМодуль()



Функция Регистрация_ФункцияФормыРегистрации_ПродолжитьОтложенныйЧек_ПредОбработка() Экспорт

       Обработчик = МенеджерОбъектов.ПолучитьОбщийОбъект("LogicalModules").ПолучитьОбработчик("Регистрация.ФункцияФормыРегистрации_ПродолжитьОтложенныйЧек.ПредОбработка", _Источник, ЭтаФорма);

       Если Обработчик <> Неопределено Тогда

                      Обработчик.Регистрация_ФункцияФормыРегистрации_ПродолжитьОтложенныйЧек_ПредОбработка();

       КонецЕсли;      

      

       Если ВыполнитьВнешнююОбработку("ОбщиеФункции","Константы_РежимПАЕ_Получить") Тогда

                      //И если карта на приборе тогда ф-ция запрещена

                      ЭтаФорма._Отказ = Истина;

                      Возврат Истина;

       КонецЕсли;

      

КонецФункции

 

Пост обработчики в Штрих-М Кассир 5

    1. Случаи применения

Пост  обработчики, аналогичен инструменту пред обработчиков, только используются после выполнения функции.

    1. Синтаксис для пост обработчиков

 

Для того чтобы пред обработчики работали необходимо помещать обработки в каталог «ExtForms\ LogicalModules», наименование обработки не имеет никакого значения.

Схематическое изображение обработки:

Обязательные реквизиты «Формы» в обработке, показаны ниже на рисунке:

 

Чтобы программа увидела ваш обработчик ее нужно инициализировать, рассмотрим на примере функции «Функция ЗакрытьЧек(Отмена = 0) Экспорт»  из обработки «Регистрация»:

Процедура ИнициализироватьМодуль() экспорт

       Если Метаданные.Имя = "ШтрихМ_Кассир" Тогда                                 

              МенеджерОбъектов.ПолучитьОбщийОбъект("LogicalModules").НазначитьОбработчик("МодульПриложения.ПриНачалеРаботыСистемы.ПостОбработка", ЭтаФорма, Неопределено);

       КонецЕсли;

КонецПроцедуры

 

 и соответственно при завершении работы кассира деинициализировать:

Процедура ДеИнициализироватьМодуль() экспорт

       Если Метаданные.Имя = "ШтрихМ_Кассир" Тогда

       МенеджерОбъектов.ПолучитьОбщийОбъект("LogicalModules").СнятьОбработчик("МодульПриложения.ПриНачалеРаботыСистемы.ПостОбработка", ЭтаФорма, Неопределено);

       КонецЕсли;

КонецПроцедуры

 

Причем  Метаданные.Имя обязательно должны быть сравнимы с именем «ШтрихМ_Кассир», иначе программа не инициализирует вашу доработку.

И наконец вызов самой функции:

Функция ПриНачалеРаботыСистемы_ПостОбработка() Экспорт

      

       Обработчик = МенеджерОбъектов.ПолучитьОбщийОбъект("LogicalModules").ПолучитьОбработчик("МодульПриложения.ПриНачалеРаботыСистемы.ПостОбработка", _Источник, ЭтаФорма);

       Если Обработчик <> Неопределено Тогда

                      Обработчик.ПриНачалеРаботыСистемы_ПостОбработка();

       КонецЕсли;

…

КонецФункции

 

1-я часть шапка самой функции, она является вызовом с главной функции, затем идет тело функции, здесь код программиста, и конец возврат какого значения или же ничего.

 

    1. Доступ к основной форме (источник)

 

Иногда необходимо обратиться к некоторым методам чтобы узнать или изменить что-либо на форме или в содержании программы, для этого есть возможность обратиться к функциям основной программы, если они имеют реквизит «Экспорт», Примеры:

_Источник.ФункцияФормыРегистрации_Вниз() 

– спускает курсор вниз по табличному полю

_Источник.ФункцияФормыРегистрации_ПросмотрПечатьЧека()

– просмотр и печать закрытого чека

 

Обращение к переменным основной программы, примеры:

_Источник. ГлавноеПолеВвода

Значение главного поля ввода

_Источник.СоставЧека

– Состав чека в виде табличного значения

 

    1. Способы передачи данных

 

Между обработок необходимо передавать данные, один из универсальных способов это сохранять данные в текстовый файл, а затем его считывание, пример:

Сохранение данных-

ИмяФайла = Кассир5_DataAccess.КаталогВнешнихКомпонент + "data.ini";

ЗначениеВФайл(ИмяФайла,ПАР);

ПАР – это переменная или структура данных

 

Загрузка данных-    

Перем ПАР;

       ПАР = Новый Структура;

       ПАР.Вставить("Имя1");

      …

       ПАР.Вставить("ИмяN");



       //Считать из файла

       ИмяФайла = Кассир5_DataAccess.КаталогВнешнихКомпонент + "data.ini";

       Файл = Новый Файл(ИмяФайла);

       Если Файл.Существует() Тогда

                      ФайлЗагрузки = Новый ТекстовыйДокумент();

                      Попытка

                                      ФайлЗагрузки.Прочитать(ИмяФайла, КодировкаТекста.ANSI);

                                      ФайлЗагрузки = Неопределено;

                      Исключение

                                      Возврат ПАР;

                      КонецПопытки;

                     

                      ПолученноеЗначение = ЗначениеИзФайла(ИмяФайла);

                      Для каждого эл из ПолученноеЗначение Цикл

                                      Попытка

                                                      ПАР[эл.Ключ] = эл.Значение;

                                      Исключение

                                      КонецПопытки;               

                      КонецЦикла;      

                      Возврат ПАР;

       КонецЕсли;

       Возврат ПАР;

 

Еще один метод, расположить все функции в одной обработке, а переменные сохранять на форме.

 

    1. Пример
Процедура ДеИнициализироватьМодуль() экспорт

       Если Метаданные.Имя = "ШтрихМ_Кассир" Тогда

              МенеджерОбъектов.ПолучитьОбщийОбъект("LogicalModules").СнятьОбработчик("Регистрация.ЗакрытьЧек.ПостОбработка", ЭтаФорма, Неопределено);

       КонецЕсли;

КонецПроцедуры// ДеИнициализироватьМодуль()



Процедура ИнициализироватьМодуль() экспорт

       Если Метаданные.Имя = " ШтрихМ_Кассир " Тогда                                 

              МенеджерОбъектов.ПолучитьОбщийОбъект("LogicalModules").НазначитьОбработчик("Регистрация.ЗакрытьЧек.ПостОбработка", ЭтаФорма, Неопределено);

       КонецЕсли;

КонецПроцедуры // ИнициализироватьМодуль()



Функция Регистрация_ЗакрытьЧек_ПостОбработка(Отмена) Экспорт

       Обработчик = МенеджерОбъектов.ПолучитьОбщийОбъект("LogicalModules").ПолучитьОбработчик("Регистрация.ЗакрытьЧек.ПостОбработка", _Источник,ЭтаФорма);

       Если Обработчик <> Неопределено Тогда

                      //Обработчик._РезультатВызова = внРезультат;

                      _РезультатВызова =

                      Обработчик.Регистрация_ЗакрытьЧек_ПостОбработка(Отмена);

                      Если Обработчик._Отказ Тогда

                                      Возврат _РезультатВызова;

                      КонецЕсли;

       КонецЕсли;

***              

КонецФункции

 

 

 

Добавление кнопок в меню «Супервизор»

    1. Случаи применения

В некоторых случаях необходимо получить какой-то отчет, отправить на печать что-либо или же задать свои константы. Для этого есть технология добавления копок в меню «Супервизора».

    1. Как использовать, синтаксис содержимого

Во первых в папке ExtFiles создать файл «s_visor.ini», примерное содержимое:

[общие]

имя кнопки=Выгрузка Тов

[Настройка выгрузки]

функция=Data/btn1.1s

И выглядеть это будет так, для строки «имя кнопки=Выгрузка Тов» :

для строки «[Настройка выгрузки]» :

для строки «функция=Data/btn1.1s» :

Затем в папке «ExtForms» создадим каталог «Data» со следующим содержимым:

Содержимое файла btn1.1s

МодульОбмена = ВнешниеОбработки.Создать(Кассир5_DataAccess.КаталогВнешнихКомпонент + "Data\МодульСервиса.epf");

Если МодульОбмена <> Неопределено Тогда

                АктивнаяФорма = Неопределено;

                МодульОбмена.ПолучитьФорму("ФормаНастройки").ОткрытьМодально();

                АктивнаяФорма = ЭтаФорма;

КонецЕсли;

Обработка «МодульСервиса.epf», ее архитектура

Внутреннее содержимое Формы может быть любым, по нажатию кнопки можно выполнять любую функцию.

 

Добавление кнопки на форму регистрации и привязка функции к ней

    1. Случаи применения

В некоторых случаях необходимо  в режиме регистрации иметь функционал, который отсутствует в данной версии.

    1. Как расположить и синтаксис функции

Зайдем в Кассир 5 под правами администратора, в меню «Супервизора» перейдем в «Настройка»:

Затем в «Настройка формы регистрации»

Затем нажмем кнопку «>>»

В появившемся окне, добавим кнопку   правой кнопкой мыши «добавить кнопку», например «сертификат»

На добавленной кнопке нажмем правой кнопкой мыши «изменить», выбираем функцию

Сперва ее создадим, 

Заполним внутреннее содержимое, в данном случае это функция из обработки регистрация:

После сохранения функции, подключим функцию к кнопке, т.е. подключим.

Затем нажмем выход, «Esc»   и нажмем «Да», т.е. сохранить настройки.

    1. Редактирование и создание кнопок

Кнопки можно создавать через редакторы BMP или PNG и затем в настройке заходить в «Кнопки»

Через кнопку вставки добавлять кнопку или же ее изменять

Обязательно запомнить ее имя, а также заполнить значения картинок

На примере кнопки «Пром итог», нужно заполнить те расширения, в которых будет использоваться ваша кнопка, также это сделать для вариантов «Картинка нажатая», «Картинка недоступная», «Картинка активная»

 

 

Описание каталогов в папке «ExtForms»

В папке «ExtForms» есть следующие каталоги, см.ниже:

Каталог «AddOutputDev» - работа с дисплеями

Каталог «DataExchange» - загрузка и выгрузка файлов

Каталог «DCTerminals» - работа с терминалами данных

Каталог «Documents» - работа с документами

Каталог «Egais» - работа с ЕГАИС

Каталог «ExternalDB» - работа с базы данными(DBF, SQL)

Каталог «FPrinters» - работа с принтерами(ФР)

Каталог «LblComplex» - работа с весами, в которые можно загрузить товары.

Каталог «LogicalModules» - работа с дополнительными обработками

Каталог «Reports» - работа с отчетами

Каталог «Scales» - работа с весами

Каталог «Scanners» - работа с весами

Каталог «ShtrihPayMan.Modules» - работа с менеджером оплат

Каталог «Update» - работа с обновлением

Каталог «VideoControl» - работа с видео объектами наподобие кэшконтрола.

Данные каталоги имеют содержимое в виде обработок, так что у любого программиста 1С есть возможность изменить код.

 

Изменения самой конфигурации Штрих-М Кассир 5

Если вы купили типовую конфигурацию Штрих-М Кассир-5, есть возможность ее редактирования, единственное что при обновлении вам придется переносить ваши доработки, причем возможно что некоторые придется еще переписывать.

 

Заключение.

Из рассмотренных методов большая гибкость, она заключается в возможности создавать свою библиотеку и использовать по всем своим кассовым местам, с возможностью быстрого обновления.

Изменения интерфейса, изменения функционала – это сила данного метода.

В случае изменения основной конфигурации, возможно придется переписывать готовые библиотеки обработок, это один возможных минусов.

 

Дополнительные ресурсы:

https://kkm.solutions/wiki/doku.php?id=кассир5:руководствопрограммиста

https://kkm.solutions/produkty/roznichnaya-torgovlya/shtrikh_m_kassir_5_0/

https://www.shtrih-m.ru/catalog/avtomatizatsiya-torgovli/shtrikh-m-kassir-5/

Штрих-М Кассир 5 программирование

См. также

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

В этой статье расскажу, как можно добавлять свои отборы в типовую обработку формирования заказов по потребностям с минимальными доработками.

27.02.2025    607    PROSTO-1C    0    

5

Механизмы типовых конфигураций HighLoad оптимизация Программист Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Бесплатно (free)

Пример популярной пользовательской настройки плана счетов. К чему это может привести, почему «всё тормозит» и как это поправить.

18.02.2025    3048    pbelousov    10    

6

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Расчет себестоимости в типовых конфигурациях 1С – для многих «черный ящик», работающий по жестко зашитым в него алгоритмам. Реализация этого «черного ящика» может меняться в зависимости от конкретной конфигурации – УПП, БП 3.0, ERP. Но принцип работы везде одинаковый. Расскажем о том, как устроен расчет себестоимости, как его дорабатывать, и какие методы могут быть эффективны и без доработок.

27.12.2024    13120    Begemoth80    32    

86

СКД Механизмы типовых конфигураций Запросы Программист Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    2917    PROSTO-1C    0    

22

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1С:Комплексная автоматизация 2.х Россия Бесплатно (free)

Эта ошибка была обнаружена мной в типовой конфигурации 1С:Комплексная автоматизация 2 (2.5.16.115), БСП версия 3.1.9.302. Возникает она после того, как вы добавляете в расширение бизнес-процесс или задачу, выполняете обновление идентификаторов метаданных расширений, но ошибка при записи любого элемента справочника "Профили групп доступа" всё равно остаётся.

01.07.2024    3007    Vidz    0    

12
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Van2507 12 18.03.20 15:40 Сейчас в теме
Интересная статья. Есть один вопрос. При заполнении содержимого функции на добавленной кнопки можно использовать только уже имеющиеся функции в конфигурации, точнее можно ли написать свою функцию в этом окне, или нужно указывать именно ссылку на функцию?
2. Ignatov_mu 42 24.03.20 23:09 Сейчас в теме
Можно описать полностью свою функцию.
3. SerSinelnik 30.08.21 22:54 Сейчас в теме
Как можно добавить на форму регистрации информационное поле:
Сумма чека в случае пересчета по доп цене товаров входящих в состав покупки?
4. Ignatov_mu 42 02.09.21 15:28 Сейчас в теме
(3)
Сумма чека в случае пересчета по доп цене товаров входящих в состав покупки

В ададптивном интерфейсе можно добавить "Пользовательская надпись" - и в обработчике устанавливать его заголовок.
Оставьте свое сообщение