Программирование в Штрих-М Кассир 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 Конфигурации 1cv8 Бесплатно (free)

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

07.02.2024    2345    YA_418728146    11    

40

Регистры накопления в 1С:КА2 и 1С:ERP для расчета НДФЛ, страховых взносов и взаиморасчетов с сотрудниками на январь 2024 года. Краткое описание

Зарплата Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет НДФЛ Абонемент ($m)

Для расчета зарплаты и соответствующих налогов в конфигурациях 1С:КА2 и 1С:ERP используется 22 регистра накопления, 7 регистров сведений, 1 регистр расчета и бухгалтерские проводки. В таблице приведены названия этих регистров, указаны основные регистраторы и виды движений приход/расход. В описании приводится краткое функциональное назначение регистров в основных зарплатных процессах. Описание регистров родилось из черновиков при написании различных отчетов и обработок при эксплуатации 1С-овских конфигураций и исправлении ошибок по НДФЛ, взаиморасчетов с сотрудниками и прочих. Информация не претендует на полноценное описание работы регистров, скорее это дискуссионный материал. Но, возможно, кому-то пригодится и сократит время при подготовке отчетности за непростой (в плане учета зарплаты) 2023 год. А возможно, кто-то поделится своим опытом.

1 стартмани

10.01.2024    1013    6    2ncom    3    

8

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

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

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    4822    mrXoxot    11    

99

Ключи аналитик учета в ЕРП, КА, УТ

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

Разбираемся, зачем в системе ЕРП созданы справочники: ключи аналитик учета, зачем созданы аналогичные по набору измерений регистры сведений. Какие проблемы они решают, какие создают новые и что с этим делать.

08.11.2023    7018    ids79    25    

74

Распределение по базе среднего в ЗИКГУ 3.1

Зарплата Механизмы типовых конфигураций Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 Россия Бюджетный учет Абонемент ($m)

Результат расчета начислений (отпуск, БЛ и т.д.) может распределятся по базе среднего заработка. У таких начислений на вкладке "Налоги, взносы, бухучет" стоит галка "По базе среднего заработка". Но бывают случаи, что данное распределение необходимо скорректировать.

1 стартмани

14.09.2023    444    2    Vlx    0    

1

Расширение типового механизма настройки заполнения бухгалтерской отчетности (на примере конфигурации 1С:ERP. Управление холдингом 3.1.8.15)

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

В статье приведен алгоритм доработок типового механизма настройки заполнения бухгалтерской отчетности на примере конфигурации 1С:ERP. Управление холдингом (3.1.8.15). Цель доработок - сделать процесс настроек более гибким и удобным для пользователей

11.09.2023    1924    ICL-Soft    3    

12

Разбор механизма "Настройки полей формы" в 1С:ERP. Управление холдингом

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

В данной статье я постараюсь разобрать механизм, который Вам может встретиться на просторах типовой конфигурации 1С:ERP. Управление холдингом. Я не могу гарантировать, что этот механизм не исключат из следующих версий конфигурации (как, собственно, и любой другой). К сожалению, мне не удалось найти его ни в одном модуле конфигурации "Библиотеки стандартных подсистем". Мне он показался интересным, и захотелось более детально во всем этом разобраться.

18.07.2023    2153    it_box    1    

7

Работа с контактной информацией. Часть 2

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

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

05.06.2023    6946    biimmap    4    

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

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