Регламентное задание по закрытию заказов клиента

1. 04.05.21 17:53 Сейчас в теме
Всем привет. Подскажите в чем ошибка, выполняю код в регламентном задании, выполняется успешно без ошибок, но заказы не закрывает. 1С:Комплексная автоматизация 2 (2.4.13.136)
Процедура ЗакрытиеЗаказовКлиентовИПоставщиков() Экспорт
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ЗаказКлиента.Ссылка КАК Ссылка,
		|	СостоянияЗаказовКлиентов.Заказ КАК Заказ,
		|	СостоянияЗаказовКлиентов.Состояние КАК Состояние,
		|	ЗаказКлиента.Статус КАК Статус,
		|	СтатусыЗаказовКлиентов.Ссылка КАК СтатусПеречисление
		|ИЗ
		|	РегистрСведений.СостоянияЗаказовКлиентов КАК СостоянияЗаказовКлиентов
		|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента КАК ЗаказКлиента
		|			ЛЕВОЕ СОЕДИНЕНИЕ Перечисление.СтатусыЗаказовКлиентов КАК СтатусыЗаказовКлиентов
		|			ПО ЗаказКлиента.Статус = СтатусыЗаказовКлиентов.Ссылка
		|		ПО СостоянияЗаказовКлиентов.Заказ = ЗаказКлиента.Ссылка";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	        
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		 
		
		Если ВыборкаДетальныеЗаписи.Состояние = Перечисления.СостоянияЗаказовКлиентов.ГотовКЗакрытию Тогда
				
				Статус = ВыборкаДетальныеЗаписи.СтатусПеречисление;
				Статус = Перечисления.СтатусыЗаказовКлиентов.Закрыт;
				
				
				 ДокументОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
				 ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
			
			КонецЕсли;
		
		КонецЦикла;

КонецПроцедуры

Показать
Найденные решения
4. ubnkfl 04.05.21 20:23 Сейчас в теме
Код ужасен, конечно.
Но какой есть.

Ошибка здесь:
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
         
        
        Если ВыборкаДетальныеЗаписи.Состояние = Перечисления.СостоянияЗаказовКлиентов.ГотовКЗакрытию Тогда
                
                Статус = ВыборкаДетальныеЗаписи.СтатусПеречисление;
                //Статус = Перечисления.СтатусыЗаказовКлиентов.Закрыт;
                
                
                 ДокументОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
                 ДокументОбъект.Статус = Перечисления.СтатусыЗаказовКлиентов.Закрыт;
                 ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
            
            КонецЕсли;
        
        КонецЦикла;
Показать
dmbarchenkov; +1 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Fox-trot 127 04.05.21 18:39 Сейчас в теме
Статус это наверное реквизит документа обьекта
Тогда та малость промахнулся
3. dmitrichenko.ivan 6 04.05.21 20:02 Сейчас в теме
Вы не присваиваете заказу клиента статус, просто перепроводите документ
4. ubnkfl 04.05.21 20:23 Сейчас в теме
Код ужасен, конечно.
Но какой есть.

Ошибка здесь:
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
         
        
        Если ВыборкаДетальныеЗаписи.Состояние = Перечисления.СостоянияЗаказовКлиентов.ГотовКЗакрытию Тогда
                
                Статус = ВыборкаДетальныеЗаписи.СтатусПеречисление;
                //Статус = Перечисления.СтатусыЗаказовКлиентов.Закрыт;
                
                
                 ДокументОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
                 ДокументОбъект.Статус = Перечисления.СтатусыЗаказовКлиентов.Закрыт;
                 ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
            
            КонецЕсли;
        
        КонецЦикла;
Показать
dmbarchenkov; +1 Ответить
5. Lllypuk 04.05.21 21:23 Сейчас в теме
(4)Спасибо. Покажи как можно было сделать код не ужасным, пожалуйста.
6. ubnkfl 05.05.21 00:12 Сейчас в теме
(5)
У меня нет конфигурации, но навскидку - в запросе надо проверять, что у документа статус не такой, какой вам нужен, и отбор делать не в коде, а в самом запросе. Иначе вы получаете лишние записи и переаписываете документы.

Что-то типа того.
Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|    СостоянияЗаказовКлиентов.Заказ КАК Заказ,
|    СостоянияЗаказовКлиентов.Состояние КАК Состояние,
|    ЗаказКлиента.Статус КАК Статус
|ИЗ
|    РегистрСведений.СостоянияЗаказовКлиентов КАК СостоянияЗаказовКлиентов
|        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента КАК ЗаказКлиента
|        ПО СостоянияЗаказовКлиентов.Заказ = ЗаказКлиента.Ссылка 
|        И СостоянияЗаказовКлиентов.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияЗаказовКлиентов.ГотовКЗакрытию)
|        И ЗаказКлиента.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовКлиентов.Закрыт)";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
	ДокументОбъект = Выборка.Заказ.ПолучитьОбъект();
	ДокументОбъект.Статус = ПредопределенноеЗначение("Перечисления.СтатусыЗаказовКлиентов.Закрыт");
	ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
КонецЦикла;
Показать
7. Lllypuk 05.05.21 08:21 Сейчас в теме
(6)а, понял. Так запросом тянется вообще всё, а потом еще и в коде перебирается это всё. Спасибо огромное, переделаю сегодня!!!
Оставьте свое сообщение
Вопросы с вознаграждением