Имя: Пароль:
1C
1С v8
Как избавиться от Выполнить?
0 D_Pavel
 
05.12.12
12:53
Равны = Истина;
           Для каждого Реквизит из Док.ДокументОбъект.Метаданные().Реквизиты Цикл
               Выполнить ("Равны = Равны и Док.ДокументОбъект." + Реквизит.Имя + " = Док.РанееЗагруженныйДокументСсылка." + Реквизит.Имя + "");
           КонецЦикла;
1 Лефмихалыч
 
05.12.12
12:54
про квадратные скобки слышал чо-нибудь?
2 butterbean
 
05.12.12
12:55
(0) квадратные скобки тебя спасут
3 zladenuw
 
05.12.12
12:55
та да
4 Reset
 
05.12.12
12:55
ДокументОбъект[ИмяРеквизита]=Значение
5 Reset
 
05.12.12
12:58
Вообще, документ, состоящий только из булевых реквизитов, как то странен
6 Reset
 
05.12.12
12:58
Может, ТЧ должна быть или вообще не документ, а другая сущность
7 Рэйв
 
05.12.12
13:00
Если я правильно телепатирую...


Если Док.ДокументОбъект[Реквизит.Имя ] = Док.РанееЗагруженныйДокументСсылка[Реквизит.Имя ] Тогда
   Равны=Истина;
Иначе
   Раны=Ложь;
КонецЕсли;
8 Рэйв
 
05.12.12
13:01
Раны=Ложь;
=
Равны=Ложь;
9 Reset
 
05.12.12
13:01
а так я бы написал без мозговывертов с "равно":

Равны=Истина;
Для каждого Реквизит из ....
 Если Объект1[Реквизит.Имя]<>Объект2[Реквизит.Имя] тогда
   Равны=Ложь;Прервать;
10 Reset
 
05.12.12
13:03
(5) отменяется, неверно понял смысл сначала
11 MSII
 
05.12.12
13:04
(7) И прервать, если Ложь
12 cw014
 
05.12.12
13:05
Равны = Равны

оХГДЕЖ !!!
13 Deon
 
05.12.12
13:08
(12) Ну это таки будет работать, всё правильно ж ) Правда через гланды, конечно.
14 Deon
 
05.12.12
13:08
(0) А чем тебе не нравится Выполнить() ?
15 D_Pavel
 
05.12.12
13:12
(12) Хахахаха
Всем спасибо, сделал так:
           Равны = Истина;
           Для каждого Реквизит из Док.ДокументОбъект.Метаданные().Реквизиты Цикл
               Равны = Равны и Док.ДокументОбъект[Реквизит.Имя] = Док.РанееЗагруженныйДокументСсылка[Реквизит.Имя];
           КонецЦикла;
16 Deon
 
05.12.12
13:13
(15) Зачем ты бежишь по всем оставшимся реквизитам, если у тебя уже в 1м найдется разница? Или тут код не полный?
17 D_Pavel
 
05.12.12
13:13
прерывать не буду, ибо реквизитов всего несколько, документ за раз всего один проверяется.
18 Нуф-Нуф
 
05.12.12
13:14
квадратные скобки уже предлагали?
19 Рэйв
 
05.12.12
13:14
(11)Ну да

(15)Извращенец:-)
20 Reset
 
05.12.12
13:14
(15) После первого различия дальнейший цикл бессмыслен
21 Reset
 
05.12.12
13:15
(17) Какая разница, сколько реквизитов?
22 Рэйв
 
05.12.12
13:15
Если сильно хочется поизвращаться то хоть делай это рационально.

Равны = Док.ДокументОбъект[Реквизит.Имя] = Док.РанееЗагруженныйДокументСсылка[Реквизит.Имя];

вполне достаточно
23 Undefined vs NULL
 
05.12.12
13:15
Равны = Истина;
           Для каждого Реквизит из Док.ДокументОбъект.Метаданные().Реквизиты Цикл
               Если Не Равны Тогда
                 Прервать;
               КонецЕсли;
               Равны = (Док.ДокументОбъект[Реквизит.Имя] = Док.РанееЗагруженныйДокументСсылка[Реквизит.Имя]);
           КонецЦикла;
24 D_Pavel
 
05.12.12
13:16
(21) Разница большая. Если много реквизитов, то есть смысл оптимизировать скорость.
25 Reset
 
05.12.12
13:16
(23) -> (9)
26 Рэйв
 
05.12.12
13:16
(24)Если хоть один не совпал объекты уже неравны хоть там что дальше
27 Deon
 
05.12.12
13:16
(23) почему прерывание до проверки? )
28 Reset
 
05.12.12
13:16
(24) Какая разница, много реквизитов или мало?
29 D_Pavel
 
05.12.12
13:17
(22) так будет работать только совместно с Прервать
30 Undefined vs NULL
 
05.12.12
13:17
(27) какая разница?
31 Рэйв
 
05.12.12
13:18
(29)Так и надо Прервать. Тебе уже всем форумом кричат, что дальше смотреть нет смысла
32 Deon
 
05.12.12
13:18
(30) В лишнем прогоне цикла
33 Undefined vs NULL
 
05.12.12
13:20
(32) ну поставь в постусловие, оптимизатор))
34 D_Pavel
 
05.12.12
13:20
(28) -> (24)

Сделал с прервать....

           Для каждого Реквизит из Док.ДокументОбъект.Метаданные().Реквизиты Цикл
               Если Не Док.ДокументОбъект[Реквизит.Имя] = Док.РанееЗагруженныйДокументСсылка[Реквизит.Имя] тогда
                   .....
                   Прервать;
               КонецЕсли;
           КонецЦикла;
35 Deon
 
05.12.12
13:20
А ваще, лучше всего писать как в (7), ибо что (15), что (22) - это всё сложночитаемый код.
36 Reset
 
05.12.12
13:21
(35) а (9) ? :)
37 Reset
 
05.12.12
13:21
в (7) как минимум лишнее присваивание переменной в цикле
38 D_Pavel
 
05.12.12
13:22
(35) В (7) операция лишние разы выполняется    Равны=Истина;
39 cw014
 
05.12.12
13:22
(23)
Для каждого Реквизит из Док.ДокументОбъект.Метаданные().Реквизиты Цикл
   Равны = (Док.ДокументОбъект[Реквизит.Имя] = Док.РанееЗагруженныйДокументСсылка[Реквизит.Имя]);
   Если Не Равны Тогда
       Прервать;
   КонецЕсли;
КонецЦикла;
40 Deon
 
05.12.12
13:23
(36) (9) по удобочитаемости такое же, как и (7). А так да, нафиг оно определение Равны не надо.
41 D_Pavel
 
05.12.12
13:23
(39) Тут тоже лишние раз выполняется Равны =
42 Reset
 
05.12.12
13:23
в (39) тоже до дыр пытаются затереть бедную переменную
43 Deon
 
05.12.12
13:28
Равны = Истина;
НеРавны = Ложь;
Для каждого Реквизит из Док.ДокументОбъект.Метаданные().Реквизиты Цикл
   Равны = (Док.ДокументОбъект[Реквизит.Имя] = Док.РанееЗагруженныйДокументСсылка[Реквизит.Имя]);
   НеРавны = (Док.ДокументОбъект[Реквизит.Имя] <> Док.РанееЗагруженныйДокументСсылка[Реквизит.Имя]);
   Если НЕ Равны И НЕРавны Тогда
       Равны = Ложь;
       НеРавны = Истина;
       Прервать;
   КонецЕсли;
КонецЦикла;
44 Рэйв
 
05.12.12
13:30
Равны = Истина;
НеРавны = Ложь;
Для каждого Реквизит из Док.ДокументОбъект.Метаданные().Реквизиты Цикл
   Равны = (Док.ДокументОбъект[Реквизит.Имя] = Док.РанееЗагруженныйДокументСсылка[Реквизит.Имя]);
   Если НЕ Равны Тогда
       Прервать;
   КонецЕсли;
КонецЦикла;
45 Рэйв
 
05.12.12
13:30
*НеРавны = Ложь;  - тоже убрать
46 maxx079
 
05.12.12
13:32
ппц.
вы что курите?
47 Рэйв
 
05.12.12
13:33
(46)Готовь сани летом, а к пятнице готовься со среды :-)
48 Deon
 
05.12.12
13:33
(46)
Если Равны = НеРавны Тогда
  Вопрос("вы что курите?");
...
49 Deon
 
05.12.12
13:33
равны равны неравны
50 Рэйв
 
05.12.12
13:34
Равно=Равно<>Неравно
:-)
51 1Сергей
 
05.12.12
13:35
(48)
Если НЕ Равны <> НеРавны Тогда
 Вопрос("вы что курите?");
...
52 Кокос
 
05.12.12
13:36
Для каждого Реквизит из Док.ДокументОбъект.Метаданные().Реквизиты Цикл
   Если Док.ДокументОбъект[Реквизит.Имя] <> Док.РанееЗагруженныйДокументСсылка[Реквизит.Имя] Тогда
       Прервать;
   КонецЕсли;
КонецЦикла;
53 AndyD
 
05.12.12
13:36
писать код надо чтобы Программист понял, а не для дебилов все разжевывать
54 Кокос
 
05.12.12
13:36
блин. Равны забыл :))
55 Deon
 
05.12.12
13:36
(54) И НеРавны тоже
56 Лефмихалыч
 
05.12.12
13:37
в номинации "бессымсленная беспощада" победил (52)
57 AndyD
 
05.12.12
13:37
Если НЕ (Равны <> НеРавны)<>(Равны = НеРавны) Тогда
 Вопрос("вы что курите?");
58 Deon
 
05.12.12
13:38
(53) Да кому он нужен, этот мифический Программист
59 1Сергей
 
05.12.12
13:38
(56) +1
60 Кокос
 
05.12.12
13:40
(59) да блин. с этим равны неравны :)
61 Undefined vs NULL
 
05.12.12
13:50
Равны = Истина;
Для каждого Реквизит из Док.ДокументОбъект.Метаданные().Реквизиты Цикл
   Если Док.ДокументОбъект[Реквизит.Имя] <> Док.РанееЗагруженныйДокументСсылка[Реквизит.Имя] Тогда
       Равны = Ложь;
       Прервать;
   КонецЕсли;
КонецЦикла;
62 D_Pavel
 
05.12.12
13:50
Всем спасибо! В следующий раз я еще что-нибудь спрошу )
63 D_Pavel
 
05.12.12
13:51
(61) Так и сделал.
64 1Сергей
 
05.12.12
13:52
(62) давай, а то до пятницы не дотянем
65 cw014
 
05.12.12
13:53
(41) По крайней мере после цикла остается переменная "Равно". А вот то что в (52) точно бессмысленно. Ну прошелся я по реквизитам, если равны все, просто по всем пролетел. Если не равны, ну не по всем пролетел - результат то где?