Внесение денежных средств в ККМ прямо из РМК

12.10.18

Задачи пользователя - Адаптация типовых решений

В типовом механизме внесения ДС в кассу ККМ требуется наличие расходного кассового ордера, но основании которого будет создан документ "Внесение денежных средств в кассу ККМ". Если его нет (и соответственно остатков по РН "ДенежныеСредстваКПоступлениюНаличные"), то выводится сообщение "Нет документов по внесению ДС" (в противном случае открывается список РКО, на основании которых требуется создать внесение ДС). Данная доработка позволяет автоматически создать РКО (с видом операции "Выдача денежных средств в кассу ККМ") вместо выдачи сообщения об отказе и звонку бухгалтеру/администратору.

Идём в главную форму РМК: Обработки.РМКУправляемыйРежим.Формы.Форма и исправляем обработчик внесения ДС:

&НаКлиенте
Процедура ВыполнитьПО02ВвестиВнесениеДенег()
	
	Если НЕ ВозможностьВнесенияДенег() Тогда
		
		//++	
		//ОбщегоНазначенияРТКлиент.ВывестиИнформациюДляРМКУправляемой(НСтр("ru = 'Нет документов по внесению денежных средств'"));
	    _ВопросОСозданииРасходногоКассовогоОрдера();		
		//--
		
		ВывестиИнформациюНаДисплейПокупателя("НачалоРаботы");
		Возврат;
	КонецЕсли;
    
    // &ЗамерПроизводительности
    Замер = ОценкаПроизводительностиРТКлиент.НачатьЗамер(Ложь, "Обработка.РМКУправляемыйРежим.Форма.Форма.Команда.ВвестиВнесениеДенег");
	
	ВывестиИнформациюНаДисплейПокупателя("Сервис");
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("КассыККМ"   , МассивКассККМКлиент);
	ПараметрыФормы.Вставить("Организации", МассивОрганизацийКлиент);
	
	ОбработчикОповещения = Новый ОписаниеОповещения("ОповещениеОткрытьФормуВыбораВнесенияДенег", ЭтотОбъект);
	Режим = РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс;
	ОткрытьФорму("Обработка.РМКУправляемыйРежим.Форма.ФормаВыбораВнесенияДенег", ПараметрыФормы, УникальныйИдентификатор,,,, ОбработчикОповещения, Режим);
	
	ВывестиИнформациюНаДисплейПокупателя("НачалоРаботы");
    
    ОценкаПроизводительностиРТКлиент.ЗакончитьЗамер(Замер);	
    
КонецПроцедуры

т.е. сперва зададим вопрос о создании РКО только если нет документов по внесению ДС (если документы есть, то оставляем все как есть).

При положительном ответе откроем стандартную форму ввода чисел для суммы внесения, далее создадим РКО с этой суммой и продолжим типовой механизм внесения ДС с передачей данных в ККМ.

#Область _Доработки

//++
// Создадим РКО -> появятся остатки в РН "ДенежныеСредстваКПоступлениюНаличные" -> внесем ДС типовым механизмом
&НаКлиенте
Процедура _ВопросОСозданииРасходногоКассовогоОрдера()
	
	Оповещение = Новый ОписаниеОповещения("_ВопросОСозданииРасходногоКассовогоОрдераЗавершение", ЭтотОбъект); 
	ТекстСообщения = "Создать расходный кассовый ордер с видом операции 'Внесение ДС в кассу ККМ'?";
	ОбщегоНазначенияРТКлиент.ВывестиВопросДляРМКУправляемой(НСтр("ru = 'Нет документов по внесению денежных средств'"), ТекстСообщения, , Оповещение);		
	
КонецПроцедуры

&НаКлиенте
Процедура _ВопросОСозданииРасходногоКассовогоОрдераЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат <> Неопределено 
		И ВРЕГ(Результат) = "ДА" Тогда
		Оповещение = Новый ОписаниеОповещения("_ВводСуммыВнесенияЗавершение", ЭтотОбъект);
		ПолучитьИнтерактивноЧисло(НСтр("ru = 'Введите сумму внесения.'"), 0, 0, Ложь, Ложь, Оповещение);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура _ВводСуммыВнесенияЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат <> Неопределено Тогда
		
		РезультатВыполнения = _СоздатьРасходныйКассовыйОрдерНаСервере(Результат.ВведенноеЧисло);
		ЗаголовокИнформации = ""; 
		ТекстСообщения = СтрШаблон(НСтр("ru = '%1 создан.'"), РезультатВыполнения.ПредставлениеДокумента);
		Если Не РезультатВыполнения.Проведен Тогда
			ЗаголовокИнформации =  НСтр("ru = 'Ошибка проведения документа.'");
			ТекстСообщения = РезультатВыполнения.ТекстСообщения;
		КонецЕсли;
		Оповещение = Новый ОписаниеОповещения("_ВвестиВнесениеДенег", ЭтотОбъект);
		ОбщегоНазначенияРТКлиент.ВывестиИнформациюДляРМКУправляемой(ЗаголовокИнформации, ТекстСообщения, Оповещение)	
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура _ВвестиВнесениеДенег(Результат, ДополнительныеПараметры) Экспорт
	
	// Воспользуемся типовым механизмом, т.к. в остатках уже имеется созданный РКО
	ВыполнитьПО02ВвестиВнесениеДенег();		
	
КонецПроцедуры

&НаСервере
Функция _СоздатьРасходныйКассовыйОрдерНаСервере(СуммаДокумента)
	
	ТекущаяКасса = ТаблицаКассККМОрганизаций[0].КассаККМ;
	Реквизиты = Справочники.КассыККМ.РеквизитыКассыККМ(ТекущаяКасса);
	
	ДокументРКО = Документы.РасходныйКассовыйОрдер.СоздатьДокумент();
	ДокументРКО.Дата                  = ТекущаяДатаСеанса();
	ДокументРКО.СуммаДокумента        = СуммаДокумента;
	ДокументРКО.Организация           = Реквизиты.Организация;
	ДокументРКО.Ответственный         = Пользователи.ТекущийПользователь();
	ДокументРКО.Комментарий           = "Создан автоматически из РМК";
	ДокументРКО.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВыдачаДенежныхСредствВКассуККМ;
	ДокументРКО.КассаККМ              = ТекущаяКасса;
	ДокументРКО.Касса				  = ЗначениеНастроекПовтИсп.ПолучитьКассуОрганизацииПоУмолчанию(Реквизиты.Организация, , , ПараметрыСеанса.ТекущийМагазин, Пользователи.ТекущийПользователь());;
	
	Результат = Новый Структура("ПредставлениеДокумента, Проведен, ТекстСообщения", "", Ложь, "");
	Попытка
		ДокументРКО.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Оперативный);
		Результат.Проведен = Истина;
	Исключение
		ДокументРКО.Записать();
		Результат.ТекстСообщения = ОписаниеОшибки();
	КонецПопытки;
	
	Результат.ПредставлениеДокумента = ОбщегоНазначенияРТ.ПолучитьПредставлениеДокумента(ДокументРКО, ДокументРКО.Номер, ДокументРКО.Дата);
	
	Возврат Результат;
	
КонецФункции //--

#КонецОбласти

Можно оформить расширением, но мне лень + наша конфигурация уже дописанная.

РМК ККМ

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4633    9    4    

18

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

Логистика, склад и ТМЦ Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    3052    4    0    

19

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

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

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1673    dimanich70    8    

14

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

Адаптация типовых решений Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

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

1 стартмани

27.10.2023    2103    19    avmartynov    14    

44

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2218    24    progmaster    7    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kondr1221 1 12.06.20 07:42 Сейчас в теме
2. kns77 101 10.06.21 23:53 Сейчас в теме
На новых версиях розницы в РМК часть процедур переделаны, теперь так
&НаКлиенте
&ИзменениеИКонтроль("ВыполнитьПО02ВвестиВнесениеДенег")
Процедура АС_ВыполнитьПО02ВвестиВнесениеДенег()
Если НЕ ВозможностьВнесенияДенег() Тогда
		
		//++	
		//ОбщегоНазначенияРТКлиент.ВывестиИнформациюДляРМКУправляемой(НСтр("ru = 'Нет документов по внесению денежных средств'"));
	    _ВопросОСозданииРасходногоКассовогоОрдера();		
		//--

		ВывестиИнформациюНаДисплейПокупателя("НачалоРаботы");
		Возврат;
	КонецЕсли;
    
    // &ЗамерПроизводительности
    Замер = ОценкаПроизводительностиРТКлиент.НачатьЗамер(Ложь, "Обработка.РМКУправляемыйРежим.Форма.Форма.Команда.ВвестиВнесениеДенег");
	
	ВывестиИнформациюНаДисплейПокупателя("Сервис");
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("КассыККМ"   , МассивКассККМКлиент);
	ПараметрыФормы.Вставить("Организации", МассивОрганизацийКлиент);
	
	ОбработчикОповещения = Новый ОписаниеОповещения("ОповещениеОткрытьФормуВыбораВнесенияДенег", ЭтотОбъект);
	Режим = РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс;
	ОткрытьФорму("Обработка.РМКУправляемыйРежим.Форма.ФормаВыбораВнесенияДенег", ПараметрыФормы, УникальныйИдентификатор,,,, ОбработчикОповещения, Режим);
	
	ВывестиИнформациюНаДисплейПокупателя("НачалоРаботы");
    
    ОценкаПроизводительностиРТКлиент.ЗакончитьЗамер(Замер);	

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


#Область _Доработки

//++
// Создадим РКО -> появятся остатки в РН "ДенежныеСредстваКПоступлениюНаличные" -> внесем ДС типовым механизмом
&НаКлиенте
Процедура _ВопросОСозданииРасходногоКассовогоОрдера()
	
	Оповещение = Новый ОписаниеОповещения("_ВопросОСозданииРасходногоКассовогоОрдераЗавершение", ЭтотОбъект); 
	ТекстСообщения = "Создать расходный кассовый ордер с видом операции 'Внесение ДС в кассу ККМ'?";
	ОбщегоНазначенияРТКлиент.ВывестиВопросДляРМКУправляемой(НСтр("ru = 'Нет документов по внесению денежных средств'"), ТекстСообщения, , Оповещение);		
	
КонецПроцедуры

&НаКлиенте
Процедура _ВопросОСозданииРасходногоКассовогоОрдераЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат <> Неопределено 
		И ВРЕГ(Результат) = "ДА" Тогда
		Оповещение = Новый ОписаниеОповещения("_ВводСуммыВнесенияЗавершение", ЭтотОбъект);
		ПолучитьИнтерактивноЧисло(НСтр("ru = 'Введите сумму внесения.'"), Оповещение);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура _ВводСуммыВнесенияЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат <> Неопределено Тогда
		
		РезультатВыполнения = _СоздатьРасходныйКассовыйОрдерНаСервере(Результат.ВведенноеЧисло);
		ЗаголовокИнформации = ""; 
		ТекстСообщения = СтрШаблон(НСтр("ru = '%1 создан.'"), РезультатВыполнения.ПредставлениеДокумента);
		Если Не РезультатВыполнения.Проведен Тогда
			ЗаголовокИнформации =  НСтр("ru = 'Ошибка проведения документа.'");
			ТекстСообщения = РезультатВыполнения.ТекстСообщения;
		КонецЕсли;
		Оповещение = Новый ОписаниеОповещения("_ВвестиВнесениеДенег", ЭтотОбъект);
		ОбщегоНазначенияРТКлиент.ВывестиИнформациюДляРМКУправляемой(ЗаголовокИнформации, ТекстСообщения, Оповещение)	
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура _ВвестиВнесениеДенег(Результат, ДополнительныеПараметры) Экспорт
	
	// Воспользуемся типовым механизмом, т.к. в остатках уже имеется созданный РКО
	ВыполнитьПО02ВвестиВнесениеДенег();		
	
КонецПроцедуры

&НаСервере
Функция _СоздатьРасходныйКассовыйОрдерНаСервере(СуммаДокумента)
	
	ТекущаяКасса = ТаблицаКассККМОрганизаций[0].КассаККМ;
	Реквизиты = Справочники.КассыККМ.РеквизитыКассыККМ(ТекущаяКасса);
	
	ДокументРКО = Документы.РасходныйКассовыйОрдер.СоздатьДокумент();
	ДокументРКО.Дата                  = ТекущаяДатаСеанса();
	ДокументРКО.СуммаДокумента        = СуммаДокумента;
	ДокументРКО.Организация           = Реквизиты.Организация;
	ДокументРКО.Ответственный         = Пользователи.ТекущийПользователь();
	ДокументРКО.Комментарий           = "Создан автоматически из РМК";
	ДокументРКО.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВыдачаДенежныхСредствВКассуККМ;
	ДокументРКО.КассаККМ              = ТекущаяКасса;
	ДокументРКО.Касса				  = ЗначениеНастроекПовтИсп.КассаОрганизацииПоУмолчанию(Реквизиты.Организация,,,ПараметрыСеанса.ТекущийМагазин,Пользователи.ТекущийПользователь());
	
	Результат = Новый Структура("ПредставлениеДокумента, Проведен, ТекстСообщения", "", Ложь, "");
	Попытка
		ДокументРКО.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Оперативный);
		Результат.Проведен = Истина;
	Исключение
		ДокументРКО.Записать();
		Результат.ТекстСообщения = ОписаниеОшибки();
	КонецПопытки;
	
	Результат.ПредставлениеДокумента = ОбщегоНазначенияРТ.ПредставлениеДокумента(ДокументРКО, ДокументРКО.Номер, ДокументРКО.Дата);
	
	Возврат Результат;
	
КонецФункции //--



Показать
+
4. IlyaReznikov 25.03.22 11:12 Сейчас в теме
(2)
&НаКлиенте


добрый день, сделал в расширении, но не запускается вопрос о введении суммы. Сразу говорит что нет РКО и нечего вносить. Розница 2.3.10.61. 1С 8.3.20.1674.
Прошу подсказать
+
3. misha_shinkarev 27.07.21 13:28 Сейчас в теме
данная обработка работает в управление торговлей :?
+
5. IlyaReznikov 25.03.22 16:15 Сейчас в теме
Автору спасибо. В итоге сделал по старинке &Вместо т.к. &ИзменениеИКонтроль наотрез отказалось работать
+
6. user1652670 31.07.22 11:00 Сейчас в теме
Здравствуйте ! Сделайте пожалуйста Расширением !!!! ( готов платить )
+
7. fatman78 17 20.02.23 11:50 Сейчас в теме
Оставьте свое сообщение