Имя: Пароль:
1C
1С v8
Как отловить ситуацию в ПриСозданииНаСервере?
0 ДайтеДайте Сказать
 
13.12.12
12:55
В документе, в МодулеОбъекта есть ОбработкаЗаполнения().
В модуле формы есть ПриСозданииНаСервере.
Документ вводит пользователь на основании другого документа.

Ситуация:
- отрабатывает ОбработкаЗаполнения и заполняет Реквизит1
- отрабатывает ПриСозданииНаСервере и меняет значение у Реквизит1

Как отловить в ПриСозданииНаСервере, что документ вводится на основании и сказать, что в этом случае не нужно повторно менять Реквизит1?
1 Wobland
 
13.12.12
12:56
на заполненность посмотреть?
2 ДайтеДайте Сказать
 
13.12.12
12:57
(1) ну да, только что пришла мысль посмотреть заполненность реквизита "ДокументОснование".

А более крутые варианты может есть?
3 Defender aka LINN
 
13.12.12
12:57
(0) Ну, надо себя как-то заставить. Заставить себя, наконец, понять, что в ПриСозданииНаСервере вообще не надо ничего менять в объекте.
4 Wobland
 
13.12.12
12:58
(3) кстати, да
5 XLife
 
13.12.12
12:58
Параметры.Основание
6 ДайтеДайте Сказать
 
13.12.12
12:59
(3) расскажи это фирме 1С и её типовым конфигурациям
7 Defender aka LINN
 
13.12.12
13:00
(6) Пруф или GTFO
8 ДайтеДайте Сказать
 
13.12.12
13:01
(5) спасибо
9 ДайтеДайте Сказать
 
13.12.12
13:02
(7)
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   
   Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда
       Отказ = Истина;
       
   УправлениеНебольшойФирмойСервер.ЗаполнитьШапкуДокумента(
   Объект,
   "Продажа",
   Параметры.ЗначениеКопирования,
   ,
   ,
   ,);
   
   
//***************************************    
   ОбновитьПодвалФормы();
   
КонецПроцедуры
10 Defender aka LINN
 
13.12.12
13:03
(9) Если попробовать прямо глазами посмотреть в этот код и на секундочку задуматься, то ответ и так будет очевиден.
11 ДайтеДайте Сказать
 
13.12.12
13:04
(3) > Заставить себя, наконец, понять, что в ПриСозданииНаСервере вообще не надо ничего менять в объекте.


Кстати, а где рекомендуешь что-то менять в объекте? Очень интересно...
12 ДайтеДайте Сказать
 
13.12.12
13:04
+(11) Гуру что рекомендуют?
13 MSII
 
13.12.12
13:05
(11) А чем обработка заполнения не устраивает?
14 ДайтеДайте Сказать
 
13.12.12
13:06
(10) Вот тебе чисто типовой код

// Процедура - обработчик события ПриСозданииНаСервере.
//
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   
   УправлениеНебольшойФирмойСервер.ЗаполнитьШапкуДокумента(
       Объект,
       ,
       Параметры.ЗначениеКопирования,
       Параметры.Основание,
       СостояниеДокумента,
       КартинкаСостоянияДокумента,
       РазрешеноПроведение,
       Параметры.ЗначенияЗаполнения
   );
   
   // Установка реквизитов формы.
   ДатаДокумента = Объект.Дата;
   Если НЕ ЗначениеЗаполнено(ДатаДокумента) Тогда
       ДатаДокумента = ТекущаяДата();
   КонецЕсли;
   
   Компания = УправлениеНебольшойФирмойСервер.ПолучитьОрганизацию(Объект.Организация);
   
   Если НЕ Константы.ФункциональнаяОпцияУчетПоНесколькимСкладам.Получить() Тогда
           
       Элементы.СтруктурнаяЕдиница.РежимВыбораИзСписка = Истина;
           
   КонецЕсли;
   
   Если ЗначениеЗаполнено(Объект.СтруктурнаяЕдиница) Тогда
       
       Если НЕ Объект.СтруктурнаяЕдиница.ОрдерныйСклад Тогда
           
           Объект.СтруктурнаяЕдиница = Неопределено;
           
       ИначеЕсли НЕ Константы.ФункциональнаяОпцияУчетПоНесколькимСкладам.Получить() Тогда
           
           Элементы.СтруктурнаяЕдиница.Видимость = Ложь;
           
       КонецЕсли;
       
   КонецЕсли;
   
   // Обработчик подсистемы "Дополнительные отчеты и обработки"
   ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтаФорма);
   
   // ПодключаемоеОборудование
   ИспользоватьПодключаемоеОборудование = УправлениеНебольшойФирмойПовтИсп.ИспользоватьПодключаемоеОборудование();
   СписокЭлектронныхВесов = МенеджерОборудованияСервер.ПолучитьСписокОборудования("ЭлектронныеВесы", , МенеджерОборудованияСервер.ПолучитьРабочееМестоКлиента());
   Если СписокЭлектронныхВесов.Количество() = 0 Тогда
       // Нет подключенных весов.
       Элементы.ЗапасыПолучитьВес.Видимость = Ложь;
   КонецЕсли;
   // Конец ПодключаемоеОборудование
   
КонецПроцедуры // ПриСозданииНаСервере()
15 XLife
 
13.12.12
13:06
(9) Объект имеет тип ДанныеФормыСтруктура
16 regniws
 
13.12.12
13:07
(3) бред какой-то написал
17 Defender aka LINN
 
13.12.12
13:30
(11) В обработке заполнения, где же еще.
(16) Учи матчасть.
В общем, Параметры.ЗначениеКопирования автора так ни на какие мысли не навело. Печально.
18 Stim
 
13.12.12
13:31
(16)+100
19 Defender aka LINN
 
13.12.12
13:32
(18) Стим, не тебе меня учить ;)
20 Stim
 
13.12.12
13:34
(19) код из 14 тебя ни на что не натолкнул, изобретатель велосипедов?
21 mikecool
 
13.12.12
13:38
(20) какой то гкод, кмк
22 Defender aka LINN
 
13.12.12
13:38
(20) Нет, а должен был? А про велосипеды, опять-таки, не тебе мне рассказывать, ага.
23 regniws
 
13.12.12
13:40
(17) ну-ка ну-ка, и чем нам грозит заполнение объекта не в ПриСозданииНаСервере!? :)
24 regniws
 
13.12.12
13:40
(23) опечатка. читать: чем нам грозит заполнение объекта не в ПриСозданииНаСервере!? :)
25 Stim
 
13.12.12
13:40
(22) почитай чтоле книжки по УФ, не знаю
26 MSII
 
13.12.12
13:43
(23) Да ничем, в общем-то, пока мы помним, что ПриСозданииНаСервере - событие формы и программно создаваемые объекты заполняем самостоятельно.
27 regniws
 
13.12.12
13:44
(26) кажется он имеет что-то другое ввиду ))
28 Stim
 
13.12.12
13:44
(26) в ПриСозданииНаСервере можно и нужно заполнять реквизиты формы
29 regniws
 
13.12.12
13:45
(28) он про объект утверждает что-то, а не про форму ))
30 MSII
 
13.12.12
13:46
(28) Вроде мы про реквизиты объекта говорил, нет?
31 Defender aka LINN
 
13.12.12
13:46
(24) Вам - разрывом мозга, вестимо. Мне - ничем.
(25) Стим, еще раз: ты НИКУЯ не знаешь про управляемые формы, усохни уже со своими идиотскими советами.
32 regniws
 
13.12.12
13:48
(31) обоги.. какой конструктивный диалог..
33 Stim
 
13.12.12
13:49
(32) у человека завышенное чсв на фоне собственного альтернативного понимания механизма работы УФ.
34 regniws
 
13.12.12
13:51
(33) да это уже не чсв, а ЧСАху....
35 Maxus43
 
13.12.12
13:53
тут кто то что то знает про УФ? Не смешите мои тапки, падите ниц перед моим величием :)
36 Defender aka LINN
 
13.12.12
13:54
(34) Могу и тебя следом послать, я ни для кого исключений не делаю.
(33) Ну, у меня хотя бы такое есть.
37 regniws
 
13.12.12
13:56
(36) окей, давай )) дабы расставить точки над i.
Голословное "я все могу, я все умею, вы все г..но и тд" является вполне основанной аргументацией (подсказываю)..

(35) как ни странно, да, бывают те, что знают об УФ в бОльшем объеме, нежели может показаться.
38 Maxus43
 
13.12.12
13:56
Страницы 405-406. Читать всем.
ПриСозданииНаСервере - процедура в которой надо подготовить ФОРМУ к открытию, а не менять данные объекта, Объект удалён из памяти после предыдущего обработчика ПриЧтенииНаСервере и т.д. и т.п.
39 Stim
 
13.12.12
13:58
ветку можно закрывать
40 Defender aka LINN
 
13.12.12
13:59
(37) Еще раз: я объясняю, как следует делать с точки зрения управляемого приложения. В ответ какие-то неадекватные обезьяньи ужимки типа "А чем нам грозит, если будем делать не так?". Та ничем вам не грозит. И воду в решете можно таскать, достаточно зимы дождаться.
41 Defender aka LINN
 
13.12.12
14:00
(39) Иди в соседней ветке про ДС лучше расскажи. А то я уж прямо истомился в ожидании.
42 regniws
 
13.12.12
14:01
(38) бывают сценарии, при которых необходимо заполнить некоторые данные объекта(sic!) с последующием помещением в бидэ и более аккуратного способа как сделать это в ПриСозданииНаСервере не существует.

на вскидку:
- реквизит СозданИнтерактивно чудесно заполняется именно в присоздании на сервере
- ВидОперации, который нельзя прописать в дефолт значение, так же прекрасно заполняется именно в ПриСозданииНаСервере

Могу еще поковырять примеров.
43 regniws
 
13.12.12
14:02
(40) простое следования правилам не является хорошим тоном для программиста. Понимание механизмов работы управляемых форм наше благо, что позволяет не заявлять, что так нужно делать всегда.
44 Mort
 
13.12.12
14:03
Реквизит "СозданИнтерактивно" это г*внокод. Самый короткий г*внокод, который я видел.
45 Maxus43
 
13.12.12
14:04
(43) ситуации конечно разные, если говорить о методологии - то (38), надо к этому стремится просто
46 regniws
 
13.12.12
14:05
(44) мотивация )
47 Defender aka LINN
 
13.12.12
14:06
(42) Реквизит "СозданИнтерактивно" прямо-таки разворачивает плакат с надписью "тут вбит костыль". Хотя да, иногда надо и в форме менять реквизиты. Только я не вижу, чтобы я где-то утверждал, что этого делать категорически нельзя.
(43) Вот с этими самыми словами на правила обычно с самого начала ложится здоровенный болт
48 regniws
 
13.12.12
14:06
(45) я полностью согласен с тем, что есть "основной сценарий использования" и именно этому гайдлайну нужно следовать, но заявлять сразу о том, что это г*вно ведь не следует, не так ли?
49 Stim
 
13.12.12
14:06
Открываю типовую БП 3.0., форму документа РТУ и, о ужас - в процедуре при созданииНаСервере заполняются реквизиты объекта!! Надо срочно написать разработчикам, что так нельзя делать!!
50 regniws
 
13.12.12
14:07
(47) вы даже не знает, где этот "костыль" есть и как используется, но видимо с таким чса навыки телепата впечатываются автоматически.
51 Defender aka LINN
 
13.12.12
14:08
(50) Не знаю. Но знаю, что объекту должно быть пофигу, как его создали.
(49) Ты там мою фамилию в авторах увидел, или что?
52 Stim
 
13.12.12
14:09
(51) типовые создают те люди, которые придумали УФ. или из той команды. во всяком случае они знают больше тебя
53 mikecool
 
13.12.12
14:10
(52) я бы на это не сильно надеялся ))
54 regniws
 
13.12.12
14:10
(51) ну да, я прям так и вижу тогда, что у вас создается регистр сведений "объекты, созданные интерактивно" с одним составным измерение, ведь объект не должен знать, как его создали.
55 Mort
 
13.12.12
14:11
БП 3.0.9.4 РТУ :

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

   // ДополнительныеОтчетыИОбработки
   ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтаФорма);
   // Конец ДополнительныеОтчетыИОбработки
   
   Если Параметры.Ключ.Пустая() Тогда
       ПодготовитьФормуНаСервере();
   КонецЕсли;

   АктивизироватьТабличнуюЧасть = ОбщегоНазначенияБПВызовСервера.ПолучитьПервуюНепустуюВидимуюТабличнуюЧасть(
       ЭтаФорма, СписокВидимыхТабличныхЧастей());

КонецПроцедуры
56 Stim
 
13.12.12
14:12
(55) открой последний релиз, раз уж взялся
57 Maxus43
 
13.12.12
14:14
Типовые приводить в пример вобще не кошерно, там ошибок дохрена, как методологических, так и даже программных (например код не соответсвует их же статье о снятии режима совместимости, в некоторых процедурах не учитывется новое поведение 8.2, оттого криво работает код). Но сравнивать больше не с чем, в конфах не 1с ещё больще косяков
58 Mort
 
13.12.12
14:14
(54) Примерно так. И входить это дело должно в подсистему "мы занимаемся хернёй".

(56) Значит костыль поставили. Лень было думать и наг*кодили.
59 Maxus43
 
13.12.12
14:16
2 дня без мисты жили, накипело видимо у народа, щас буквами дерутся, пар выпускают :)
60 regniws
 
13.12.12
14:17
(59) да нет, все ок, просто немного коробит, когда люди думают, что знают больше других ))
61 Defender aka LINN
 
13.12.12
14:32
(54) Нет. У нас, конечно, говнокода эпические тонны, но такого регистра, равно как и реквизита, нет. Ибо объектам пофигу, как их создают.
(60) Боль пониже спины возникает? :)
62 Wobland
 
13.12.12
14:41
у меня есть в кармане зажигалка. она была обнаружена после пьянки, происхождение явно не коммерческое. работа зажигалки - поджигать мне сигарету. представим теперь, что в кармане появляется вторая зажигалка, купленная мной за деньги.
первая зажигалка справится с задачей, вторая нет. ибо мне не пофигу, как был создан объект. ибо мне аллах запрещает покупать зажигалки. других случаев, когда важен источник появления, у меня нет и вообразить не могу
63 Stim
 
13.12.12
14:43
(62)слишком сложно описал. альтернативный специалист не поймет
64 Wobland
 
13.12.12
14:45
альтернативный специалист - надо запомнить
65 Wobland
 
13.12.12
14:53
поправка: аллах запрещает приобретать, но не запрещает пользоваться.
вопрос: зачем нужна интерактивность?
66 regniws
 
13.12.12
15:14
(61) Свою больную тему, небольшая просьба, не проецировать на других, тем более столь интимную.