Имя: Пароль:
1C
1С v8
Как получить доступ к объекту для его редактирования УФ 1С 8.2
, ,
0 maslov_ilya
 
16.12.14
18:09
Здравствуйте! Подскажите, пожалуйста, как правильно написать обращение.
Необходимо получить доступ к документу для возможности отсортировать его табличную часть и распечатать.

Вот кусок процедуры, описанной в модуле менеджера Документа "РеализацияТовара"
Не могу никак понять, как мне получить доступ к данному документу

Процедура ВыполнитьСортировку() Экспорт
        
    ОбъектНазначения = Документы.РеализацияТоваров.ПолучитьСсылку().ПолучитьОбъект(); // Необходимо получить доступ к объекту для его изменения
    
    ТаблицаТовары = Документы.РеализацияТоваров.ПолучитьСсылку().Товары.Выгрузить(); // Необходимо получить таблицу для дальнейшей сортировки
    ТаблицаТовары.Колонки.Добавить("ИндексСортировки");    
    СписокНоменклатуры = ТаблицаТовары.ВыгрузитьКолонку("Номенклатура");
    
    ВидСортировки = ОбъектНазначения.МетодСортировки; // реквизит документа, в котором пользователь выбирает метод,
                                                      // при отладке в переменную ВидСортировки ничего не записывается (Значение - Не определено)

........................................
Операторы сортировки
........................................

ОбъектНазначения.Товары.Загрузить(ТаблицаТовары);  // Здесь соответственно тоже ошибка, т.к. нет доступа к документу
    
    ОбъектНазначения.Записать();                       // аналогично, ошибка, пишет метод Записать() не обнаружен
1 Куро
 
16.12.14
18:18
Процедура Печать(ТабДок, Ссылка) Экспорт
    //{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
    Макет = Документы.РеализацияТоваров.ПолучитьМакет("Печать");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    РеализацияТоваров.Дата,
    |    РеализацияТоваров.Номер,
    |    РеализацияТоваров.ТаблицаТовары.(
    |        НомерСтроки,
    |        Наименование
    |    )
    |ИЗ
    |    Документ.РеализацияТоваров КАК РеализацияТоваров
    |ГДЕ
    |    РеализацияТоваров.Ссылка В (&Ссылка)";
    Запрос.Параметры.Вставить("Ссылка", Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();

    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    Шапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьТаблицаТоварыШапка = Макет.ПолучитьОбласть("ТаблицаТоварыШапка");
    ОбластьТаблицаТовары = Макет.ПолучитьОбласть("ТаблицаТовары");
    ТабДок.Очистить();

    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
        Если ВставлятьРазделительСтраниц Тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;

        ТабДок.Вывести(ОбластьЗаголовок);

        Шапка.Параметры.Заполнить(Выборка);
        ТабДок.Вывести(Шапка, Выборка.Уровень());

        ТабДок.Вывести(ОбластьТаблицаТоварыШапка);
        ВыборкаТаблицаТовары = Выборка.ТаблицаТовары.Выбрать();
        Пока ВыборкаТаблицаТовары.Следующий() Цикл
            ОбластьТаблицаТовары.Параметры.Заполнить(ВыборкаТаблицаТовары);
            ТабДок.Вывести(ОбластьТаблицаТовары, ВыборкаТаблицаТовары.Уровень());
        КонецЦикла;

        ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;
    //}}
КонецПроцедуры
2 Господин ПЖ
 
16.12.14
18:18
>Документы.РеализацияТоваров.ПолучитьСсылку()

у вас его нет
3 Куро
 
16.12.14
18:18
и сортируй как угодно
4 maslov_ilya
 
16.12.14
18:38
(2) Пробовал так. В таком случае ошибка в строке:
ОбъектНазначения.Записать();


Ошибка: Метод объекта не обнаружен (Записать).
5 maslov_ilya
 
16.12.14
18:40
(1) извините не понял, как представленный вами код из конструктора печати мне поможет.
Собственно вот как у меня сейчас выглядет код печати:
Процедура Печать(ТабДок, Ссылка) Экспорт
    
    
    
    ВыполнитьСортировку(); // ЭТА ПРОЦЕДУРА должна сортировать
    
    Макет = Документы.РеализацияТоваров.ПолучитьМакет("Печать");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    РеализацияТоваров.Дата,
    |    РеализацияТоваров.Контрагент,
    |    РеализацияТоваров.Номер,
    |    РеализацияТоваров.Товары.(
    |        НомерСтроки,
    |        КодТовара,
    |        Номенклатура,
    |        Количество,
    |        Цена,
    |        Сумма
    |    )
    |ИЗ
    |    Документ.РеализацияТоваров КАК РеализацияТоваров
    |ГДЕ
    |    РеализацияТоваров.Ссылка В (&Ссылка)";
    Запрос.Параметры.Вставить("Ссылка", Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();

    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    Шапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьТоварыШапка = Макет.ПолучитьОбласть("ТоварыШапка");
    ОбластьТовары = Макет.ПолучитьОбласть("Товары");
    ОбластьИтог = Макет.ПолучитьОбласть("Всего");
    ТабДок.Очистить();

    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
        Если ВставлятьРазделительСтраниц Тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;

        ТабДок.Вывести(ОбластьЗаголовок);

        Шапка.Параметры.Заполнить(Выборка);
        ТабДок.Вывести(Шапка, Выборка.Уровень());

        ТабДок.Вывести(ОбластьТоварыШапка);
        ВыборкаТовары = Выборка.Товары.Выбрать();
        СуммаИтог=0;
        Пока ВыборкаТовары.Следующий() Цикл
            ОбластьТовары.Параметры.Заполнить(ВыборкаТовары);
            ТабДок.Вывести(ОбластьТовары, ВыборкаТовары.Уровень());
            СуммаИтог = СуммаИтог + ВыборкаТовары.Сумма;
        КонецЦикла;

        ОбластьИтог.Параметры.ВсегоПоДокументу = СуммаИтог;
        ТабДок.Вывести(ОбластьИтог);
        ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;
    
КонецПроцедуры
6 Господин ПЖ
 
16.12.14
18:41
(4) модуль менеджера - это static класса ... никакой ссылки на экземпляр по умолчанию как в модуле объекта там быть не может по определению...

и передавать вы туда нихрена не передаете

>Документы.РеализацияТоваров.ПолучитьСсылку()

получили по сути "ссылку нового" и сидим довольные
7 maslov_ilya
 
16.12.14
18:45
(6) Ясно. Спасибо. Но вопрос открыт, как же мне тогда получить ссылку на документ, чтобы его отредактировать?
8 Господин ПЖ
 
16.12.14
18:46
(7) передать ее в функцию, ясен купорос

Процедура ВыполнитьСортировку(мояссылко) Экспорт
9 maslov_ilya
 
16.12.14
18:54
(6) Да, я пытался, но в силу недостатка, пока что, знаний, не соображу как передать в процедуру этот параметр.

Грубо говоря, должно выглядеть вот так?

Процедура ВыполнитьСортировку(ДокументСсылка) Экспорт
        
    ОбъектНазначения = ДокументСсылка.Получить объект();
    ТаблицаТовары = ДокументСсылка.Товары.Выгрузить();

Как же передать параметр ДокументСсылка?
10 Господин ПЖ
 
16.12.14
18:56
Документы.РеализацияТоваров.ВыполнитьСортировку(мояссылко);
11 maslov_ilya
 
16.12.14
20:29
(10) Извините, а где должна находиться данная строка кода и каким образом с помощью нее я могу передать ссылку на документ в мою процедуру?
Я, честно, пытался понять ваше сообщение...но никак