Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 11:10

Ошибка при вызове метода контекста (РезультатЗапроса)

Автор Nosferatu112, 28 мар 2023, 10:24

0 Пользователей и 1 гость просматривают эту тему.

Nosferatu112

Кто подскажет на что ругается?

&НаСервере
Функция РезультатЗапроса()

Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        | ПоступлениеТоваровУслуг.Ссылка КАК Ссылка,
        | ПоступлениеТоваровУслуг.Контрагент КАК Контрагент
        |ИЗ
        | Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
        |ГДЕ
        | ПоступлениеТоваровУслуг.Дата > ДАТАВРЕМЯ(2023, 1, 1)
        | И НЕ ПоступлениеТоваровУслуг.ПометкаУдаления
        | И ПоступлениеТоваровУслуг.ЭтоУниверсальныйДокумент = ЛОЖЬ
        | И ПоступлениеТоваровУслуг.Проведен = ИСТИНА";
   
   
    лкТЗ = Запрос.Выполнить().Выгрузить();



Возврат лкТЗ;
КонецФункции
&НаСервере
Функция ПоискКонтр()

СтрНаим = "ЭНЕРГИЯ МСК ООО";
Контр = Справочники.Контрагенты;
НайденыйКонтр = Контр.НайтиПоНаименованию(СтрНаим);

Возврат НайденыйКонтр;

КонецФункции

&НаКлиенте
Процедура ЗаполнитьУПД(Команда)

РезультатЗапроса();
ЗаписатьДок(лкТЗ);

Для каждого лкСтр Из лкТЗ Цикл
   
   
Форма = ПолучитьФорму("Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокументаТовары",, лкСтр.Ссылка, );

ПоискКонтр();

Если лкСтр.ЭтоУниверсальныйДокумент = Истина И лкСтр.Контрагент = ПоискКонтр() Тогда
Форма.КодВидаОперации = "01";
Форма.НДСПредъявленКВычету = Истина;
ИначеЕсли лкСтр.ЭтоУниверсальныйДокумент = Истина И лкСтр.Контрагент <> ПоискКонтр() Тогда
Форма.КодВидаОперации = "01";
Форма.НДСПредъявленКВычету = Ложь;
КонецЕсли;

КонецЦикла;

//ЗаполнитьУПДНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаписатьДок()

РезультатЗапроса();

Для каждого лкСтр Из лкТЗ Цикл
       
        лкДок = лкСтр.Ссылка.ПолучитьОбъект();   
        лкДок.ЭтоУниверсальныйДокумент = Истина;
        лкДок.Записать(РежимЗаписиДокумента.Запись);


    КонецЦикла;

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


Ошибка:

Ошибка при вызове метода контекста (РезультатЗапроса)
{Документ.ПоступлениеТоваровУслуг.Форма.ФормаСписка.Форма(937)}: РезультатЗапроса();
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: ret Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа '{http://v8.1c.ru/8.1/data/core}ValueTable'

по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.

Что такое я передаю с сервера что нельзя открыть на клиенте?

antoneus


Nosferatu112

antoneus, и как передать этот чертов запрос на клиент?

LexaK

Nosferatu112, вот ваш код, немного подправленный. попробуйте,
(если ошибка и будет то уже другая)
&НаСервере
Функция РезультатЗапроса()
   
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПоступлениеТоваровУслуг.Ссылка КАК Ссылка,
        |    ПоступлениеТоваровУслуг.Контрагент КАК Контрагент
        |ИЗ
        |    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
        |ГДЕ
        |    ПоступлениеТоваровУслуг.Дата > ДАТАВРЕМЯ(2023, 1, 1)
        |    И НЕ ПоступлениеТоваровУслуг.ПометкаУдаления
        |    И ПоступлениеТоваровУслуг.ЭтоУниверсальныйДокумент = ЛОЖЬ
        |    И ПоступлениеТоваровУслуг.Проведен = ИСТИНА";
   
   
    лкТЗ = Запрос.Выполнить().Выгрузить();
   
   
   
    Возврат лкТЗ;
КонецФункции
&НаСервере
Функция ПоискКонтр()
   
    СтрНаим = "ЭНЕРГИЯ МСК ООО";
    Контр = Справочники.Контрагенты;
    НайденыйКонтр = Контр.НайтиПоНаименованию(СтрНаим);   
   
    Возврат НайденыйКонтр;
   
КонецФункции

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

    //ЗаполнитьУПДНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаписатьДок()
   
    лкТЗ = РезультатЗапроса();
   
    Для каждого лкСтр Из лкТЗ Цикл
       
        лкДок = лкСтр.Ссылка.ПолучитьОбъект();   
        лкДок.ЭтоУниверсальныйДокумент = Истина;
        лкДок.Записать(РежимЗаписиДокумента.Запись);
         
       
    КонецЦикла;   
   
КонецПроцедуры
если помогло нажмите: Спасибо!

antoneus

Можно создать чертов реквизит чертовой формы с типом таблица значений (на самом деле это будет не таблица значений, а ДанныеФормыКоллекция).

Nosferatu112

antoneus, Мне правда не удобно что я так туплю но вопрос
&НаСервере
Функция РезультатЗапроса()

Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        | ПоступлениеТоваровУслуг.Ссылка КАК Ссылка,
        | ПоступлениеТоваровУслуг.Контрагент КАК Контрагент
        |ИЗ
        | Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
        |ГДЕ
        | ПоступлениеТоваровУслуг.Дата > ДАТАВРЕМЯ(2023, 1, 1)
        | И НЕ ПоступлениеТоваровУслуг.ПометкаУдаления
        | И ПоступлениеТоваровУслуг.ЭтоУниверсальныйДокумент = ЛОЖЬ
        | И ПоступлениеТоваровУслуг.Проведен = ИСТИНА";
   
   
    лкТЗ = Запрос.Выполнить().Выгрузить();


ТабДанныхУПД.Загрузить(лкТЗ);
//Возврат лкТЗ;
КонецФункции
&НаСервере
Функция ПоискКонтр()

СтрНаим = "ЭНЕРГИЯ МСК ООО";
Контр = Справочники.Контрагенты;
НайденыйКонтр = Контр.НайтиПоНаименованию(СтрНаим);

Возврат НайденыйКонтр;

КонецФункции

&НаКлиенте
Процедура ЗаполнитьУПД(Команда)

РезультатЗапроса();
лкТЗ = табДанныхУПД;
ЗаписатьДок();

Для каждого лкСтр Из лкТЗ Цикл
   
   
Форма = ПолучитьФорму("Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокументаТовары",, лкСтр.Ссылка, );

НайденыйКонтр = ПоискКонтр();

Если лкСтр.ЭтоУниверсальныйДокумент = Истина И лкСтр.Контрагент = НайденыйКонтр Тогда
Форма.КодВидаОперации = "01";
Форма.НДСПредъявленКВычету = Истина;
ИначеЕсли лкСтр.ЭтоУниверсальныйДокумент = Истина И лкСтр.Контрагент <> НайденыйКонтр Тогда
Форма.КодВидаОперации = "01";
Форма.НДСПредъявленКВычету = Ложь;
КонецЕсли;
Форма.Записать(РежимЗаписиДокумента.Проведение);
КонецЦикла;

//ЗаполнитьУПДНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаписатьДок()


лкТЗ = табДанныхУПД.Выгрузить();
Для каждого лкСтр Из лкТЗ Цикл
       
        лкДок = лкСтр.Ссылка.ПолучитьОбъект();   
        лкДок.ЭтоУниверсальныйДокумент = Истина;
        лкДок.Записать(РежимЗаписиДокумента.Запись);


    КонецЦикла;

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

Когда я загружаю запрос в реквизит формы и выгружаю в нужном месте он не видит объект ссылка в этой строке лкДок = лкСтр.Ссылка.ПолучитьОбъект(); потому что там коллекция данных, как из этой коллекции достать конкретно ссылку и процедуре на клиенте нельзя воспользоваться методом выгрузить как тогда достать там информацию7

Nosferatu112

antoneus, Я еще пробовал выгружать инфу в таблицу так но он тогда все циклы проскакивает просто

лкТЗ = Запрос.Выполнить();
ВыборкаПоДокументам = лкТЗ.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоДокументам.Следующий() Цикл

Док = ТабДанныхУПД.Добавить();
Док.Ссылка = ВыборкаПоДокументам.Ссылка;

КонецЦикла

Nosferatu112

Ошибка была глупая конечно в прошлом вопросе код отрабатывает всё ок но вопрос всё таки есть.

&НаСервере
Функция РезультатЗапроса()

Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        | ПоступлениеТоваровУслуг.Ссылка КАК Ссылка,
        | ПоступлениеТоваровУслуг.Контрагент КАК Контрагент,
        | ПоступлениеТоваровУслуг.ЭтоУниверсальныйДокумент КАК ЭтоУниверсальныйДокумент
        |ИЗ
        | Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
        |ГДЕ
        | ПоступлениеТоваровУслуг.Дата > ДАТАВРЕМЯ(2023, 1, 1)
        | И НЕ ПоступлениеТоваровУслуг.ПометкаУдаления
        | И ПоступлениеТоваровУслуг.ЭтоУниверсальныйДокумент = ЛОЖЬ
        | И ПоступлениеТоваровУслуг.Проведен = ИСТИНА";
   
   
    лкТЗ = Запрос.Выполнить();
ВыборкаПоДокументам = лкТЗ.Выбрать();
Пока ВыборкаПоДокументам.Следующий() Цикл

Док = ТабДанныхУПД.Добавить();
Док.Ссылка = ВыборкаПоДокументам.Ссылка;
Док.Контрагент = ВыборкаПоДокументам.Контрагент;
Док.ЭтоУниверсальныйДокумент = ВыборкаПоДокументам.ЭтоУниверсальныйДокумент;
КонецЦикла
//Возврат лкТЗ;
КонецФункции
&НаСервере
Функция ПоискКонтр()

СтрНаим = "ЭНЕРГИЯ МСК ООО";
Контр = Справочники.Контрагенты;
НайденыйКонтр = Контр.НайтиПоНаименованию(СтрНаим);

Возврат НайденыйКонтр;

КонецФункции

&НаКлиенте
Процедура ЗаполнитьУПД(Команда)

РезультатЗапроса();
ЗаписатьДок();

Для каждого лкСтр Из табДанныхУПД Цикл
   
   
Форма = ПолучитьФорму("Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокументаТовары",, лкСтр.Ссылка, );

НайденыйКонтр = ПоискКонтр();

Если лкСтр.ЭтоУниверсальныйДокумент = Истина И лкСтр.Контрагент = НайденыйКонтр Тогда
Форма.КодВидаОперации = "01";
Форма.НДСПредъявленКВычету = Истина;
ИначеЕсли лкСтр.ЭтоУниверсальныйДокумент = Истина И лкСтр.Контрагент <> НайденыйКонтр Тогда
Форма.КодВидаОперации = "01";
Форма.НДСПредъявленКВычету = Ложь;
КонецЕсли;
Форма.Записать();
КонецЦикла;

//ЗаполнитьУПДНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаписатьДок()


//лкТЗ = табДанныхУПД.Выгрузить();
Для каждого лкСтр Из ТабДанныхУПД Цикл
       
        лкДок = лкСтр.Ссылка.ПолучитьОбъект();   
        лкДок.ЭтоУниверсальныйДокумент = Истина;
        лкДок.Записать(РежимЗаписиДокумента.Запись);


    КонецЦикла;

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

В процедуре ЗаполнитьУПД в строке Если лкСтр.ЭтоУниверсальныйДокумент = Истина И лкСтр.Контрагент = НайденыйКонтр Тогда, лкСтр.ЭтоУниверсальныйДокумент = Ложь, я пологаю это из за того что процесс записи ещё не завершился и УПД не встало в истину как можно обойти это?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск