Странно работает метод НайтиДокумент() в 1С 7.7
Из запроса в переменную "Заказ" передаётся как-то странно значение.
С одной стороны, метод ТипЗначенияСтр() выдает, что это "Документ".
С другой стороны, выполнение спотыкается на строке ЗаказДляПоиска.НайтиДокумент(Заказ); - пишет почему-то "Недопустимая операция".
С одной стороны, метод ТипЗначенияСтр() выдает, что это "Документ".
С другой стороны, выполнение спотыкается на строке ЗаказДляПоиска.НайтиДокумент(Заказ); - пишет почему-то "Недопустимая операция".
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса=
"//{{ЗАПРОС(Запрос)
|Период с Дата1 по Дата2;
|Обрабатывать НеПомеченныеНаУдаление;
|ОбрабатыватьДокументы Проведенные;
|Заказ = Документ.ОказаниеУслуг.Заказ,
| Документ.РасходнаяНакладная.Заказ;
|ВидОплаты = Документ.ОказаниеУслуг.Заказ.ВидОплаты,
| Документ.РасходнаяНакладная.Заказ.ВидОплаты;
|Условие (ВидОплаты <> ВидОплатыВнутреннийЗачет);
|Группировка Заказ;
|"//}}ЗАПРОС
;
Пока Запрос.Группировка("Заказ")=1 Цикл
Заказ = Запрос.Заказ;
Сообщить(ТипЗначенияСтр(Заказ));
ЗаказДляПоиска = СоздатьОбъект("Документ");
ЗаказДляПоиска.НайтиДокумент(Заказ);
ПоказатьПо теме из базы знаний
Найденные решения
(12)
Навскидку: в ОказаниеУслуг и РасходнаяНакладная Заказ - это всегда ссылка на Документ.Заказ? Или, может, реквизит неопределенного вида, которому программно присваивается соответствующий тип, когда нужно?
И еще: эта ссылка всегда заполнена? Если нет, то что вернет запрос?
В-общем, я бы для верности нагородил бы костылей даже побольше:
1. Проверил Заказ на ПустоеЗначение()
2. У непустого выделил бы дату и номер и искал по ним.
Там кода на 5 строчек, а как-то спокойнее.
Почему из запроса Заказ вытаскивается как некий "полудокумент" ?
А ХЗ почему, надо по базе смотреть.
Навскидку: в ОказаниеУслуг и РасходнаяНакладная Заказ - это всегда ссылка на Документ.Заказ? Или, может, реквизит неопределенного вида, которому программно присваивается соответствующий тип, когда нужно?
И еще: эта ссылка всегда заполнена? Если нет, то что вернет запрос?
В-общем, я бы для верности нагородил бы костылей даже побольше:
1. Проверил Заказ на ПустоеЗначение()
2. У непустого выделил бы дату и номер и искал по ним.
Там кода на 5 строчек, а как-то спокойнее.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3)
Ещё интересно, что тип значения Заказ.ДатаДок - "Строка", а вовсе не "Дата"
А само значение даты (в строковом представлении) - правильное? Если да, то можно преобразовать его в дату, получить Заказ.НомерДок и дальше искать документ по номеру - для этого все есть.
(10)
Для очистки совести можно вместо:
попробовать:
Если не сработает, тогда приступать к ваянию костылей.
Просто хочется написать "лаконичный" модуль, без всяких "извращений".
В таких случаях обычно спрашивают: "Вам шашечки или ехать?" Похоже, что шашечки важнее.
Для очистки совести можно вместо:
Если ПодчДок.ВыбратьПодчиненныеДокументы(Дата1,Дата2,Заказ) = 1 Тогда
Если ПодчДок.ВыбратьПодчиненныеДокументы(Дата1,Дата2,Заказ.ТекущийДокумент()) = 1 Тогда
Если не сработает, тогда приступать к ваянию костылей.
(12)
Навскидку: в ОказаниеУслуг и РасходнаяНакладная Заказ - это всегда ссылка на Документ.Заказ? Или, может, реквизит неопределенного вида, которому программно присваивается соответствующий тип, когда нужно?
И еще: эта ссылка всегда заполнена? Если нет, то что вернет запрос?
В-общем, я бы для верности нагородил бы костылей даже побольше:
1. Проверил Заказ на ПустоеЗначение()
2. У непустого выделил бы дату и номер и искал по ним.
Там кода на 5 строчек, а как-то спокойнее.
Почему из запроса Заказ вытаскивается как некий "полудокумент" ?
А ХЗ почему, надо по базе смотреть.
Навскидку: в ОказаниеУслуг и РасходнаяНакладная Заказ - это всегда ссылка на Документ.Заказ? Или, может, реквизит неопределенного вида, которому программно присваивается соответствующий тип, когда нужно?
И еще: эта ссылка всегда заполнена? Если нет, то что вернет запрос?
В-общем, я бы для верности нагородил бы костылей даже побольше:
1. Проверил Заказ на ПустоеЗначение()
2. У непустого выделил бы дату и номер и искал по ним.
Там кода на 5 строчек, а как-то спокойнее.
(3) у вас скорее всего "заказ" совсем не документ, а справочник, в котором хранятся "ссылки" на "заказы" (м.б. "заказ" - более сложная сущность и не хватило возможнойстей "документа".
будут проблемы - стучитесь скайп Zlopun или здесь в личку - разрулим через тим операьтивно, там работы на 5-10 минут разобраться...
будут проблемы - стучитесь скайп Zlopun или здесь в личку - разрулим через тим операьтивно, там работы на 5-10 минут разобраться...
(4) В том-то и дело, что ссылку вроде как получил, пытаюсь её подставить в 3-й параметр метода ВыбратьПодчиненныеДокументы(Дата1, Дата2, Заказ), а он ругается, что "Заказ" не Документ !!!
Поэтому захотел получить значение через СоздатьОбъект() и подставить уже его в ВыбратьПодчиненныеДокументы(), но там как видите тоже не прокатывает - метод НайтиДокумент(Заказ) тоже не хочет "принимать" Заказ.
Он, видимо, из запроса как-то неправильно извлекается ....
Поэтому захотел получить значение через СоздатьОбъект() и подставить уже его в ВыбратьПодчиненныеДокументы(), но там как видите тоже не прокатывает - метод НайтиДокумент(Заказ) тоже не хочет "принимать" Заказ.
Он, видимо, из запроса как-то неправильно извлекается ....
Попробуйте так :
Док=СоздатьОбъект("Документ");
Док.ВыбратьПодчиненныеДокументы(Дата1, Дата2, Заказ);
Пока Док.ПолучитьДокумент()=1 Цикл
Сообщить(Док);
КонецЦикла;
Метод можно использовать только для объектов, созданных функцией СоздатьОбъект. Это описание для метода "ВыбратьПодчиненныеДокументы". т.е. Переменная Док должна так быть создана, что выше и сделано по коду.
Если не получится код весь сбросьте, просто отрывки кода ничего не дают....
Док=СоздатьОбъект("Документ");
Док.ВыбратьПодчиненныеДокументы(Дата1, Дата2, Заказ);
Пока Док.ПолучитьДокумент()=1 Цикл
Сообщить(Док);
КонецЦикла;
Метод можно использовать только для объектов, созданных функцией СоздатьОбъект. Это описание для метода "ВыбратьПодчиненныеДокументы". т.е. Переменная Док должна так быть создана, что выше и сделано по коду.
Если не получится код весь сбросьте, просто отрывки кода ничего не дают....
<Дата1> - дата, документ или позиция начала выборки документов. Если данный параметр опущен, то выборка начинается с самого первого существующего в системе документа.
<Дата2> - дата, документ или позиция конца выборки документов. Если данный параметр опущен, то выборка заканчивается самым последним существующим в системе документом.
т.е. можно не указывать Дата1 и Дата2, тогда будут найдены все подчиненные документы не зависимо от периода.
<Дата2> - дата, документ или позиция конца выборки документов. Если данный параметр опущен, то выборка заканчивается самым последним существующим в системе документом.
т.е. можно не указывать Дата1 и Дата2, тогда будут найдены все подчиненные документы не зависимо от периода.
Вот исходный код:
Но, как я говорил, метод ВыбратьПодчиненныеДокументы() почему-то ругается на переменную Заказ.
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса=
"//{{ЗАПРОС(Запрос)
|Период с Дата1 по Дата2;
|Обрабатывать НеПомеченныеНаУдаление;
|ОбрабатыватьДокументы Проведенные;
|Заказ = Документ.ОказаниеУслуг.Заказ,
| Документ.РасходнаяНакладная.Заказ;
|ВидОплаты = Документ.ОказаниеУслуг.Заказ.ВидОплаты,
| Документ.РасходнаяНакладная.Заказ.ВидОплаты;
|Условие (ВидОплаты <> ВидОплатыВнутреннийЗачет);
|Группировка Заказ;
|"//}}ЗАПРОС
;
Запрос.Выполнить(ТекстЗапроса);
Пока Запрос.Группировка("Заказ")=1 Цикл
Заказ = Запрос.Заказ;
ПодчДок = СоздатьОбъект("Документ");
Если ПодчДок.ВыбратьПодчиненныеДокументы(Дата1,Дата2,Заказ) = 1 Тогда
Пока ПодчДок.ПолучитьДокумент() = 1 Цикл
Если ПодчДок.ПометкаУдаления()=1 Тогда
Продолжить;
КонецЕсли;
Если ПодчДок.Проведен()=0 Тогда
Продолжить;
КонецЕсли;
Если (ПодчДок.Вид() = "ОказаниеУслуг") ИЛИ (ПодчДок.Вид() = "РасходнаяНакладная") Тогда
ДокументПервойОтгрузки = ПодчДок.ТекущийДокумент();
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ДатаДокументаПервойОтгрузки = ДокументПервойОтгрузки.ДатаДок;
Если (ДатаДокументаПервойОтгрузки<Дата1) ИЛИ (ДатаДокументаПервойОтгрузки>Дата2) Тогда
Продолжить;
КонецЕсли;
ПоказатьНо, как я говорил, метод ВыбратьПодчиненныеДокументы() почему-то ругается на переменную Заказ.
больше похоже на то, что проблема не там, где ее ищут. Там нет где-то рядом другой переменной Заказ? Реквизит может какой-то. Или что-то глобальное. Переименовать, поставить проверку на тип и заполненность значения...
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот