Как в модуле менеджера получить реквизит документа

   maslov_ilya

17.12.14 — 16:32

Здравствуйте, ув. Гуру 1С

Есть документ — «Реализация товаров»

Есть реквизит этого документа — «МетодСортировки», тип строка, на форме документа пользователь выбирает одно из двух-трех возможных значений этого поля.

В модуле менеджера — описана Процедура Печать(ТабДок, Ссылка)

Необходимо в этой процедуре в переменную, допустим, «ДанныеСортировки» получить значение выбранное пользователем на форме.

Подскажите пожалуйста, как это сделать?

Через точку я так понял нельзя обращаться в модуле менеджера.

Пробую запросом, но видимо не корректно делаю.

ЗапросМетода = Новый Запрос;

   ЗапросМетода.Текст =

        «ВЫБРАТЬ

        |    РеализацияТоваров.МетодСортировки

        |ИЗ

        |    Документ.РеализацияТоваров КАК РеализацияТоваров

        |ГДЕ

        |    РеализацияТоваров.Ссылка В(&Ссылка)»;

   ЗапросМетода.Параметры.Вставить(«Ссылка», Ссылка);

   ВыборкаМетода = ЗапросМетода.Выполнить().Выбрать();

   ДанныеСортировки = ВыборкаМетода.МетодСортировки.Выбрать();

Подозреваю, что все таки надо как то передавать параметр в процедуру, но как я не пробовал у меня не получается.

Покажи пожалуйста, как правильно сделать?

Спасибо!

  

Партнерская программа EFSOL Oblako

   maslov_ilya

6 — 17.12.14 — 17:24

Вот процедура:

Процедура Печать(ТабДок, Ссылка) Экспорт

    
    Макет = Документы.РеализацияТоваров.ПолучитьМакет(«Печать»);

    
    //ЗапросМетода = Новый Запрос;

    //ЗапросМетода.Текст =

    //     «ВЫБРАТЬ

    //     |    РеализацияТоваров.МетодСортировки

    //     |ИЗ

    //     |    Документ.РеализацияТоваров КАК РеализацияТоваров

    //     |ГДЕ

    //     |    РеализацияТоваров.Ссылка В(&Ссылка)»;

    //ЗапросМетода.Параметры.Вставить(«Ссылка», Ссылка);

    //ВыборкаМетода = ЗапросМетода.Выполнить().Выбрать();

    
    //ДанныеСортировки = Ссылка.МетодСортировки;             //КАК ПОЛУЧИТЬ ЗНАЧЕНИЕ РЕКВИЗИТА «МетодСортировки»    ?????????

    
          
    

    
    Запрос = Новый Запрос;

    Запрос.Текст =

    «ВЫБРАТЬ

    |    РеализацияТоваров.Дата,

    |    РеализацияТоваров.Контрагент,

    |    РеализацияТоваров.Номер,

    |    РеализацияТоваров.Товары.(

    |        НомерСтроки,

    |        КодТовара,

    |        Номенклатура КАК Номенклатура,

    |        Количество,

    |        Цена,

    |        Сумма,

    |        ИндексСортировки КАК ИндексСортировки

    |    )

    |ИЗ

    |    Документ.РеализацияТоваров КАК РеализацияТоваров

    |ГДЕ

    |    РеализацияТоваров.Ссылка В(&Ссылка)

    |

    |УПОРЯДОЧИТЬ ПО

    |    ИндексСортировки»;

    Запрос.Параметры.Вставить(«Ссылка», Ссылка);

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

    ОбластьЗаголовок = Макет.ПолучитьОбласть(«Заголовок»);

    Шапка = Макет.ПолучитьОбласть(«Шапка»);

    ОбластьТоварыШапка = Макет.ПолучитьОбласть(«ТоварыШапка»);

    ОбластьТовары = Макет.ПолучитьОбласть(«Товары»);

    ОбластьИтог = Макет.ПолучитьОбласть(«Всего»);

    ТабДок.Очистить();

    ВставлятьРазделительСтраниц = Ложь;

    Пока Выборка.Следующий() Цикл

        Если ВставлятьРазделительСтраниц Тогда

            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();

        КонецЕсли;

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

        Шапка.Параметры.Заполнить(Выборка);

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

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

        ВыборкаТовары = Выборка.Товары.Выбрать();

        СуммаИтог=0;

        Пока ВыборкаТовары.Следующий() Цикл

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

            ТабДок.Вывести(ОбластьТовары, ВыборкаТовары.Уровень());

            СуммаИтог = СуммаИтог + ВыборкаТовары.Сумма;

        КонецЦикла;

        ОбластьИтог.Параметры.ВсегоПоДокументу = СуммаИтог;

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

        ВставлятьРазделительСтраниц = Истина;

    КонецЦикла;

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

Вообще, во время отладки если вычислить значение «ссылка» выдает тип = массив

   maslov_ilya

7 — 17.12.14 — 17:25

Уважаемые, пожалуйста, кому не сложно загрузите базу мою, посмотрите, как решить проблему эту.

Хочу двигаться дальше в изучении а уже 2 дня никак не решу эту задачу

https://yadi.sk/d/jjctgAL_dSbEj

Здравствуйте!
База УТ 11.2, платформа 8.3., Документ «коммерческое предложение клиенту», добавлен в него реквизит Филиал, тип Булево. Он выведен на форму в виде флажка. Планируется, что если истина у флажка, выводится печатная форма с одними данными, если ложь у флажка выводится с другими данными.
Подскажите пожалуйста, как обратиться к нему из модуля менеджера документа? В модуле менеджера прописана процедура печати макета. Она выводит только один вид данных, флажок не работает.
Использовала разные варианты кода:
1.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Функция ПолучитьДанныеОбъектаПоВыборке (Выборка, Товары)
   ДанныеОбъекта = Новый Структура;
  ....................................................
   ДанныеОбъекта.Вставить("Филиал",  Ложь);
  ......................................................
  конец функции
 
Процедура ЗаполнитьТабличныйДокументПоДаннымОбъекта(ТабличныйДокумент, ДанныеОбъекта)
  ......................................................
    Форма = документы.КоммерческоеПредложениеКлиенту.ПолучитьФорму("ФормаДокумента");
     Реквизит = Форма.ЭлементыФормы.Филиал.Значение;
    Если  не реквизит = ложь
         Тогда ОбластьАдресОрганизации.Параметры.АдресОрганизации = ("603024 Нижний Новгород, ул.Ленина, д.8");
     конецесли;
 ТабличныйДокумент.Вывести(ОбластьАдресОрганизации);
  ...........................................................
 конец процедуры

Пишет ошибку, что недоступны интерактивные действия.

2.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
Функция ПолучитьДанныеОбъектаПоВыборке (Выборка, Товары)
   ДанныеОбъекта = Новый Структура;
  ....................................................
   ДанныеОбъекта.Вставить("Филиал",  Ложь);
  ......................................................
  конец функции
 
Процедура ЗаполнитьТабличныйДокументПоДаннымОбъекта(ТабличныйДокумент, ДанныеОбъекта)
  ......................................................
Если ЗначениеЗаполнено(ДанныеОбъекта.Филиал)  Тогда
 
    ОбластьАдресОрганизации.Параметры.АдресОрганизации = ("603024 Нижний Новгород, ул.Ленина, д.8");
 КонецЕсли;

Выводит нужный адрес — потому что объект объявлен выше как Ложь, но ничего не происходит при изменении флажка, т.е он не видит значение реквизита на форме.

3. Создавала процедуру приизменении в свойствах объекта филиал, на форме передавала значение для адреса организации ошибок нет, но не выводит в печатную форму.
Подскажите пожалуйста как передать значение реквизита документа в модуль менеджера, совсем запуталась(((?

Есть документ — «Реализация товаров» Есть реквизит этого документа — «МетодСортировки», тип строка, на форме документа пользователь выбирает одно из двух-трех возможных значений этого поля. В модуле менеджера — описана Процедура Печать(ТабДок, Ссылка) Необходимо в этой процедуре в переменную, допустим, «ДанныеСортировки» получить значение выбранное пользователем на форме. Подскажите пожалуйста, как это сделать? Через точку я так понял нельзя обращаться в модуле менеджера. Пробую запросом, но видимо не корректно делаю. ЗапросМетода = Новый Запрос; Подозреваю, что все таки надо как то передавать параметр в процедуру, но как я не пробовал у меня не получается. Покажи пожалуйста, как правильно сделать? Спасибо!

Вы имеете ввиду вот так получить значение реквизита? Если так, то тут ошибка: Поле объекта не обнаружено (МетодСортировки)

Подозреваю что это не реквизит документа а реквизит формы

Сейчас еще раз проверил, удалил, создал заново. Реквизит документа. Сделал поиск ссылок на объект и вот что выдало: Объект «Документ.РеализацияТоваров.Реквизит.МетодСортировки» использован в: Документ.РеализацияТоваров.Форма.ФормаДокумента.Форма

а «Ссылка» это точно ссылка на документ?

Вот процедура: Вообще, во время отладки если вычислить значение «ссылка» выдает тип = массив

Уважаемые, пожалуйста, кому не сложно загрузите базу мою, посмотрите, как решить проблему эту. Хочу двигаться дальше в изучении а уже 2 дня никак не решу эту задачу

Посмотри какой тип имеет ссылка в отладчике. Не массив?

Вообще, во время отладки если вычислить значение «ссылка» выдает тип = массив

Значит Ссылка[0].МетодСортировки

У тебя команда для печати списка наверное

БОЖЕ! СПАСИБО! НАКОНЕЦ ТО! Милый человек! Скинь счет КИВИ что ли, по возможности отблагодарю)

Тэги: 1С 8

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

Есть справочник Договоры Контрагентов в нем создан макет active document и команда. Подскажите пожалуйста как получить реквизит справочника?     


// Модуль Менеджера
Процедура ДоговорСПоставщиком(ТабДок, Ссылка)Экспорт

ДоговорСПоставщиком =  ПолучитьМакет("ДоговорСПоставщиком");
MSWord = ДоговорСПоставщиком.Получить();

Попытка
Документ = MSWord.Application.Documents (1);
Документ.Activate ();

Замена = Документ.Content.Find;
    Замена.Execute("<Nomerdogovora>", Ложь, Истина, Ложь, , , Истина, , Ложь, Объект.НомерДоговора);

Замена = Документ.Content.Find;
    Замена.Execute("<Data>", Ложь, Истина, Ложь, , , Истина, , Ложь,Объект.ДатаДоговора);

Замена = Документ.Content.Find;
    Замена.Execute("<NameOrg>", Ложь, Истина, Ложь, , , Истина, , Ложь, """" + Объект.Владелец + """");

MSWord.Application.Visible = Истина;
MSWord.Activate ();

Исключение
     Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
MSWord.Application.Quit();
КонецПопытки;
КонецПроцедуры

//Модуль Команды

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ДоговорСПоставщиком(ТабДок, ПараметрКоманды);
ТабДок.ОтображатьСетку = Ложь;
ТабДок.Защита = Ложь;
ТабДок.ТолькоПросмотр = Ложь;
ТабДок.ОтображатьЗаголовки = Ложь;
КонецПроцедуры

Процедура ДоговорСПоставщиком (ТабДок, ПараметрКоманды);
Справочники.ДоговорыКонтрагентов.ДоговорСПоставщиком(ТабДок, ПараметрКоманды);
КонецПроцедуры

Рекомендовать в новости

Получить доступ к реквизитам документа на управляемых формах.

Гость

0

19.04.2018 — 10:21


Подскажите плиз. Туплю. Есть форма обработки на управляемых формах. На ней реквизит — тип Документ. Как получить доступ к реквизитам данного документа?

Гость

41

25.04.2018 — 16:26

38-roma n > да)

Гость

42

25.04.2018 — 16:40

(41) в этом случае — никак. Только воспроизводить в обработке алгоритмы по заполнению таблицы значений, используемые в форме документа. «Копипаста — наше всё».

Ну или построить работу так, чтоб обработке был доступен контекст формы документа

Гость

43

25.04.2018 — 16:51

42-roma n > а как сделать обработке доступ к контексту формы документа?

Гость

44

25.04.2018 — 16:57

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

Гость

45

25.04.2018 — 17:10

(43) для этого нужно чтоб форма документа по меньшей мере была. Не её описание в конфигураторе, а в режиме исполнения. Конкретная. Которую глазками видно. Только в этом случае ек ней можно будет обратиться программно. Например, передав её в форму обработки в качестве владельца, или ещё как.
(44) формировать выборку из формы — феерично

Uho

46

26.04.2018 — 10:32

может, автор озвучит конфигурацию и документ, на форме которого та самая таблица значений?

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

Согласно теории объектно-ориентированного программирования, методы объектов делятся на две группы: статические и простые. Простые методы имеют доступ только к конкретному экземпляру класса. Статические методы не имеют доступа к данным объектов, а работают с классом в целом.

Если перевести все это в термины системы 1С:Предприятие, то Модуль объекта содержит простые методы. Для их использования необходимо сначала получить конкретный объект: элемент справочника, документа и т.п. Модуль менеджера содержит статические методы. Для его использования нет необходимости отдельно получать каждый конкретный объект, он позволяет работать со всей коллекцией сразу.

Модуль объекта может иметь процедуры и функции, которые можно использовать извне. Для этого такая процедура или функция обозначается словом Экспорт.

Функция НоваяФункция () Экспорт

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

ЭлементСправочника=Справочники.Номенклатура.НайтиПоКоду(«000000001»);
Объект=ЭлементСправочника.ПолучитьОбъект();
Пер=Объект.НоваяФункция();

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

Перем НоваяПеременная Экспорт

ЭлементСправочника=Справочники.Номенклатура.НайтиПоКоду(«000000001»);
Объект=ЭлементСправочника.ПолучитьОбъект();
Объект.НоваяПеременная=);

Таким образом можно дополнять стандартные процедуры, функции и свойства (переменные) объектов. Такие переменные являются динамическими, они не сохраняются в информационной базе и существуют только во время работы с полученным объектом.

Модуль менеджера имеет все те же возможности, разница лишь в том, что для его использования не нужно получать конкретный объект, модуль менеджера позволяет работать со всей коллекцией объектов определенного типа.

Процедура НоваяПроцедура () Экспорт

ЭлементСправочника=Справочники.Номенклатура.НоваяПроцедура();

Или для переменной:

Перем НоваяПеременная Экспорт

ЭлементСправочника=Справочники.Номенклатура.НоваяПеременная;

Рассмотрим отличия в применении модуля объекта и модуля менеджера на примере процедуры создания печатной формы документа.

При использовании модуля объекта код будет выглядеть следующим образом:

Функция ПечатьДокумента (Ссылка) Экспорт
//В эту функцию необходимо передать ссылку на конкретный документ
Возврат ТабДок;
КонецФункции

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

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

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

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

Функция ПечатьДокумента (МассивОбъектов) Экспорт
//В эту функцию необходимо передать ссылку на конкретный документ
Возврат ТабДок;
КонецФункции

&НаКлиенте
Процедура Печать(Команда)
ТабДок = ПечатьНаСервере();
ТабДок.Показать();
КонецПроцедуры
&НаСервере
Функция ПечатьНаСервере()
Возврат Документы.НашДокумент.ПечатьДокумента(МассивСсылок);
КонецФункции

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

Так когда же использовать модуль объекта, а когда модуль менеджера?

Все зависит от задачи. Если для ее выполнения достаточно ссылки на объект (например задача печати), то лучше использовать модуль менеджера. Если же стоит задача изменения данных,  например заполнения документа, то необходимо его получить и использовать модуль объекта.

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

Данные объекта, которые отображаются в форме (в нашем случае данные документа), находятся всегда в основном реквизите формы. В подавляющем большинстве случаев этот реквизит имеет имя Объект. По крайней мере именно такое имя дает ему платформа, когда с помощью конструктора создает форму объекта. В нашем случае это именно так:


Основной реквизит формы содержит набор подчиненных реквизитов, соответствующих реквизитам прикладного объекта. Поэтому для того, чтобы обратиться, например, к поставщику, указанному в документе, нужно указать имя основного реквизита формы и через точку – имя подчиненного реквизита, хранящего ссылку на поставщика.

В нашем случае, для того чтобы получить ссылку на поставщика, нужно будет выполнить следующий код:

ПоставщикДокумента = Объект.Поставщик; 

Понравилась статья? Поделить с друзьями:
  • Иркутская нефтяная компания стройнефтегаз вакансии
  • Как в онлайн банке посмотреть банковские реквизиты
  • История бизнеса это в значительной степени история
  • Как в приложении сбербанк найти свои реквизиты бик
  • Источник финансирования бизнеса егэ обществознание