Не перепровести документы (1 квартал)

1. jimli 6 10.04.20 18:16 Сейчас в теме
Перенесла документы, сводить квартал - пошли проблемы с резервами и оказалось, что не все приходы помещены на склад. Склад неордерный. Решила провести программно, ошибка для всех поступлений:

Оформлено больше чем указано в распоряжении Заказ поставщику номер ... дата...

Поступление проводится, если отвязать заказ. Отменила проведение квартала, написала процедуру, отвязывающую заказ. Но по-видимости неправильно, не проходит, фактически ничего не отвязывается (я присваиваю об.ЗаказКлиента = Документы.ЗаказКлиента.ПустаяСсылка() )

&НаСервереБезКонтекста
Процедура ПроводимРеалНаСервере(ДоДаты)
	ДатаДляОтбора = Дата(2020,1,7);
	пока ДатаДляОтбора < ДоДаты цикл
		 запрос = новый запрос;
		запрос.текст = "ВЫБРАТЬ 
		               |	РеализацияТоваровУслуг.Ссылка КАК Ссылка,
		               |	РеализацияТоваровУслуг.ЗаказКлиента КАК ЗаказКлиента,
		               |	РеализацияТоваровУслуг.Сделка КАК Сделка
		               |ИЗ
		               |	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
		               |ГДЕ
		               |	РеализацияТоваровУслуг.ПометкаУдаления = ЛОЖЬ
		               |	И РеализацияТоваровУслуг.Проведен = ЛОЖЬ
					   |	И РеализацияТоваровУслуг.Дата  МЕЖДУ &Дата1 И &Дата2";
		запрос.УстановитьПараметр("Дата1", НачалоДня(ДатаДляОтбора));
		запрос.УстановитьПараметр("Дата2", КонецДня(ДатаДляОтбора));
		рез = запрос.Выполнить();
		если не рез.Пустой() тогда
			Выб = рез.Выбрать();
			пока выб.Следующий() цикл
				Об = выб.Ссылка.ПолучитьОбъект();
				Сообщить(Об.Ссылка);
				попытка
					об.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
				Исключение
					СохрЗаказ = об.ЗаказКлиента;
					об.ЗаказКлиента = Документы.ЗаказКлиента.ПустаяСсылка();
					об.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
					об.ЗаказКлиента =СохрЗаказ;
					об.Записать();
				КонецПопытки;
			конеццикла;
		КонецЕсли;
	
		ДатаДляОтбора = ДатаДляОтбора + 60*60*24;
	 конеццикла;
	 
	 
	
КонецПроцедуры
Показать

Подскажите, что не так? Как программно отвязать заказ от поступления?
Может как-то не отвязывая можно? Может можно контроль отключить?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Xershi 1484 11.04.20 18:22 Сейчас в теме
(1) отключите контроль и проводите.
Иногда глупый контроль не даёт перепровести документы.
Но перед этим проверьте что бы потом все корректно было.
4. jimli 6 11.04.20 21:54 Сейчас в теме
(3) отключила все: контроль по организации, остатков по складу.
Контроль идет, так как есть ссылка на заказы. Я уже по коду посмотрела, для того, чтобы документ провелся, мне пришлось убирать ссылку на заказ в шапке, в строках:

&НаСервереБезКонтекста
Процедура ПроводимПостНаСервере(ДоДаты)

	ДатаДляОтбора = Дата(2020,1,7);
	пока ДатаДляОтбора < ДоДаты цикл
		зПриобр = новый запрос;
		зПриобр.текст = "ВЫБРАТЬ 
		                |	ПриобретениеТоваровУслуг.Ссылка КАК Ссылка,
		                |	ПриобретениеТоваровУслуг.ЗаказПоставщику КАК ЗаказПоставщику
		                |ИЗ
		                |	Документ.ПриобретениеТоваровУслуг КАК ПриобретениеТоваровУслуг
		                |ГДЕ
		                |	ПриобретениеТоваровУслуг.ПометкаУдаления = ЛОЖЬ
		                |	И ПриобретениеТоваровУслуг.Дата МЕЖДУ &Дата1 И &Дата2
		                |	И ПриобретениеТоваровУслуг.Проведен = ЛОЖЬ";
		зПриобр.УстановитьПараметр("Дата1", НачалоДня(ДатаДляОтбора));
		зПриобр.УстановитьПараметр("Дата2", КонецДня(ДатаДляОтбора));
		рПриобр = зПриобр.Выполнить();
		если не рПриобр.Пустой() тогда
			Выб1 = рПриобр.Выбрать();
			пока Выб1.Следующий() цикл
				Об = Выб1.Ссылка.ПолучитьОбъект();
				Сообщить(Об.Ссылка);
					ЕСЛИ ЗначениеЗаполнено(об.ЗаказПоставщику) ТОГДА
						СохрЗаказ = об.ЗаказПоставщику;
						об.ПоступлениеПоЗаказам = ложь;
						об.ЗаказПоставщику = Неопределено;
						Об.РасшифровкаПлатежа.Очистить();
						
						Для каждого ТекСтрТов из Об.РасшифровкаПлатежа цикл
							Об.РасшифровкаПлатежа.Удалить(ТекСтрТов);
						КонецЦикла;
			
		 				для каждОГО стр из об.товары цикл
							стр.ЗаказПоставщику = Неопределено;
							стр.КодСтроки = 0;
						КонецЦикла;
						об.Записать();
					КОНЕЦЕСЛИ;
			конеццикла;
		КонецЕсли;
			
		ДатаДляОтбора = ДатаДляОтбора + 60*60*24;
	 конеццикла; 
	 
	
КонецПроцедуры

Показать

Глобально убираю ссылки на заказы, перепровожу. Выяснила, что резервы сели криво, заказы не закрываются, мрак...
5. Xershi 1484 11.04.20 23:01 Сейчас в теме
(4) этого не достаточно.
Нужно через доработку или как я через расширение.
6. jimli 6 12.04.20 08:23 Сейчас в теме
(5) Почему недостаточно? Все проводится, ошибок нет.
На какие грабли я рискую наступить?
Через какое расширение вы перепроводили? Можете поделиться?
7. Xershi 1484 12.04.20 08:26 Сейчас в теме
2. jimli 6 10.04.20 22:08 Сейчас в теме
Спрашиваю про поступления, а код вставила с реализации...
Нужный код:
&НаСервереБезКонтекста
Процедура ПроводимПостНаСервере(ДоДаты)

	ДатаДляОтбора = Дата(2020,1,7);
	пока ДатаДляОтбора < ДоДаты цикл
		//сообщить(ДатаДляОтбора);
		зПриобр = новый запрос;
		зПриобр.текст = "ВЫБРАТЬ
		                |	ПриобретениеТоваровУслуг.Ссылка КАК Ссылка,
		                |	ПриобретениеТоваровУслуг.ЗаказПоставщику КАК ЗаказПоставщику
		                |ИЗ
		                |	Документ.ПриобретениеТоваровУслуг КАК ПриобретениеТоваровУслуг
		                |ГДЕ
		                |	ПриобретениеТоваровУслуг.ПометкаУдаления = ЛОЖЬ
		                |	И ПриобретениеТоваровУслуг.Дата МЕЖДУ &Дата1 И &Дата2
		                |	И ПриобретениеТоваровУслуг.Проведен = ЛОЖЬ";
		зПриобр.УстановитьПараметр("Дата1", НачалоДня(ДатаДляОтбора));
		зПриобр.УстановитьПараметр("Дата2", КонецДня(ДатаДляОтбора));
		рПриобр = зПриобр.Выполнить();
		если не рПриобр.Пустой() тогда
			Выб1 = рПриобр.Выбрать();
			пока Выб1.Следующий() цикл
				Об = Выб1.Ссылка.ПолучитьОбъект();
				Сообщить(Об.Ссылка);
				попытка
					об.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
				Исключение	
					СохрЗаказ = об.ЗаказПоставщику;
					об.ЗаказПоставщику = Документы.ЗаказПоставщику.ПустаяСсылка();
					об.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
					об.ЗаказПоставщику =СохрЗаказ;
					об.Записать();
				КонецПопытки;
			конеццикла;
		КонецЕсли;
			
		ДатаДляОтбора = ДатаДляОтбора + 60*60*24;
	 конеццикла; 
	 
	
КонецПроцедуры
Показать
Оставьте свое сообщение

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