Странно работает метод НайтиДокумент() в 1С 7.7

1. autobuh 33 25.09.18 14:36 Сейчас в теме
Из запроса в переменную "Заказ" передаётся как-то странно значение.
С одной стороны, метод ТипЗначенияСтр() выдает, что это "Документ".
С другой стороны, выполнение спотыкается на строке ЗаказДляПоиска.НайтиДокумент(Заказ); - пишет почему-то "Недопустимая операция".

Запрос = СоздатьОбъект("Запрос");
	ТекстЗапроса=
	"//{{ЗАПРОС(Запрос)
	|Период с Дата1 по Дата2;
	|Обрабатывать НеПомеченныеНаУдаление;
	|ОбрабатыватьДокументы Проведенные;
	|Заказ = Документ.ОказаниеУслуг.Заказ,
	|		 Документ.РасходнаяНакладная.Заказ;
	|ВидОплаты = Документ.ОказаниеУслуг.Заказ.ВидОплаты,
	|			 Документ.РасходнаяНакладная.Заказ.ВидОплаты;
	|Условие (ВидОплаты <> ВидОплатыВнутреннийЗачет);
	|Группировка Заказ;
	|"//}}ЗАПРОС
	;
		    
    Пока Запрос.Группировка("Заказ")=1 Цикл
		
		Заказ = Запрос.Заказ;

		Сообщить(ТипЗначенияСтр(Заказ));

		ЗаказДляПоиска = СоздатьОбъект("Документ");
		ЗаказДляПоиска.НайтиДокумент(Заказ);
Показать
По теме из базы знаний
Найденные решения
13. user856012 13 26.09.18 10:20 Сейчас в теме
(12)
Почему из запроса Заказ вытаскивается как некий "полудокумент" ?
А ХЗ почему, надо по базе смотреть.

Навскидку: в ОказаниеУслуг и РасходнаяНакладная Заказ - это всегда ссылка на Документ.Заказ? Или, может, реквизит неопределенного вида, которому программно присваивается соответствующий тип, когда нужно?

И еще: эта ссылка всегда заполнена? Если нет, то что вернет запрос?

В-общем, я бы для верности нагородил бы костылей даже побольше:
1. Проверил Заказ на ПустоеЗначение()
2. У непустого выделил бы дату и номер и искал по ним.

Там кода на 5 строчек, а как-то спокойнее.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
17. omnitech69 43 26.09.18 15:26 Сейчас в теме
(1)
ЗаказДляПоиска.НайтиДокумент(Заказ);


Добрый день, попробуйте ЗаказДляПоиска.НайтиДокумент(Заказ.ТекущийДокумент())
2. Octopus 337 25.09.18 14:54 Сейчас в теме
А Заказ.Вид() что возвращает?
3. autobuh 33 25.09.18 15:18 Сейчас в теме
(2) Возвращает "Заказ". Ещё интересно, что тип значения Заказ.ДатаДок - "Строка", а вовсе не "Дата".
6. user856012 13 25.09.18 17:37 Сейчас в теме
(3)
Ещё интересно, что тип значения Заказ.ДатаДок - "Строка", а вовсе не "Дата"
А само значение даты (в строковом представлении) - правильное? Если да, то можно преобразовать его в дату, получить Заказ.НомерДок и дальше искать документ по номеру - для этого все есть.
10. autobuh 33 26.09.18 09:51 Сейчас в теме
(6) Да, значение правильное. Просто хочется написать "лаконичный" модуль, без всяких "извращений".
11. user856012 13 26.09.18 09:58 Сейчас в теме
(10)
Просто хочется написать "лаконичный" модуль, без всяких "извращений".
В таких случаях обычно спрашивают: "Вам шашечки или ехать?" Похоже, что шашечки важнее.

Для очистки совести можно вместо:
   Если ПодчДок.ВыбратьПодчиненныеДокументы(Дата1,Дата2,Заказ) = 1 Тогда
попробовать:
   Если ПодчДок.ВыбратьПодчиненныеДокументы(Дата1,Дата2,Заказ.ТекущийДокумент()) = 1 Тогда

Если не сработает, тогда приступать к ваянию костылей.
12. autobuh 33 26.09.18 10:03 Сейчас в теме
(11) не прокатило (((
А может в запросе ещё что-то можно поменять ?
Почему из запроса Заказ вытаскивается как некий "полудокумент" ?
13. user856012 13 26.09.18 10:20 Сейчас в теме
(12)
Почему из запроса Заказ вытаскивается как некий "полудокумент" ?
А ХЗ почему, надо по базе смотреть.

Навскидку: в ОказаниеУслуг и РасходнаяНакладная Заказ - это всегда ссылка на Документ.Заказ? Или, может, реквизит неопределенного вида, которому программно присваивается соответствующий тип, когда нужно?

И еще: эта ссылка всегда заполнена? Если нет, то что вернет запрос?

В-общем, я бы для верности нагородил бы костылей даже побольше:
1. Проверил Заказ на ПустоеЗначение()
2. У непустого выделил бы дату и номер и искал по ним.

Там кода на 5 строчек, а как-то спокойнее.
19. CheBurator 3122 26.09.18 22:34 Сейчас в теме
(3) у вас скорее всего "заказ" совсем не документ, а справочник, в котором хранятся "ссылки" на "заказы" (м.б. "заказ" - более сложная сущность и не хватило возможнойстей "документа".

будут проблемы - стучитесь скайп Zlopun или здесь в личку - разрулим через тим операьтивно, там работы на 5-10 минут разобраться...
4. newbas 534 25.09.18 15:59 Сейчас в теме
А разве после этого вы не получили ссылку на сам заказ ?
Заказ = Запрос.Заказ;
Зачем эти строки :
ЗаказДляПоиска = СоздатьОбъект("Документ");
ЗаказДляПоиска.НайтиДокумент(Заказ);
5. autobuh 33 25.09.18 16:18 Сейчас в теме
(4) В том-то и дело, что ссылку вроде как получил, пытаюсь её подставить в 3-й параметр метода ВыбратьПодчиненныеДокументы(Дата1, Дата2, Заказ), а он ругается, что "Заказ" не Документ !!!
Поэтому захотел получить значение через СоздатьОбъект() и подставить уже его в ВыбратьПодчиненныеДокументы(), но там как видите тоже не прокатывает - метод НайтиДокумент(Заказ) тоже не хочет "принимать" Заказ.
Он, видимо, из запроса как-то неправильно извлекается ....
7. newbas 534 26.09.18 06:20 Сейчас в теме
Попробуйте так :

Док=СоздатьОбъект("Документ");
Док.ВыбратьПодчиненныеДокументы(Дата1, Дата2, Заказ);
Пока Док.ПолучитьДокумент()=1 Цикл
Сообщить(Док);
КонецЦикла;


Метод можно использовать только для объектов, созданных функцией СоздатьОбъект. Это описание для метода "ВыбратьПодчиненныеДокументы". т.е. Переменная Док должна так быть создана, что выше и сделано по коду.


Если не получится код весь сбросьте, просто отрывки кода ничего не дают....
8. newbas 534 26.09.18 06:22 Сейчас в теме
<Дата1> - дата, документ или позиция начала выборки документов. Если данный параметр опущен, то выборка начинается с самого первого существующего в системе документа.
<Дата2> - дата, документ или позиция конца выборки документов. Если данный параметр опущен, то выборка заканчивается самым последним существующим в системе документом.

т.е. можно не указывать Дата1 и Дата2, тогда будут найдены все подчиненные документы не зависимо от периода.
9. autobuh 33 26.09.18 09:48 Сейчас в теме
Вот исходный код:
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса=
"//{{ЗАПРОС(Запрос)
|Период с Дата1 по Дата2;
|Обрабатывать НеПомеченныеНаУдаление;
|ОбрабатыватьДокументы Проведенные;
|Заказ = Документ.ОказаниеУслуг.Заказ,
|		 Документ.РасходнаяНакладная.Заказ;
|ВидОплаты = Документ.ОказаниеУслуг.Заказ.ВидОплаты,
|			 Документ.РасходнаяНакладная.Заказ.ВидОплаты;
|Условие (ВидОплаты <> ВидОплатыВнутреннийЗачет);
|Группировка Заказ;
|"//}}ЗАПРОС
;

Запрос.Выполнить(ТекстЗапроса);

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


Но, как я говорил, метод ВыбратьПодчиненныеДокументы() почему-то ругается на переменную Заказ.
14. starjevschik 26.09.18 10:21 Сейчас в теме
больше похоже на то, что проблема не там, где ее ищут. Там нет где-то рядом другой переменной Заказ? Реквизит может какой-то. Или что-то глобальное. Переименовать, поставить проверку на тип и заполненность значения...
15. autobuh 33 26.09.18 10:28 Сейчас в теме
(14) Сделал Заказ1 = Запрос.Заказ; - не помогло ((
16. Vlan 36 26.09.18 10:28 Сейчас в теме
А может запрос по-другому построить? Ведь что мы ищем в цикле? Те же ОказаниеУслуг и РасходнаяНакладная.
Может надо получить запросом их, сгруппировать по Заказ, упорядочить по дате и брать самые ранние?
18. CheBurator 3122 26.09.18 22:31 Сейчас в теме
такая ошибка свидетельствует о том, что у вас в переменной "заказ" совсем не тот тип/вид, который нужен для использования в НайтиДокумент
20. Ramzay82 27.09.18 08:31 Сейчас в теме
21. AndKovalchuk 192 27.09.18 12:25 Сейчас в теме
А не проще ли посмотреть в конфигурации на реквизит "заказ" документа. Какой там тип стоит? Документ или справочник? И главное совпадают ли типы реквизита "заказ" для двух документов "ОказаниеУслуг" и "РасходнаяНакладная"?
Оставьте свое сообщение

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