Снятие/внесение наличных по счету без движений. УНФ 1.6

Клиент жалуется, что если не используются переводы в пути, то расход денежных средств с видом операции «снятие наличных» вообще не делает движений.

Нашел тут этому объяснение, мол в УНФ решили упростить операции:

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

Ну что же. Будем исправлять.

Конечно, можно было бы набросать свои проводки. Но курсовые разницы и вот это все… Приходится следовать путём методистов 1С и менять текст запроса, в котором описываются движения по деньгам.

К сожалению, приходится менять текст метода РасходСоСчета.МодульМенеджера.СформироватьТаблицаДенежныеСредства целиком через &Вместо:

&ИзменениеИКонтроль("СформироватьТаблицаДенежныеСредства")
Процедура дор_СформироватьТаблицаДенежныеСредства(ДокументСсылкаРасходСоСчета, СтруктураДополнительныеСвойства)

	...

	Запрос.Текст =
	"ВЫБРАТЬ
	...
	|ГДЕ
	|	(ТаблицаДокумента.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРасходСоСчета.Подотчетнику)
	|			ИЛИ ТаблицаДокумента.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРасходСоСчета.Прочее)
	|			ИЛИ ТаблицаДокумента.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРасходСоСчета.КомиссияБанка)
	|			...
	|			ИЛИ ТаблицаДокумента.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРасходСоСчета.ЗарплатаСотруднику)
	|			ИЛИ ТаблицаДокумента.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРасходСоСчета.ПереводНаДругойСчет)
	|			ИЛИ ТаблицаДокумента.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРасходСоСчета.СнятиеНаличных)
#Удаление
	|				И &ИспользуютсяПереводыВПути)
#КонецУдаления
#Вставка
	|				) //Делаем движиние по кассе всегда!!!
#КонецВставки
	|	И &ОстатокСуммы > 0
	|
	|ОБЪЕДИНИТЬ ВСЕ
	| ...
	|ГДЕ
	|	(ВременнаяТаблицаРасшифровкаПлатежа.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРасходСоСчета.Подотчетнику)
	|			ИЛИ ВременнаяТаблицаРасшифровкаПлатежа.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРасходСоСчета.Прочее)
	|			ИЛИ ВременнаяТаблицаРасшифровкаПлатежа.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРасходСоСчета.КомиссияБанка)
	|			ИЛИ ВременнаяТаблицаРасшифровкаПлатежа.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРасходСоСчета.ЛичныеСредстваПредпринимателя)
	|			...
	|			ИЛИ ВременнаяТаблицаРасшифровкаПлатежа.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРасходСоСчета.СнятиеНаличных)
#Удаление
	|				И &ИспользуютсяПереводыВПути)
#КонецУдаления
#Вставка
	|				) //Делаем движиние по кассе всегда!!!
#КонецВставки
	|	И &ПлатежныйКалендарь
	|	И ВременнаяТаблицаРасшифровкаПлатежа.СуммаПлатежа > 0
	| 	...
	|ОБЪЕДИНИТЬ ВСЕ
#Вставка                       
	|//ДОбавляем движение по кассе для снятия наличных
	|ВЫБРАТЬ
	|	2,
	|	&ПеремещениеДенежныхСредств,
	|	ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход),
	|	ТаблицаДокумента.Дата,
	|	&Организация,
	|	ЗНАЧЕНИЕ(Перечисление.ТипыДенежныхСредств.Наличные),
	|	ТаблицаДокумента.Статья,
	|	ТаблицаДокумента.Ссылка.Касса,
	|	ТаблицаДокумента.АналитикаДДС КАК Аналитика,
	|	ТаблицаДокумента.ВалютаДенежныхСредств,
	|	СУММА(ВЫРАЗИТЬ(ТаблицаДокумента.СуммаВал * КурсыВалютКассы.Курс * КурсыВалютУчета.Кратность / (КурсыВалютУчета.Курс * КурсыВалютКассы.Кратность) КАК ЧИСЛО(15, 2))),
	|	СУММА(ТаблицаДокумента.СуммаВал),
	|	-СУММА(ВЫРАЗИТЬ(ТаблицаДокумента.СуммаВал * КурсыВалютКассы.Курс * КурсыВалютУчета.Кратность / (КурсыВалютУчета.Курс * КурсыВалютКассы.Кратность) КАК ЧИСЛО(15, 2))),
	|	-СУММА(ТаблицаДокумента.СуммаВал),
	|	ТаблицаДокумента.Ссылка.Касса.СчетУчета,
	|	ТаблицаДокумента.ДоговорПлатежногоАгента
	|ИЗ
	|	ВременнаяТаблицаШапка КАК ТаблицаДокумента
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&МоментВремени, Валюта = &ВалютаУчета) КАК КурсыВалютУчета
	|		ПО (ИСТИНА)
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&МоментВремени, ) КАК КурсыВалютКассы
	|		ПО ТаблицаДокумента.ВалютаДенежныхСредств = КурсыВалютКассы.Валюта
	|ГДЕ
	|	ТаблицаДокумента.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРасходСоСчета.СнятиеНаличных)
	|	И НЕ &ИспользуютсяПереводыВПути
	|	//И &ОстатокСуммы > 0
	|
	|СГРУППИРОВАТЬ ПО
	|	ТаблицаДокумента.Дата,
	|	ТаблицаДокумента.Ссылка.Касса, //Группировка добавлена
	|	ТаблицаДокумента.АналитикаДДС, //Группировка добавлена
	|	ТаблицаДокумента.Статья,
	|	ТаблицаДокумента.БанковскийСчет,
	|	ТаблицаДокумента.ВалютаДенежныхСредств,
	|	ТаблицаДокумента.БанковскийСчет.СчетУчета,
	|	ТаблицаДокумента.СчетКонтрагента,
	|	ТаблицаДокумента.ДоговорПлатежногоАгента
	|	ОБЪЕДИНИТЬ ВСЕ
#КонецВставки
	|
	|ВЫБРАТЬ
	|...
	|";

	Запрос.Выполнить();
	...
	
КонецПроцедуры

Проводки выглядят так:

Но аппетит приходит во время еды. То же самое клиент захотел и с внесением наличных на счет.

Доработки в модуль ПоступлениеНаСчет.МодульМенеджера.СформироватьТаблицаДенежныеСредства целиком через &Вместо:


&ИзменениеИКонтроль("СформироватьТаблицаДенежныеСредства")
Процедура дор_СформироватьТаблицаДенежныеСредства(ДокументСсылкаПоступлениеНаСчет, СтруктураДополнительныеСвойства)

	Запрос = Новый Запрос;
	...
	Запрос.Текст =
	"ВЫБРАТЬ
	|	1 КАК НомерСтроки,
	|	...
	|ГДЕ
	|	(ТаблицаДокумента.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПоступлениеНаСчет.ОтПодотчетника)
	|			ИЛИ ТаблицаДокумента.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПоступлениеНаСчет.Прочее)
	|			...
	|			ИЛИ ТаблицаДокумента.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПоступлениеНаСчет.ВзносНаличными)
	|				И &ИспользуютсяПереводыВПути
	|			ИЛИ ТаблицаДокумента.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПоступлениеНаСчет.ПереводСДругогоСчета)
#Удаление
	|				И &ИспользуютсяПереводыВПути)
#КонецУдаления
#Вставка
	|				) //Делаем движиние по кассе всегда!!!
#КонецВставки
	|	И &ОстатокСуммы > 0
	|
	|	...
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	...
	|ГДЕ
	|	(ВременнаяТаблицаРасшифровкаПлатежа.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПоступлениеНаСчет.ОтПодотчетника)
	|			ИЛИ ВременнаяТаблицаРасшифровкаПлатежа.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПоступлениеНаСчет.Прочее)
	|			ИЛИ ВременнаяТаблицаРасшифровкаПлатежа.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПоступлениеНаСчет.ЛичныеСредстваПредпринимателя)
	|			...
	|			ИЛИ ВременнаяТаблицаРасшифровкаПлатежа.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПоступлениеНаСчет.Налоги)
	|			ИЛИ ВременнаяТаблицаРасшифровкаПлатежа.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПоступлениеНаСчет.ВзносНаличными)
#Удаление
	|				И &ИспользуютсяПереводыВПути
#КонецУдаления
#Вставка
	|				 //Делаем движиние по кассе всегда!!!
#КонецВставки
	|			ИЛИ ВременнаяТаблицаРасшифровкаПлатежа.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПоступлениеНаСчет.ПереводСДругогоСчета)
	|				И &ИспользуютсяПереводыВПути)
	|	И &ПлатежныйКалендарь
	|	И ВременнаяТаблицаРасшифровкаПлатежа.СуммаПлатежа > 0
	|
	|	...
	|
	|ОБЪЕДИНИТЬ ВСЕ
#Вставка                       
	|//ДОбавляем движение по кассе для взноса наличных
	|ВЫБРАТЬ
	|	2,
	|	&ПоступлениеДенежныхСредств,
	|	ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход),
	|	ТаблицаДокумента.Дата,
	|	&Организация,
	|	ЗНАЧЕНИЕ(Перечисление.ТипыДенежныхСредств.Наличные),
	|	ТаблицаДокумента.Статья,
	|	ТаблицаДокумента.Ссылка.Касса,
	|	ТаблицаДокумента.Ссылка.Касса.СчетУчета,
	|	ТаблицаДокумента.АналитикаДДС КАК Аналитика,
	|	ТаблицаДокумента.ВалютаДенежныхСредств,
	|	ТаблицаДокумента.ДоговорПлатежногоАгента КАК ДоговорКонтрагента,
	|	СУММА(ВЫРАЗИТЬ(ТаблицаДокумента.СуммаВал * КурсыВалютКассы.Курс * КурсыВалютУчета.Кратность / (КурсыВалютУчета.Курс * КурсыВалютКассы.Кратность) КАК ЧИСЛО(15, 2))),
	|	СУММА(ТаблицаДокумента.СуммаВал),
	|	-СУММА(ВЫРАЗИТЬ(ТаблицаДокумента.СуммаВал * КурсыВалютКассы.Курс * КурсыВалютУчета.Кратность / (КурсыВалютУчета.Курс * КурсыВалютКассы.Кратность) КАК ЧИСЛО(15, 2))),
	|	-СУММА(ТаблицаДокумента.СуммаВал)
	|ИЗ
	|	ВременнаяТаблицаШапка КАК ТаблицаДокумента
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&МоментВремени, Валюта = &ВалютаУчета) КАК КурсыВалютУчета
	|		ПО (ИСТИНА)
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&МоментВремени, ) КАК КурсыВалютКассы
	|		ПО ТаблицаДокумента.ВалютаДенежныхСредств = КурсыВалютКассы.Валюта
	|ГДЕ
	|	ТаблицаДокумента.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПоступлениеНаСчет.ВзносНаличными)
	|	И НЕ &ИспользуютсяПереводыВПути
	|	//И &ОстатокСуммы > 0
	|
	|СГРУППИРОВАТЬ ПО
	|	ТаблицаДокумента.Дата,
	|	ТаблицаДокумента.Ссылка.Касса, //Группировка добавлена
	|	ТаблицаДокумента.АналитикаДДС, //Группировка добавлена
	|	ТаблицаДокумента.Статья,
	|	ТаблицаДокумента.БанковскийСчет,
	|	ТаблицаДокумента.ВалютаДенежныхСредств,
	|	ТаблицаДокумента.БанковскийСчет.СчетУчета,
	|	ТаблицаДокумента.АналитикаДДС,
	|	ТаблицаДокумента.ДоговорПлатежногоАгента
	|	ОБЪЕДИНИТЬ ВСЕ
#КонецВставки
	|
	|...
	|";

	Запрос.Выполнить();

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

Движения выглядят так:

Среда УНФ 1.6.27.167. Объем 2 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *