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

11.07.21

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Исправление ошибки релиза Бухгалтерии 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С:Зарплата и кадры бюджетного учреждения 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ Платные (руб)

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

60000 руб.

06.10.2023    4615    37    20    

45

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

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

14400 руб.

29.04.2020    34002    108    152    

75

Корректировка данных Программист Пользователь Платформа 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    52665    16    61    

55

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

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

3600 руб.

10.02.2017    111551    669    175    

708

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

Вы наконец разобрались с закрытием месяцев и пора начать контролировать сроки оплаты поставщикам и задолженности клиентов, но в базе расчеты не идут из-за развернутого сальдо? Не беда, есть решение!

12000 руб.

02.11.2020    7586    6    0    

8

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

Внешняя обработка, позволяющая произвольным образом заполнять документ "Корректировка регистров" Предназначена для использования в конфигурациях "Управление торговлей 11", "Управление небольшой фирмой", "ERP Управление предприятием", а также в других конфигурациях, в состав которых входит библиотека стандартных подсистем (БСП) версии 2.2+ и указанный выше документ.

2400 руб.

13.07.2015    51421    175    29    

127

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

Обработка предназначена для ООО для смены системы налогообложения УСН на ОСНО, без ведения раздельного учета, входящего НДС по способам учета. При реализации перехода в операции формируются проводки по выделению НДС, который ранее учитывался в стоимости номенклатуры, регистр «НДС Предъявленный».

6000 руб.

22.01.2025    392    1    0    

3

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

Обработка служит для: выравнивания бухгалтерского и налогового учета на определенную дату по выбранным счетам; закрытия остатков по выбранным счетам; обнуления налогового учета (ПР, ВР также будут обнулены)

2880 руб.

05.05.2024    717    10    0    

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