Исправление ошибки релиза Бухгалтерии 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    5744    38    20    

46

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

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

14400 руб.

29.04.2020    35548    115    152    

79

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

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

3600 руб.

10.02.2017    112762    683    175    

722

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

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

6000 руб.

22.01.2025    1535    4    0    

6

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

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

2880 руб.

05.05.2024    953    14    0    

10

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

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

2400 руб.

27.06.2023    2932    3    0    

3

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

При загрузке банковской выписки поступлений по платежным картам 1С не совсем верно распознает данные, предоставляемые банком. В результате приходится корректировать эти данные вручную в документе "Поступление на расчетный счет". Ставить сумму комиссии (даже когда программа автоматом рассчитала сумму она не всегда совпадает с банком), вид операции, в зависимости от торговой точки менять учет налогов, ставить договор итд. Все это настраивается один раз и вам останется только выбрать период! Есть и простой вариант использования - просто правит сумму комиссии. Расширение в комплекте позволяет вызвать обработку автоматически после загрузки выписки.

4200 руб.

23.12.2021    15897    10    26    

15

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

Обработка для группового редактирования реквизитов номенклатуры в 1С для УТ 11 / КА 2. Позволяет редактировать реквизиты (как основные, так и дополнительные реквизиты и сведения) непосредственно в таблице, устанавливать новые значения реквизитов на выбранную номенклатуру, а также загружать новые значения из Excel. Предусмотрена возможность добавления фото к товарам перетаскиванием файла из проводника на строку с товаром (drag'n'drop)

4200 руб.

16.11.2020    18055    12    5    

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