Не проводится документ автоматически.

1. user689104_mas.88 26.04.17 07:58 Сейчас в теме
Здравствуйте, есть документы расходная и приходная накладные, у них есть 2 статуса "введен" и "проверен бухгалтером". Есть обработка которая автоматически ставит статус "проверен бухгалтером" и проводит их. Некоторые документы проводит а некоторые нет, но вручную нормально ставится статус и проводится. С чем может быть связано что некоторые документы не хочет проводить? Так же почему то на некоторых документах при открытии ставится статус модифицированности хотя изменения не вносятся, возможно из за этого? Отладчиком ругается на код:

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

Пишет "Значение не является значением объектного типа (Пустая).
Бухгалтерия 8.3 (8.3.6.2299)
+
По теме из базы знаний
Найденные решения
20. Sokar 26.04.17 09:58 Сейчас в теме
еще чуть-чуть и закончится всякое желание помогать...

ВХК_МодульДляПриходнойНакладной.СоздатьПеремещение1(ДокументБух... - это конечно здорово, но...

покажите мне строчку кода где у вас присваивается значение переменной ДокументБух

т.е. ДокументБух=... или ДокументБух.Получить... или откуда у вас ваще берется эта переменная?
Bukaska; +1
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
7. m-serg74 46 26.04.17 08:49 Сейчас в теме
причем тут все это? в (1) написана конкретная ошибка
Значение не является значением объектного типа (Пустая)


такое сообщение будет выходить если переменная ДокументБух не является значением ссылочного типа, о чем я и написал в (2) и (3)
+
2. m-serg74 46 26.04.17 08:08 Сейчас в теме
ну так значит в переменной "ДокументБух" явно не документ, надо проверять что там прежде чем обращаться к нему как к документу
+
3. m-serg74 46 26.04.17 08:09 Сейчас в теме
надо смотреть откуда эта переменная появляется и чем заполняется
+
4. user689104_mas.88 26.04.17 08:19 Сейчас в теме
(m-serg74) У него создается дочерний документ перемещение товаров. Если проводить вручную, то он показывает что создает документ перемещение товаров. Еще заметил, что он не проводит по одному только контрагенту. По остальным все отлично. Кажется нашел косяк, в контрагентах заведено 2 одинаковых магазина, и в документ заносится скорее всего не правильный магазин. Сейчас проверю.
+
5. m-serg74 46 26.04.17 08:28 Сейчас в теме
(4)
У него создается дочерний документ перемещение товаров

перед тем как создаться у него
Если  (ДокументБух.Пустая()


а если в переменной тип не документ? а если она ваще Неопределено?
+
6. user689104_mas.88 26.04.17 08:41 Сейчас в теме
8. Sokar 26.04.17 08:51 Сейчас в теме
господи, да покажите вы как и где у вас заполняется ДокументБух... сразу отпадет большинство вопросов и предположений
klinval; m-serg74; +2
9. user689104_mas.88 26.04.17 09:18 Сейчас в теме
ДокументБух получается он не определяет переменную. Может быть из за того, что ставится статус модифицированности документа?
+
10. Sokar 26.04.17 09:22 Сейчас в теме
(9) как слепой с глухим... код в студию где у вас присвоение переменной ДокументБух... увы, у нас не Хогвартс и телепатия не преподается
klinval; m-serg74; +2
11. m-serg74 46 26.04.17 09:24 Сейчас в теме
12. user689104_mas.88 26.04.17 09:24 Сейчас в теме
Процедура СоздатьПеремещение1(ДокументБух,Дата,Номер,Товары,Организация,Клиент,ВидТоваров)  Экспорт      //процедура только для создания перемещений Булочная
		
	
		
		Если  (ДокументБух.Пустая()) или (ДокументБух.Дата=Дата(1,1,1,0,0,0)) тогда
			НовыйДок = Документы.ПеремещениеТоваров.СоздатьДокумент();
		Иначе
				НовыйДок = ДокументБух.ПолучитьОбъект();
			
				Если НовыйДок.ПометкаУдаления тогда
					НовыйДок.УстановитьПометкуУдаления(Ложь);
					НовыйДок.Записать();
				КонецЕсли;	
			
				НовыйДок.Товары.Очистить();
		КонецЕсли;
		
		Если организация.Пустая() тогда
			НовыйДок.Организация = КОнстанты.ЕКС_ОсновнаяОрганизация.Получить();
		Иначе
			НовыйДок.Организация = Организация;
		КонецЕсли;
		
		НовыйДок.Номер = "Э"+СокрЛП(Номер);	
	    НовыйДок.Дата = Дата;
		
		НовыйДок.СкладПолучатель=Справочники.Склады.НайтиПоКоду("00015");
		НовыйДок.СкладОтправитель=Справочники.Склады.НайтиПоКоду("00-000004");
		//НовыйДок.Ответственный=
		
		
		

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

			 КонецЕсли;			 
			 
				 	
		КонецЦикла;	
		
		
		ПровелДок = Истина;
		Попытка
			НовыйДок.Записать(РежимЗаписиДокумента.Запись);		
		Исключение
			ПровелДок = Ложь;
		КонецПопытки;
		
		
		Если НЕ ПровелДок тогда
			ПровелДок = Истина;
			
			Попытка
			НовыйДок.Записать(РежимЗаписиДокумента.Запись);

			Исключение
			ПровелДок = Ложь;
							
			КонецПопытки;
			КонецЕсли;
			
		
		ДокРеализацияТиУ = НовыйДок.Ссылка;
			
		
		
КонецПроцедуры
Показать
+
13. Sokar 26.04.17 09:28 Сейчас в теме
где тут смайлик бьющийся головой об стену?
вы в процедуру передаете откуда-то ДокументБух... ОТКУДА??? и я так понимаю по скрину, что вы пытаетесь передавать не сам документ, а ссылку на него?
klinval; +1
16. m-serg74 46 26.04.17 09:35 Сейчас в теме
(13) ясновидение почему то подсказывает что когда "вручную" с формы документа идет вызов процедуры и передача документа, а когда из обработки, то шишь что в эту переменную передается путного
+
18. Sokar 26.04.17 09:40 Сейчас в теме
(16) именно, это ясно видно на скрине отладки
+
14. m-serg74 46 26.04.17 09:33 Сейчас в теме
15. user689104_mas.88 26.04.17 09:33 Сейчас в теме
Процедура ОсновныеДействияФормыВторсырье(Кнопка)
	Док = Документы.ЕКС_ПриходнаяНакладная.Выбрать(НачалоДня(ДатаНач),КонецДня(ДатаКон));
	Пока док.Следующий() цикл
		Если Док.СтатусДокумента = Перечисления.ЕКС_СтатусДокумента.ПроверенБухгалтером Тогда Продолжить; КонецЕсли;
		Если Док.Проведен = ЛОЖЬ Тогда Продолжить; КонецЕсли;
		Если Док.СтатусДокумента = Перечисления.ЕКС_СтатусДокумента.Введен = Ложь Тогда Продолжить; КонецЕсли;

		
		ОбДок = Док.ПолучитьОбъект();
		ОбДок.СтатусДокумента = Перечисления.ЕКС_СтатусДокумента.ПроверенБухгалтером;
		
		ОбДок.ЕКС_Редактор = СокрЛП(ПользователиКлиентСервер.ТекущийПользователь())+" " + ТекущаяДата();
		
		Попытка
			ОбДок.Записать(РежимЗаписиДокумента.Проведение);

		Исключение
			Сообщить(строка(док)+" "+строка(ОписаниеОшибки()));
			
			возврат;
		КонецПопытки;
		Сообщить(Обдок);
	КонецЦикла;	
КонецПроцедуры
Показать


Передается с обработки
+
17. m-serg74 46 26.04.17 09:36 Сейчас в теме
(15) хоть убейте не вижу здесь вызова процедуры СоздатьПеремещение1(
+
19. user689104_mas.88 26.04.17 09:47 Сейчас в теме
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	СуммаДокумента = Товары.Итог("Сумма");
	
	
РежимЗаписиДокумента.Проведение)И (СтатусДокумента = Перечисления.ЕКС_СтатусДокумента.ПроверенБухгалтером) и (СокрЛП(Организация.Код) = "1" или СокрЛП(Организация.Код) = "2") тогда//(СтатусДокумента = Перечисления.ЕКС_СтатусДокумента.ПроверенБухгалтером) и (Организация = Константы.ЕКС_ОсновнаяОрганизация.Получить()) тогда
	Если Клиент<>Справочники.Контрагенты.НайтиПоКоду("00-000255") и ((СтатусДокумента = Перечисления.ЕКС_СтатусДокумента.ПроверенБухгалтером) и (СокрЛП(Организация.Код) = "1" или СокрЛП(Организация.Код) = "2")) тогда//(СтатусДокумента = Перечисления.ЕКС_СтатусДокумента.ПроверенБухгалтером) и (Организация = Константы.ЕКС_ОсновнаяОрганизация.Получить()) тогда
		
		ТЗ_Товары = Товары.Выгрузить();
		ВХК_МодульДляПриходнойНакладной.СоздатьДокументПостулпенияТиУ(ДокументБух,Дата,Номер,ТЗ_Товары,Организация,Клиент,ВидТоваров,ЕстьНДС);
		

	КонецЕсли;		
	
	Если Клиент=Справочники.Контрагенты.НайтиПоКоду("00-000255") и ((СтатусДокумента = Перечисления.ЕКС_СтатусДокумента.ПроверенБухгалтером) и (СокрЛП(Организация.Код) = "1" или СокрЛП(Организация.Код) = "2")) тогда
		
		
		ТЗ_Товары = Товары.Выгрузить();
		ВХК_МодульДляПриходнойНакладной.СоздатьПеремещение1(ДокументБух,Дата,Номер,ТЗ_Товары,Организация,Клиент,ВидТоваров);
	КонеЦЕсли;

	
	Если (РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения) тогда
		Если НЕ ДокументБух = Неопределено Тогда
			Если НЕ ДокументБух = Документы.ПоступлениеТоваровУслуг.ПустаяСсылка() тогда //или (ДокументБух.Дата=Дата(1,1,1,0,0,0))) тогда
				ВХК_МодульДляПриходнойНакладной.УдалитьБухДокумент(ДокументБух);
			КонецЕсли;
		КонецЕсли;	
	КонецЕсли;	
	

КонецПроцедуры
Показать


Отсюда идет вызов
+
20. Sokar 26.04.17 09:58 Сейчас в теме
еще чуть-чуть и закончится всякое желание помогать...

ВХК_МодульДляПриходнойНакладной.СоздатьПеремещение1(ДокументБух... - это конечно здорово, но...

покажите мне строчку кода где у вас присваивается значение переменной ДокументБух

т.е. ДокументБух=... или ДокументБух.Получить... или откуда у вас ваще берется эта переменная?
Bukaska; +1
22. Bukaska 140 26.04.17 10:42 Сейчас в теме
(20)Видать только тут..
 Если (РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения) тогда
        Если НЕ ДокументБух = Неопределено Тогда
            Если НЕ ДокументБух = Документы.ПоступлениеТоваровУслуг.ПустаяСсылка() тогда //или (ДокументБух.Дата=Дата(1,1,1,0,0,0))) тогда
                ВХК_МодульДляПриходнойНакладной.УдалитьБухДокумент(ДокументБух);
            КонецЕсли;
        КонецЕсли;    
    КонецЕсли;    

А именно в процедуре по созданию перемещения.. там и я не вижу


(19)При чем тут откуда идет вызов? Вы же просите помощи не по процедуре обработки проведения?
Или в одной процедуре создана переменная, значит в остальных можно её не создавать, а просто брать из предыдущих процедур?
Насколько я понимаю, после слов: КонецПроцедуры программа не обязана помнить переменные оттуда. Это проведение документа.
+
21. user689104_mas.88 26.04.17 10:40 Сейчас в теме
(Sokar) Получается что в него никакие значения не присваиваются. В другом коде где создается ПоступлениеТиУ и переменной ДокументБух присваивается как раз значение поступления акта. А в этом документе он ничего не присваивает этой переменной. Спасибо за помощь, разобрался))
+
23. Sokar 26.04.17 10:43 Сейчас в теме
ну хоть не впустую бились ))))) рад что у вас все получилось
+
Внимание! Тема сдана в архив

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