Исправление ошибки релиза Бухгалтерии 3.0.95.6: при отключенном контроле остатков не проводит документ

11.07.21

Задачи пользователя - Корректировка данных

В программе отключен контроль остатков, но при этом при проведении документов программа выдает ошибку, и документ не проводится. Ошибка в релизе! Как в общем модуле УчетТоваров забыли передать переменную КонтролироватьОстаток, в результате чего документ, например, ОтчетОРозничныхПродажах не проводится. В предыдущем релизе всё было в порядке.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
Исправление ошибки релиза Бухгалтерии 3.0.95.6 при отключенном контроле остатков не проводит документ.:
.cfe 7,49Kb
3
3
1 SM
Скачать Купить за 1 850 руб.

При проведении документа Отчет о розничных продажах программа выдает ошибку 
 

Некорректно заполнена колонка "Количество" в строке 1 списка "Товары". Указанное количество превышает остаток. Остаток: 0; Не хватает: N.

Далее документ не проводится. Возможно возникает при проведении на других видах документов.

Описание ошибки :

Общий модуль УчетТоваров содержит процедуру

Процедура СписатьОстаткиТоваровИСообщитьОбОшибке(ТаблицаСписаниеПоОстаткам, ТаблицаОстатки, ТаблицаСписанныеТовары, ТаблицаВыпущеннаяПродукция, СпособОценкиМПЗПоСредней, КонтролироватьОстаток, Реквизиты, Отказ)
	
	ТаблицаОшибок = ТаблицаОшибокСписанияТоваров();
	
	ПараметрыСписания = НовыйПараметрыСписанияТоваров();
	ПараметрыСписания.Регистратор = Реквизиты.Регистратор;
	ПараметрыСписания.Организация = Реквизиты.Организация;
	ПараметрыСписания.Период = Реквизиты.Период;
	ПараметрыСписания.Подразделение = Реквизиты.Подразделение;
	ПараметрыСписания.СпособОценкиМПЗПоСредней = СпособОценкиМПЗПоСредней;
	
	СписатьОстаткиТоваров(ТаблицаСписаниеПоОстаткам, ТаблицаОстатки, ТаблицаСписанныеТовары, ТаблицаВыпущеннаяПродукция, ТаблицаОшибок, ПараметрыСписания);
	
	Если ТаблицаОшибок.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	Для Каждого СтрокаОшибки Из ТаблицаОшибок Цикл
		Если Не КонтролироватьОстаток И Не БухгалтерскийУчетПовтИсп.СчетУчетаКомиссионногоТовара(СтрокаОшибки.СчетУчета) Тогда
			Продолжить;
		КонецЕсли;
		
		Если БухгалтерскийУчетПереопределяемый.ДокументЯвляетсяРазукомплектацией(Реквизиты.Регистратор) Тогда
			
			ВывестиСообщениеОбОшибке(
				ТаблицаОшибок.Итог("Количество"), 
				ТаблицаОшибок.Итог("КоличествоОсталосьПогасить"), 
				Реквизиты.Регистратор,,,,Отказ);
			
		Иначе
			
			Для Каждого СтрокаТаблицыОшибок Из ТаблицаОшибок Цикл
				
				ВывестиСообщениеОбОшибке(
					СтрокаТаблицыОшибок.Количество, 
					СтрокаТаблицыОшибок.КоличествоОсталосьПогасить, 
					Реквизиты.Регистратор, 
					СтрокаТаблицыОшибок.ИмяСписка, 
					СтрокаТаблицыОшибок.СинонимСписка, 
					СтрокаТаблицыОшибок.НомерСтроки, 
					Отказ);
			
			КонецЦикла;
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

 как видно параметр КонтролироватьОстаток присутствует, далее по тексту идет вызов процедуры СписатьОстаткиТоваров

СписатьОстаткиТоваров(ТаблицаСписаниеПоОстаткам, ТаблицаОстатки, ТаблицаСписанныеТовары, ТаблицаВыпущеннаяПродукция, ТаблицаОшибок, ПараметрыСписания);

но при этом параметр КонтролироватьОстаток почему то не передается ! И это приводит к возникновению ошибки. В более ранних релизах передавался.

Для исправления ситуации необходимо внести исправление в процедуру СписатьОстаткиТоваров . 

Текст исправленой процедуры :

Процедура СписатьОстаткиТоваров(ТаблицаСписаниеПоОстаткам, ТаблицаОстатки, ТаблицаСписанныеТовары, ТаблицаВыпущеннаяПродукция, ТаблицаОшибок, ПараметрыСписания)
	
    // Исправление 3.0.96.35 
	ИспользуетсяОтложенноеПроведение = ПроведениеСервер.ИспользуетсяОтложенноеПроведение(ПараметрыСписания.Организация, ПараметрыСписания.Период);
	КонтролироватьОстаток = НЕ БухгалтерскийУчетПереопределяемый.ОтключитьКонтрольОтрицательныхОстатков()	
	И НЕ ИспользуетсяОтложенноеПроведение;
    // Исправление 3.0.96.35 
	
	ЕстьКолонкаВозвратПоТекущемуДокументу = ТаблицаСписаниеПоОстаткам.Колонки.Найти("ВозвратПоТекущемуДокументу") <> Неопределено;
	
	ПустойСклад = Справочники.Склады.ПустаяСсылка();
	
	УчетВыпускаПродукцииПоДаннымПродаж = УчетнаяПолитика.УчетВыпускаПродукцииПоДаннымПродаж(
		ПараметрыСписания.Организация, ПараметрыСписания.Период);
	СчетаУчетаПродукцииДляВыпуска = РасчетВыпускаПоДаннымПродаж.СчетаУчетаПродукцииДляВыпуска();
	
	Для каждого СтрокаДокумента Из ТаблицаСписаниеПоОстаткам Цикл
		
		КоличествоОсталосьПогасить = СтрокаДокумента.Количество;
		
		ЭтоПродажаПоКоторойБылВозврат = Ложь;
		// Если по этой продаже был возврат, то пометим это
		Если ЕстьКолонкаВозвратПоТекущемуДокументу
			И СтрокаДокумента.ВозвратПоТекущемуДокументу Тогда
			ЭтоПродажаПоКоторойБылВозврат = Истина;
		КонецЕсли;
		
		Если ТаблицаОстатки.Количество() <> 0 Тогда
		
			ПараметрыОтбора = Новый Структура;
			ПараметрыОтбора.Вставить("Номенклатура", СтрокаДокумента.Номенклатура);
			ПараметрыОтбора.Вставить("СчетУчета", СтрокаДокумента.СчетУчета);
			
			Если ЗначениеЗаполнено(СтрокаДокумента.ДокументОприходования) Тогда
				Если (НЕ ПараметрыСписания.СпособОценкиМПЗПоСредней ИЛИ БухгалтерскийУчетПовтИсп.СчетУчетаКомиссионногоТовара(СтрокаДокумента.СчетУчета))
					И БухгалтерскийУчет.НаСчетеВедетсяПартионныйУчет(СтрокаДокумента.СчетУчета) Тогда
					ПараметрыОтбора.Вставить("ДокументОприходования", СтрокаДокумента.ДокументОприходования);
				КонецЕсли;
			КонецЕсли;
			
			ПартииОстатков = ТаблицаОстатки.Скопировать(ПараметрыОтбора);
			ПартииОстатков.Сортировать("ДокументОприходованияДата, ДокументОприходования", Новый СравнениеЗначений);
			
			Для каждого СтрокаПартии Из ПартииОстатков Цикл
				
				Если КоличествоОсталосьПогасить <= 0 Тогда
					Прервать;
				КонецЕсли;
				
				Если СтрокаПартии.КоличествоПоСкладу <= 0
					ИЛИ СтрокаПартии.Количество <= 0 Тогда
					Продолжить;
				КонецЕсли;
				
				Если БухгалтерскийУчет.ВедетсяУчетПоСкладам(СтрокаДокумента.СчетУчета) Тогда
					Если СтрокаПартии.Склад <> СтрокаДокумента.Склад
						И НЕ СтрокаПартии.Склад = ПустойСклад Тогда // пустые склады могут остаться со времени, когда не было учета по складам
						Продолжить;
					КонецЕсли;
				КонецЕсли;
				
				Количество = Мин(СтрокаПартии.КоличествоПоСкладу, КоличествоОсталосьПогасить);
				
				Стоимость	= Окр(СтрокаПартии.Стоимость * Количество / СтрокаПартии.Количество, 2, 1);
				СтоимостьНУ	= Окр(СтрокаПартии.СтоимостьНУ * Количество / СтрокаПартии.Количество, 2, 1);
				СтоимостьПР	= Окр(СтрокаПартии.СтоимостьПР * Количество / СтрокаПартии.Количество, 2, 1);
				СтоимостьВР	= Окр(СтрокаПартии.СтоимостьВР * Количество / СтрокаПартии.Количество, 2, 1);
				
				Если (СтрокаПартии.Стоимость = СтрокаПартии.СтоимостьНУ + СтрокаПартии.СтоимостьВР + СтрокаПартии.СтоимостьПР)
						И (Стоимость <> СтоимостьНУ + СтоимостьВР + СтоимостьПР) Тогда
						
						СтоимостьВР = Стоимость - СтоимостьНУ - СтоимостьПР;
						
				КонецЕсли;
				
				КоличествоОсталосьПогасить = КоличествоОсталосьПогасить - Количество;
				
				Если НЕ ЭтоПродажаПоКоторойБылВозврат Тогда
					
					СтрокаТаблицыОстатки = ТаблицаОстатки.Найти(СтрокаПартии.НомерСтроки, "НомерСтроки");
					СтрокаТаблицыОстатки.Количество         = СтрокаТаблицыОстатки.Количество - Количество;
					СтрокаТаблицыОстатки.Стоимость          = СтрокаТаблицыОстатки.Стоимость - Стоимость;
					СтрокаТаблицыОстатки.СтоимостьНУ        = СтрокаТаблицыОстатки.СтоимостьНУ - СтоимостьНУ;
					СтрокаТаблицыОстатки.СтоимостьПР        = СтрокаТаблицыОстатки.СтоимостьПР - СтоимостьПР;
					СтрокаТаблицыОстатки.СтоимостьВР        = СтрокаТаблицыОстатки.СтоимостьВР - СтоимостьВР;
					СтрокаТаблицыОстатки.КоличествоПоСкладу = СтрокаТаблицыОстатки.КоличествоПоСкладу - Количество;
					
				КонецЕсли;
				
				СписаннаяПартия = ТаблицаСписанныеТовары.Добавить();
				ЗаполнитьЗначенияСвойств(СписаннаяПартия, СтрокаДокумента);
				СписаннаяПартия.Подразделение       = СтрокаПартии.Подразделение;
				СписаннаяПартия.Партия              = СтрокаПартии.ДокументОприходования;
				СписаннаяПартия.Склад               = СтрокаПартии.Склад;
				СписаннаяПартия.Количество          = Количество;
				СписаннаяПартия.СуммаСписания       = Стоимость;
				СписаннаяПартия.СуммаСписанияНУ     = СтоимостьНУ;
				СписаннаяПартия.СуммаСписанияПР     = СтоимостьПР;
				СписаннаяПартия.СуммаСписанияВР     = СтоимостьВР;
				СписаннаяПартия.СуммаКорСписанияНУ  = СтоимостьНУ;
				СписаннаяПартия.СуммаКорСписанияПР  = СтоимостьПР;
				СписаннаяПартия.СуммаКорСписанияВР  = СтоимостьВР;
				
				Если НЕ ТаблицаСписанныеТовары.Колонки.Найти("РассчитатьСебестоимостьПоТекущимПродажам") = Неопределено
						И СписаннаяПартия.РассчитатьСебестоимостьПоТекущимПродажам Тогда
						
					СписаннаяПартия.РассчитатьСебестоимостьПоТекущимПродажам = Ложь;
					
				КонецЕсли;
				
			КонецЦикла;
		КонецЕсли;
		
		Если УчетВыпускаПродукцииПоДаннымПродаж
			И ТаблицаВыпущеннаяПродукция <> Неопределено
			И КоличествоОсталосьПогасить > 0
			И МожноВыпуститьПродукциюПриСписании(ПараметрыСписания.Регистратор, СтрокаДокумента, СчетаУчетаПродукцииДляВыпуска) Тогда
			
			СведенияОПродукции = СведенияОПродукцииДляВыпуска(СтрокаДокумента.Номенклатура, КоличествоОсталосьПогасить, ПараметрыСписания.Период);
			Если ЗначениеЗаполнено(СведенияОПродукции.Спецификация) Тогда
				ВыпуститьПродукциюИСписать(СтрокаДокумента, СведенияОПродукции, ТаблицаСписанныеТовары, ТаблицаВыпущеннаяПродукция, ПараметрыСписания);
				КоличествоОсталосьПогасить = 0;
			КонецЕсли;
			
		КонецЕсли;
		
		// Несписанное количество добавим отдельной строкой в таблицу списанных партий.
		Если КоличествоОсталосьПогасить > 0  Тогда
			
			СписаннаяПартия               = ТаблицаСписанныеТовары.Добавить();
			ЗаполнитьЗначенияСвойств(СписаннаяПартия, СтрокаДокумента);
			СписаннаяПартия.СчетУчета     = СтрокаДокумента.СчетУчета;
			СписаннаяПартия.Подразделение = ПараметрыСписания.Подразделение;
			СписаннаяПартия.Количество    = КоличествоОсталосьПогасить;
			
		КонецЕсли;
		
		// Если не хватает товара для списания, то зарегистрируем ошибку в таблице ошибок.
		// Будет ли продолжено выполнение или пользователю будет выдано сообщение решит код, который вызвал эту процедуру.
		// Например, сообщения об ошибке может и не быть, если включена возможность списания без остатков.
		// Исправление 3.0.96.35 
		// добавлена проверка на контроль остатков, условие (И КонтролироватьОстаток)
		Если КоличествоОсталосьПогасить > 0 И КонтролироватьОстаток Тогда
			
			ЗарегистрироватьОшибку = Истина;
			
			Если НЕ ТаблицаСписаниеПоОстаткам.Колонки.Найти("ВозвратПоТекущемуДокументу") = Неопределено
				И СписаннаяПартия.ВозвратПоТекущемуДокументу Тогда
				ЗарегистрироватьОшибку = Ложь;
			КонецЕсли;
			
			Если ЗарегистрироватьОшибку Тогда
					
				СтрокаТаблицыОшибок = ТаблицаОшибок.Добавить();
				ЗаполнитьЗначенияСвойств(СтрокаТаблицыОшибок, СтрокаДокумента);
				СтрокаТаблицыОшибок.КоличествоОсталосьПогасить = КоличествоОсталосьПогасить;
			
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

Чтобы не менять конфигурацию, берем текст процедуры, добавляем в расширение с аннотацией &Вместо("СписатьОстаткиТоваров") и после этого программа работает исправно. 

Готового решения данной проблемы не нашёл, поэтому набросал расширение для исправления данной ситуации.

Все исправления обозначены комментарием // Исправление 3.0.96.35

Ошибка воспроизводится на релизе 3.0.96.5. Надеюсь, в следующем релизе ситуацию исправят.

Ошибка релиз 3.0.96.5 исправление

См. также

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

Незаменимая обработка для сопровождения конфигураций: ERP, УТ, КА. Позволяет вычистить многие ошибки в ключах аналитики, в ключевых справочниках конфигурации.

3600 руб.

10.02.2017    108623    650    173    

690

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    29946    88    151    

63

Корректировка данных Программист Пользователь Платформа 1С v8.3 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Управленческий учет Платные (руб)

Представьте, что есть система QR - кодирования, которая НЕ ТРЕБУЕТ изменения конфигурации, НЕ ТРЕБУЕТ изменения ни одной печатной формы для добавления QR-кода, включая внешние, НЕ ХРАНИТ данные штрихкодов и их связь, от чего база не "пухнет", ИМЕЕТ возможность закодировать в QR-коде произвольные данные параметров для последующей обработки полученных данных, УМЕЕТ прикреплять сканы, УМЕЕТ обработать считанный QR-код как ВЫ захотите. А также ХРАНИТ историю операций в обход базы для каждого пользователя в отдельности и УМЕЕТ работать с 2D - сканерами. А также автоматически распознавать отсканированные печатные формы (картинки или pdf-файлы) и выполнять заданные произвольные алгоритмы, в том числе прикрепление их к документам! Обновление 3.2 от 09.06.2024!

19200 руб.

26.08.2018    51317    14    61    

54

Корректировка данных Зарплата Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры бюджетного учреждения 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ Платные (руб)

Обработка исправляет технические ошибки по НДФЛ, взаиморасчетам с сотрудниками в 1С:ЗУП (1С:ЗКГУ) на начало года. Фактически все ошибки, которые проявляются в ведомостях на выплату, расчетных листках, при заполнении ведомостей на выплату и отчетах 6-НДФЛ и т.д. нужно начинать исправлять с начала расчетного года. Это позволит быть уверенными, что после завершения расчетов предыдущего года, начали работать с «чистого листа» без ошибочных остатков.

4800 руб.

06.10.2023    3477    34    17    

42

Корректировка данных Зарплата Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Внешняя обработка предназначена для исправления самых различных ошибок, возникших по самым разным причинам. Общее проявление этих ошибок видно в различии данных между: проводками и различными отчетами по НДФЛ, заполнении ведомостей на выдачу зарплаты, неверным расчетом НДФЛ при начислении ЗП и т.д.

3600 руб.

09.02.2024    1279    8    5    

11

Закрытие периода Корректировка данных Бухгалтер Пользователь Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Закрытие месяца - важный процесс в современных конфигурациях, таких как УТ 11.4, УТ 11.5, КА 2.4, КА 2.5 ERP 2.4,ERP 2.5, КА 2 Казахстан, УТ 3 Казахстан регламентные операции влияют на расчет себестоимости, и ошибки в данном расчете не дают картины деятельности организации.

2400 руб.

27.10.2021    23416    303    35    

76
Оставьте свое сообщение