Ошибка при вызове метода контекста значениевданныеформы

0

SFilchakov

18.02.16

21:09

Дико извиняюсь, тема затасканная и инфы полно, но как то не выходит, делаю по СП.

ЗначениеВДанныеФормы(<Значение>, <Объект>)

Параметры:

<Значение> (обязательный)

Тип: Произвольный.

Значение прикладного типа, для которого определено преобразование в данные формы.

<Объект> (обязательный)

Тип: ДанныеФормыСтруктураСКоллекцией; ДанныеФормыКоллекция; ДанныеФормыСтруктура.

Данные формы, имеющие совместимую структуру.

Описание:

Преобразует объект прикладного типа в универсальный объект данных.

Доступность:

Сервер, толстый клиент, мобильное приложение(сервер).

///////

//КОД

&НаСервере

Процедура ЗаполнитьПоЗаказу()

    Запрос = Новый Запрос(«ВЫБРАТЬ

    |    ЕСТЬNULL(НоменклатураДополнительныеРеквизиты.Значение, ЗНАЧЕНИЕ(ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПустаяСсылка)) КАК Элемент,

    |    ЗаказПокупателяЗапасы.Номенклатура,

    |    ЗаказПокупателяЗапасы.Характеристика,

    |    ЗаказПокупателяЗапасы.Количество КАК Количество,

    |    ЛОЖЬ КАК УжеСоздан,

    |    ИСТИНА КАК Комплектовать,

    |    ЛОЖЬ КАК КомплектоватьОтдельно

    |ИЗ

    |    Документ.ЗаказПокупателя.Запасы КАК ЗаказПокупателяЗапасы

    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты

    |        ПО ЗаказПокупателяЗапасы.Номенклатура = НоменклатураДополнительныеРеквизиты.Ссылка

    |            И (НоменклатураДополнительныеРеквизиты.Свойство = &СвойствоЭлемент)

    |ГДЕ

    |    ЗаказПокупателяЗапасы.Ссылка = &Заказ»);

    Запрос.УстановитьПараметр(«Заказ»,Объект.Заказ);

    Запрос.УстановитьПараметр(«СвойствоЭлемент»,ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ЭлементКонструкции);

    ДеревоЗначений = Запрос.Выполнить().Выгрузить();

    ЗначениеВДанныеФормы(ДеревоЗначений,Объект.ЭлементыКонструкции);

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

///////////

///Объект.ЭлементыКонструкции — это таблица объекта обработки

////

ДеревоЗначений — тип(ТаблицаЗначений)

Объект.ЭлементыКонструкции — Тип(ДанныеФормыКоллекция)

Вылетает ошибка:

{Форма.Форма.Форма(43)}: Ошибка при вызове метода контекста (ЗначениеВДанныеФормы)

    ЗначениеВДанныеФормы(ДеревоЗначений,Объект.ЭлементыКонструкции);

по причине:

Недопустимое значение параметра (параметр номер ‘2’)

//////////////

Реквизиты запроса и таблицы обработки совпадают по наисенованиям и типам.

Что не так?

1

GROOVY

18.02.16

21:10

Недопустимое значение параметра (параметр номер ‘2’)

2

SFilchakov

18.02.16

21:18

Спасибо конечно, но как то не помогло.

3

GROOVY

18.02.16

21:19

Если ничего во втором параметре не поменять — не поможет ничего.

4

SFilchakov

18.02.16

21:22

Это ясно, что в нем дело.

Что в нем может быть не так?

Тип(ДанныеФормыКоллекция)

Структура реквизитов одинаковая.

5

SFilchakov

18.02.16

21:23

Одинаковая с объект.ЭлементыКонструкции

Все наименования и типы реквизитов ТЗ(запроса) и ТЧ(Обработки) одинаковые.

7

SFilchakov

18.02.16

21:29

Ладно, да это хокку!

Что с параметром 2 делать то?

8

GROOVY

18.02.16

21:33

Передать параметр совместимый по структуре.

А вообще, мне кажется что ты просто все не так делаешь. Зачем ты конвертируешь данные?

9

SFilchakov

18.02.16

21:35

(8) Хочу сразу заполнить данные формы без перебора.

10

Мимохожий Однако

18.02.16

21:37

Если нет примеров по использованию команды, то достаточно в типовой конфигурации запустить полный поиск по этой команде и подобрать из кучи наиболее близкий для себя.

11

Drac0

18.02.16

22:01

(5) Значит не одинаковые. А чтобы не ипать себе мозг используй ТЧ.Загрузить(Запрос.Выполнить().Выгрузить()). Заодно глянешь, что не так было.

13

Drac0

18.02.16

23:45

(12) ЗначениеВДанныеФормы() как раз и предназначена для преобразования прикладных типов и универсальных коллекций в данные формы. У него косяк с полями либо их типами. Как проще сделать написал в (11) .

14

hhhh

19.02.16

00:50

(13) намекаешь, что ТЗ и ТЧ — это один и тот же тип?

15

Drac0

19.02.16

06:31

(14) нет. Перечитай еще раз или открой СП.

16

SFilchakov

19.02.16

08:11

Использовал метод ЗначениеВРеквизитФормы. И прокатило.

Он заполняет даже с ошибками в типе, просто оставляет поля пустыми. Действительно был косяк в типе. Всем спасибо!

(11) тоже работает.

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

ЗначениеВДанныеФормы(<Значение>, <Объект>)

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

ЗначениеВДанныеФормы(ТЗ, Форма.Элементы.ТоварыНаСкладе);

1C
1
2
3
4
5
Результат = Запрос.Выполнить(); 
      ТЗ=Результат.Выгрузить();
    
    ФОрма=ПолучитьФорму("РегистрНакопления.ДвижениеТоваров.Форма.ФормаСписка");   
    ЗначениеВДанныеФормы(ТЗ, Форма.Элементы.ТоварыНаСкладе);

{Документ.РеализацияТоваров.Команда.ТоварыНаСкладе.МодульКоманды(58)}: Ошибка при вызове метода контекста (ЗначениеВДанныеФормы)
ЗначениеВДанныеФормы(ТЗ, Форма.Элементы.ТоварыНаСкладе);
по причине:
Несоответствие типов (параметр номер ‘2’)

Добавлено через 19 минут
Для решения учебного Задания я использую вложенные запросы.
Для того, чтобы создать таблицу я сначала пробовал Динамический список—>Произвольный запрос—>Поменять запрос на свой (Но там как Еврей обрезанный, вложенных запросов не понимает, а с параметрами я не разобрался)
===============

Не по теме:

Если кто-то мне покажет как лучше сделать то, что мне требуется, то я легко запомню это, но со стороны это может выглядеть как сделайте мне за меня то, что от меня требуют. Поэтому я не пишу самого задания, а пытаюсь задавать простые вопросы, которые должны мне помочь разобраться. Конечно я бы и рад, чтобы мне показали, но тогда я потеряю какие-то крупицы нужных знаний

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

daslex, А что делфи то забросил?

Не по теме:

Может потому что нравится программирование, а где у меня могут меня взять на работу с теми знаниями, что есть по Delphi (Pascal),C++ понятия не имею (знаний-то мало совсем), а тут появился шанс начать работать, но чтобы начать нужно учить этот 1С. Да Он и несложный, но геморрный, такой геморрный что бесит уже вначале. Но за шансы, которые есть надо цепляться.

Добавлено через 10 минут

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

Способ с передачей на сервер формы и конвертацией таблицы туда обратно более ресурсоемкий чем запрос с параметром…

Если это как-то поможет, то вот событие команды с моим запросом (Полная версия). Результат я хочу выгрузить в таблицу формы. Ходов конем и извращений лучше не делать. Я учусь, а если учишься, учится надо сразу правильно, поэтому если правильно через Динамический список, то через динамический список, если по другому, то по другому. С подсказками выше у меня не получилось. Хоть я и сказал выше, что потеряю какие-то крупицы знаний, но думаю так должно быть более ясно то, чего я хочу.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    
        //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
 
    ТЗ=Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Склад",Новый ОписаниеТипов("СПравочникСсылка.Склады"));
    ТЗ.Колонки.Добавить("Товар",Новый ОписаниеТипов("СПравочникСсылка.Номенклатура"));
    ТЗ.Колонки.Добавить("Количество",Новый ОписаниеТипов("Число"));
 
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   РеализацияТоваровТовары.Номенклатура.Ссылка
        |ПОМЕСТИТЬ врем
        |ИЗ
        |   Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
        |ГДЕ
        |   РеализацияТоваровТовары.Ссылка.Ссылка = &Ссылка
        |
        |СГРУППИРОВАТЬ ПО
        |   РеализацияТоваровТовары.Номенклатура.Ссылка
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |   ДвижениеТоваров.Склад.Ссылка как Склад,
        |   ДвижениеТоваров.Товар.Ссылка как Товар,
        |   СУММА(ДвижениеТоваров.Количество) КАК Количество
        |ИЗ
        |   РегистрНакопления.ДвижениеТоваров КАК ДвижениеТоваров
        |ГДЕ
        |   ДвижениеТоваров.Товар.Ссылка В
        |           (ВЫБРАТЬ
        |               врем.НоменклатураСсылка.Ссылка
        |           ИЗ
        |               врем КАК врем)
        |
        |СГРУППИРОВАТЬ ПО
        |   ДвижениеТоваров.Товар.Ссылка,
        |   ДвижениеТоваров.Склад.Ссылка";
        Запрос.УстановитьПараметр("Ссылка",ПараметрКоманды.Ссылка);
        
 
    Результат = Запрос.Выполнить(); 
    Выборка = Результат.Выбрать();   
    ТЗ=Результат.Выгрузить();
    
    
    ФОрма=ПолучитьФорму("РегистрНакопления.ДвижениеТоваров.Форма.ФормаСписка");       
    ЗначениеВДанныеФормы(ТЗ, Форма.Элементы.ТоварыНаСкладе);
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
 
    ОткрытьФорму(Форма);
    
    
    
КонецПроцедуры

Добавлено через 14 минут

Цитата
Сообщение от daslex
Посмотреть сообщение

ЗначениеВДанныеФормы(ТЗ, Форма.Элементы.ТоварыНаСкладе);

Надо было вот так

1C
1
ЗначениеВДанныеФормы(ТЗ, Форма.ТоварыНаСкладе);

Неправильно я научился (с ресурсоемкими операциями), теперь не боясь можно спросить как все-таки правильно это сделать.



0



  

SFilchakov

18.02.16 — 21:09

Дико извиняюсь, тема затасканная и инфы полно, но как то не выходит, делаю по СП.

ЗначениеВДанныеФормы(<Значение>, <Объект>)

Параметры:

<Значение> (обязательный)

Тип: Произвольный.

Значение прикладного типа, для которого определено преобразование в данные формы.

<Объект> (обязательный)

Тип: ДанныеФормыСтруктураСКоллекцией; ДанныеФормыКоллекция; ДанныеФормыСтруктура.

Данные формы, имеющие совместимую структуру.

Описание:

Преобразует объект прикладного типа в универсальный объект данных.

Доступность:

Сервер, толстый клиент, мобильное приложение(сервер).

&НаСервере

Процедура ЗаполнитьПоЗаказу()

    Запрос = Новый Запрос(«ВЫБРАТЬ

    |    ЕСТЬNULL(НоменклатураДополнительныеРеквизиты.Значение, ЗНАЧЕНИЕ(ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПустаяСсылка)) КАК Элемент,

    |    ЗаказПокупателяЗапасы.Номенклатура,

    |    ЗаказПокупателяЗапасы.Характеристика,

    |    ЗаказПокупателяЗапасы.Количество КАК Количество,

    |    ЛОЖЬ КАК УжеСоздан,

    |    ИСТИНА КАК Комплектовать,

    |    ЛОЖЬ КАК КомплектоватьОтдельно

    |ИЗ

    |    Документ.ЗаказПокупателя.Запасы КАК ЗаказПокупателяЗапасы

    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты

    |        ПО ЗаказПокупателяЗапасы.Номенклатура = НоменклатураДополнительныеРеквизиты.Ссылка

    |            И (НоменклатураДополнительныеРеквизиты.Свойство = &СвойствоЭлемент)

    |ГДЕ

    |    ЗаказПокупателяЗапасы.Ссылка = &Заказ»);

    Запрос.УстановитьПараметр(«Заказ»,Объект.Заказ);

    Запрос.УстановитьПараметр(«СвойствоЭлемент»,ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ЭлементКонструкции);

    ДеревоЗначений = Запрос.Выполнить().Выгрузить();

    ЗначениеВДанныеФормы(ДеревоЗначений,Объект.ЭлементыКонструкции);

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

///////////

///Объект.ЭлементыКонструкции — это таблица объекта обработки

////

ДеревоЗначений — тип(ТаблицаЗначений)

Объект.ЭлементыКонструкции — Тип(ДанныеФормыКоллекция)

Вылетает ошибка:

{Форма.Форма.Форма(43)}: Ошибка при вызове метода контекста (ЗначениеВДанныеФормы)

    ЗначениеВДанныеФормы(ДеревоЗначений,Объект.ЭлементыКонструкции);

по причине:

Недопустимое значение параметра (параметр номер ‘2’)

//////////////

Реквизиты запроса и таблицы обработки совпадают по наисенованиям и типам.

Что не так?

  

SFilchakov

18.02.16 — 21:09

Дико извиняюсь, тема затасканная и инфы полно, но как то не выходит, делаю по СП.

ЗначениеВДанныеФормы(<Значение>, <Объект>)

Параметры:

<Значение> (обязательный)

Тип: Произвольный.

Значение прикладного типа, для которого определено преобразование в данные формы.

<Объект> (обязательный)

Тип: ДанныеФормыСтруктураСКоллекцией; ДанныеФормыКоллекция; ДанныеФормыСтруктура.

Данные формы, имеющие совместимую структуру.

Описание:

Преобразует объект прикладного типа в универсальный объект данных.

Доступность:

Сервер, толстый клиент, мобильное приложение(сервер).

&НаСервере

Процедура ЗаполнитьПоЗаказу()

    Запрос = Новый Запрос(«ВЫБРАТЬ

    |    ЕСТЬNULL(НоменклатураДополнительныеРеквизиты.Значение, ЗНАЧЕНИЕ(ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПустаяСсылка)) КАК Элемент,

    |    ЗаказПокупателяЗапасы.Номенклатура,

    |    ЗаказПокупателяЗапасы.Характеристика,

    |    ЗаказПокупателяЗапасы.Количество КАК Количество,

    |    ЛОЖЬ КАК УжеСоздан,

    |    ИСТИНА КАК Комплектовать,

    |    ЛОЖЬ КАК КомплектоватьОтдельно

    |ИЗ

    |    Документ.ЗаказПокупателя.Запасы КАК ЗаказПокупателяЗапасы

    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты

    |        ПО ЗаказПокупателяЗапасы.Номенклатура = НоменклатураДополнительныеРеквизиты.Ссылка

    |            И (НоменклатураДополнительныеРеквизиты.Свойство = &СвойствоЭлемент)

    |ГДЕ

    |    ЗаказПокупателяЗапасы.Ссылка = &Заказ»);

    Запрос.УстановитьПараметр(«Заказ»,Объект.Заказ);

    Запрос.УстановитьПараметр(«СвойствоЭлемент»,ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ЭлементКонструкции);

    ДеревоЗначений = Запрос.Выполнить().Выгрузить();

    ЗначениеВДанныеФормы(ДеревоЗначений,Объект.ЭлементыКонструкции);

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

///////////

///Объект.ЭлементыКонструкции — это таблица объекта обработки

////

ДеревоЗначений — тип(ТаблицаЗначений)

Объект.ЭлементыКонструкции — Тип(ДанныеФормыКоллекция)

Вылетает ошибка:

{Форма.Форма.Форма(43)}: Ошибка при вызове метода контекста (ЗначениеВДанныеФормы)

    ЗначениеВДанныеФормы(ДеревоЗначений,Объект.ЭлементыКонструкции);

по причине:

Недопустимое значение параметра (параметр номер ‘2’)

//////////////

Реквизиты запроса и таблицы обработки совпадают по наисенованиям и типам.

Что не так?

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

ЗначениеВДанныеФормы(<Значение>, <Объект>)

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

ЗначениеВДанныеФормы(ТЗ, Форма.Элементы.ТоварыНаСкладе);

1C
1
2
3
4
5
Результат = Запрос.Выполнить(); 
      ТЗ=Результат.Выгрузить();
    
    ФОрма=ПолучитьФорму("РегистрНакопления.ДвижениеТоваров.Форма.ФормаСписка");   
    ЗначениеВДанныеФормы(ТЗ, Форма.Элементы.ТоварыНаСкладе);

{Документ.РеализацияТоваров.Команда.ТоварыНаСкладе .МодульКоманды(58)}: Ошибка при вызове метода контекста (ЗначениеВДанныеФормы)
ЗначениеВДанныеФормы(ТЗ, Форма.Элементы.ТоварыНаСкладе);
по причине:
Несоответствие типов (параметр номер ‘2’)

Добавлено через 19 минут
Для решения учебного Задания я использую вложенные запросы.
Для того, чтобы создать таблицу я сначала пробовал Динамический список—>Произвольный запрос—>Поменять запрос на свой (Но там как Еврей обрезанный, вложенных запросов не понимает, а с параметрами я не разобрался)
===============

Не по теме:

Если кто-то мне покажет как лучше сделать то, что мне требуется, то я легко запомню это, но со стороны это может выглядеть как сделайте мне за меня то, что от меня требуют. Поэтому я не пишу самого задания, а пытаюсь задавать простые вопросы, которые должны мне помочь разобраться. Конечно я бы и рад, чтобы мне показали, но тогда я потеряю какие-то крупицы нужных знаний

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

daslex, А что делфи то забросил?

Не по теме:

Может потому что нравится программирование, а где у меня могут меня взять на работу с теми знаниями, что есть по Delphi (Pascal),C++ понятия не имею (знаний-то мало совсем), а тут появился шанс начать работать, но чтобы начать нужно учить этот 1С. Да Он и несложный, но геморрный, такой геморрный что бесит уже вначале. Но за шансы, которые есть надо цепляться.

Добавлено через 10 минут

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

Способ с передачей на сервер формы и конвертацией таблицы туда обратно более ресурсоемкий чем запрос с параметром…

Если это как-то поможет, то вот событие команды с моим запросом (Полная версия). Результат я хочу выгрузить в таблицу формы. Ходов конем и извращений лучше не делать. Я учусь, а если учишься, учится надо сразу правильно, поэтому если правильно через Динамический список, то через динамический список, если по другому, то по другому. С подсказками выше у меня не получилось. Хоть я и сказал выше, что потеряю какие-то крупицы знаний, но думаю так должно быть более ясно то, чего я хочу.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    
        //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
 
    ТЗ=Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Склад",Новый ОписаниеТипов("СПравочникСсылка.Склады"));
    ТЗ.Колонки.Добавить("Товар",Новый ОписаниеТипов("СПравочникСсылка.Номенклатура"));
    ТЗ.Колонки.Добавить("Количество",Новый ОписаниеТипов("Число"));
 
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   РеализацияТоваровТовары.Номенклатура.Ссылка
        |ПОМЕСТИТЬ врем
        |ИЗ
        |   Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
        |ГДЕ
        |   РеализацияТоваровТовары.Ссылка.Ссылка = &Ссылка
        |
        |СГРУППИРОВАТЬ ПО
        |   РеализацияТоваровТовары.Номенклатура.Ссылка
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |   ДвижениеТоваров.Склад.Ссылка как Склад,
        |   ДвижениеТоваров.Товар.Ссылка как Товар,
        |   СУММА(ДвижениеТоваров.Количество) КАК Количество
        |ИЗ
        |   РегистрНакопления.ДвижениеТоваров КАК ДвижениеТоваров
        |ГДЕ
        |   ДвижениеТоваров.Товар.Ссылка В
        |           (ВЫБРАТЬ
        |               врем.НоменклатураСсылка.Ссылка
        |           ИЗ
        |               врем КАК врем)
        |
        |СГРУППИРОВАТЬ ПО
        |   ДвижениеТоваров.Товар.Ссылка,
        |   ДвижениеТоваров.Склад.Ссылка";
        Запрос.УстановитьПараметр("Ссылка",ПараметрКоманды.Ссылка);
        
 
    Результат = Запрос.Выполнить(); 
    Выборка = Результат.Выбрать();   
    ТЗ=Результат.Выгрузить();
    
    
    ФОрма=ПолучитьФорму("РегистрНакопления.ДвижениеТоваров.Форма.ФормаСписка");       
    ЗначениеВДанныеФормы(ТЗ, Форма.Элементы.ТоварыНаСкладе);
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
 
    ОткрытьФорму(Форма);
    
    
    
КонецПроцедуры

Добавлено через 14 минут

Цитата
Сообщение от daslex
Посмотреть сообщение

ЗначениеВДанныеФормы(ТЗ, Форма.Элементы.ТоварыНаСкладе);

Надо было вот так

1C
1
ЗначениеВДанныеФормы(ТЗ, Форма.ТоварыНаСкладе);

Неправильно я научился (с ресурсоемкими операциями), теперь не боясь можно спросить как все-таки правильно это сделать.

0

Спасибо большое! Подскажите по поводу такого вопроса: вот мой код:

&НаКлиенте
Процедура ТаблицаЗначений(Команда)

   ТаблицаЗначенийНаСервере();

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

&НаСервере
Процедура ТаблицаЗначенийНаСервере()

   ТаблицаЗначений = Новый ТаблицаЗначений;
   ТаблицаЗначений.Колонки.Добавить(«ДеньНедели», Новый ОписаниеТипов(«Строка»));
   ТаблицаЗначений.Колонки.Добавить(«Погода»);
   ТаблицаЗначений.Колонки.Добавить(«Сумма»);
   ТаблицаЗначений.Колонки.Добавить(«Месяц»);

      Строка = ТаблицаЗначений.Добавить();
   Строка.ДеньНедели = «Вторник»;
   Строка.Погода = «Плохая»;
   Строка.Сумма = 1000;
   Строка.Месяц = «Январь»;

      Строка = ТаблицаЗначений.Добавить();
   Строка.ДеньНедели = «Среда»;
   Строка.Погода = «Нормально»;
   СТрока.Сумма = 2000;
   Строка.Месяц = «Декабрь»;

         Строка = ТаблицаЗначений.Добавить();
   Строка.ДеньНедели = «Среда»;
   Строка.Погода = «Пойдет»;
   СТрока.Сумма = 5500;
   Строка.Месяц = «Декабрь»;

   //Для каждого Строка Из Таблица Цикл
   //
   //   Сообщить(Строка.ДеньНедели);
   //
   //КонецЦикла;
ТаблицаЗначений.Свернуть(«Месяц», «Сумма»);

ЗначениеВДанныеФормы(ТаблицаЗначений, ТаблицаЗн);

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

На форме создал таблицу значений:

Но выдает вот такую ошибку:
{Обработка.Эксперименты.Форма.Форма.Форма(78)}: Ошибка при вызове метода контекста (ЗначениеВДанныеФормы)
ЗначениеВДанныеФормы(ТаблицаЗначений, ТаблицаЗн);
по причине:
Недопустимое значение параметра (параметр номер ‘2’)
Недопустимое значение параметра (параметр номер ‘2’)

Не могу понять, а чем тут ошибка? Ведь ТаблицаЗн это и есть наш реквизит на форме

Дико извиняюсь, тема затасканная и инфы полно, но как то не выходит, делаю по СП. Параметры: Тип: Произвольный. Значение прикладного типа, для которого определено преобразование в данные формы. Тип: ДанныеФормыСтруктураСКоллекцией; ДанныеФормыКоллекция; ДанныеФормыСтруктура. Данные формы, имеющие совместимую структуру. Описание: Преобразует объект прикладного типа в универсальный объект данных. Доступность: Сервер, толстый клиент, мобильное приложение(сервер). Вылетает ошибка: {Форма.Форма.Форма}: Ошибка при вызове метода контекста (ЗначениеВДанныеФормы)     ЗначениеВДанныеФормы(ДеревоЗначений,Объект.ЭлементыКонструкции); по причине: Недопустимое значение параметра (параметр номер ‘2’) ////////////// Реквизиты запроса и таблицы обработки совпадают по наисенованиям и типам. Что не так?

Недопустимое значение параметра (параметр номер ‘2’)

Спасибо конечно, но как то не помогло.

Если ничего во втором параметре не поменять — не поможет ничего.

Это ясно, что в нем дело. Что в нем может быть не так? Тип(ДанныеФормыКоллекция) Структура реквизитов одинаковая.

Одинаковая с объект.ЭлементыКонструкции Все наименования и типы реквизитов ТЗ(запроса) и ТЧ(Обработки) одинаковые.

Ладно, да это хокку! Что с параметром 2 делать то?

Передать параметр совместимый по структуре. А вообще, мне кажется что ты просто все не так делаешь. Зачем ты конвертируешь данные?

Хочу сразу заполнить данные формы без перебора.

Если нет примеров по использованию команды, то достаточно в типовой конфигурации запустить полный поиск по этой команде и подобрать из кучи наиболее близкий для себя.

Значит не одинаковые. А чтобы не ипать себе мозг используй ТЧ.Загрузить(Запрос.Выполнить.Выгрузить). Заодно глянешь, что не так было.

всё-таки там разные типы у вас. Табличная часть и таблица значений

ЗначениеВДанныеФормы как раз и предназначена для преобразования прикладных типов и универсальных коллекций в данные формы. У него косяк с полями либо их типами. Как проще сделать написал в .

намекаешь, что ТЗ и ТЧ — это один и тот же тип?

нет. Перечитай еще раз или открой СП.

Использовал метод ЗначениеВРеквизитФормы. И прокатило. Он заполняет даже с ошибками в типе, просто оставляет поля пустыми. Действительно был косяк в типе. Всем спасибо! тоже работает.

Тэги:

Комментарии доступны только авторизированным пользователям

  1. На фоме Уф создал таблицу значений пытаюсь ее свернуть но при обращение
    Метод объекта не обнаружен (Свернуть)
    ЭтотОбъект.РасчетТаб.Свернуть(«Месяц»,»Сумма,ДнейПоГрафику,ОтработанныхДней,Коэффициент,ЗаработокСУчетомИндексации,БолЛист»);

    Вложения:

  2. Offline

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.888
    Симпатии:
    1.029
    Баллы:
    204

    определитесь: реквизит есть у объекта или у формы

  3. Offline

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.888
    Симпатии:
    1.029
    Баллы:
    204

    В таком случае сворачивайте форменный реквизит, а не объектный.

  4. не сворачивается

    — Объединение сообщений, 18 апр 2018

    Пробывал и форму и объект свернуть не дает

  5. Offline

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.888
    Симпатии:
    1.029
    Баллы:
    204

    У ТЧ объекта, как и у ДанныеФормыКоллекция нет метода Свернуть().
    Метод есть у ТЗ, в которую и ТЧ и ДанныеФормыКоллекция замечательно превращаются.
    ТЗ так же замечательно превращается в ТЧ и ДанныеФормыКоллекция.

    Нужно всего лишь прочитать синтаксис-помощник про методы ТЧ объектов и ДанныеФормыКоллекция.

  6. ну я вот так сделал в тз
    ТЗ = ДанныеФормыВЗначение(ЭтотОбъект.РасчетТаб,Тип(«ТаблицаЗначений»));
    ТЗ.Свернуть(«Месяц»,»Сумма,ДнейПоГрафику,ОтработанныхДней,Коэффициент,ЗаработокСУчетомИндексации,БолЛист»);

    а вот обратно я наверное не так делаю
    ЗначениеВРеквизитФормы(ТЗ,ЭтотОбъект.РасчетТаб);

  7. Offline

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.888
    Симпатии:
    1.029
    Баллы:
    204

    Обратно — ЗначениеВДанныеФормы()

  8. {ВнешняяОбработка.СправкаДляФондаЗанятости.Форма.Форма.Форма(87)}: Ошибка при вызове метода контекста (ЗначениеВДанныеФормы)
    ЗначениеВДанныеФормы (ТЗ,ЭтаФорма.ЭтотОбъект.РасчетТаб);
    по причине:
    Недопустимое значение параметра (параметр номер ‘2’)

    Последнее редактирование: 18 апр 2018

  9. нашел ошибку свернул неправильно

В Синтаксис-Помощнике очень скупо написано о процедуре ДанныеФормыВЗначение(), чуть побольше — о РеквизитФормыВЗначение(). И совсем нет примеров использования. Попробуем с этим разобраться.

 

РеквизитФормыВЗначение() является методом управляемой формы, компилируется только &НаСервере, контекст формы является для него необходимым, поэтому компиляция &НаСервереБезКонтекста недоступна. На клиенте не работает, поскольку в результате получаем прикладной объект.

Где и когда его нужно использовать?
Метод РеквизитФормыВЗначение() необходим, если требуется из модуля формы вызвать стандартный метод объекта или метод (процедуру, функцию) из модуля объекта, из общего модуля.
Этот метод будет отрабатывать с данными, взятыми из формы, т.е. еще не записанными в базу.

Для того, чтобы измененные данные вернуть на форму, используется метод ЗначениеВРеквизитФормы().

Вторым параметром метода РеквизитФормыВЗначение является тип значения. Это необязательный параметр. Если обрабатываемый реквизит не является составным типом, то тип будет автоматически получен из реквизита формы. Иначе генерируется исключение времени выполнения.

Примеры:
1)

&НаСервере
Процедура ЗаполнитьТЧПоДаннымПоследнегоДокумента(Контрагент)

            ДокОбъект = РеквизитФормыВЗначение(«Объект»);
            ДокОбъект.ЗаполнитьТЧПоДаннымПоследнегоДокумента(Контрагент);
            ЗначениеВРеквизитФормы(ДокОбъект, «Объект»);

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

2)

&НаСервере
Процедура ОчиститьСтрокиСПустойЦенойНаСервере()

         ДокОбъект = РеквизитФормыВЗначение(«Объект»);
         ДокОбъект.ОчиститьСтрокиСПустойЦеной();
         ЗначениеВРеквизитФормы(ДокОбъект, «Объект»);

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

3)

&НаСервере
Функция ОбъектЗаполнен()
         Возврат РеквизитФормыВЗначение(«Объект»).ПроверитьЗаполнение();
КонецФункции

В указанных выше случаях метод РеквизитФормыВЗначение() похож на метод ПолучитьОбъект(). Разница в том, что первый получает объект, заполненный данными формы, а второй — объект с данными из базы.

ДанныеФормыВзначение()

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

Обратной процедурой является ЗначениеВДанныеФормы().

Примеры:
1)    &НаСервере

       // Инициализация набора констант
       НаборКонстантОбъект = ДанныеФормыВЗначение(НаборКонстант, Тип(«КонстантыНабор»));
       НаборКонстантОбъект.Прочитать();
       ЗначениеВДанныеФормы(НаборКонстантОбъект, НаборКонстант);

2)   &НаСервере  

       НаборФорма = Объект.Движения.РегистрУправленческий;

       Набор = ДанныеФормыВЗначение(НаборФорма, Тип(«РегистрБухгалтерииНаборЗаписей.РегистрУправленческий»));
       Если Набор.Количество()=0 Тогда
              Возврат;
       КонецЕсли;
       Набор.УстановитьАктивность(НЕ Набор[0].Активность);
       ЗначениеВДанныеФормы(Набор, НаборФорма);

В этом примере на форме отображен набор записей регистра бухгалтерии. При отработке процедуры, активность набора меняется только на форме, в базе при этом ничего не происходит. Активность у набора записей регистра в базе поменяется только после выполнения операции Записать.

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

       ОснРеквизит = Объект;
       ВыполнитьНаСервереБезКонтекста(ОснРеквизит);
       КопироватьДанныеФормы(ОснРеквизит,Объект)

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

&НаСервереБезКонтекста
Процедура ВыполнитьНаСервереБезКонтекста(ОснРеквизит)

       ОбъектЗначение = ДанныеФормыВЗначение(ОснРеквизит, Тип(«ДокументОбъект.АктСверкиВзаиморасчетов»));

       //…Выполнение операций с Объектом «ОбъектЗначение»

       ЗначениеВДанныеФормы(ОбъектЗначение, ОснРеквизит);

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

В этом примере на клиент возвращается ОснРеквизит, содержащий измененные данные. Но его еще нужно «запихать»  в отображаемую форму. Для этого используем процедуру глобального контекста КопироватьДанныеФормы().

В большинстве случаев процедуры ДанныеФормыВзначение() и РеквизитФормыВЗначение() взаимозаменяемы. При этом РеквизитФормыВЗначение проще в использовании. Но если требуется использование &НаСервереБезКонтекста — тогда только ДанныеФормыВЗначение.

В качестве иллюстрации взаимозаменяемости Пример 2 еще в двух вариантах:

ВАРИАНТ 1
&НаКлиенте
Процедура Активность(Команда)

       ОснРеквизитДвижения = Объект.Движения.РегистрУправленческий;
       АктивностьНаСервереБезКонтекста(ОснРеквизитДвижения);
       КопироватьДанныеФормы(ОснРеквизитДвижения,Объект.Движения.РегистрУправленческий);

КонецПроцедуры // Активность()

&НаСервереБезКонтекста
Процедура АктивностьНаСервереБезКонтекста(ОснРеквизитДвижения)

       Набор = ДанныеФормыВЗначение(ОснРеквизитДвижения, Тип(«РегистрБухгалтерииНаборЗаписей.РегистрУправленческий»));
       Если Набор.Количество()=0 Тогда
              Возврат;
       КонецЕсли;
       Набор.УстановитьАктивность(НЕ Набор[0].Активность);
       ЗначениеВДанныеФормы(Набор, ОснРеквизитДвижения);

КонецПроцедуры // АктивностьНаСервереБезКонтекста()

ВАРИАНТ 2

&НаСервере
Процедура АктивностьНаСервере()

       НаборФорма = РеквизитФормыВЗначение(«Объект»);
       Набор = НаборФорма.Движения.РегистрУправленческий;

       Если Набор.Количество()=0 Тогда
              Возврат;
       КонецЕсли;

       Набор.УстановитьАктивность(НЕ Набор[0].Активность);
       ЗначениеВРеквизитФормы(НаборФорма, «Объект»);

КонецПроцедуры // АктивностьНаСервере()

В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.

Исправляем ситуацию

Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.

Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:


	 Запрос = Новый Запрос;
	 Запрос.Текст =
	         "ВЫБРАТЬ
	          |        Номенклатура.Ссылка КАК Ссылка,
	          |        Номенклатура.ВерсияДанных КАК ВерсияДанных,
	          |        Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	          |        Номенклатура.Родитель КАК Родитель,
	          |        Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	          |        Номенклатура.Код КАК Код,
	          |        Номенклатура.Наименование КАК Наименование,
	          |        Номенклатура.Артикул КАК Артикул,
	          |        Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	          |        Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	          |        Номенклатура.Предопределенный КАК Предопределенный,
	          |        Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	          |ИЗ
	          |        Справочник.Номенклатура КАК Номенклатура
	          |ГДЕ
	          |         ";
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 КонецЦикла;

Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.

Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.

Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.


	 Запрос = Новый Запрос;
	            Запрос.Текст =
	                       "ВЫБРАТЬ
	                        |          Номенклатура.Ссылка КАК Ссылка,
	                        |          Номенклатура.ВерсияДанных КАК ВерсияДанных,
	                        |          Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	                        |          Номенклатура.Родитель КАК Родитель,
	                        |          Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	                        |          Номенклатура.Код КАК Код,
	                        |          Номенклатура.Наименование КАК Наименование,
	                        |          Номенклатура.Артикул КАК Артикул,
	                        |          Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	                        |          Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	                        |          Номенклатура.Предопределенный КАК Предопределенный,
	                        |          Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	                        |ИЗ
	                        |          Справочник.Номенклатура КАК Номенклатура
	                        |ГДЕ
	                        |          НЕ Номенклатура.ЭтоГруппа ";
	 НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
	 КонецЦикла;

Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.

Рис.3 Синтакс-помощник

Рис.3 Синтакс-помощник

В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Чаще всего причиной подобных ошибок выступают следующие факторы:

  1. Невнимательность;
  2. Отсутствие опыта или знаний;
  3. Несогласованность действий разработчиков друг с другом;
  4. Изменения в методах контекста в новых версиях платформы.

Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

ЗначениеВДанныеФормы(<Значение>, <Объект>)

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

ЗначениеВДанныеФормы(ТЗ, Форма.Элементы.ТоварыНаСкладе);

1C
1
2
3
4
5
Результат = Запрос.Выполнить(); 
      ТЗ=Результат.Выгрузить();
    
    ФОрма=ПолучитьФорму("РегистрНакопления.ДвижениеТоваров.Форма.ФормаСписка");   
    ЗначениеВДанныеФормы(ТЗ, Форма.Элементы.ТоварыНаСкладе);

{Документ.РеализацияТоваров.Команда.ТоварыНаСкладе.МодульКоманды(58)}: Ошибка при вызове метода контекста (ЗначениеВДанныеФормы)
ЗначениеВДанныеФормы(ТЗ, Форма.Элементы.ТоварыНаСкладе);
по причине:
Несоответствие типов (параметр номер ‘2’)

Добавлено через 19 минут
Для решения учебного Задания я использую вложенные запросы.
Для того, чтобы создать таблицу я сначала пробовал Динамический список—>Произвольный запрос—>Поменять запрос на свой (Но там как Еврей обрезанный, вложенных запросов не понимает, а с параметрами я не разобрался)
===============

Не по теме:

Если кто-то мне покажет как лучше сделать то, что мне требуется, то я легко запомню это, но со стороны это может выглядеть как сделайте мне за меня то, что от меня требуют. Поэтому я не пишу самого задания, а пытаюсь задавать простые вопросы, которые должны мне помочь разобраться. Конечно я бы и рад, чтобы мне показали, но тогда я потеряю какие-то крупицы нужных знаний

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

daslex, А что делфи то забросил?

Не по теме:

Может потому что нравится программирование, а где у меня могут меня взять на работу с теми знаниями, что есть по Delphi (Pascal),C++ понятия не имею (знаний-то мало совсем), а тут появился шанс начать работать, но чтобы начать нужно учить этот 1С. Да Он и несложный, но геморрный, такой геморрный что бесит уже вначале. Но за шансы, которые есть надо цепляться.

Добавлено через 10 минут

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

Способ с передачей на сервер формы и конвертацией таблицы туда обратно более ресурсоемкий чем запрос с параметром…

Если это как-то поможет, то вот событие команды с моим запросом (Полная версия). Результат я хочу выгрузить в таблицу формы. Ходов конем и извращений лучше не делать. Я учусь, а если учишься, учится надо сразу правильно, поэтому если правильно через Динамический список, то через динамический список, если по другому, то по другому. С подсказками выше у меня не получилось. Хоть я и сказал выше, что потеряю какие-то крупицы знаний, но думаю так должно быть более ясно то, чего я хочу.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    
        //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
 
    ТЗ=Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Склад",Новый ОписаниеТипов("СПравочникСсылка.Склады"));
    ТЗ.Колонки.Добавить("Товар",Новый ОписаниеТипов("СПравочникСсылка.Номенклатура"));
    ТЗ.Колонки.Добавить("Количество",Новый ОписаниеТипов("Число"));
 
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   РеализацияТоваровТовары.Номенклатура.Ссылка
        |ПОМЕСТИТЬ врем
        |ИЗ
        |   Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
        |ГДЕ
        |   РеализацияТоваровТовары.Ссылка.Ссылка = &Ссылка
        |
        |СГРУППИРОВАТЬ ПО
        |   РеализацияТоваровТовары.Номенклатура.Ссылка
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |   ДвижениеТоваров.Склад.Ссылка как Склад,
        |   ДвижениеТоваров.Товар.Ссылка как Товар,
        |   СУММА(ДвижениеТоваров.Количество) КАК Количество
        |ИЗ
        |   РегистрНакопления.ДвижениеТоваров КАК ДвижениеТоваров
        |ГДЕ
        |   ДвижениеТоваров.Товар.Ссылка В
        |           (ВЫБРАТЬ
        |               врем.НоменклатураСсылка.Ссылка
        |           ИЗ
        |               врем КАК врем)
        |
        |СГРУППИРОВАТЬ ПО
        |   ДвижениеТоваров.Товар.Ссылка,
        |   ДвижениеТоваров.Склад.Ссылка";
        Запрос.УстановитьПараметр("Ссылка",ПараметрКоманды.Ссылка);
        
 
    Результат = Запрос.Выполнить(); 
    Выборка = Результат.Выбрать();   
    ТЗ=Результат.Выгрузить();
    
    
    ФОрма=ПолучитьФорму("РегистрНакопления.ДвижениеТоваров.Форма.ФормаСписка");       
    ЗначениеВДанныеФормы(ТЗ, Форма.Элементы.ТоварыНаСкладе);
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
 
    ОткрытьФорму(Форма);
    
    
    
КонецПроцедуры

Добавлено через 14 минут

Цитата
Сообщение от daslex
Посмотреть сообщение

ЗначениеВДанныеФормы(ТЗ, Форма.Элементы.ТоварыНаСкладе);

Надо было вот так

1C
1
ЗначениеВДанныеФормы(ТЗ, Форма.ТоварыНаСкладе);

Неправильно я научился (с ресурсоемкими операциями), теперь не боясь можно спросить как все-таки правильно это сделать.

0

Спасибо большое! Подскажите по поводу такого вопроса: вот мой код:

&НаКлиенте
Процедура ТаблицаЗначений(Команда)

   ТаблицаЗначенийНаСервере();

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

&НаСервере
Процедура ТаблицаЗначенийНаСервере()

   ТаблицаЗначений = Новый ТаблицаЗначений;
   ТаблицаЗначений.Колонки.Добавить(«ДеньНедели», Новый ОписаниеТипов(«Строка»));
   ТаблицаЗначений.Колонки.Добавить(«Погода»);
   ТаблицаЗначений.Колонки.Добавить(«Сумма»);
   ТаблицаЗначений.Колонки.Добавить(«Месяц»);

      Строка = ТаблицаЗначений.Добавить();
   Строка.ДеньНедели = «Вторник»;
   Строка.Погода = «Плохая»;
   Строка.Сумма = 1000;
   Строка.Месяц = «Январь»;

      Строка = ТаблицаЗначений.Добавить();
   Строка.ДеньНедели = «Среда»;
   Строка.Погода = «Нормально»;
   СТрока.Сумма = 2000;
   Строка.Месяц = «Декабрь»;

         Строка = ТаблицаЗначений.Добавить();
   Строка.ДеньНедели = «Среда»;
   Строка.Погода = «Пойдет»;
   СТрока.Сумма = 5500;
   Строка.Месяц = «Декабрь»;

   //Для каждого Строка Из Таблица Цикл
   //
   //   Сообщить(Строка.ДеньНедели);
   //
   //КонецЦикла;
ТаблицаЗначений.Свернуть(«Месяц», «Сумма»);

ЗначениеВДанныеФормы(ТаблицаЗначений, ТаблицаЗн);

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

На форме создал таблицу значений:

Но выдает вот такую ошибку:
{Обработка.Эксперименты.Форма.Форма.Форма(78)}: Ошибка при вызове метода контекста (ЗначениеВДанныеФормы)
ЗначениеВДанныеФормы(ТаблицаЗначений, ТаблицаЗн);
по причине:
Недопустимое значение параметра (параметр номер ‘2’)
Недопустимое значение параметра (параметр номер ‘2’)

Не могу понять, а чем тут ошибка? Ведь ТаблицаЗн это и есть наш реквизит на форме

Спасибо большое! Подскажите по поводу такого вопроса: вот мой код:

&НаКлиенте
Процедура ТаблицаЗначений(Команда)

   ТаблицаЗначенийНаСервере();

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

&НаСервере
Процедура ТаблицаЗначенийНаСервере()

   ТаблицаЗначений = Новый ТаблицаЗначений;
   ТаблицаЗначений.Колонки.Добавить(«ДеньНедели», Новый ОписаниеТипов(«Строка»));
   ТаблицаЗначений.Колонки.Добавить(«Погода»);
   ТаблицаЗначений.Колонки.Добавить(«Сумма»);
   ТаблицаЗначений.Колонки.Добавить(«Месяц»);

      Строка = ТаблицаЗначений.Добавить();
   Строка.ДеньНедели = «Вторник»;
   Строка.Погода = «Плохая»;
   Строка.Сумма = 1000;
   Строка.Месяц = «Январь»;

      Строка = ТаблицаЗначений.Добавить();
   Строка.ДеньНедели = «Среда»;
   Строка.Погода = «Нормально»;
   СТрока.Сумма = 2000;
   Строка.Месяц = «Декабрь»;

         Строка = ТаблицаЗначений.Добавить();
   Строка.ДеньНедели = «Среда»;
   Строка.Погода = «Пойдет»;
   СТрока.Сумма = 5500;
   Строка.Месяц = «Декабрь»;

   //Для каждого Строка Из Таблица Цикл
   //
   //   Сообщить(Строка.ДеньНедели);
   //
   //КонецЦикла;
ТаблицаЗначений.Свернуть(«Месяц», «Сумма»);

ЗначениеВДанныеФормы(ТаблицаЗначений, ТаблицаЗн);

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

На форме создал таблицу значений:

Но выдает вот такую ошибку:
{Обработка.Эксперименты.Форма.Форма.Форма(78)}: Ошибка при вызове метода контекста (ЗначениеВДанныеФормы)
ЗначениеВДанныеФормы(ТаблицаЗначений, ТаблицаЗн);
по причине:
Недопустимое значение параметра (параметр номер ‘2’)
Недопустимое значение параметра (параметр номер ‘2’)

Не могу понять, а чем тут ошибка? Ведь ТаблицаЗн это и есть наш реквизит на форме

Разрабатывая в режиме совместимости интерфейса 1C 8.2 столкнулся с тем, что на УФ ЗначениеВРеквизитФормы() выдает ошибку когда пытаешься загрузить пустое ДеревоЗначений в РеквизитФормы типа ДанныеФормыДерево

Решением считаю выгружать только те колонки дерева значений в элемент формы которые есть в этом элементе.

Также я рекомендую проверять что в загружаемом в данные формы ДеревеЗначений есть колонки и какие-либо данные т.к. старые версии 1С предприятия и режимы совместимости с ними выдают ошибки, когда грузишь структуру отличную от той, то есть в элементе формы.

Ниже код для добавления в свои фреймворки.

<code>Процедура ВыгрузитьСтрокиЭлементаДереваЗначений(Источник, Приемник, ИменаКолонокДляКопирования) Экспорт
    ВложенныеСтроки = Источник.Строки;
    
    Приемник = Новый ДеревоЗначений;
    Для каждого СтрокаИсточник Из ВложенныеСтроки Цикл
        СтрокаПриемник = Приемник.Строки.Добавить();
        ВыгрузитьСтрокиЭлементаДереваЗначений(СтрокаИсточник, СтрокаПриемник, ИменаКолонокДляКопирования);
    КонецЦикла;
    
КонецПроцедуры

Процедура СкопироватьСовпадающиеКолонкиВРезультат(Источник, Приемник) Экспорт
    Если НЕ (ТипЗнч(Источник) = Тип("ДеревоЗначений") И ТипЗнч(Приемник) = Тип("ДеревоЗначений")) Тогда
        Возврат;	
    КонецЕсли;
    
    Источник = Новый ДеревоЗначений;
    
    ВсеКолонкиИсточника = Источник.Колонки;
    ВсеКолонкиПриемника = Приемник.Колонки;
    
    КолонкиДляКопирования = Новый Массив;
    Для каждого КолонкаИсточник Из ВсеКолонкиИсточника Цикл
        ИмяКолонки = КолонкаИсточник.Имя;
        ТипКолонки = КолонкаИсточник.ТипЗначения;
        
        ТакаяЖеКолонкаПриемник = ВсеКолонкиПриемника.Найти(ИмяКолонки);
        
        Если ТакаяЖеКолонкаПриемник &lt;> Неопределено И ТипЗнч(ТакаяЖеКолонкаПриемник.ТипЗначения) Тогда
        	КолонкиДляКопирования.Добавить(ИмяКолонки);
        КонецЕсли;
    КонецЦикла;
    Если КолонкиДляКопирования.Количество() = 0 Тогда
    	Источник = Приемник.Скопировать();
        Источник.Строки.Очистить();
    Иначе
        ВыгрузитьСтрокиЭлементаДереваЗначений(Источник, Приемник, КолонкиДляКопирования);
    КонецЕсли;
КонецПроцедуры //СкопироватьСовпадающиеКолонкиВРезультат() 

Функция ПопыткаЗначениеВРеквизитФормы(Источник, Приемник)
    Если ЗначениеЗаполнено(Источник) Тогда
        Попытка
            ЗначениеВРеквизитФормы(Источник, Приемник);        	
        Исключение
            ПриемникРезультат = РеквизитФормыВЗначение(Приемник, Тип("ДеревоЗначений"));
            СкопироватьСовпадающиеКолонкиВРезультат(Источник, ПриемникРезультат);
            ЗначениеВРеквизитФормы(ПриемникРезультат, Приемник);
            //ОписаниеОшибки()
        КонецПопытки;
    КонецЕсли;
    
КонецФункции
</code>



  • Метки



    1Cv8, 1С

Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове метода контекста зафиксироватьтранзакцию
  • Ошибка при вызове метода контекста данныеформывзначение
  • Ошибка при вызове метода контекста зарегистрироватьизменения
  • Ошибка получения обработки обслуживания при закрытии смены 1с
  • Ошибка при вызове метода контекста заполнить