1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
508.
509.
510.
511.
512.
513.
514.
515.
516.
517.
518.
519.
520.
521.
522.
523.
524.
525.
526.
527.
528.
529.
530.
531.
532.
533.
534.
535.
536.
537.
538.
539.
540.
541.
542.
543.
544.
545.
546.
547.
548.
549.
550.
551.
552.
553.
554.
555.
556.
557.
558.
559.
560.
561.
562.
563.
564.
565.
566.
567.
568.
569.
570.
571.
572.
573.
574.
575.
576.
577.
578.
579.
580.
581.
582.
583.
584.
585.
586.
587.
588.
589.
590.
591.
592.
593.
594.
595.
596.
597.
598.
599.
600.
601.
602.
603.
604.
605.
606.
607.
608.
609.
610.
611.
612.
613.
614.
615.
616.
617.
618.
619.
620.
621.
622.
623.
624.
625.
626.
627.
628.
629.
630.
631.
632.
633.
634.
635.
636.
637.
638.
639.
640.
641.
642.
643.
644.
645.
646.
647.
648.
649.
650.
651.
652.
653.
654.
655.
656.
657.
658.
659.
660.
661.
662.
663.
664.
665.
666.
667.
668.
669.
670.
671.
672.
673.
674.
675.
676.
677.
678.
679.
680.
681.
682.
683.
684.
685.
686.
687.
688.
689.
690.
691.
692.
693.
694.
695.
696.
697.
698.
699.
700.
701.
702.
703.
704.
705.
706.
707.
708.
709.
710.
711.
712.
713.
714.
715.
716.
717.
718.
719.
720.
721.
722.
723.
724.
725.
726.
727.
728.
729.
730.
731.
732.
733.
734.
735.
736.
737.
738.
739.
740.
741.
742.
743.
744.
745.
746.
747.
748.
749.
750.
751.
752.
753.
754.
755.
756.
757.
758.
759.
760.
761.
762.
763.
764.
765.
766.
767.
768.
769.
770.
771.
772.
773.
774.
775.
776.
777.
778.
779.
780.
781.
782.
783.
784.
785.
786.
787.
788.
789.
790.
791.
792.
793.
794.
795.
796.
797.
798.
799.
800.
801.
802.
803.
804.
805.
806.
807.
808.
809.
810.
811.
812.
813.
814.
815.
816.
817.
818.
819.
820.
821.
822.
823.
824.
825.
826.
827.
828.
829.
830.
831.
832.
833.
834.
835.
836.
837.
838.
839.
840.
841.
842.
843.
844.
845.
846.
847.
848.
849.
850.
851.
852.
853.
854.
855.
856.
857.
858.
859.
860.
861.
862.
863.
864.
865.
866.
867.
868.
869.
870.
871.
872.
873.
874.
875.
876.
877.
878.
879.
880.
881.
882.
883.
884.
885.
886.
887.
888.
889.
890.
891.
892.
893.
894.
895.
896.
897.
898.
899.
900.
901.
902.
903.
904.
905.
906.
907.
908.
909.
910.
911.
912.
913.
914.
915.
916.
917.
918.
919.
920.
921.
922.
923.
924.
925.
926.
927.
928.
929.
930.
931.
932.
933.
934.
935.
936.
937.
938.
939.
940.
941.
942.
943.
944.
945.
946.
947.
948.
949.
950.
951.
952.
953.
954.
955.
956.
957.
958.
959.
960.
961.
962.
963.
964.
965.
966.
967.
968.
969.
970.
971.
972.
973.
974.
975.
976.
977.
978.
979.
980.
981.
982.
983.
984.
985.
986.
987.
988.
989.
990.
991.
992.
993.
994.
995.
996.
997.
998.
999.
1000.
1001.
1002.
1003.
1004.
1005.
1006.
1007.
1008.
1009.
1010.
1011.
1012.
1013.
1014.
1015.
1016.
1017.
1018.
1019.
1020.
#Если Клиент Тогда
///////////////////////////////////////////////////////////////////////////////
//// ПЕРЕМЕННЫЕ МОДУЛЯ
// Массив поддерживаемых моделей
Перем мМодели Экспорт;
// Соответствие протоколов
Перем мПротоколы Экспорт;
Перем мНетОшибки;
Перем мОшибкаПараметровНастройки;
Перем мОшибкаЗагрузкиДрайвера;
Перем мОшибкаНеизвестно;
Перем мОшибкаПриПодключении;
Перем мОшибкаТестНеПройден;
Перем мОшибкаНетВозможностиПечатиПКО;
Перем мНДС Экспорт;
Перем мИдентификатор;
Перем мВерсияОбработки;
Перем мВерсияТребуемая Экспорт;
Перем мВерсияИзДрайвера Экспорт;
Перем мОбновлениеМоделей;
///////////////////////////////////////////////////////////////////////////////
//// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ (ОБЩИЕ ФУНКЦИИ API)
// Функция возвращает номер версии API, поддерживаемой обработкой обслуживания.
//
// Номер версии задаётся следующим образом: Ver = Vmajor + Vminor / 100.0.
// Например, в случае, если данная функция возвращает значение «1.01», это
// означает, что данная обработка имеет версию «1.1», полностью поддерживает
// версию «1.0» и содержит некоторые дополнительные элементы.
// В случае, если отличается целая часть версии (например, «2.1»), то это
// означает, что данная обработка несовместима с версией API «1.0».
//
// Функция является обязательной для любой версии API.
//
// Параметры:
// Нет
//
// Возвращаемое значение:
// <Число> - Версия API обработки обслуживания.
//
//
Функция ПолучитьВерсиюAPI() Экспорт
Результат = 2.05;
Возврат Результат;
КонецФункции // ПолучитьВерсиюAPI()
// Функция возвращает описание текущей обработки обслуживания (API v2.0).
//
// Данная функция позволяет серверу получить информацию об обработке
// обслуживания. Функция является обязательной для версий 1.X API.
//
// Параметры:
// Нет
//
// Возвращаемое значение:
// <Структура> - Структура, содержащая описание текущей обработки.
// Структура имеет следующие поля:
//
// Вид - <ПеречислениеСсылка.ВидыТорговогоОборудования>
// - Вид торгового оборудования, поддерживаемый
// данной обработкой обслуживания.
//
// СписокМоделей - <Массив>
// - Список поддерживаемых обработкой моделей
// торгового оборудования.
//
// Наименование - <Строка>
// - Наименование обработки обслуживания.
//
// Описание - <Строка>
// - Описание обработки обслуживания.
//
// ВерсияОбработки - <Число>
// - Номер версии обработки обслуживания
// (не версии API!!!).
// Данный параметр используется при
// обновлении.
// Номер версии задаётся следующим образом:
// Ver = Vmajor + Vminor / 100.0.
//
Функция ПолучитьОписание() Экспорт
Результат = Новый Структура("Вид, СписокМоделей, Наименование,
|Описание, ВерсияОбработки,
|Идентификатор");
мМетаданные = Метаданные();
Результат.Вид = Перечисления.ВидыТорговогоОборудования.ФискальныйРегистратор;
Результат.СписокМоделей = мМодели;
Результат.Наименование = мМетаданные.Синоним;
Результат.Описание = мМетаданные.Комментарий;
Результат.ВерсияОбработки = мВерсияОбработки;
Результат.Идентификатор = мИдентификатор;
Возврат Результат;
КонецФункции // ПолучитьОписание()
// Функция создаёт объект драйвера.
// (API v2.0)
//
// Параметры:
// Объект - <*>
// - Выходной параметр; объект драйвера торгового
// оборудования.
//
// Модель - <Строка>
// - Модель торгового оборудования, для которой
// создаётся экземпляр драйвера.
//
// Параметры - <Строка>
// - Параметры подключаемого торгового оборудования.
//
// Возвращаемое значение:
// <ПеречислениеСсылка.ТООшибки*> - Результат работы функции.
//
Функция СоздатьОбъектДрайвера(Объект, Модель, Параметры) Экспорт
Результат = мНетОшибки;
ОписаниеОшибки = "";
ИДУстройства = Неопределено;
Порт = Неопределено;
Скорость = Неопределено;
Таймаут = Неопределено;
НаличнаяОплата = Неопределено;
Секция = Неопределено;
ПарольПользователя = Неопределено;
ПарольАдминистратора = Неопределено;
ОтменятьЧекПриПодключении = Неопределено;
НаименованиеОплаты1 = Неопределено;
НаименованиеОплаты2 = Неопределено;
ЖурналОперацийДрайвера = Неопределено;
ПечататьЛоготип = Неопределено;
РазмерЛоготипа = Неопределено;
СовместимыеВерсии = Неопределено;
ТипПодключения = Неопределено;
ИмяКомпьютера = Неопределено;
IPАдрес = Неопределено;
TCPПорт = Неопределено;
Параметры.Свойство("Порт" , Порт);
Параметры.Свойство("Скорость" , Скорость);
Параметры.Свойство("Таймаут" , Таймаут);
Параметры.Свойство("НаличнаяОплата" , НаличнаяОплата);
Параметры.Свойство("Секция" , Секция);
Параметры.Свойство("ПарольПользователя" , ПарольПользователя);
Параметры.Свойство("ПарольАдминистратора" , ПарольАдминистратора);
Параметры.Свойство("ОтменятьЧекПриПодключении", ОтменятьЧекПриПодключении);
Параметры.Свойство("НаименованиеОплаты1" , НаименованиеОплаты1);
Параметры.Свойство("НаименованиеОплаты2" , НаименованиеОплаты2);
Параметры.Свойство("ЖурналОперацийДрайвера" , ЖурналОперацийДрайвера);
Параметры.Свойство("ПечататьЛоготип" , ПечататьЛоготип);
Параметры.Свойство("РазмерЛоготипа" , РазмерЛоготипа);
Параметры.Свойство("ТипПодключения" , ТипПодключения);
Параметры.Свойство("ИмяКомпьютера" , ИмяКомпьютера);
Параметры.Свойство("IPАдрес" , IPАдрес);
Параметры.Свойство("TCPПорт" , TCPПорт);
Параметры.Свойство("СовместимыеВерсии" , СовместимыеВерсии);
Если Порт = Неопределено
Или Скорость = Неопределено
Или Таймаут = Неопределено
Или НаличнаяОплата = Неопределено
Или Секция = Неопределено
Или ПарольПользователя = Неопределено
Или ПарольАдминистратора = Неопределено
Или ОтменятьЧекПриПодключении = Неопределено
Или НаименованиеОплаты1 = Неопределено
Или НаименованиеОплаты2 = Неопределено
Или ЖурналОперацийДрайвера = Неопределено
Или ПечататьЛоготип = Неопределено
Или РазмерЛоготипа = Неопределено
Или ТипПодключения = Неопределено
Или ИмяКомпьютера = Неопределено
Или IPАдрес = Неопределено
Или TCPПорт = Неопределено
Или СовместимыеВерсии = Неопределено Тогда
Результат = мОшибкаПараметровНастройки;
ОписаниеОшибки = "";
Иначе
Попытка
ПрогИД = "AddIn.DrvFR1C";
ПодключитьВнешнююКомпоненту(ПрогИД);
Драйвер = Новый (ПрогИД);
Исключение
Результат = мОшибкаЗагрузкиДрайвера;
ОписаниеОшибки = "Невозможно подключить внешнюю компоненту.
| Проверьте, что внешняя компонента корректно установлена и имеет ту же версию,
| что и требуемая обработкой обслуживания.";
КонецПопытки;
Если Результат = мНетОшибки Тогда
Попытка
мВерсияИзДрайвера = Драйвер.ПолучитьНомерВерсии();
Исключение
Если Не ВерсииСовместимы(СовместимыеВерсии) Тогда
Сообщить("""" + Модель + """:" + Символы.ПС +
"Внимание! Невозможно определить версию драйвера." + Символы.ПС +
"Требуемая версия: " + мВерсияТребуемая + Символы.ПС +
"Корректная работа драйвера не гарантируется", СтатусСообщения.Внимание);
КонецЕсли;
КонецПопытки;
Если мВерсияИзДрайвера <> Неопределено И (Не ВерсииРавны() И Не ВерсииСовместимы(СовместимыеВерсии)) Тогда
Сообщить("""" + Модель + """:" + Символы.ПС +
"Внимание! Текущая версия драйвера отличается от поддерживаемой." + Символы.ПС +
"Текущая версия: " + мВерсияИзДрайвера + Символы.ПС +
"Требуемая версия: " + мВерсияТребуемая + Символы.ПС +
"Корректная работа драйвера не гарантируется", СтатусСообщения.Внимание);
КонецЕсли;
Объект = Новый Структура("Модель, Параметры, Драйвер, ОписаниеОшибки, ИДУстройства",
Модель, Параметры, Драйвер, ОписаниеОшибки, ИДУстройства);
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции // СоздатьОбъектДрайвера()
// Функция возвращает набор событий драйвера и параметры их обработки для
// заданной модели торгового оборудования.
// (API v2.0)
//
// Параметры:
// Объект - <*>
// - Объект драйвера торгового оборудования.
//
// Возвращаемое значение:
// <ТаблицаЗначений> - Таблица значений, содержащая информацию о внешних
// событиях, генерируемых драйвером.
// Таблица имеет следующие колонки:
// "ИмяСобытия" - <Строка> - Имя внешнего события.
//
Функция ПолучитьОписаниеСобытий(Объект) Экспорт
Таблица = Новый ТаблицаЗначений();
Таблица.Колонки.Добавить("ИмяСобытия");
Возврат Таблица;
КонецФункции // ПолучитьОписаниеСобытий()
// Функция осуществляет подключение устройства.
// (API v2.0)
//
// Параметры:
// Объект - <*>
// - Объект драйвера торгового оборудования.
//
// Возвращаемое значение:
// <ПеречислениеСсылка.ТООшибки*> - Результат работы функции.
//
Функция Подключить(Объект) Экспорт
Результат = мНетОшибки;
СерийныйНомерККМ = Неопределено;
МассивЗначений = Новый Массив;
МассивЗначений.Добавить(Объект.Параметры.Порт);
МассивЗначений.Добавить(Объект.Параметры.Скорость);
МассивЗначений.Добавить(Объект.Параметры.ПарольПользователя);
МассивЗначений.Добавить(Объект.Параметры.ПарольАдминистратора);
МассивЗначений.Добавить(Объект.Параметры.Таймаут);
МассивЗначений.Добавить(СерийныйНомерККМ);
МассивЗначений.Добавить(мНДС[0]);
МассивЗначений.Добавить(мНДС[1]);
МассивЗначений.Добавить(мНДС[2]);
МассивЗначений.Добавить(мНДС[3]);
МассивЗначений.Добавить(Ложь);
МассивЗначений.Добавить(Объект.Параметры.ЖурналОперацийДрайвера);
МассивЗначений.Добавить(Объект.Параметры.НаименованиеОплаты1);
МассивЗначений.Добавить(Объект.Параметры.НаименованиеОплаты2);
МассивЗначений.Добавить(Объект.Параметры.ПечататьЛоготип);
МассивЗначений.Добавить(Объект.Параметры.РазмерЛоготипа);
МассивЗначений.Добавить(Объект.Параметры.ТипПодключения);
МассивЗначений.Добавить(Объект.Параметры.ИмяКомпьютера);
МассивЗначений.Добавить(Объект.Параметры.IPАдрес);
МассивЗначений.Добавить(Объект.Параметры.TCPПорт);
Если Не Объект.Драйвер.Подключить(МассивЗначений, Объект.ИДУстройства) Тогда
КодОшибки = Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);
Результат = мОшибкаНеизвестно;
Иначе
Если Объект.Параметры.ОтменятьЧекПриПодключении Тогда
Объект.Драйвер.ОтменитьЧек(Объект.ИДУстройства);
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции // Подключить()
// Процедура осуществляет отключение устройства.
// (API v2.0)
//
// Параметры:
// Объект - <*>
// - Объект драйвера торгового оборудования.
//
Процедура Отключить(Объект) Экспорт
// Закрыть соединение
Если Не Объект.Драйвер.Отключить(Объект.ИДУстройства) Тогда
Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);
КонецЕсли;
КонецПроцедуры // Отключить()
// Функция осуществляет проверку правильности настройки и подключения
// торгового оборудования.
// (API v2.0)
//
// Параметры:
// Объект - <*>
// - Объект драйвера устройства, проверка
// которого предполагается.
//
// Возвращаемое значение:
// <ПеречислениеСсылка.ТООшибки*> - Результат работы функции.
//
Функция ТестУстройства(Объект) Экспорт
Результат = Подключить(Объект);
Если Результат = мНетОшибки Тогда
Отключить(Объект);
КонецЕсли;
Возврат Результат;
КонецФункции // ТестУстройства()
// Процедура осуществляет вызов формы настройки торгового оборудования.
// (API v2.0)
//
// Параметры:
// Модель - <Строка>
// - Модель настраиваемого оборудования.
//
// Параметры - <Структура>
// - Входной/выходной параметр; структура параметров.
//
Процедура НастроитьОборудование(Модель, Параметры) Экспорт
Форма = ПолучитьФорму("ФормаНастройки");
Форма.мМодель = Модель;
Форма.мПараметры = Параметры;
Ответ = Форма.ОткрытьМодально();
Если Ответ = КодВозвратаДиалога.ОК Тогда
Параметры = Форма.мПараметры;
КонецЕсли;
КонецПроцедуры // НастроитьОборудование()
// Функция возвращает имя источника внешнего события
// генерируемое при подключеннии внешней компонентой.
// По уникальному для сеанса подключения имени производится поиск
// из конфигурации обработки обслуживания для обработки полученного
// события.
// (API v2.1)
//
// Параметры:
// Объект - <*>
// - Объект драйвера устройства.
//
// Возвращаемое значение:
// <Строка> - Имя внешнего источника события.
//
Функция ПолучитьИмяИсточникаВнешнегоСобытия(Объект) Экспорт
Возврат "";
КонецФункции
///////////////////////////////////////////////////////////////////////////////
//// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ (ФУНКЦИИ API ОБРАБОТОК ОБСЛУЖИВАНИЯ ФР)
// Функция возвращает параметры отражения в чеке наличной оплаты от юридических
// лиц.
// (API v2.0)
//
// Параметры:
// Объект - <*>
// - Объект драйвера ФР.
//
// НомерОтдела - <Число>
// - Выходной параметр; номер отдела, используемый
// для вывода чека.
//
// Возвращаемое значение:
// <ПеречислениеСсылка.ТООшибки*> - Результат выполнения операции.
//
Функция ПолучитьПараметрыНаличнойОплаты(Объект, НомерОтдела) Экспорт
Результат = ?(Объект.Параметры.НаличнаяОплата, мНетОшибки, мОшибкаНеизвестно);
НомерОтдела = Объект.Параметры.Секция;
Если (Результат = мОшибкаНеизвестно) Тогда
Объект.ОписаниеОшибки = "Данный фискальный регистратор не имеет возможности отражать в чеке факт наличных расчетов с юридическими лицами
|В случае, если данная возможность предусмотрена фискальным регистратором, рекомендуется проверить его настройки в форме обработки ""Настройка торгового оборудования""";
КонецЕсли;
Возврат Результат;
КонецФункции // ПолучитьПараметрыНаличнойОплаты()
// Функция осуществляет снятие X-отчёта на ФР.
// (API v2.0)
//
// Параметры:
// Объект - <*>
// - Объект драйвера ФР.
//
// Пароль - <Число>
// - Пароль пользователя ФР.
//
// НомерЧека - <Число>
// - Выходной параметр; номер чека ФР.
//
// НомерСмены – <Число>
// - Выходной параметр; номер текущей смены ФР.
//
// Возвращаемое значение:
// <ПеречислениеСсылка.ТООшибки*> - Результат выполнения операции.
//
Функция XОтчет(Объект, Пароль, НомерЧека, НомерСмены) Экспорт
Результат = мНетОшибки;
Пока Истина Цикл
Если Не Объект.Драйвер.ПроверитьСостояниеПечати(Объект.ИДУстройства) Тогда
Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);
Ответ = Вопрос(Объект.ОписаниеОшибки + Символы.ПС
+ "Устраните неисправность и нажмите ""Повторить"" для продолжения печати.", РежимДиалогаВопрос.ПовторитьОтмена, 0, КодВозвратаДиалога.Повторить);
Если Ответ = КодВозвратаДиалога.Повторить Тогда
Объект.Драйвер.ПродолжитьПечать(Объект.ИДУстройства);
Если Результат <> мНетОшибки И Объект.Драйвер.ПроверитьСостояниеПечати(Объект.ИДУстройства) Тогда
Результат = мНетОшибки;
Прервать;
КонецЕсли;
Иначе
Результат = мНетОшибки;
Прервать;
КонецЕсли;
Иначе
Если Результат = мНетОшибки И Не Объект.Драйвер.НапечататьОтчетБезГашения(Объект.ИДУстройства) Тогда
Результат = мОшибкаНеизвестно;
Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции // XОтчет()
// Функция осуществляет снятие Z-отчёта на ФР.
// (API v2.0)
//
// Параметры:
// Объект - <*>
// - Объект драйвера ФР.
//
// Пароль - <Число>
// - Пароль пользователя ФР.
//
// НомерЧека - <Число>
// - Выходной параметр; номер чека ФР.
//
// НомерСмены – <Число>
// - Выходной параметр; номер текущей смены ФР.
//
// Возвращаемое значение:
// <ПеречислениеСсылка.ТООшибки*> - Результат выполнения операции.
//
Функция ZОтчет(Объект, Пароль, НомерЧека, НомерСмены) Экспорт
Результат = мНетОшибки;
Пока Истина Цикл
Если Не Объект.Драйвер.ПроверитьСостояниеПечати(Объект.ИДУстройства) Тогда
Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);
Ответ = Вопрос(Объект.ОписаниеОшибки + Символы.ПС
+ "Устраните неисправность и нажмите ""Повторить"" для продолжения печати.", РежимДиалогаВопрос.ПовторитьОтмена, 0, КодВозвратаДиалога.Повторить);
Если Ответ = КодВозвратаДиалога.Повторить Тогда
Объект.Драйвер.ПродолжитьПечать(Объект.ИДУстройства);
Если Результат <> мНетОшибки И Объект.Драйвер.ПроверитьСостояниеПечати(Объект.ИДУстройства) Тогда
Результат = мНетОшибки;
Прервать;
КонецЕсли;
Иначе
Результат = мНетОшибки;
Прервать;
КонецЕсли;
Иначе
Если Результат = мНетОшибки И Не Объект.Драйвер.НапечататьОтчетСГашением(Объект.ИДУстройства) Тогда
Результат = мОшибкаНеизвестно;
Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции // ZОтчет()
// Функция осуществляет внесение (сумма > 0) или изъятие (сумма < 0) суммы на ФР.
// (API v2.0)
//
// Параметры:
// Объект - <*>
// - Объект драйвера ФР.
//
// Пароль - <Число>
// - Пароль пользователя ФР.
//
// Сумма - <Число>
// - Вносимая сумма.
//
// Возвращаемое значение:
// <ПеречислениеСсылка.ТООшибки*> - Результат выполнения операции.
//
Функция Сумма(Объект, Пароль, Сумма) Экспорт
Результат = мНетОшибки;
Пока Истина Цикл
Если Не Объект.Драйвер.ПроверитьСостояниеПечати(Объект.ИДУстройства) Тогда
Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);
Ответ = Вопрос(Объект.ОписаниеОшибки + Символы.ПС
+ "Устраните неисправность и нажмите ""Повторить"" для продолжения печати.", РежимДиалогаВопрос.ПовторитьОтмена, 0, КодВозвратаДиалога.Повторить);
Если Ответ = КодВозвратаДиалога.Повторить Тогда
Объект.Драйвер.ПродолжитьПечать(Объект.ИДУстройства);
Если Результат <> мНетОшибки И Объект.Драйвер.ПроверитьСостояниеПечати(Объект.ИДУстройства) Тогда
Результат = мНетОшибки;
Прервать;
КонецЕсли;
Иначе
Результат = мНетОшибки;
Прервать;
КонецЕсли;
Иначе
Если Результат = мНетОшибки И Не Объект.Драйвер.НапечататьЧекВнесенияВыемки(Объект.ИДУстройства, Сумма) Тогда
Результат = мОшибкаНеизвестно;
Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции // Сумма()
// Функция осуществляет открытие чека на ФР.
// (API v2.4)
//
// Параметры:
// Объект - <*>
// - Объект драйвера ФР.
//
// Пароль - <Число>
// - Пароль пользователя ФР.
//
// ЭтоВозврат - <Булево>
// - Истина в случае, если открывается чек на возврат.
//
// НомерЧека - <Число>
// - Выходной параметр; номер чека ФР.
//
// НомерСмены – <Число>
// - Выходной параметр; номер текущей смены ФР.
//
// ФискальныйЧек – <Булево>
// - Устанавливает признак фискального чека.
//
// Возвращаемое значение:
// <ПеречислениеСсылка.ТООшибки*> - Результат выполнения операции.
//
Функция ОткрытьЧек(Объект, Пароль, ЭтоВозврат, НомерЧека, НомерСмены, ФискальныйЧек = Истина) Экспорт
Результат = мНетОшибки;
НомерЧека = 0;
НомерСмены = 0;
Пока Истина Цикл
Если Не Объект.Драйвер.ПроверитьСостояниеПечати(Объект.ИДУстройства) Тогда
Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);
Ответ = Вопрос(Объект.ОписаниеОшибки + Символы.ПС
+ "Устраните неисправность и нажмите ""Повторить"" для продолжения печати.", РежимДиалогаВопрос.ПовторитьОтмена, 0, КодВозвратаДиалога.Повторить);
Если Ответ = КодВозвратаДиалога.Повторить Тогда
Объект.Драйвер.ПродолжитьПечать(Объект.ИДУстройства);
Если Результат <> мНетОшибки И Объект.Драйвер.ПроверитьСостояниеПечати(Объект.ИДУстройства) Тогда
Результат = мНетОшибки;
Прервать;
КонецЕсли;
Иначе
Объект.Драйвер.ОтменитьЧек(Объект.ИДУстройства);
Объект.ОписаниеОшибки = Объект.ОписаниеОшибки + ". Операция печати чека отменена.";
Результат = мОшибкаНеизвестно;
Прервать;
КонецЕсли;
Иначе
Если Результат = мНетОшибки И Не Объект.Драйвер.ОткрытьЧек(Объект.ИДУстройства, ФискальныйЧек, ЭтоВозврат, Истина, НомерЧека, НомерСмены) Тогда
Результат = мОшибкаНеизвестно;
Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции // ОткрытьЧек()
// Функция осуществляет печать строки чека на ФР.
// (API v2.0)
//
// Параметры:
// Объект - <*>
// - Объект драйвера ФР.
//
// Наименование - <Строка>
// - Описание товара, отображаемое в чеке.
//
// Количество - <Число>
// - Количество выводимой номенклатуры.
//
// Цена - <Число>
// - Цена выводимой номенклатуры за единицу.
//
// Скидка - <Число>
// - Скидка в % на выводимую номенклатуру.
// В случае, если это значение < 0, абсолютное
// значение данного параметра считается наценкой.
//
// Отдел - <Число>
// - Номер отдела (секции), которой соответствует данная строка.
//
// НДС - <Число>
// - Ставка НДС в %
//
// Возвращаемое значение:
// <ПеречислениеСсылка.ТООшибки*> - Результат выполнения операции.
//
Функция ПечататьСтроку(Объект, Наименование, Количество, Цена, Скидка, Отдел, НДС) Экспорт
Результат = мНетОшибки;
СуммаПозиции = Количество*Цена - Окр(Количество*Цена*Скидка/100, 2, РежимОкругления.Окр15как20);
Пока Истина Цикл
Если Не Объект.Драйвер.ПроверитьСостояниеПечати(Объект.ИДУстройства) Тогда
Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);
Ответ = Вопрос(Объект.ОписаниеОшибки + Символы.ПС
+ "Устраните неисправность и нажмите ""Повторить"" для продолжения печати.", РежимДиалогаВопрос.ПовторитьОтмена, 0, КодВозвратаДиалога.Повторить);
Если Ответ = КодВозвратаДиалога.Повторить Тогда
Объект.Драйвер.ПродолжитьПечать(Объект.ИДУстройства);
Если Результат <> мНетОшибки И Объект.Драйвер.ПроверитьСостояниеПечати(Объект.ИДУстройства) Тогда
Результат = мНетОшибки;
Прервать;
КонецЕсли;
Иначе
Объект.Драйвер.ОтменитьЧек(Объект.ИДУстройства);
Объект.ОписаниеОшибки = Объект.ОписаниеОшибки + ". Операция печати чека отменена.";
Результат = мОшибкаНеизвестно;
Прервать;
КонецЕсли;
Иначе
Если Результат = мНетОшибки И Не Объект.Драйвер.НапечататьФискСтроку(Объект.ИДУстройства, Наименование, Количество, Цена, СуммаПозиции, Отдел, НДС) Тогда
Результат = мОшибкаНеизвестно;
Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);
Иначе
Если Результат <> мНетОшибки Тогда
Объект.Драйвер.ОтменитьЧек(Объект.ИДУстройства);
КонецЕсли;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции // ПечататьСтроку()
// Функция осуществляет аннулирование текущего открытого чека на ФР.
// (API v1.0)
//
// Параметры:
// Объект - <*>
// - Объект драйвера ФР.
//
// Возвращаемое значение:
// <ПеречислениеСсылка.ТООшибки*> - Результат выполнения операции.
//
Функция АннулироватьЧек(Объект) Экспорт
Возврат ОтменитьЧек(Объект);
КонецФункции // АннулироватьЧек()
// Функция осуществляет отмену текущего открытого чека на ФР.
// (API v2.0)
//
// Параметры:
// Объект - <*>
// - Объект драйвера ФР.
//
// Возвращаемое значение:
// <ПеречислениеСсылка.ТООшибки*> - Результат выполнения операции.
//
Функция ОтменитьЧек(Объект) Экспорт
Результат = мНетОшибки;
Если Не Объект.Драйвер.ОтменитьЧек(Объект.ИДУстройства) Тогда
Результат = мОшибкаНеизвестно;
Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);
КонецЕсли;
Возврат Результат;
КонецФункции // ОтменитьЧек()
// Функция осуществляет закрытие текущего открытого чека на ФР.
// (API v2.0)
//
// Параметры:
// Объект - <*>
// - Объект драйвера ФР.
//
// СуммаНал - <Число>
// - Сумма, внесённая наличными.
//
// СуммаБезнал - <Число>
// - Сумма, внесённая при помощи карты.
//
// Возвращаемое значение:
// <ПеречислениеСсылка.ТООшибки*> - Результат выполнения операции.
//
Функция ЗакрытьЧек(Объект, СуммаНал, СуммаБезнал) Экспорт
Результат = мНетОшибки;
Пока Истина Цикл
Если Не Объект.Драйвер.ПроверитьСостояниеПечати(Объект.ИДУстройства) Тогда
Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);
Ответ = Вопрос(Объект.ОписаниеОшибки + Символы.ПС
+ "Устраните неисправность и нажмите ""Повторить"" для продолжения печати.", РежимДиалогаВопрос.ПовторитьОтмена, 0, КодВозвратаДиалога.Повторить);
Если Ответ = КодВозвратаДиалога.Повторить Тогда
Объект.Драйвер.ПродолжитьПечать(Объект.ИДУстройства);
Если Результат <> мНетОшибки И Объект.Драйвер.ПроверитьСостояниеПечати(Объект.ИДУстройства) Тогда
Результат = мНетОшибки;
Прервать;
КонецЕсли;
Иначе
Объект.Драйвер.ОтменитьЧек(Объект.ИДУстройства);
Объект.ОписаниеОшибки = Объект.ОписаниеОшибки + ". Операция печати чека отменена.";
Результат = мОшибкаНеизвестно;
Прервать;
КонецЕсли;
Иначе
Если Результат = мНетОшибки И Не Объект.Драйвер.ЗакрытьЧек(Объект.ИДУстройства, СуммаНал, СуммаБезнал, 0) Тогда
Результат = мОшибкаНеизвестно;
Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);
Иначе
Если Результат <> мНетОшибки Тогда
Объект.Драйвер.ОтменитьЧек(Объект.ИДУстройства);
КонецЕсли;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции // ЗакрытьЧек()
// Функция осуществляет построчную печать нефискального чека из переданного массива строк.
// (API v2.0)
//
// Параметры:
// Объект - <*>
// - Объект драйвера ФР.
//
// МассивСтрок - <Массив>
// - Массив строк для печати.
//
// Ширина - <Число>
// - Ширина чековой ленты.
//
// Возвращаемое значение:
// <ПеречислениеСсылка.ТООшибки*> - Результат выполнения операции.
//
Функция НапечататьСтроки(Объект, МассивСтрок, Ширина) Экспорт
Результат = мНетОшибки;
НомерЧека = 0;
НомерСмены = 0;
ПечатьСтрокОтмена = Ложь;
Для Каждого СтрокаТекста Из МассивСтрок Цикл
Пока Истина Цикл
Если Не Объект.Драйвер.ПроверитьСостояниеПечати(Объект.ИДУстройства) Тогда
Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);
Ответ = Вопрос(Объект.ОписаниеОшибки + Символы.ПС
+ "Устраните неисправность и нажмите ""Повторить"" для продолжения печати.", РежимДиалогаВопрос.ПовторитьОтмена, 0, КодВозвратаДиалога.Повторить);
Если Ответ = КодВозвратаДиалога.Повторить Тогда
Объект.Драйвер.ПродолжитьПечать(Объект.ИДУстройства);
Если Результат <> мНетОшибки И Объект.Драйвер.ПроверитьСостояниеПечати(Объект.ИДУстройства) Тогда
Результат = мНетОшибки;
Прервать;
КонецЕсли;
Иначе
ПечатьСтрокОтмена = Истина;
Объект.Драйвер.ОтменитьЧек(Объект.ИДУстройства);
Объект.ОписаниеОшибки = Объект.ОписаниеОшибки + ". Операция печати чека отменена.";
Результат = мОшибкаНеизвестно;
Прервать;
КонецЕсли;
Иначе
Если Результат = мНетОшибки И Не Объект.Драйвер.НапечататьНефискСтроку(Объект.ИДУстройства, СтрокаТекста) Тогда
Результат = мОшибкаНеизвестно;
Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);
Иначе
Если Результат <> мНетОшибки Тогда
ПечатьСтрокОтмена = Истина;
Объект.Драйвер.ОтменитьЧек(Объект.ИДУстройства);
Прервать;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ПечатьСтрокОтмена Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
// Функция возвращает Истину, если поддерживается смешанный режим печати
// чека (одновременно фискальные и нефискальные строки).
// (API v2.4)
//
// Параметры:
//
// Возвращаемое значение:
// <Булево>
//
Функция ПоддерживаетсяСмешанныйРежимПечати() Экспорт
Возврат Истина;
КонецФункции // ПоддерживаетсяСмешанныйРежимПечати()
///////////////////////////////////////////////////////////////////////////////
//// ПРОЦЕДУРЫ И ФУНКЦИИ
Функция ВерсииРавны() Экспорт
Результат = Истина;
Если мВерсияИзДрайвера <> Неопределено Тогда
Для Индекс = 1 По ?(СтрДлина(мВерсияИзДрайвера) < СтрДлина(мВерсияТребуемая), СтрДлина(мВерсияИзДрайвера), СтрДлина(мВерсияТребуемая)) Цикл
Если Сред(мВерсияИзДрайвера,Индекс, 1) <> Сред(мВерсияТребуемая, Индекс, 1) Тогда
Результат = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Иначе
Результат = Ложь;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ВерсииСовместимы(СовместимыеВерсии) Экспорт
Результат = Истина;
Если мВерсияИзДрайвера <> Неопределено Тогда
Если СовместимыеВерсии.Количество() = 0 Тогда
Результат = Ложь;
Иначе
Для Каждого СтрокаТаблицы Из СовместимыеВерсии Цикл
Результат = Истина;
Для Индекс = 1 По ?(СтрДлина(мВерсияИзДрайвера) < СтрДлина(СтрокаТаблицы.СовместимаяВерсия), СтрДлина(мВерсияИзДрайвера), СтрДлина(СтрокаТаблицы.СовместимаяВерсия)) Цикл
Если Сред(мВерсияИзДрайвера,Индекс, 1) <> Сред(СтрокаТаблицы.СовместимаяВерсия, Индекс, 1) Тогда
Результат = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Если Результат Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Иначе
Если СовместимыеВерсии.Найти("Не определена", "СовместимаяВерсия") <> Неопределено Тогда
Результат = Истина;
Иначе
Результат = Ложь;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ПроверкаСостоянияПечати(Объект)
Результат = мНетОшибки;
Пока Истина Цикл
Если Не Объект.Драйвер.ПроверитьСостояниеПечати(Объект.ИДУстройства) Тогда
Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);
Ответ = Вопрос(Объект.ОписаниеОшибки + Символы.ПС
+ "Устраните неисправность и нажмите ""Повторить"" для продолжения операции.", РежимДиалогаВопрос.ПовторитьОтмена, 0, КодВозвратаДиалога.Повторить);
Если Ответ = КодВозвратаДиалога.Повторить Тогда
Объект.Драйвер.ПродолжитьПечать(Объект.ИДУстройства);
Иначе
Прервать;
КонецЕсли;
Иначе
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
///////////////////////////////////////////////////////////////////////////////
//// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ
мНетОшибки = Перечисления.ТООшибкиОбщие.ПустаяСсылка();
мОшибкаПараметровНастройки = Перечисления.ТООшибкиОбщие.ОшибкаПараметровНастройки;
мОшибкаЗагрузкиДрайвера = Перечисления.ТООшибкиОбщие.ОшибкаЗагрузкиДрайвера;
мОшибкаНеизвестно = Перечисления.ТООшибкиОбщие.ОшибкаНеизвестно;
мОшибкаПриПодключении = Перечисления.ТООшибкиОбщие.ОшибкаПриПодключении;
мОшибкаТестНеПройден = Перечисления.ТООшибкиОбщие.ОшибкаТестНеПройден;
мОшибкаНетВозможностиПечатиПКО = Перечисления.ТООшибкиФР.ОшибкаНетВозможностиПечатиПКО;
// Поддерживаемые модели фискальных регистраторов
мМодели = Новый Массив();
мМодели.Добавить("ШТРИХ-950-К");
мМодели.Добавить("ШТРИХ-КОМБО-ФР-К");
мМодели.Добавить("ШТРИХ-МИНИ-ФР-К");
мМодели.Добавить("ШТРИХ-ФР-К");
мМодели.Добавить("ШТРИХ-М-ФР-К");
мМодели.Добавить("ШТРИХ-КИОСК-ФР-К");
мМодели.Добавить("ЭЛВЕС-ФР-К");
мМодели.Добавить("ШТРИХ-LIGHT-ФР-К");
мМодели.Добавить("ШТРИХ-ФР-Ф исп.03");
мМодели.Добавить("ШТРИХ-ФР-Ф исп.04");
мНДС = Новый Массив();
мНДС.Добавить(0);
мНДС.Добавить(15.00);
мНДС.Добавить(0);
мНДС.Добавить(0);
мИдентификатор = Новый УникальныйИдентификатор;
мВерсияОбработки = 2.25;
мВерсияТребуемая = "4.9";
мВерсияИзДрайвера = Неопределено;
#КонецЕсли