gifts2017

ТОРГ-12 и Счет-фактура для УТ 11.1 без группировки строк с одинаковой номенклатурой

Опубликовал Merab Nick (merabn) в раздел Программирование - Практика программирования

В конфигурации УТ 11.1 в печатных формах ТОРГ-12 и Счет-фактуры документа реализация товаров и услуг строки с одинаковой номенклатурой группируются в строку со средней ценой.

Некоторым заказчикам эта особенность мешает, так как у них возникают проблемы с покупателями, требующими указания точных цен для каждой позиции номерклатуры. Чтобы в печатных формах ТОРГ-12 и счет-фактура строки выводились также как и в ТЧ документа Реализация товаров и услуг можно воспользоваться внешней печатной формой, опубликованной здесь:

http://infostart.ru/public/413891/

а можно внести небольшие изменения в конфигурацию:

В модуле менеджера документа Реализация товаров и услуг нужно заменить процедуру ПоместитьВременнуюТаблицуТоваров

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

 Это заметка для себя, но, может, кому-нибудь окажется полезной.

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Максим Евсенкин (tehas) 23.12.15 09:59
плюсую за то, что выложил куски кода, а не малость доработанную печ форму за 5$m как многие сейчас любят делать.
2. Егор Див (DivS) 28.12.15 09:15
Хочу обратить внимание, что в счет-фактуре таблица товары берется не из тз товары, а из видов запаса, поэтому левое соединение по номеру строки с таблицей товаров может быть не верным (например в случае если 1 товар с 2 разными ГТД).
3. Merab Nick (merabn) 28.12.15 14:48
(2) DivS, В случае, описанном Вами, модифицируемое Левое соединение не влияет на состав таблицы товаров, а лишь дополняет аналитикой. Проверено практически.
4. Егор Див (DivS) 28.12.15 14:57
(3) merabn, а количество откуда берётся ? )
5. Merab Nick (merabn) 28.12.15 15:11
(4) DivS, Из ТЧ Виды запасов. Вообще, таблица товаров формируется из ТЧ Виды запасов, дополняется и затем группируется, в том числе по номеру строки.
6. Егор Див (DivS) 28.12.15 15:25
(5) merabn, перед глазами нет запроса, но не могу понять как это работает в ситуации: в табличной части товары 3 строчки с одинаковым товаром по 3 шт. в каждой строчке. В таблице Виды запасов 2 строчки (5 шт. ГТД1, 4 шт. ГТД2) - что будет в документах на выходе ???
7. Merab Nick (merabn) 28.12.15 15:48
(6) DivS, Пришлось вносить более глубокие изменения в процедуру. Одним запросом не удалось решить проблему, потребовалось обрабатывать у документа ТЧ Товары и Виды запасов.
Прикрепленные файлы:
ИзмененнаяПроцедура.txt
ОригинальнаяПроцедура.txt
8. Alex Pr (dd74) 03.02.16 15:35
Спасибо за "наводку". Сделал себе но только в 11.2. А то замучили менеджеры.
9. Иван Андреев (andreeviv) 16.03.16 13:47
(8) dd74, Как вы это в 11.2 реализовали? можете помочь хоть наводкой хоть чем...бьюсь уже 2ой день
10. Иван Андреев (andreeviv) 16.03.16 13:59
(8) dd74, Даже вернее так...я могу сделать вообще без группировки, просто во втором запросе ВТ "РеализацияТоваровУслугТаблицаТоваров" убрать группировку МАКСИМУМ по строке...но мне нужно что бы с одинаковой ценой строки группировались, а так все не группируются
11. Иван Андреев (andreeviv) 16.03.16 14:10
И это опять я....сори за предыдущие посты, в запросе "СтрокиТоваров" добавил поле Цена, во втором запросе "РеализацияТоваровУслугТаблицаТоваров" поле Цена добавил в группировку, только 1 проблема...цену в документе Торг-12 все равно берет среднюю(
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа