Ошибка прервышения количества при возврате в БП3

У клиента не проводится возрат, выдает ошибку:

Документом "Реализация (акт, накладная, УПД) 0000-000374 от 19.12.2024 0:00:00" было реализовано "Товар" на "1" ед. меньше, чем возвращается.

Хотя в продажах две штуки и в возврате две.

Проверка происходит в модуле УчетТоваров:

Количество отгружено равно нулю:

Я долго анализировал текст запроса, но в итоге заметил в консоли, что в регистраторы попадает корректировка реализации, где вместо двух штук продают одну. Не заметил в карточке счета 41.01 этот документ.

UPD: все плохо, это ошибка 1С, там используются все корректировки, связанные с реализацией, даже не проведенные и помеченные на удаление, вот участок запроса:

ВЫБРАТЬ
	КорректировкаРеализации.Ссылка
ИЗ
	Документ.КорректировкаРеализации КАК КорректировкаРеализации
ГДЕ
	КорректировкаРеализации.ИсходныйДокументРеализации = &Регистратор
	И КорректировкаРеализации.Ссылка <> &ЭтотВозврат
	И КорректировкаРеализации.Дата <= &КонДата

Остается только отвязать корректировку от реализации или очистить табличную часть корректировки.

UPD 2:

Корректировка реализации не помогла. В запросе какая-то проблема, она не считает количество отгружено, потому что количество = 0.

Попробовал сначала поменять в запросе:

Не помогло, в итоге просто перекрыл этот контроль:

Все изменения в модуле УчетТоваров.

Весь текст запроса, как обычно, огромный:

ВЫБРАТЬ
&Регистратор КАК Ссылка
ПОМЕСТИТЬ ВТ_ДокументыОтгрузки

ОБЪЕДИНИТЬ

ВЫБРАТЬ РАЗЛИЧНЫЕ
ВозвратыТоваров.Регистратор
ИЗ
РегистрНакопления.ВозвратыТоваров КАК ВозвратыТоваров
ГДЕ
ВозвратыТоваров.Сделка = &Регистратор
И ВозвратыТоваров.Период <= &КонДата И ВозвратыТоваров.Активность И ВозвратыТоваров.Регистратор <> &ЭтотВозврат

ОБЪЕДИНИТЬ

ВЫБРАТЬ
КорректировкаРеализации.Ссылка
ИЗ
Документ.КорректировкаРеализации КАК КорректировкаРеализации
ГДЕ
КорректировкаРеализации.ИсходныйДокументРеализации = &Регистратор
И КорректировкаРеализации.Ссылка <> &ЭтотВозврат
И КорректировкаРеализации.Дата <= &КонДата
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ХозрасчетныйОбороты.Субконто1 КАК Номенклатура,
НЕОПРЕДЕЛЕНО КАК Партия,
ХозрасчетныйОбороты.Счет КАК СчетУчета,
ХозрасчетныйОбороты.Период КАК Период,
СУММА(ХозрасчетныйОбороты.СуммаОборотКт) КАК Сумма,
СУММА(ЕСТЬNULL(ХозрасчетныйОбороты.СуммаНУОборотКт, 0)) КАК СуммаНУ,
СУММА(ЕСТЬNULL(ХозрасчетныйОбороты.СуммаПРОборотКт, 0)) КАК СуммаПР,
СУММА(ЕСТЬNULL(ХозрасчетныйОбороты.СуммаВРОборотКт, 0)) КАК СуммаВР,
СУММА(ХозрасчетныйОбороты.КоличествоОборотКт) КАК Количество,
0 КАК КоличествоОтгружено
ПОМЕСТИТЬ ВТ_СписанныеТовары
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(
&НачМесяцаРеализации,
&КонДата,
Месяц,
Счет В (&СчетКтНеПартионный),
&ВидыСубконтоБезПартий,
Организация = &Организация
И ИСТИНА
И Субконто1 В (&Товары)
И Субконто2 = &СкладОтгрузки,
,
) КАК ХозрасчетныйОбороты

СГРУППИРОВАТЬ ПО
ХозрасчетныйОбороты.Субконто1,
ХозрасчетныйОбороты.Счет,
ХозрасчетныйОбороты.Период

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
ВЫБОР
КОГДА ХозрасчетныйДвиженияССубконто.ВидСубконтоКт1 = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура)
ТОГДА ХозрасчетныйДвиженияССубконто.СубконтоКт1
КОГДА ХозрасчетныйДвиженияССубконто.ВидСубконтоКт2 = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура)
ТОГДА ХозрасчетныйДвиженияССубконто.СубконтоКт2
КОГДА ХозрасчетныйДвиженияССубконто.ВидСубконтоКт3 = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура)
ТОГДА ХозрасчетныйДвиженияССубконто.СубконтоКт3
ИНАЧЕ НЕОПРЕДЕЛЕНО
КОНЕЦ,
НЕОПРЕДЕЛЕНО,
ХозрасчетныйДвиженияССубконто.СчетКт,
НАЧАЛОПЕРИОДА(ХозрасчетныйДвиженияССубконто.Период, МЕСЯЦ),
-ХозрасчетныйДвиженияССубконто.Сумма,
ЕСТЬNULL(-ХозрасчетныйДвиженияССубконто.СуммаНУКт, 0),
ЕСТЬNULL(-ХозрасчетныйДвиженияССубконто.СуммаПРКт, 0),
ЕСТЬNULL(-ХозрасчетныйДвиженияССубконто.СуммаВРКт, 0),
-ХозрасчетныйДвиженияССубконто.КоличествоКт,
0
ИЗ
РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
&НачМесяцаРеализации,
&КонДата,
Организация = &Организация
И ИСТИНА
И СчетКт В (&СчетКтНеПартионный)
И НеКорректироватьСтоимостьАвтоматически
И КоличествоКт < 0
И ВидСубконтоКт1 = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура)
И СубконтоКт1 В (&Товары)
И ВидСубконтоКт2 = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады)
И СубконтоКт2 = &СкладОтгрузки,
,
) КАК ХозрасчетныйДвиженияССубконто

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
ВЫБОР
КОГДА ХозрасчетныйДвиженияССубконто.ВидСубконтоКт1 = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура)
ТОГДА ХозрасчетныйДвиженияССубконто.СубконтоКт1
КОГДА ХозрасчетныйДвиженияССубконто.ВидСубконтоКт2 = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура)
ТОГДА ХозрасчетныйДвиженияССубконто.СубконтоКт2
КОГДА ХозрасчетныйДвиженияССубконто.ВидСубконтоКт3 = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура)
ТОГДА ХозрасчетныйДвиженияССубконто.СубконтоКт3
ИНАЧЕ НЕОПРЕДЕЛЕНО
КОНЕЦ,
ВЫБОР
КОГДА ХозрасчетныйДвиженияССубконто.ВидСубконтоКт1 = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Партии)
ТОГДА ХозрасчетныйДвиженияССубконто.СубконтоКт1
КОГДА ХозрасчетныйДвиженияССубконто.ВидСубконтоКт2 = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Партии)
ТОГДА ХозрасчетныйДвиженияССубконто.СубконтоКт2
КОГДА ХозрасчетныйДвиженияССубконто.ВидСубконтоКт3 = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Партии)
ТОГДА ХозрасчетныйДвиженияССубконто.СубконтоКт3
ИНАЧЕ НЕОПРЕДЕЛЕНО
КОНЕЦ,
ХозрасчетныйДвиженияССубконто.СчетКт,
НАЧАЛОПЕРИОДА(ХозрасчетныйДвиженияССубконто.Период, МЕСЯЦ),
0,
0,
0,
0,
0,
ХозрасчетныйДвиженияССубконто.КоличествоКт
ИЗ
РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
&НачМесяцаРеализации,
&КонДата,
Организация = &Организация
И Регистратор В
(ВЫБРАТЬ
ВТДокументыОтгрузки.Ссылка ИЗ ВТДокументыОтгрузки)
И СчетКт В (&СчетКтПартионный, &СчетКтНеПартионный)
И ВидСубконтоКт1 = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура)
И СубконтоКт1 В (&Товары),
,
) КАК ХозрасчетныйДвиженияССубконто
ГДЕ
ХозрасчетныйДвиженияССубконто.КоличествоКт >= 0

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
ВозвратыТоваровОбороты.Номенклатура,
ВозвратыТоваровОбороты.Партия,
ВозвратыТоваровОбороты.СчетУчета,
&НачМесяцаРеализации,
0,
0,
0,
0,
0,
-ВозвратыТоваровОбороты.КоличествоОборот
ИЗ
РегистрНакопления.ВозвратыТоваров.Обороты(
&НачМесяцаРеализации,
&КонДата,
Регистратор,
Сделка = &Регистратор
И Организация = &Организация
И СчетУчета В (&СчетКтПартионный, &СчетКтНеПартионный)
И Номенклатура В (&Товары)) КАК ВозвратыТоваровОбороты
ГДЕ
ВозвратыТоваровОбороты.Регистратор <> &ЭтотВозврат
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТСписанныеТовары.Номенклатура КАК Номенклатура, ВТСписанныеТовары.Партия КАК Партия,
ВТСписанныеТовары.СчетУчета КАК СчетУчета, ВТСписанныеТовары.Период КАК Период,
ЕСТЬNULL(РеквизитыДокументаПартии.ДатаРегистратора, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаПартии,
СУММА(ВТСписанныеТовары.Сумма) КАК Сумма, СУММА(ВТСписанныеТовары.СуммаНУ) КАК СуммаНУ,
СУММА(ВТСписанныеТовары.СуммаПР) КАК СуммаПР, СУММА(ВТСписанныеТовары.СуммаВР) КАК СуммаВР,
СУММА(ВТСписанныеТовары.Количество) КАК Количество, СУММА(ВТСписанныеТовары.КоличествоОтгружено) КАК КоличествоОтгружено,
НАЧАЛОПЕРИОДА(ВТСписанныеТовары.Период, МЕСЯЦ) < &НачТекущегоМесяца КАК ВозвратПрошлогоМесяца ИЗ ВТСписанныеТовары КАК ВТСписанныеТовары ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПервичныхДокументов КАК РеквизитыДокументаПартии ПО (РеквизитыДокументаПартии.Организация = &Организация) И ВТСписанныеТовары.Партия = РеквизитыДокументаПартии.Документ
ГДЕ
ВТ_СписанныеТовары.Номенклатура В(&Товары)

СГРУППИРОВАТЬ ПО
ВТСписанныеТовары.Номенклатура, ВТСписанныеТовары.СчетУчета,
ВТСписанныеТовары.Период, ВТСписанныеТовары.Партия,
ЕСТЬNULL(РеквизитыДокументаПартии.ДатаРегистратора, ДАТАВРЕМЯ(1, 1, 1)),
НАЧАЛОПЕРИОДА(ВТ_СписанныеТовары.Период, МЕСЯЦ) < &НачТекущегоМесяца

ИМЕЮЩИЕ
СУММА(ВТ_СписанныеТовары.Количество) > 0

УПОРЯДОЧИТЬ ПО
ВТСписанныеТовары.Номенклатура, ДатаПартии УБЫВ, ВТСписанныеТовары.Период
ИТОГИ ПО
Номенклатура,
СчетУчета,
Партия

UPD 3: сделал заплатку попроще в модуль ОбщегоНазначенияКлиентСервер:

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

Среда: БП 3.0.195.40 Объем: 0.7 час.

image_pdfimage_print

fixin

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

Вам может также понравиться...

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

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