К списку форумов К списку вопросов
Как программно узнать есть опр. реквизит у справочника
sdaf
21.09.2004 - 15:50
или его в нет в принципе?
AlexMan
1 - 21.09.2004 - 15:52
Метаданные.
sdaf
2 - 21.09.2004 - 15:57
типа того Если ПустоеЗначение(Метаданные.Справочник(ТаблицаПрибылей.Объект.Вид()).Реквизит("ОдноЮрЛицо"))=0 тогда ?
Diter
3 - 21.09.2004 - 15:58
(2) Эта конструкция вызовет ошибку программы. Лучше перебором реквизитов через метаданные и сравнением названий реквизитов с нужным
Рупор абсурда
4 - 21.09.2004 - 15:58
Метаданные.Справочник(ТаблицаПрибылей.Объект.Вид()).Реквизит("ОдноЮрЛицо").Выбран()
AlexMan
5 - 21.09.2004 - 15:59
типа того :
Если Метаданные.Документ(Конт.Вид()).РеквизитТабличнойЧасти("СтавкаНДС").Выбран() = 1 Тогда
AlexMan
6 - 21.09.2004 - 16:01
(4) и от куда такие умные берутся?
sdaf
7 - 21.09.2004 - 16:01
Пасиб!
Рупор абсурда
8 - 21.09.2004 - 16:02
(3) Чёй-то она вызовет ошибку? Какую, интересно?
(6) 1:1 :))
Maniac
9 - 21.09.2004 - 16:06
Функция ЕстьРекв(Объект,Реквизит) Экспорт
  Попытка
    Значение = Объект.ПолучитьАтрибут(Реквизит);
    Возврат 1;
  Исключение
    Возврат 0;
  КонецПопытки ;
КонецФункции
//
проверяет фсЁ де угодно.
Вонрат
10 - 21.09.2004 - 16:09
Для а=1 по Метаданные.Справочник(ТаблицаПрибылей.Объект.Вид()).Реквизит() Цикл
    Если Метаданные.Справочник(ТаблицаПрибылей.Объект.Вид()).Реквизит(а).Идентификатор="ОдноЮрЛицо" Тогда
//все зашибись
      Прервать;
    КонецЕсли;
КонецЦикла;
Вонрат
11 - 21.09.2004 - 16:11
to(9) У тебя попытка. А если нужно эту фигню написать внутри транзакции, то исключение при попытке лишает возможности зафиксировать транзакцию.
Рупор абсурда
12 - 21.09.2004 - 16:15
(10) Дональд Кнут Вам кем-то приходится?
Вонрат
13 - 21.09.2004 - 16:18
Внучатым племянником. :)
Я его переводил на русский, иврит, вайнакхский и пару забыл
Maniac
14 - 21.09.2004 - 16:19
(11) не гони. работает пять лет без единого промаха.
niko
15 - 21.09.2004 - 16:21
Функция ЕстьРеквСпр(спр,рекв)
  // "спр" и "рекв" строки вроде "контрагенты" и "ОсновнойДоговор"
  // вылетит, если справочника "спр" в конфе нет
  Возврат Метаданные.Справочник(спр).реквизит(рекв).выбран();
КонецФункции
Diter
16 - 21.09.2004 - 16:22
(8) Как всегда прав :((
А я перестраховался.
sdaf
17 - 21.09.2004 - 16:22
(10) это, согласитесь не очень красиво... в (4) и (5) гораздо удобней
Anomaly
18 - 21.09.2004 - 16:24
Функция ЕстьРеквСпр(спр,рекв)
  // "спр" и "рекв" строки вроде "контрагенты" и "ОсновнойДоговор"
   Если Метаданные.Справочник(Спр).Выбран()=0 Тогда Возврат 0; КонецЕсли;
   Возврат Метаданные.Справочник(спр).реквизит(рекв).выбран();
  // не вылетит, даже если справочника "спр" в конфе нет
КонецФункции
Вонрат
19 - 21.09.2004 - 16:30
to(Maniac) Внутри транзакции работать не должно
to(18) хорошо
Рупор абсурда
20 - 21.09.2004 - 16:31
Мама дорогая ..., сколько "монстров" собралось ...
Maniac
21 - 21.09.2004 - 16:32
(19) еще раз говорю (14) и (9).
Anomaly
22 - 21.09.2004 - 16:33
(21) а может быть ты все пять лет транзакции не использовал? )))
Вонрат
23 - 21.09.2004 - 16:34
(21) Но ты не разу не сказал насчет внутри транзакции.
Maniac
24 - 21.09.2004 - 16:36
хех я не тошо внутри делал, но еще и транзакции сами в попытках не раз воял.
Вонрат
25 - 21.09.2004 - 16:36
А транзакцию внутри экзекуции не пробовал? :)
Maniac
26 - 21.09.2004 - 16:38
Объсните мне (приведите документацию) где попытка имеет отношение к выполнению транзакции.
Вонрат
27 - 21.09.2004 - 16:39
У меня случалась ситуация, когда внутри транзакции отрабатывало исключение попытки, то на команду ЗафиксироватьТранзакцию() вылетала с ошибкой типа невозможно зафиксировать транзакцию.
Причем ситуация была вполне стабильна. (за исключением того, что винду не пробовал переставлять)
Anomaly
28 - 21.09.2004 - 16:39
(26) это недокументированная аномалия )))
Maniac
29 - 21.09.2004 - 16:41
хех у меня ЕстьРекв() используется практически во всех модулях проведения и вообще встречается в конфе 172 раза. В тех обработках которую используют транзакции никакх глюков и ошибок никогда не вылазило.
Вонрат
30 - 21.09.2004 - 16:42
Если 28 говорит про аномалии, то этому можно верить! Ж)
Anomaly
31 - 21.09.2004 - 16:43
(29) значит, нигде не отрабатывало "исключение"
Вонрат
32 - 21.09.2004 - 16:44
А это работает(попытка внутри транакции) на каких релизах exe-шника?
Maniac
33 - 21.09.2004 - 16:44
(31) да ну. У меня в одном из общих модулей проведения для всех документов проверяется есть ли валюта у документа.
Anomaly
34 - 21.09.2004 - 16:45
(30) чем оправдано столь безграничное доверие? ))) Я ведь и обмануть могу - ну просто запросто)))
EVS
35 - 21.09.2004 - 16:46
монстры, а почему когда, через транзакцию из 1С с помощью ОЛЕ на sql-сервере формируются данные, даже если не фиксировать транзакцию, данные на сервере остаются?
Maniac
36 - 21.09.2004 - 16:47
(32) работало на 15,17,19,21,23
Вонрат
37 - 21.09.2004 - 16:47
А у нас принято верить людям
EVS
38 - 21.09.2004 - 16:48
монстры, а почему когда, через транзакцию из 1С с помощью ОЛЕ на sql-сервере формируются данные, даже если не фиксировать транзакцию, данные на сервере остаются?
Муму после всплытия
39 - 21.09.2004 - 16:48
(35)
вы по ОЛЕ транзакцию делаете?? мама дорогая..................
Anomaly
40 - 21.09.2004 - 16:52
(37) "а мне пофиг ваши неувязочки" (с) ))) - это будет если всем верить.
(36) возможно, если попытка-исключение "запрятано" в глобальную функцию, то транзакция и не реагирует ненормально...надо проверить бы...
Если просто использовать в транзакции, то ничего хорошего не получается...
EVS
41 - 21.09.2004 - 16:52
(39) А что ? :)
ПС: Блин,*******************, что за ТАЙМ-АУТ, на форуме, ни одного сообщения отправить толком не могу...
Maniac
42 - 21.09.2004 - 16:53
(41) транзакция 8))))
Anomaly
43 - 21.09.2004 - 16:55
(38) "Русский человек славится умением находить выход из любой сложной ситуации. Но еще больше он славится умением находить туда вход" (с)
Рупор абсурда
44 - 21.09.2004 - 16:59
А почему молчит про исключения в транзакциях уважаемая мною Муму П.В.? ...
Рупор абсурда
45 - 21.09.2004 - 17:02
(44)+ Неужели мы отдадим Мньяка на поругание "монстрам" ...
Maniac
46 - 21.09.2004 - 17:02
а может это из за того что у меня Возврат 0 стоит в исключении ?
Тоесть функция завершается не завершившись на операторе.
Муму после всплытия
47 - 21.09.2004 - 17:04
(44)
перефразируя.............. "чужих маньяков нам не надо, но и свого не отдадим??") а что про исключения?? тут уже все сказали............... не зафиксируется транзакция при оном................
Maniac
48 - 21.09.2004 - 17:05
а может просто из за того что это отдельная функция.
Anomaly
49 - 21.09.2004 - 17:05
(45) "поругание, поругание..." да никто его не ругает...Разве отшлепают чуть-чуть )))
P.s. Надеюсь, меня к монстрам не причисляют...)))
Вонрат
50 - 21.09.2004 - 17:07
45 Какое растерзание?! Идет полезный обмен опытом
38 У меня здесь (в этом здании) каждый день несколько человек выполняют обработку, которая по ОЛЕ открывает соседскую базу, забирает из неё документы, в некоторых случаях в процессе загрузки пользователь может прервать выполнение положительным ответом на вопрос типа "Такой документ уже есть. Прервать обработку?". В этом случае срабатывает "Отменить транзакцию()" и нифига не появляется из того, что было в начале транзакции
Maniac
51 - 21.09.2004 - 17:07
короче фиг с ним...работает же.
Рупор абсурда
52 - 21.09.2004 - 17:08
(46) Не из-за этого ...
Просто нет такого глюка ..., и не было никогда! ...
А Вонрат и Anomaly, просто про это не знают ...
EVS
53 - 21.09.2004 - 17:09
  Спр = СоздатьОбъект("Справочник.Объекты1С");
  а = 1;
  НачатьТранзакцию();
  а = 100;
               попытка
      Спр.Код = 1;
    исключение
      Сообщить(а);
    конецпопытки;
      
  ЗафиксироватьТранзакцию();
  
  Сообщить(а);
100
100
Вонрат
54 - 21.09.2004 - 17:09
Попробуй, докажи теорему типа "Этого нет и никогда не было"
А я вот могу привести контрпример - и все в шоколаде
Anomaly
55 - 21.09.2004 - 17:09
(52) неужели???? А как же тогда быть с невозможностью зафиксировать транзакцию?
Maniac
56 - 21.09.2004 - 17:10
(52) хех, Муму тоже с ними 8)
EVS
57 - 21.09.2004 - 17:11
Перем а;
  Спр = СоздатьОбъект("Справочник.Объекты1С");
  а = 1;
  
  НачатьТранзакцию();
  а = 100;
    попытка
      НачатьТранзакцию();
        а = 5;
        Спр.Код = 1;
      ЗафиксироватьТранзакцию();
    исключение
      Сообщить(а);
    конецпопытки;
      
  ЗафиксироватьТранзакцию();
  
  Сообщить(а);
5
5
Рупор абсурда
58 - 21.09.2004 - 17:11
(54)
Спр=СоздатьОбъект("Справочник.Номенклатура");
НачатьТранзакцию();
Попытка Х=1/0 Исключение Сообщить(":((") КонецПопытки;
Спр.Новый();
Спр.Наименование="ФЕЙХУА";
Спр.Записать();
ЗафиксироватьТранзакцию();
Вонрат
59 - 21.09.2004 - 17:14
54 -> 52
to(53) Транзакция нужна для цельного проведения update-а в таблицах БД, а не временных переменных. Поэтому А=100.
Вот если бы:
 Спр = СоздатьОбъект("Справочник.Объекты1С");
 Спр2 = СоздатьОбъект("Справочник.Объекты2С");
  а = 1;
  НачатьТранзакцию();
    Спр2.Новый();
    Спр2.Наименование="Ну ни *** себе!";
    Спр2.Записать();
    попытка
      Спр.Код = 1;
    исключение
      Сообщить(Строка(Спр2));
    конецпопытки;
      
  ЗафиксироватьТранзакцию();
      Сообщить("00"+Строка(Спр2));
----
то было бы
Ну ни *** себе!
00
Anomaly
60 - 21.09.2004 - 17:14
(58) может быть все дело в этом экзотическом фрукте, из которого в студенчестве варили такое...вкусное варенье... ))) Сейчас попробую контрпример соорудить...какие-то грабли все-таки есть.
Вонрат
61 - 21.09.2004 - 17:17
Да точно есть грабли. Я ж не во сне видел сообщение об ошибке: "Невозможно зафиксировать транзакцию"!(или что-то в этом роде)
EVS
62 - 21.09.2004 - 17:27
(59) А ты пробовал свой код?
у меня он другое показал...а именно
Ну ни *** себе!
00Ну ни *** себе!
Рупор абсурда
63 - 21.09.2004 - 17:34
(56) Фигня ... Пусть пока поживёт ...
Потом, когда мы её поймаем ..., она уже больше не всплывёт ...

К списку вопросов на форуме 1C

>>