УТ 11.4 ГТД в возврате

1. user1178489 24.03.19 20:45 Сейчас в теме
Здравствуйте!
В возврате от комиссионера не у всех товаров заполняются ГТД, и указание видов запасов в ручную тоже не исправляет ситуацию. Как, собственно, решить данную проблему?
Версия конфы:
1С:Предприятие 8.3.14.1565
Управление торговлей, редакция 11.4.6.207
По теме из базы знаний
Ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Xershi 1479 25.03.19 00:07 Сейчас в теме
(1) значит косяки в учете.
Обычно только с собственным работал. Но если не шло, то была проблема в учете.
Многие косяки помощник исправляет!
3. user1178489 25.03.19 17:36 Сейчас в теме
(2) не думаю, что это связано с косяками в учете.

это происходит с товаром, за который комиссионер отчитался в отчётах о продажах комиссионера.

пример: передали комиссионеру по одной шт.: товар1 с ГТД1, товар2 с ГТД2, товар3 с ГТД3 и товар4 с ГТД4.
Далее комиссионер в Отчете1 отчитался о продажах товара: товар1 с ГТД1 и товар2 с ГТД2.
В следующем Отчете2 комиссионер отчитался о продажах: товар3 с ГТД3 и возврате от конечного покупателя товар2 (в этом случае в Отчете2 заполняется ГТД только у товар3 с ГТД3, а товар2 остается с пустым ГТД).
Получается, что у комиссионера на остатке товар4 с ГТД4 и товар2 (без ГТД).
На оставшийся товар делаем возврат от комиссионера и при проведении получаем товар4 с ГТД4 и товар2 (без ГТД) и (допустим, конечный покупатель вернул комиссионеру товар3 с ГТД3 - он тоже попадает в возврат от комиссионера) и у товар3 в возврате тоже отсутствует ГТД.
Из-за этого появляются отрицательные остатки по номерам ГТД.
Но если сделать возврат от клиента, а не от комиссионер по товарам без ГТД, то номера ГТД у товар2 и товар3 заполняются.
Собственно вопрос почему в отчете и возврате от комиссионера ГТД не подтягиваются (даже при ручном заполнении видов запсов, при записи ГТД обнуляются), а в возврате от клиента все ГТД нормально заполняются?
4. Xershi 1479 25.03.19 17:47 Сейчас в теме
(3) могу только привести аналогию с документом оприходования излишков. Там есть поле ГТД и его не заполнили, вот и вышло как не заполняй ГТД не подтягивает. Думаю у вас еще и с этим проблема.
5. user1178489 25.03.19 20:03 Сейчас в теме
(4) ГТД есть у товара.
Отчет комиссионера №1: продано товар1 1 шт. ГТД есть.
Отчет комиссионера №2: продано товар1 -1 шт. ГТД отсутствует.
6. Xershi 1479 25.03.19 20:15 Сейчас в теме
(5) возможно тогда проблема с ключами аналитик.
7. user1178489 26.03.19 17:32 Сейчас в теме
(6) нет никаких проблем с ключами аналитик.
10. Dmitry888 41 11.06.21 10:41 Сейчас в теме
(7)Добрый день. У вас получилось решить данный вопрос ?
8. fixin 4253 25.09.20 18:47 Сейчас в теме
итак, есть ли какой-либо ответ по теме?
Решил писать обработку для корректировки...
Ручками никак...
9. Dmitry888 41 11.06.21 10:39 Сейчас в теме
(8)В итоге получилось разобраться? Аналогичная проблема и выходит так, что 1С ее не решает хотя это уже давно должно было исправиться в документе отчета комиссионера
11. fixin 4253 11.06.21 10:52 Сейчас в теме
(9) в итоге написал расширение, которое исправляет этот код в документе ОтчетКомиссионера.
Правда, я добавил _НомерГТД в расширении, лучше было бы в саму конфигурацию, ну да ладно.


&НаСервере
Процедура кгтд_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
	//Добавляем колонку для номера ГТД
	Элемент = Элементы.Добавить("_НомерГТД", Тип("ПолеФормы"), Элементы.Товары);
    Элемент.Вид = ВидПоляФормы.ПолеВвода;
    Элемент.ПутьКДанным = "Объект.Товары._НомерГТД";
КонецПроцедуры



&После("ОбработкаПроведения")
Процедура кгтд_ОбработкаПроведения(Отказ, РежимПроведения)
	//После проведения...
	//Считываем движения по регистру накопления ТоварыПереданныеНаКомиссию
	
	З = Новый Запрос(
	"ВЫБРАТЬ
	|	ТоварыПереданныеНаКомиссию.НомерСтроки КАК НомерСтроки,
	|	ТоварыПереданныеНаКомиссию.ВидДвижения КАК ВидДвижения,
	|	ТоварыПереданныеНаКомиссию.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
	|	ТоварыПереданныеНаКомиссию.Соглашение КАК Соглашение,
	|	ТоварыПереданныеНаКомиссию.Организация КАК Организация,
	|	ТоварыПереданныеНаКомиссию.ВидЗапасов КАК ВидЗапасов,
	|	ТоварыПереданныеНаКомиссию.Количество КАК Количество,
	|	ЕСТЬNULL(ОтчетКомиссионераТовары._НомерГТД, НЕОПРЕДЕЛЕНО) КАК НомерГТДДокумента,
	|	ТоварыПереданныеНаКомиссию.Период КАК Период
	|ИЗ
	|	РегистрНакопления.ТоварыПереданныеНаКомиссию КАК ТоварыПереданныеНаКомиссию
	|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетКомиссионера.Товары КАК ОтчетКомиссионераТовары
	|		ПО ТоварыПереданныеНаКомиссию.АналитикаУчетаНоменклатуры = ОтчетКомиссионераТовары.АналитикаУчетаНоменклатуры
	|			И ТоварыПереданныеНаКомиссию.Регистратор = ОтчетКомиссионераТовары.Ссылка
	|ГДЕ
	|	ТоварыПереданныеНаКомиссию.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
	|	И ТоварыПереданныеНаКомиссию.Количество < 0
	|	И ТоварыПереданныеНаКомиссию.НомерГТД = ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)
	|	И ТоварыПереданныеНаКомиссию.Регистратор = &Регистратор");
	З.УстановитьПараметр("Регистратор", Ссылка); //Отбираем движения по текущему регистратору
	Выборка = З.Выполнить().Выбрать();
	НЗ = Неопределено;
	Пока Выборка.Следующий() Цикл
		НомерГТД = Выборка.НомерГТДДокумента;
		Если НЕ ЗначениеЗаполнено(НомерГТД) Тогда
			//Будем искать ближайшую продажу к этому возврату
			ЗВ = Новый Запрос(
			"ВЫБРАТЬ ПЕРВЫЕ 1
			|	ТоварыПереданныеНаКомиссию.НомерСтроки КАК НомерСтроки,
			|	ТоварыПереданныеНаКомиссию.Регистратор КАК Регистратор,
			|	ТоварыПереданныеНаКомиссию.ВидДвижения КАК ВидДвижения,
			|	ТоварыПереданныеНаКомиссию.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
			|	ТоварыПереданныеНаКомиссию.Соглашение КАК Соглашение,
			|	ТоварыПереданныеНаКомиссию.Организация КАК Организация,
			|	ТоварыПереданныеНаКомиссию.ВидЗапасов КАК ВидЗапасов,
			|	ТоварыПереданныеНаКомиссию.Количество КАК Количество,
			|	ТоварыПереданныеНаКомиссию.НомерГТД КАК НомерГТД
			|ИЗ
			|	РегистрНакопления.ТоварыПереданныеНаКомиссию КАК ТоварыПереданныеНаКомиссию
			|ГДЕ
			|	ТоварыПереданныеНаКомиссию.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
			|	И ТоварыПереданныеНаКомиссию.Количество > 0
			|	И ТоварыПереданныеНаКомиссию.Период <= &Период
			|	И ТоварыПереданныеНаКомиссию.Регистратор <> &Регистратор
			|	И ТоварыПереданныеНаКомиссию.НомерГТД <> ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)
			|
			|УПОРЯДОЧИТЬ ПО
			|	ТоварыПереданныеНаКомиссию.Период УБЫВ");
			ЗВ.УстановитьПараметр("Регистратор", Ссылка); 
			ЗВ.УстановитьПараметр("Период", Выборка.Период);
			ВыборкаВ = ЗВ.Выполнить().Выбрать();
			Если ВыборкаВ.Следующий() Тогда
				НомерГТД = ВыборкаВ.НомерГТД;
			КонецЕсли;
			Сообщить("Номер ГТД: " + НомерГТД + " для аналитики: " + ВыборкаВ.АналитикаУчетаНоменклатуры + " подобран из документа:" + ВыборкаВ.Регистратор);
		КонецЕсли;
		
		
		Если НЕ ЗначениеЗаполнено(НомерГТД) Тогда //Если нашли номер ГТД
			Сообщить("Номер ГТД для аналитики: " + Выборка.АналитикаУчетаНоменклатуры + " не удалось подобрать", СтатусСообщения.Важное);
		Иначе
			Если НЗ = Неопределено Тогда
				НЗ = РегистрыНакопления.ТоварыПереданныеНаКомиссию.СоздатьНаборЗаписей();
				НЗ.Отбор.Регистратор.Значение = Ссылка;
				НЗ.Прочитать();
				НЗ[Выборка.НомерСтроки - 1].НомерГТД = НомерГТД;
			КонецЕсли;
		КонецЕсли;
			
	КонецЦикла;

	//Если были корректировки
	Если НЗ <> Неопределено Тогда
		НЗ.Записать();
	КонецЕсли;
	
КонецПроцедуры

Показать
Прикрепленные файлы:
КорректировкаПустыхГТД 2020-09-29.cfe
12. Dmitry888 41 11.06.21 10:54 Сейчас в теме
(11)Спасибо, сейчас попробую применить. И проверить.
13. Dmitry888 41 11.06.21 11:21 Сейчас в теме
(11)Буду перебирать код, вроде где-то заполняет, а где-то нет. И берет не понятно откуда любой номер ГТД и подставляет его в документ. Спасибо за помощь и расширение!
14. fixin 4253 11.06.21 11:48 Сейчас в теме
(13) Я тоже начинал с обратного инжениринга кода 1С, но в итоге плюнул и написал "костылёк".
15. Dmitry888 41 11.06.21 13:11 Сейчас в теме
(14)Немного перебрал код, вроде ищет и записывает. Но записывает ГТД в регистре только на первую номенклатуру, хотя в отладке происходит выборка всех отрицательных позиций и соответсвующее сообщение что присвоен номер гтд подтверждает это, но в регистре пусто.
Процедура кгтд_ОбработкаПроведения(Отказ, РежимПроведения)
	//После проведения...
	//Считываем движения по регистру накопления ТоварыПереданныеНаКомиссию
	
	Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	ТоварыПереданныеНаКомиссию.НомерСтроки КАК НомерСтроки,
	|	ТоварыПереданныеНаКомиссию.ВидДвижения КАК ВидДвижения,
	|	ТоварыПереданныеНаКомиссию.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
	|	ТоварыПереданныеНаКомиссию.Соглашение КАК Соглашение,
	|	ТоварыПереданныеНаКомиссию.Организация КАК Организация,
	|	ТоварыПереданныеНаКомиссию.ВидЗапасов КАК ВидЗапасов,
	|	ТоварыПереданныеНаКомиссию.Количество КАК Количество,
	|	ЕСТЬNULL(ОтчетКомиссионераТовары._НомерГТД, НЕОПРЕДЕЛЕНО) КАК НомерГТДДокумента,
	|	ТоварыПереданныеНаКомиссию.Период КАК Период
	|ИЗ
	|	РегистрНакопления.ТоварыПереданныеНаКомиссию КАК ТоварыПереданныеНаКомиссию
	|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетКомиссионера.Товары КАК ОтчетКомиссионераТовары
	|		ПО ТоварыПереданныеНаКомиссию.АналитикаУчетаНоменклатуры = ОтчетКомиссионераТовары.АналитикаУчетаНоменклатуры
	|			И ТоварыПереданныеНаКомиссию.Регистратор = ОтчетКомиссионераТовары.Ссылка
	|ГДЕ
	|	ТоварыПереданныеНаКомиссию.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
	|	И ТоварыПереданныеНаКомиссию.Количество < 0
	|	И ТоварыПереданныеНаКомиссию.НомерГТД = ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)
	|	И ТоварыПереданныеНаКомиссию.Регистратор = &Регистратор");
	Запрос.УстановитьПараметр("Регистратор", Ссылка); //Отбираем движения по текущему регистратору
	Выборка = Запрос.Выполнить().Выбрать();
	НЗ = Неопределено;
	Пока Выборка.Следующий() Цикл
		НомерГТД = Выборка.НомерГТДДокумента;
		Если НЕ ЗначениеЗаполнено(НомерГТД) Тогда
			//Будем искать ближайшую продажу к этому возврату
			ЗВ = Новый Запрос(
			"ВЫБРАТЬ
			|	ТоварыПереданныеНаКомиссию.НомерСтроки КАК НомерСтроки,
			|	ТоварыПереданныеНаКомиссию.Регистратор КАК Регистратор,
			|	ТоварыПереданныеНаКомиссию.ВидДвижения КАК ВидДвижения,
			|	ТоварыПереданныеНаКомиссию.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
			|	ТоварыПереданныеНаКомиссию.Соглашение КАК Соглашение,
			|	ТоварыПереданныеНаКомиссию.Организация КАК Организация,
			|	ТоварыПереданныеНаКомиссию.ВидЗапасов КАК ВидЗапасов,
			|	ТоварыПереданныеНаКомиссию.Количество КАК Количество,
			|	ТоварыПереданныеНаКомиссию.НомерГТД КАК НомерГТД
			|ИЗ
			|	РегистрНакопления.ТоварыПереданныеНаКомиссию КАК ТоварыПереданныеНаКомиссию
			|ГДЕ
			|	ТоварыПереданныеНаКомиссию.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
			|	И ТоварыПереданныеНаКомиссию.Количество > 0
			|	И ТоварыПереданныеНаКомиссию.Период <= &Период
			|	И ТоварыПереданныеНаКомиссию.Регистратор <> &Регистратор
			|	И ТоварыПереданныеНаКомиссию.НомерГТД <> ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)
			|	И ТоварыПереданныеНаКомиссию.АналитикаУчетаНоменклатуры = &АналитикаУчетаНоменклатуры
			|
			|УПОРЯДОЧИТЬ ПО
			|	ТоварыПереданныеНаКомиссию.Период УБЫВ");
			
			ЗВ.УстановитьПараметр("Регистратор", Ссылка);
			ЗВ.УстановитьПараметр("Период", Выборка.Период);
			ЗВ.УстановитьПараметр("АналитикаУчетаНоменклатуры", Выборка.АналитикаУчетаНоменклатуры);
			ВыборкаВ = ЗВ.Выполнить().Выбрать();
			Если ВыборкаВ.Следующий() Тогда
				НомерГТД = ВыборкаВ.НомерГТД;
			КонецЕсли;
			Сообщить("Номер ГТД: " + НомерГТД + " для аналитики: " + ВыборкаВ.АналитикаУчетаНоменклатуры + " подобран из документа:" + ВыборкаВ.Регистратор);
		КонецЕсли;
		
		
		Если НЕ ЗначениеЗаполнено(НомерГТД) Тогда //Если нашли номер ГТД
			Сообщить("Номер ГТД для аналитики: " + Выборка.АналитикаУчетаНоменклатуры + " не удалось подобрать", СтатусСообщения.Важное);
		Иначе
			Если НЗ = Неопределено Тогда
				НЗ = РегистрыНакопления.ТоварыПереданныеНаКомиссию.СоздатьНаборЗаписей();
				НЗ.Отбор.Регистратор.Значение = Ссылка;
				НЗ.Прочитать();
				НЗ[Выборка.НомерСтроки - 1].НомерГТД = НомерГТД;
			КонецЕсли;
		КонецЕсли;
	//Если были корректировки
	Если НЗ <> Неопределено Тогда
		НЗ.Записать();
	КонецЕсли;

	КонецЦикла;

КонецПроцедуры
Показать
16. Dmitry888 41 11.06.21 13:13 Сейчас в теме
(14)Что может быть не так? Если 1 позиция в документе с отрицательным количеством, то нормально. Если 2 и более, то данные для второй и последующей позиции не записываются в регистр.
Может что-то тут не отрабатывает?
Если НЗ <> Неопределено Тогда
		НЗ.Записать();
	КонецЕсли;
17. Dmitry888 41 11.06.21 16:24 Сейчас в теме
(14)или тут
Если НЗ = Неопределено Тогда
				НЗ = РегистрыНакопления.ТоварыПереданныеНаКомиссию.СоздатьНаборЗаписей();
				НЗ.Отбор.Регистратор.Значение = Ссылка;
				НЗ.Прочитать();
				НЗ[ВыборкаВ.НомерСтроки - 1].НомерГТД = НомерГТД;
			КонецЕсли;
18. kon_alex155 29.12.23 17:17 Сейчас в теме
Здравствуйте! - Проблема в последних КА 2.5 такая же а как ее в итоге решают? Товар по отчету комиссионера возвращается без ГТД.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот