Форум программистов, компьютерный форум, киберфорум
1С: Типовые и стандартные решения
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
388 / 190 / 76
Регистрация: 04.03.2020
Сообщений: 704
1

СформироватьОчередьЧеков в УТ, УНФ и проч

06.01.2021, 18:21. Показов 3488. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый, камрады, френды и амиги.
В связи с последними телодвижениями нашего дорогого Правительства начал изучать возможность печати чеков на одном ККТ с нескольких рабочих мест. Выяснил следующее:
В последних релизах основных конфигураций УТ11, УНФ, Розницы, да чего там!, даже БП3 есть регистр ОчередьЧековККТ.
Судя по одному из описаний обновлений, туда падают чеки при загрузке с сайта для их последующего пробития.
Далее на примере УТ:
В общем модуле МенеджерОборудованияВызовСервера обнаружилась процедура ДобавитьЧекВОчередьЧековККТ с некоей структурой в качестве входящего параметра.
В общих модулях ПодключаемоеОборудованиеУТВызовСервера и ПодключаемоеОборудованиеУТКлиент есть процедуры СформироватьОчередьЧеков., причём в серверном модуле параметром передаётся только ссылка на документ (какой? у которого в модуле менеджера есть процедура СобратьДанныеЧеков?).
В клиентском модуле параметров поболе.
Но.
Вызова означенных процедур я нигде не нашёл. Яндекс и гугл по поводу них молчит, как рыба об лёд.

А теперь внимание, вопрос: Может кто кинет в меня ссылкой на внятное описание или примера использования процедуры СформироватьОчередьЧеков?
В противном случае (угроза) я начну чеки по одному записывать прямо в регистр, пока кто-нибудь не распечатается на ККТ.

Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.01.2021, 18:21
Ответы с готовыми решениями:

Синхронизация УНФ с мобильным приложением УНФ
Здравствуйте! Пробуем сделать синхронизацию , база весит 24гб (файловая). В начале писал, что...

По приемникам, МШУ, и проч. Вопрос.
Помогите, плз, разобраться в таких моментах... Есть приемник на любимой MRF49XA, с...

Перекрытие картинками содержимого H1, H2 и проч.
Уже который раз замечаю, просматривая код страниц, подобный приём. <div>Код</div><div><style>...

Связи таблиц в миграциях (Many to Many и проч.), каскады
Добрый день. Есть таблицы: USER - таблица служебной информации о пользователе PROFILE -...

2
388 / 190 / 76
Регистрация: 04.03.2020
Сообщений: 704
07.01.2021, 13:55  [ТС] 2
Ехаем дальше.
Как в регистр ОчередьЧековККТ чего-нибудь положить, пока отложим. В конце, этих, концов, туда всегда записать можно непосредственно.
А вот далее мне интересно, чтобы они на ККТ как-то сами пробивались.
Из упоминаний регистра в тексте ближе всего по смыслу ОбщийМодуль.МенеджерОборудованияВызовСервера.ЧекиВОчередиНаФискализацию(): там отбираются чеки с СтатусЧека новые или ошибочные для перепробития.
Вызывается эта функция только из процедуры ОбщийМодуль.МенеджерОборудованияКлиент.ФискализацияЧековВОчереди, та из ОбщийМодуль.МенеджерОборудованияКлиент.ОбработкаОповещенияСообщенийФискализации(, а эта из ОбщийМодуль.МенеджерОборудованияКлиент.ПодключениеСистемыВзаимодействия(), и... всё!
Негусто, блин. Это для организации очереди чеков я должен ещё поднимать Сервер взаимодействия в уже имеющийся и без того разношёрстный зоопарк различных служб и систем; на машину, которая, обычно и так дышит на смолу дерева Босвеллия.
С другой стороны, не хочется ваять свою реализацию очереди чеков ККТ при имеющейся (?) оригинальной.
Жду рекомендаций по направлению движения.
Спасибо.
0
388 / 190 / 76
Регистрация: 04.03.2020
Сообщений: 704
31.05.2021, 13:08  [ТС] 3
Значит что нарыл: Для УТ11.
Записать чек в очередь:
Кликните здесь для просмотра всего текста

1C
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
&НаСервере
Процедура ДобавитьЧекВОчередьЧековККТ()
    ПараметрыЧекаККТ = Новый Структура;
    ПараметрыЧекаККТ.Вставить("ИдентификаторФискальнойЗаписи", Строка(Новый УникальныйИдентификатор));
    ПараметрыЧекаККТ.Вставить("ДокументОснование", Объект.Чек);
    ПараметрыЧекаККТ.Вставить("Организация", Объект.Чек.Организация);
    ПараметрыЧекаККТ.Вставить("ОрганизацияИНН", Объект.Чек.Организация.ИНН);
    ПараметрыЧекаККТ.Вставить("ОрганизацияНазвание", Объект.Чек.Организация.Наименование);
    ПараметрыЧекаККТ.Вставить("СистемаНалогообложения", Перечисления.ТипыСистемНалогообложенияККТ.УСНДоход);
    ПараметрыЧекаККТ.Вставить("ТорговыйОбъект", Объект.Чек.Склад);
    ПараметрыЧекаККТ.Вставить("СубъектПерсональныхДанных", Объект.Чек.Кассир);
    ПараметрыЧекаККТ.Вставить("ТипРасчета", Перечисления.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств);
    ПараметрыЧекаККТ.Вставить("Кассир", Объект.Чек.Кассир);
    ПараметрыЧекаККТ.Вставить("КассирИНН", Объект.Чек.Организация.ИНН);
    ПараметрыЧекаККТ.Вставить("Электронно", Ложь);
    ПараметрыЧекаККТ.Вставить("Отправляет1СEmail", Ложь);
    ПараметрыЧекаККТ.Вставить("Отправляет1СSMS", Ложь);
    ПараметрыЧекаККТ.Вставить("Получатель", "");
    ПараметрыЧекаККТ.Вставить("ПолучательИНН", "");
    ПараметрыЧекаККТ.Вставить("ПризнакАгента", "");
    ПараметрыЧекаККТ.Вставить("ДанныеПоставщика", Новый Структура("Наименование,Телефон,ИНН,Адрес","","","",""));
    ПараметрыЧекаККТ.Вставить("ДанныеАгента", 
        Новый Структура("ПлатежныйАгент,ОператорПеревода,ОператорПоПриемуПлатежей",
            Новый Структура("Операция,Телефон,ИНН,Адрес","","","",""),
            Новый Структура("Наименование,Телефон,ИНН,Адрес","","","",""),
            Новый Структура("Наименование,Телефон,ИНН,Адрес","","","","")
        )
    );
    ПараметрыЧекаККТ.Вставить("ДополнительныйРеквизит", "");
    ПараметрыЧекаККТ.Вставить("ДополнительныйРеквизитПользователя", Новый Структура("Наименование,Значение","",""));
    ПараметрыЧекаККТ.Вставить("ЕдиныйЧек", Ложь);
    ПараметрыЧекаККТ.Вставить("ОтправительEmail", "");
    
    ПараметрыЧекаККТ.Вставить("ПозицииЧека", Новый Массив);
    Для Каждого стТовар Из Объект.Чек.Товары Цикл
        Ст = Новый Структура;
        ст.Вставить("ФискальнаяСтрока");
        ст.Вставить("Наименование", стТовар.Номенклатура.НаименованиеПолное);
        ст.Вставить("Количество", стТовар.Количество);
        ст.Вставить("Цена", стТовар.Цена);
        ст.Вставить("ЦенаСоСкидками", стТовар.Цена);
        ст.Вставить("Сумма", стТовар.Сумма);
        ст.Вставить("СуммаСкидок", 0);
        ст.Вставить("НомерСекции", 0);
        ст.Вставить("СтавкаНДС", 0);
        ст.Вставить("СуммаНДС", 0);
        ст.Вставить("СуммаСкидок", 0);
        ст.Вставить("ДанныеКодаТоварнойНоменклатуры", Новый Структура);
        ст.Вставить("ПризнакПредметаРасчета", "Товар");
        ст.Вставить("ПризнакСпособаРасчета", "Приход");
        //ст.Вставить("ДанныеКодаТоварнойНоменклатуры", Новый Структура("",));
        ст.Вставить("КодСтраныПроисхожденияТовара", "");
        ст.Вставить("НомерТаможеннойДекларации", "");
        ст.Вставить("СуммаАкциза", "");
        ст.Вставить("ЕдиницаИзмерения", стТовар.Упаковка.Наименование);
        ст.Вставить("ПризнакАгентаПоПредметуРасчета", "");
        ст.Вставить("ДанныеПоставщика", Новый Структура("Наименование,Телефон,ИНН,Адрес","","","",""));
        ст.Вставить("ДанныеАгента", 
            Новый Структура("ПлатежныйАгент,ОператорПеревода,ОператорПоПриемуПлатежей",
                Новый Структура("Операция,Телефон,ИНН,Адрес","","","",""),
                Новый Структура("Наименование,Телефон,ИНН,Адрес","","","",""),
                Новый Структура("Наименование,Телефон,ИНН,Адрес","","","","")
            )
        );
        ст.Вставить("ДополнительныйРеквизит", "");
        ст.Вставить("ТекстоваяСтрока", "");
        ст.Вставить("ШтрихКод", "");
        
        ПараметрыЧекаККТ.ПозицииЧека.Добавить(ст);
    КонецЦикла;
 
    ПараметрыЧекаККТ.Вставить("ТаблицаОплат", Новый Массив);
    ПараметрыЧекаККТ.ТаблицаОплат.Добавить(Новый Структура("ТипОплаты,Сумма", Перечисления.ТипыОплатыККТ.Наличные, Объект.Чек.СуммаДокумента));
    
    ПараметрыЧекаККТ.Вставить("НефискальныеДокументы", Новый Массив);
    
    МенеджерОборудованияВызовСервера.ДобавитьЧекВОчередьЧековККТ(ПараметрыЧекаККТ);
КонецПроцедуры

Все указанные поля структуры обязательны. Все заполненные поля структуры обязательны для заполнения.
В этом случае при нажатии на кнопку Фискализировать всё чек будет пробит и отмечен в очереди как пробитый.
Если надо пробивать автоматом, а Сервер взаимодействия, наоборот, не нужен, тогда где-то по таймеру или по событию выполняется примерно следующий код:
Кликните здесь для просмотра всего текста

1C
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
&НаКлиенте
Перем ЧекиДляФискализации, ИдентификаторУстройстваККТ, НомерСтроки;
 
&НаКлиенте
Процедура ФискализироватьВсе(Команда)
    ЧекиДляФискализации = ПолучитьЧекиДляФискализации();
    ВыбратьФискальноеУстройство();
КонецПроцедуры
 
&НаСервере
Функция ПолучитьЧекиДляФискализации()
    ЧекиДляФискализации = Новый Массив;
    
    Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |   ОчередьЧековККТ.ДокументОснование КАК ДокументОснование,
        |   ОчередьЧековККТ.ИдентификаторЗаписи КАК ИдентификаторЗаписи,
        |   ОчередьЧековККТ.СтатусЧека КАК СтатусЧека
        |ИЗ
        |   РегистрСведений.ОчередьЧековККТ КАК ОчередьЧековККТ
        |ГДЕ
        |   ОчередьЧековККТ.СтатусЧека <> ЗНАЧЕНИЕ(Перечисление.СтатусЧекаККТВОчереди.Фискализирован)");
 
    Значение = Запрос.Выполнить().Выбрать();
    Пока Значение.Следующий() Цикл
        ЧекиДляФискализации.Добавить(Новый Структура("ИдентификаторЗаписи,СтатусЧека", Значение.ИдентификаторЗаписи, Значение.СтатусЧека));
    КонецЦикла;
    
    Возврат ЧекиДляФискализации;
КонецФункции
 
&НаКлиенте
Процедура ВыбратьФискальноеУстройство()
    
    НомерСтроки = 0;
    
    ИдентификаторУстройстваККТ = Неопределено;
    
    ПоддерживаемыеТипыВО = Новый Массив();
    ПоддерживаемыеТипыВО.Добавить("ККТ");
    
    ПослеВыбратьУстройство = Новый ОписаниеОповещения("ВыбратьФискальноеУстройство_Завершение", ЭтотОбъект, Параметры);
    МенеджерОборудованияКлиент.ПредложитьВыбратьУстройство(ПослеВыбратьУстройство, ПоддерживаемыеТипыВО,
            НСтр("ru='Выберите фискальное устройство'"),
            НСтр("ru='Фискальное устройство не подключено.'"), 
            НСтр("ru='Фискальное устройство не выбрано.'"), Истина);
    
КонецПроцедуры
 
&НаКлиенте
Процедура ВыбратьФискальноеУстройство_Завершение(ИдентификаторУстройства, Параметры) Экспорт
    
    Если ИдентификаторУстройства <> Неопределено Тогда
        НачатьФискализациюЧеков();
    Иначе
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Фискальное устройство не выбрано.'"));
    КонецЕсли;
    
КонецПроцедуры
 
&НаКлиенте
Процедура НачатьФискализациюЧеков()
    
    Если НомерСтроки < ЧекиДляФискализации.Количество() Тогда
        
        Данные = ЧекиДляФискализации[НомерСтроки];
        НомерСтроки = НомерСтроки + 1;
        
        Если Данные.СтатусЧека = ПредопределенноеЗначение("Перечисление.СтатусЧекаККТВОчереди.Новый") 
            Или Данные.СтатусЧека = ПредопределенноеЗначение("Перечисление.СтатусЧекаККТВОчереди.Ошибка") Тогда
            
            ОбщиеПараметры = МенеджерОборудованияВызовСервера.ДанныеЧекаВОчереди(Данные.ИдентификаторЗаписи).ДанныеЧека;
            
            СтатусЧека = ПредопределенноеЗначение("Перечисление.СтатусЧекаККТВОчереди.Фискализируется");
            МенеджерОборудованияВызовСервера.ЗаписатьСтатусЧекаВОчереди(ОбщиеПараметры, СтатусЧека, ИдентификаторУстройстваККТ);
                
            ОписаниеОповещения = Новый ОписаниеОповещения("НачатьФискализациюЧеков_Завершение", ЭтотОбъект, ОбщиеПараметры);
            МенеджерОборудованияКлиент.НачатьФискализациюЧекаНаФискальномУстройстве(ОписаниеОповещения, УникальныйИдентификатор, ОбщиеПараметры, ИдентификаторУстройстваККТ);
                
        Иначе
            НачатьФискализациюЧеков();
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры
 
&НаКлиенте
Процедура НачатьФискализациюЧеков_Завершение(РезультатВыполнения, Параметры) Экспорт
    
    Если РезультатВыполнения.Результат Тогда
        СтатусЧека = ПредопределенноеЗначение("Перечисление.СтатусЧекаККТВОчереди.Фискализирован");
        ТекстСообщения = "";
    Иначе
        СтатусЧека = ПредопределенноеЗначение("Перечисление.СтатусЧекаККТВОчереди.Ошибка");
        ТекстСообщения = РезультатВыполнения.ОписаниеОшибки;
    КонецЕсли;
    
    МенеджерОборудованияВызовСервера.ЗаписатьСтатусЧекаВОчереди(Параметры, СтатусЧека, Неопределено, ТекстСообщения);
    
    ПодключитьОбработчикОжидания("НачатьФискализациюЧеков", 1, Истина);
    
КонецПроцедуры

Всё безжалостно с корнем выдрано из формы списка регистра ОчередьЧековККТ, но, несмотря на это, успешно отрабатывается из внешней обработки.
Всем спасибо за сочувствие.
0
31.05.2021, 13:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.05.2021, 13:08
Помогаю со студенческими работами здесь

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

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

Кусты, трава и проч. растительность в OpenGL ES
Подскажите, как можно нарисовать траву, кусты в OpenGL, не создавая сложных объемных объектов, но...

Вымогатели, смс, фишинг и проч при клике
Имхо, многие из последних тем (типа отсылает не туда...) сводятся к: 1. Проверить файл hosts...

Как делать шаблоны с header, footer и проч?
Как делать шаблоны с header, footer и проч?

поиск работы в Петербурге: тестер, внедрение ПО, проч.
Добрый день, меня Зовут Сергей, мне 27. Опыт работы в трансп. логистике 2 года. Знаком с СУБД...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru