Имя: Пароль:
1C
1С v8
Отбор во внешних печатных формах
0 mzelensky
 
11.01.13
13:59
Доброго всем!
В типовых имеется механизм подключения внешних печатных форм с отбором.
Отбор реализован через построитель:

Функция ИнициализироватьПостроительДопПечатныхФорм(ИмяТаблицы, СинонимТаблицы) Экспорт

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

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


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




В принципе все просто и понятно, но как всегда есть "НО"!Заключается оно в этой строчке:

ПостроительОтчета.Параметры.Вставить("Ссылка", Объект.ссылка);

Т.е. для сравнения (отбора) передается ссылка на объект. А в моем случае объект может быть еще не записанным (т.е. ссылка как таковой еще нет). Следовательно отбор не отрабатывает. Как можно допилить все это для "нового объекта"?!
1 mzelensky
 
11.01.13
14:01
П.С. самое просто это конечно перевод выполнением алгоритма записать объект, но делать этого не хочется т.к. вызов данного алгоритма происходит (например) при вводе на основании и получится, что объект при создании сразу будет записываться еще даже ДО показа пользователю (а этого делать не хочется)
2 mzelensky
 
11.01.13
14:09
ну апну что ле
3 Wobland
 
11.01.13
14:10
ну апни. меня когда-то интересовал вопрос, зачем оно меня просит записать документ перед печатью (типовое решение), но потом сделал себе так же и забыл
4 mzelensky
 
11.01.13
14:12
(3) мне это не нравится. Я понимаю прекрасно зачем оно это просит, но мне нужно обойти это как-то :(
5 mzelensky
 
11.01.13
14:22
что-то народ какой-то тухлый...все видать в пятнице сидят
6 steptostep
 
11.01.13
14:32
Попробуй через        УстановитьСсылкуНового(Документы.ВидДокумента.ПолучитьСсылку(Новый УникальныйИдентификатор))
7 mzelensky
 
11.01.13
14:46
сейчас сделал через транзакцию

Проверяю объект на "новый". и если он таковой, то в транзакции записываю его, произвожу отбор, а затем отменяю транзакцию...

Твой вариант сейчас тоже попробую
8 mzelensky
 
11.01.13
14:50
(6) не, не канает :(
9 mzelensky
 
14.01.13
08:00
попробую поднять в понедельник, а то вечер пятницы не очень хорошее время для интелектуальных вопросов.
10 mzelensky
 
14.01.13
09:52
ну так кто-нить проснулся уже?!
11 Defender aka LINN
 
14.01.13
09:58
(0) Ащета перед печатью документ в типовых записывается. И во внешнюю ПФ передается ссылка, а не объект.
12 mzelensky
 
14.01.13
10:02
(11) а кто тебе сказал ,что это типовая?
13 mzelensky
 
14.01.13
10:03
(12) + читаем в (0)

"А в моем случае объект может быть еще не записанным (т.е. ссылка как таковой еще нет). Следовательно отбор не отрабатывает. Как можно допилить все это для "нового объекта"?!"

Т.е. в моем случе данный механизм "отбора" может запускаться еще ДО записи нового объекта!
14 pessok
 
14.01.13
10:06
(13) ну в твоем уникальном случае ты нашел нормальное решение с транзакцией, хоть и от лукавого это, имхо
15 mzelensky
 
14.01.13
10:08
(14) согласен, мне тоже через "транзакцию не нравится", но другого варианта сам не нашел, а у народа видать тоже мыслей не очень то...
16 pessok
 
14.01.13
10:12
странно, что не работает (6)...
17 mzelensky
 
14.01.13
10:16
(16) как я понимаю таким образом устанавливается идентификатор, который БУДЕТ установлен при записи объекта, но по факту до записи ссылки как не было, так и нет.

Я только такое объяснение вижу. Попробуй сам, может я что-то косякнул?
18 pessok
 
14.01.13
10:18
(17) да все правильно ты понимаешь, это я туплю :) откуда быть ссылке, когда документ не записан? неоткуда, так что транзакция, да
19 Defender aka LINN
 
14.01.13
10:20
(12) Я символизирую, что там не зря так сделано.
20 pessok
 
14.01.13
10:30
(19) да дело понятное, особенно с учетом того, что в типовых данные тащятся запросом с условием на ссылку документа, но ведь всякие случаи бывают
21 pessok
 
14.01.13
10:30
+(20) _чаще_ всего тащятся
22 steptostep
 
14.01.13
13:04
(0) (15) так из постановки задачи "Отбор реализован через построитель" явно следует, что документ должен быть записан. Так что, кроме решения с транзакцией может быть только решение со значительной переделкой кода типового механизма.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший