Всем привет! Беда, друзья! кто поможет, отблагодарю, чесслово.

Есть фискальник Штрих-м фр-к.
Хочу сделать к 1С УТ 10 или КА 1.1 обработку для отражения выплаты денег из фискального регистратора.

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

весь сыр-бор из-за того, что в Z-отчете есть строка "нал в кассе". в ФР Штрих-М есть опция "Автомат.обнуление наличности". т.е. при закрытии смены нал в кассе обнуляется.
а надо инкассировать не всю сумму. и чтобы остаток переносился.
так вот тут либо совсем убрать эту строку из Z-отчета (штатно не знаю как), либо сделать клиенту обработку, которая бы подавала команду на ФР на вылату денег из кассы.
только хз как это сделать(
---
El_Loco,
Чтобы работало "ПодключитьКлиента" добавь в модуль формы своей обработки функцию:

```1c
    // Функция возвращает признак того, что клиент поддерживает работу с видом ТО,
    // переданным в качестве параметра.
    //
    // Параметры:
    // Вид - <ПеречислениеСсылка.ВидыТорговогоОборудования>
    // - Вид торгового оборудования, информация о поддержке
    // которого запрашивается.
    //
    // Возвращаемое значение:
    // <Булево> - Признак поддержки указанного класса торгового оборудования.
    //
    Функция ПоддерживаетсяВидТО(Вид) Экспорт

    Результат = Ложь;

    Если Вид = Перечисления.ВидыТорговогоОборудования.ФискальныйРегистратор Тогда
    Результат = Истина;
    КонецЕсли;

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

    КонецФункции // ПоддерживаетсяВидТО()
```
---
El_Loco, В таблице "Тип и режимы кассы" у ФР, есть поле "Печать необнуляемой суммы" по умолчанию там стоит 1, надо установить 0. Может это поможет.
---
orfos, им надо выводить.
---
El_Loco, на Атоловских ФР можно было менять шаблон чека/z-отчета. Это касается АСПД. Поищи шаблоны в настройках драйвера.
---
El_Loco, программно тоже можно реализовать относительно небольшой кровью. Нечто подобное я делал для БП 3.0 Печать чека с другим видом оплаты, обработка на инфостарте есть.
---
El_Loco, Вот нашел в БП 3.0 модуле "ПодключаемоеОборудованиеШтрихМФискальныеРегистраторыКлиент"­. Есть функция:

Функция Инкассация(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТипИнкассации, Сумма, ВыходныеПараметры)

 Результат = Истина;

 Результат = ОбъектДрайвера.НапечататьЧекВнесенияВыемки(ПараметрыПодключения.ИДУстройства,
                            ?(ТипИнкассации = 1, Сумма, -Сумма));
 Если НЕ Результат Тогда
  ВыходныеПараметры.Добавить(999);
  ВыходныеПараметры.Добавить("");
  КодОшибки = ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);

  ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
 Иначе
  // Заполнение выходных параметров
  ВыходныеПараметры.Добавить(0);
  ВыходныеПараметры.Добавить(0);
  ВыходныеПараметры.Добавить(0);
  ВыходныеПараметры.Добавить(МенеджерОборудованияКлиентПереопределяемый.ДатаСеанса());
 КонецЕсли;

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

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

Т.е вам надо только передать сумму выемки.
---
orfos, код из БП 3.0 меня смущает.

а вот я совершенно забыл, что в КА как и УТ 10.3 есть интерфейс кассира, в котором есть меню Сервис - Изъятие денег.

```1c
    // Процедура вызывается при выборе пункта подменю "Изъятие денег" командной панели
    // формы.
    //
    Процедура ДействияФормыИзъятиеДенег(Кнопка)

    Сумма = Неопределено;
    Если ВвестиЧисло(Сумма, "Необходимо ввести сумму", 15, 3) Тогда
    Пароль = ПолучитьСерверТО().ПолучитьПарольКассираККМ();
    Результат = ПолучитьСерверТО().ВнестиСумму(мФР, Пароль, -Сумма);
    Если ЗначениеЗаполнено(Результат) Тогда
    ТекстОшибки = ПолучитьСерверТО().ПолучитьТекстОшибкиФРТО(Результат);
    Предупреждение(ТекстОшибки);
    КонецЕсли;
    КонецЕсли;

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

т.е. что я в 4-м сообщении и писал про функцию ВнестиСумму()...

верно я написал?
---
El_Loco, Поддерживаю (13), Вам нужно продумать как выполнять алгоритм чтобы все было как требуют фискальные органы.
А для КА или УТ тех. реализация для создания внесения/изъятия сделайте следующее:

1. Если подключаете штатными средствами ФР, то сохраните обработку обслуживая ФР "Справочники.ТорговоеОборудование", добавьте в нее 2 функции "Внесение" и "Изъятие" (это будут команды для самого ФР), по аналогии с "XОтчет(Объект, Пароль, НомерЧека, НомерСмены)"
2. В обработке ТОСервер добавьте аналогичные функции (это нужно будет для того чтобы вызывать из любого места СерверТО).
3. В нужное место/документ/обработку добавьте

   Результат = ПолучитьСерверТО().Внесение(мФР);
   Если ЗначениеЗаполнено(Результат) Тогда
        Предупреждение(Результат);
   КонецЕсли;

Подробнее п.1

 Так как типовая обработина пользует драйвер "DrvFR1C", а не "DrvFR" методы которого использованы в "Тест драйвере", то нужно либо найти методы внесения/Изъятия для "DrvFR1C", либо писать свое подключение ФР в СервереТО и мастерить свою обработку обслуживания, где будет использоваться "DrvFR" и в котором можно получить все методы используемые в "Тест драйвере". Т.к. "DrvFR1C" является урезанной версией "DrvFR", используемой специально для 1С.
---
По какой операции у вас выплата? У вас прием стеклотары, металлолома и пр...
Т.е. вы что то получаете и за это расплачиваетесь? Соответственно нужен Чек выплаты денежной суммы за прием чего либо?
---
торгуем в розницу. пробиваем чеки.
по итогу дня получаем выручку в сумме Х рублей.
сдаем в банк выручку (не всю) Y рублей.

в конце дня при закрытии смены в z-отчете должно быть "НАЛ. В КАССЕ Z РУБЛЕЙ"
где Z = x - Y.

так вот сейчас я имею при закрытии смены строку "НАЛ. В КАССЕ X РУБЛЕЙ".
---
El_Loco, а чем "Выемка денег" не устраивает?
---
spacecraft, где можно сделать выемку?
где в 1с КА или УТ10 есть такое? я просто не в курсе.

если вы про то, что через тест драйвера делать выемку, то это неудобно очень.
---
El_Loco, нет сейчас старых версий, посмотреть негде. Ищите что-то вроде "Изъятие денег" в интерфейсе кассира.
---
поковырял код модулей. правильно я думаю, что надо написать что-то типа такого:

```1c
    // ...
    Результат = ПолучитьСерверТО().ВнестиСумму(Идентификатор_ФР, Пароль, Сумма);

    Если ЗначениеЗаполнено(Результат) Тогда
    ОтменитьТранзакцию();
    ТекстОшибки = ПолучитьСерверТО().ПолучитьТекстОшибкиФРТО(Результат);
    Предупреждение(ТекстОшибки);
    Возврат;
    КонецЕсли;
    // ...
```

Функция ВнестиСумму(Идентификатор, Пароль, Сумма) Экспорт

// Функция осуществляет внесение суммы в ФР.
//
// Параметры:
// Идентификатор - <Строка>
// - Идентификатор фискального регистратора.
//
// Пароль - <Число>
// - Пароль фискального регистратора.
//
// Сумма - <Число>
// - Вносимая (>0) или изымаемая (<0) сумма.
//
// Возвращаемое значение:
// <ПеречислениеСсылка.ТООшибки*> - Результат работы функции
//
---
ИМХО, перед тем, как громоздить код, неплохо бы выяснить - а чем чревато исполнение таких хотелок? Дело в том, что согласно правилам эксплуатации ККМ:
1. Сумма, находящаяся в ящике ККМ должна соответствовать сумме всех пробитых чеков плюс разменный фонд (если используется).
2. Сумма, сдаваемая из ККМ в кассу предприятия, должна в точности соответствовать всей выручке за день, плюс разменный фонд (если был выдан).

Попросту говоря - в ящике ККМ на ночь денег оставаться не должно, иначе можно схлопотать штраф вплоть до 40-50 тысяч рублей. Какая "благодарность" за это будет выражена гениальному программисту, реализовавшему такое ТЗ, мне судить сложно, но вряд ли это будет хотя бы 1 $m.
---
Cooler, я тоже нашел в сети переписку, где упоминалось, что надо из операционной кассы сдавать в основную, а потом уже куда они хотят.
т.е. можно было оставить автоматическое обнуление наличности за день и не морочить голову. так нет же - видите ли смущает слово "инкассация" в z-отчете.
убрать совсем эту строку я бы рад, но не знаю как.
собственно в этом и затык основной. а остальные пляски с изъятием это попытки решить проблему другим путем...

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

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

ув. Cooler, а не могли бы вы сказать, куда их ткнуть носом - инструкция, приказ или что-то такое...
---
El_Loco, тут надо читать и сопоставлять минимум два документа: "Типовые правила эксплуатации контрольно-кассовых машин при осуществлении денежных расчетов с населением" (утв. Минфином РФ 30.08.1993 N 104) и Указание Банка России от 11.03.2014 N 3210-У "О порядке ведения кассовых операций", желательно еще и с Кодексом об административных правонарушениях сверяться.

Более-менее человеческим языком результаты такого анализа изложены, например, вот тут, а верить им или нет - дело хозяйское.
---
Изьятие денег есть и в Рознице 2.1
---
Инкассация - это не передача денег инкассатору, а выемка денег из операционной кассы в кассу предприятия.
Простым языком из ящика кассы в сейф. а уж потом передача из сейфа инкассатору.
---
El_Loco
Они обязаны провести изъятие всех денег из ККМ в кассу организации. Пусть формируют два документа. Изъятие денег из ККМ и внесение (размен, утром в начале кассовой смены). Это обеспечит "перенос остатка".
---
fzt, спасибо, учту!
---
захотел написать маленькую обработку для внесения / изъятия денег.

в модуле формы документа ЧекККМ в процедуре ПередОткрытием() есть строка:

```1c
    ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);
```

я так понимаю тут происходит подключение к ФР.

мой код такой:

```1c
    Процедура ИзъятиеДенег(Кнопка)

    МассивФР = ПолучитьСерверТО().ПолучитьСписокУстройств(
    Перечисления.ВидыТорговогоОборудования.ФискальныйРегистратор,
    КассаККМ);

    ФР = Неопределено;
    СписокФР = Новый СписокЗначений();
    Вид = Неопределено;
    Представление = Неопределено;

    Для каждого ФР Из МассивФР Цикл
    ПолучитьСерверТО().ПолучитьПредставлениеУстройства(ФР, Вид, Представление);
    СписокФР.Добавить(ФР, Представление);
    КонецЦикла;

    КоличествоФР = СписокФР.Количество();
    Если КоличествоФР = 0 Тогда
    Ответ = ";
    Отказ = Истина;
    Результат = Истина;
    Возврат; //Возврат Результат
    ИначеЕсли КоличествоФР = 1 Тогда
    ФР = СписокФР[0].Значение;
    Иначе
    ФР = СписокФР.ВыбратьЭлемент("Необходимо выбрать фискальный регистратор");
    Если ФР = Неопределено Тогда
    Ответ = "Операция отменена пользователем.";
    Отказ = Истина;
    Результат = Ложь;
    Возврат; //Возврат Результат
    Иначе
    ФР = ФР.Значение;
    КонецЕсли;
    КонецЕсли;
    ////////////////////////////////////////////////////////////­///
    мФР=ФР;

    Сумма = Неопределено;
    Если ВвестиЧисло(Сумма, "Необходимо ввести сумму", 15, 3) Тогда
    Пароль = ПолучитьСерверТО().ПолучитьПарольКассираККМ();
    Результат = ПолучитьСерверТО().ВнестиСумму(мФР, Пароль, -Сумма);
    Если ЗначениеЗаполнено(Результат) Тогда
    ТекстОшибки = ПолучитьСерверТО().ПолучитьТекстОшибкиФРТО(Результат);
    Предупреждение(ТекстОшибки);
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
```

выдает ошибку "Драйвер ФР не загружен".

если я добавлю в начале своей процедуры строку:

```1c
    ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);
```

там будет ошибка.

так как же мне из внешней обработки подключить ФР, чтобы мой код отработал?
---
El_Loco, см (21)
---
El_Loco,
Чтобы работало "ПодключитьКлиента" добавь в модуль формы своей обработки функцию:

```1c
    // Функция возвращает признак того, что клиент поддерживает работу с видом ТО,
    // переданным в качестве параметра.
    //
    // Параметры:
    // Вид - <ПеречислениеСсылка.ВидыТорговогоОборудования>
    // - Вид торгового оборудования, информация о поддержке
    // которого запрашивается.
    //
    // Возвращаемое значение:
    // <Булево> - Признак поддержки указанного класса торгового оборудования.
    //
    Функция ПоддерживаетсяВидТО(Вид) Экспорт

    Результат = Ложь;

    Если Вид = Перечисления.ВидыТорговогоОборудования.ФискальныйРегистратор Тогда
    Результат = Истина;
    КонецЕсли;

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

    КонецФункции // ПоддерживаетсяВидТО()
```
---
hibico, спасибо, сработало!
---
El_Loco,
Рад помочь.
Жаль только, что при таком курсе, даже на пиво не хватит. :(
---
Вообще типовые действия с деньгами:

Опер. касса

1. пришли на работу внесли деньги.
2. приехали инкассаторы выполнили изъятие.
3. закрыли смену выполнили изъятие.

Касса предприятия

1. Согласно пункту 3.8.1 Правил разменный фонд кассиру необходимо получать под роспись. Но это не означает, что он будет писать какую-либо расписку, так как выдача наличных денег из кассы организации регулируется Порядком ведения кассовых операций в РФ, утвержденным решением Совета директоров ЦБ РФ от 22.09.93 № 40. Так что при выдаче кассиру разменного фонда оформлять нужно расходный кассовый ордер (кассовые документы). В конце рабочего дня кассир должен составить справку-отчет кассира-операциониста (форма № КМ-6) и сдать полученную выручку в основную кассу организации. А вместе с выручкой он сдает и сумму полученного утром разменного фонда. При сдаче денежных средств составляется приходный кассовый ордер.
2. Сделали расходник на инкасацию.
3. Приняли розничную выручку через пко.

А там уж думайте как Вам остаток переносить и автоматизировать процесс.
---
HitGroove, вместе с выручкой он сдает и сумму полученного утром разменного фонда. При сдаче денежных средств составляется приходный кассовый ордер. В рекомендациях по ссылке в (18) советуют оформлять два ПКО: на выручку - отдельно, на разменный фонд - отдельно, в том же размере, что получили утром. Лично я с этими рекомендациями согласен - так эти суммы никогда не будут "смешиваться", что предотвратит претензии со стороны проверяющих.

Так что, ИМХО, автору ветки никакого кода вообще писать не надо, все разруливается на уровне бумажек - РКО и ПКО.
---
Cooler, Согласен, но как я понял автор хочет обработку для УТ/КА чтобы можно было вносить и изымать деньги...
---
HitGroove, да, я хочу понять как ее заставить работать. потому что я не знаю, что мне скажет клиент. а вдруг скажет - мы сами с усами, все знаем, вы нам сделайте и точка.

(27) да, я подключил эмулятор ФР 1сный. настоящего под рукой нет.
из формы документа или обработки закрытия смены моя процедура работает. а из формы моей внешней обработки - нет. я догадываюсь, что нужно как-то подгрузить (подключить) сам драйвер.
---
El_Loco, При нажатии кнопки "параметры" поле драйвер было заполнено (настройка торгового оборудования), если нет установите драйвера например АТОЛовские! По хорошему бы нужен настроящий ФР или АСПД...
---
HitGroove, у меня сразу вопросы:
выручку кассир сдает в полном размере?
в z-отчете остаток показывает сколько денег на конец дня в операционной кассе или в основной?
---
El_Loco,

1. выручку кассир сдает в полном размере? - ДА!
2. в z-отчете остаток показывает сколько денег на конец дня в операционной кассе или в основной? - в операционной!
---
HitGroove, тогда действительно моя писанина нужна в крайнем случае только для разменного фонда (внесение в начале дня).
а раз в конце дня все сдается под чистую, то какой нахрен остаток на конец дня может может быть по опер. кассе...
---
El_Loco, Я подозреваю чтобы вносить утром и изымать вечером или в момент инкассации, т.к. автоматически изъятие по ККМ не происходит, а надо жать кнопку изьять и указывать сумму! Чтобы наличка совпадала с Х и Z отчетом по пункту "Наличных в кассе"...
---
я конечно могу в уже существующую форму всунуть свои кнопки (форма обработки закрытия смены, например).
но хотел понять можно ли из внешней обработки так сделать.
---
El_Loco,
1. СерверТО - обработка обслуживанию оборудования подключенного штатными методами. Оборудование подключено?
2.В модуле обработки ТОСервер есть функция ВнестиСумму(мФР, Пароль, -Сумма)????
---
Добрый День Ел Локо!!
Я не совсем понимаю что вы хотите сделать с ФР там есть стандартные функции инкассации и внесения,
подозреваю что у Вас Фискальник не дружит с УТ/КА, для этого вам надо переписать обработку обслуживания ФР,
не знаете как? - учимся написать обработку обслуживания ФР по стандарту "Совместимо с 1С".
фискальник реальный есть вот на нем и надо все отрабатывать пусть по 1 копейке будет товар пробивать..
или вы деньги продаете? :)
ТОВАР: Деньги: цена 1000р. (выдан кредит)
Товар : возврат денег (чек на возврат) 1000р.
(но тут много подводных камней

Есть соответствующие бизнес процессы с рабочим местом кассира
Опишите пожалуйста какие бизнес процессы вы хотите поменять?

инкассировать можно не всю выручку
а часть перед снятием Z-отчета из 1С.

и вообще вы обновляли УТ/КА до последней версии? может там уже есть нормальная обработка обслуживания вашего Штрих ФР-К?
.
Пример: дано: Розница 2.1 последний релиз 2.1.7.9
в этой конфе нет поддержки фискальников СП402ФР-К
- была дописана эта конфа чтобы все работало
и выемка и внесение и продажи с возвратами... и пр фигней включай продажу с оплатой платежными картами.
все делается из 1С
---
uniworker, с чего бы это Штрих-ФР-К не дружил с УТ? там типовая обработка обслуживания. и все там есть и ничего писать особо не надо. просто он не может этого сделать в своей внешней дополнительной обработке вот и вся проблема. и конфе глубого наплевать на модель ФР. за все отвечает обработка обслуживания. и обновление нечего не даст, тем-более у него конфига 10.3 а не как у вас на управляемых формах, а там сделана работа с торговым оборудованием как в каменном веке по сравнению с 10.3. нужно полностью менять в конфигурации в отличие от 10.3 где достаточно подправить обработку обслуживания и все, что считаю гораздо лучше сделано чем в конфиги на управляемых формах сделано.
---
trade70, Полностью согласен с вами.
---
uniworker, собственно говоря, я имел два вопроса:
1. как дописать обработку (см. пост 22).
2. нужно ли ее писать (законодательный аспект) - HitGroove и Cooler мне ответили.

как программисту начинающему мне все равно интересно как из внешней обработки подключить драйвер ФРа. из формы документа все ок. а вот из обработки никак(
---
El_Loco, Я так думаю что если прописать подключение драйвера (создание объекта внешней компоненты) во внешней обработке то должно все сработать. не используя функции конфигурации
---
из x,z-отчета никакие строки убрать невозможно, т.к. этот документ формируется внутренним ПО кассы (ФР), поэтому правильный путь это сделать/дописать в 1С внесение/выплата.
---
Прочитал заголовок темы - подумал - и откуда в фискальном регистраторе будут выходить наличные ?
---
У нас (в магазине) розничные продажи ведутся в 1 Розница, где есть такая кнопочка "Внесение денег" - по которой продавец вносит необходимую сумму (разменная монета) в начале смены, ну а в конце по закрытию кассовой смены все денежные средства изъимаются, выручка в банк - сумма разменной монеты - в сейф и так по кругу.
---
В 8.Х под ФР ничего не писал, и с "серверомТО" не общался.
В 7.7 работал непосредственно через драйвер ФР.
Если работать через драйвер, то тебе нужен примерно такой код:

```1c
    Пароль = 30;

    // загружаем компоненту ФР
    ЗагрузитьВнешнююКомпоненту("DrvFR.dll");
    ПрогИД = "AddIn.DrvFR1C";
    ПодключитьВнешнююКомпоненту(ПрогИД);
    глФР = Новый (ПрогИД);

    // устанавливаем связь
    глФР.Пароль=Пароль;
    глФР.УстановитьСвязь();

    // внесение денег
    глФР.Пароль=Пароль;
    глФР.Сумма1=Сумма;
    глФР.Внесение();

    // выплата
    глФР.Пароль=Пароль;
    глФР.Сумма1=Сумма;
    глФР.Выплата();

    // Отключаемся
    глФР.Пароль=Пароль;
    глФР.РазорватьСвязь();
```

Это конечно без каких либо проверок.
Можешь посмотреть мою реализацию для 7.7 в конфигурации Мини Рабочее место кассира. Там есть обработка "ШтрихФР".