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

12.10.18

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

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

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

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

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

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

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

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

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

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

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

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

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

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

РМК ККМ

См. также

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

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

29400 руб.

29.06.2023    5688    14    5    

24

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

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

7200 руб.

02.08.2023    3938    12    0    

30

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

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    5120    dimanich70    15    

21

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

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

01.03.2024    5620    dimanich70    9    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kondr1221 2 12.06.20 07:42 Сейчас в теме
2. kns77 103 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 20 20.02.23 11:50 Сейчас в теме
Оставьте свое сообщение