Имя: Пароль:
1C
1С v8
Управляемые формы реквизиты документа или формы документа
0 karpos
 
24.06.14
08:16
Всем привет. Хорошего дня. Прошу немного помощи.

Делаю внешнюю печатную форму для бух 3.0(там управляемые формы)

Функция СведенияОВнешнейОбработке() Экспорт

Функция Получить Таблицу Команд()

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")


//&НаКлиенте
//Процедура Тест(Элемент) Экспорт
//    Элементы.Дата;
//    //Форма = ПолучитьФорму("Документ.ПлатежноеПоручение.Форма.ФормаДокумента");
//КонецПроцедуры

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

    ТабДок = Новый ТабличныйДокумент();
    ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РеестрПлатежныхПоручений";
    Макет = ПолучитьМакет("РеестрПлатежныхПоручений");
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    Шапка = Макет.ПолучитьОбласть("Шапка");
    ТабДок.Очистить();
    
    //Сообщить(ЭтотОбъект.Контрагент);
    //Сообщить(Ссылка.Дата);
    //Сообщить(СсылкаНаОбъект.Дата);
    //Сообщить(Тест);
    
    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
        Если ВставлятьРазделительСтраниц Тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;

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

        ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;
    //}}
    
    //УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДок, 1, ОбъектыПечати, СсылкаНаОбъект);
    Возврат ТабДок;
КонецФункции

Процедура Печать(МассивОбъектовНазначения, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода)
    Экспорт
    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "РеестрПлатежныхПоручений") Тогда

        ТабДок = СформироватьПечатнуюФорму(МассивОбъектовНазначения, ОбъектыПечати);

        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "РеестрПлатежныхПоручений",
            "РеестрПлатежныхПоручений",
            ТабДок
        );

    КонецЕсли;

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

Она работает я ее упростил, мне нужно получить дату документа из которого я запускаю печатную форму(не запросом), мне дата нужна чтоб ее потом в запросе использовать(запрос у меня будет немного доугой) в обычном приложение было мне все просто делаешь реквизит в печатной форме СсылкаНаОбъект указываешь тип ССылкаи документ и используешь в коде НП: СсылкаНаОбъект.Дата. Мне кажется нужно на писать функцию на клиенте которая вернет Дату документа но как это сделать не знаю, или может через ЭементыФормы как то это получить форма на клиенте же выполняется ее открытие я так думаю
1 shuhard
 
24.06.14
08:18
(0) не ну точно не хотя да возможно но не точно хотя может быть да
2 kosts
 
24.06.14
08:24
(0) А что за параметр ОбъектыПечати, может как-то связан с датой?
3 karpos
 
24.06.14
09:42
нет не как ?
4 karpos
 
24.06.14
09:45
нет не как
5 Василёна
 
24.06.14
09:50
(4) МассивОбъектовНазначения
6 karpos
 
24.06.14
09:56
Василёна, чтобы это значило? Неужели никто не вытаскивал дату документа или номер без запроса на УП(управляемые фомы).
7 Василёна
 
24.06.14
09:59
кхм... вот то и значило. МассивОбъектовНазначения - ссылки на документы, которые Вы собираетесь печатать
8 Рэйв
 
24.06.14
10:01
(6)Объект.Дата?
9 Василёна
 
24.06.14
10:04
(6) пример из кода
10 Василёна
 
24.06.14
10:05
РеквизитыДокумента = Новый Структура;
        РеквизитыДокумента.Вставить("Номер", МассивОбъектов[0].Номер);
        РеквизитыДокумента.Вставить("Дата", МассивОбъектов[0].Дата);
11 karpos
 
24.06.14
11:28
Да мне нужна Объект.Дата, Василёна, я не понимаю вас ну описали вы мне структуру круто где тут что мы получаем Объект(Документы.ПлатежноеПоручение) это как пример.
12 Крошка Ру
 
24.06.14
11:32
(11) Тебе пытаются сказать, что МассивОбъектов - и есть массив твоих ненаглядных объектов.
13 Крошка Ру
 
24.06.14
11:33
(12) Черт, аж кэп прослезился!
14 karpos
 
24.06.14
11:44
Ребят я дико извиняюсь, может я сейчас как осел выгляжу, и весь форум ржет на домой а может вы даже все вместе собрались(я чет много о себе думаю)

Но можно код.
15 Василёна
 
24.06.14
11:44
(12) думаете до ТС дойдет?
16 karpos
 
24.06.14
11:47
я мыслю как в обычном приложение, я не пойму реально что ему надо ну есть же ссылканаобъект.дата он сама мне говорит что да у этого объекта есть дата. СсылкаНаОбЪект это реквезит с типом  
ссылка на документ. Можно функцию как в УП обратиться к реквизитам документа
17 Василёна
 
24.06.14
11:48
> я мыслю как в обычном приложение
в этом Ваша проблема
18 Крошка Ру
 
24.06.14
11:49
(14) Ещё раз: для тебя  МассивОбъектов[0] = Объект

Это не код, это факт, прими его на веру.
19 Василёна
 
24.06.14
11:49
в УП нет необходимости добавлять реквизит СсылкаНаОбъект с типом ДокументСсылка.ПлатежноеПоручение
20 sizeoff
 
24.06.14
11:49
Процедура Печать(МассивОбъектовНазначения, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода)
    Экспорт
//Вот сюда вствь код
Для каждого Док из МассивОбъектовНазначения Цикл
Сообщить(Док.Дата);
КонецЦикла
//==========    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "РеестрПлатежныхПоручений") Тогда

        ТабДок = СформироватьПечатнуюФорму(МассивОбъектовНазначения, ОбъектыПечати);

        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "РеестрПлатежныхПоручений",
            "РеестрПлатежныхПоручений",
            ТабДок
        );

    КонецЕсли;

КонецПроцедуры
21 Крошка Ру
 
24.06.14
11:50
(15) Надо пытаться, ящитаю. В конце концов, как говорят герои "кто, если не мы" )
22 Василёна
 
24.06.14
11:54
(20) если и после этого будут вопросы...
23 karpos
 
24.06.14
12:13
Работает )))). Но прям вот еще чуть чуть терпения. Дату я получаю в функций печать, сам запрос куда я хочу предать дату в СформироватьПечатнуюФорму.
24 Любопытная
 
24.06.14
12:15
(23) Ты же в СформироватьПечатнуюФорму передаешь массив объектов, значит можно прямо в ней дату получать
25 Василёна
 
24.06.14
12:24
только не стоит забывать, что МассивОбъектовНазначения имеет тип Массив, следовательно надо либо обращаться напрямую к первому его элементу (МассивОбъектовНазначения[0]), либо обращаться в цикле как в (20)
26 karpos
 
24.06.14
13:13
И все таки хочу сделать так

&НаСервере
Функция РеестрПЛ(ДатаДок)
Запрос = Новый Запрос;
Запрос.Параметры.Вставить("ДатаДок", ДатаДок);
Запрос.Текст =
"ВЫБРАТЬ
| ПлатежноеПоручение.Дата,
| ПлатежноеПоручение.ДокументОснование,
| ПлатежноеПоручение.Номер
|ИЗ
| Документ.ПлатежноеПоручение КАК ПлатежноеПоручение
|ГДЕ
| ПлатежноеПоручение.Дата <= &ДатаДок";
Выборка = Запрос.Выполнить().Выбрать();
Возврат Выборка;
КонецФункции

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

Выборка = РеестрПЛ(ТекущаяДата());
  
ТабДок = Новый ТабличныйДокумент();
ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РеестрПлатежныхПоручений";
    Макет = ПолучитьМакет("РеестрПлатежныхПоручений");
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
Шапка = Макет.ПолучитьОбласть("Шапка");
ТабДок.Очистить();


//Сообщить(ЭтотОбъект.Контрагент);
//Сообщить(Ссылка.Дата);
//Сообщить(СсылкаНаОбъект.Дата);
//Сообщить(Тест);

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

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

  ВставлятьРазделительСтраниц = Истина;
КонецЦикла;
//}}

//УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДок, 1, ОбъектыПечати, СсылкаНаОбъект);
Возврат ТабДок;
КонецФункции

Процедура Печать(МассивОбъектовНазначения, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

Для каждого Док из МассивОбъектовНазначения Цикл
  ДатаДок = Формат(Док.Дата, "ДЛФ=Д");
КонецЦикла;

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "РеестрПлатежныхПоручений") Тогда

  ТабДок = СформироватьПечатнуюФорму(МассивОбъектовНазначения, ОбъектыПечати);

  УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
   КоллекцияПечатныхФорм,
   "РеестрПлатежныхПоручений",
   "РеестрПлатежныхПоручений",
   ТабДок
  );

КонецЕсли;

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

получается до дату я получаю но как ее предать
27 karpos
 
24.06.14
13:19
ммм я кажется врубился что можно мою функцию реестрЛП вызвать  в функций печать, а позже, а потом вызываем функцию СформироватьПечатнуюФорму
28 hhhh
 
24.06.14
13:25
то есть ты из одного платежного поручения, причем самого раннего например поручение за 2001 год печатаешь список всех остальных платежных поручений? Странная какая-то задача. Кому это в жизни может понадобисься?
29 karpos
 
24.06.14
13:32
я уже понял что лучше задачу эту было решать в отчете, мне было интересно как к реквизитам обращаться, задача немного другая там запросе будет так >= он получается сформирует список всех платежный поручений на текущую дату(ты правильно подметил из каждого платежного можно это будет сделать а их в день ну там штук 5 - 10 и ддапустим там еще 1-2 будет плановых) и он заполнит макет одну таблицу текущими другую плановыми
30 karpos
 
24.06.14
13:33
а в отчете было бы проще дату сам произвольно указываешь и все.
31 karpos
 
24.06.14
13:37
нет не получается(((. да дату мы получили. но функцию РеестрЛП   () мне нужно вызвать в функций СформироватьПечатнуюФорму() как
как ????  мне дату туда предать
32 hhhh
 
24.06.14
13:43
(31) как тебе все пишут, так и передавай. Люди же советуют, а ты советы не слушаешь, и вместо этого откровенный бред написал.
33 Василёна
 
24.06.14
13:46
(32) люди уже со смеху падают
34 karpos
 
24.06.14
14:09
ребят огромное вам спасибо ))) всем особенно sizeoff но тем не менее запрос я вывел в отдельную функцию как туда предать дату которую мы получили в функций печать.
35 Василёна
 
24.06.14
14:20
(34) на фига Вам ее получать в функции Печать()??? Вы в функцию СформироватьПечатнуюФорму передаете ссылку на документ! только вызов этой функции должен выглядеть так

ТабДок = СформироватьПечатнуюФорму(МассивОбъектовНазначения[0], ОбъектыПечати);

далее в этой функции пишите:

Выборка = РеестрПЛ(Ссылка.Дата);

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