Имя: Пароль:
1C
1С v8
Почему на этом коде зависает?
,
0 Лиза777
 
19.07.13
19:24
Здравствуйте.
У меня комплексная автоматизация. В общем модуле общего назначения есть процедура ПриУстановкеНовогоНомераДляДокументов(), у нас там было
ДобавитьПрефиксУзла(Префикс);

я поменяла на
Попытка
   Если Источник.Организация = Справочники.Организации.НайтиПоКоду("00003") Тогда        
       Если Источник.Подразделение = Справочники.Подразделения.НайтиПоКоду("00020    ")
           Тогда
           Префикс = "СцК";
       ИначеЕсли Источник.Подразделение = Справочники.Подразделения.НайтиПоКоду("КС0000009") Тогда
           Префикс = "СцН";
       ИначеЕсли Источник.Подразделение = Справочники.Подразделения.НайтиПоКоду("КС0000008")  Тогда
           Префикс = "СцТ";
       КонецЕсли;
   Иначе    
       ДобавитьПрефиксУзла(Префикс);
   КонецЕсли;
Исключение
   ДобавитьПрефиксУзла(Префикс);
КонецПопытки;

и после этого стало очень зависать проведение всех документов. С 20-й попытки только проводится, вываливается ошибка "конфликт блокировок при выполнении транзакции".

а что не так-то? ну мне надо префикс менять в зависимости от подразделения
1 Defender aka LINN
 
19.07.13
19:25
рукалицо...
2 WhiteCat
 
19.07.13
19:29
(0) О май гад...
3 WhiteCat
 
19.07.13
19:31
(0) Может прописать префикс в справочник "Подразделения"?
4 WhiteCat
 
19.07.13
19:35
+(3) И получать его запросом
5 Fragster
 
гуру
19.07.13
19:36
(3) прав


немного копроускорить можно так:

Организация00003 = XMLЗначение(Тип("СправочникСсылка.Организации"), "ТутУидОрганизацииСКодом00003"); // тут комментарий о том, что это за организация
... // тут остальные те, что НайтиПоКоду
Если Источник.Организация = Организация00003 Тогда
...
6 WhiteCat
 
19.07.13
19:37
+(4) Или вообще "зашить" префикс в код подразделения (например, последние 3 символа, или первые три символа, или вообще код будет префиксом подразделения - он, префикс, все равно ведь уникальный).
7 Defender aka LINN
 
19.07.13
19:37
(5) КАК ЭТО РАЗВИДЕТЬ??!
8 WhiteCat
 
19.07.13
19:38
(7) "РАЗ" что?
9 Fragster
 
гуру
19.07.13
19:42
(7) что, ускорение и независимость от кода непредопределенных данных не затрагивающее конфу. по хорошему, конечно, допреквизит/атрибут к подразделению надо, о чем я прямо сразу и написал.
10 WhiteCat
 
19.07.13
19:44
(9) Нафиг доп реквизит. Зашить префикс в код и не париться - доступно и на сервере и на клиенте, получается из базы элементарно, прям со ссылкой в комплекте уже идет.
11 Fragster
 
гуру
19.07.13
19:45
(10) а вдруг там еще 100500 мест с "найтипокоду" и если код поменять - все развалится?
12 Defender aka LINN
 
19.07.13
19:47
(9) Натрибуквы тут XML?
Ну и куда побежишь, когда будет все то же самое, но в другой базе, где ВНЕЗАПНО другой идентификатор?
13 WhiteCat
 
19.07.13
19:49
(11) Так то ты прав. Но ИМХО лучше найти глобально все эти "найтипокоду" и заменить на нормальные конструкции.
Для данного примера работать будет вот так:

Префикс = Источник.Подразделение.Код

Тормоза тут ИМХО идут как раз из-за строчек подобных
Если Источник.Подразделение = Справочники.Подразделения.НайтиПоКоду("00020    ")
14 WhiteCat
 
19.07.13
19:50
А вообще надо начать с расстрела кодера, который все это написал.
15 Fragster
 
гуру
19.07.13
19:50
(12) ну, оно работает сильно быстрее, чем найтипокоду. будет ОбъектНеНайден, да.
16 vvp91
 
19.07.13
19:55
> (13) Префикс = Источник.Подразделение.Код

Получение реквизита через точку - садись, два.
17 Defender aka LINN
 
19.07.13
19:56
(15) И сильно быстрее, чем ПолучитьСсылку, да?
Хотя что то, что то - это лютый, леденящий душу, невыразимый пипец
18 WhiteCat
 
19.07.13
19:57
(16) Ну запросом получай, кто мешает
19 Fragster
 
гуру
19.07.13
19:59
сделал замер
20 WhiteCat
 
19.07.13
20:00
(19) И как?
21 Fragster
 
гуру
19.07.13
20:00
(17) чем получитьссылку - сейчас добавлю в замер
22 Fragster
 
гуру
19.07.13
20:03
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ ПЕРВЫЕ 1
|    Организации.Код,
|    Организации.Ссылка
|ИЗ
|    Справочник.Организации КАК Организации
|ГДЕ
|    НЕ Организации.ЭтоГруппа";
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Код = Выборка.Код;
УИД = XMLСтрока(Выборка.Ссылка);

Повторов = 10000;

ТекДата = ТекущаяДата();
Пока ТекущаяДата() = ТекДата Цикл
   // ждем начала секунды, чтобы снизить погрешность;
КонецЦикла;
ТекДата = ТекущаяДата();
Для Сч = 1 По Повторов Цикл
   Орг = Справочники.Организации.НайтиПоКоду(Код);
КонецЦикла;
Сообщить("По коду: " + (ТекущаяДата()-ТекДата));

ТекДата = ТекущаяДата();
Пока ТекущаяДата() = ТекДата Цикл
   // ждем начала секунды, чтобы снизить погрешность;
КонецЦикла;
ТекДата = ТекущаяДата();
Для Сч = 1 По Повторов Цикл
   Орг = XMLЗначение(Тип("СправочникСсылка.Организации"), УИД);
КонецЦикла;
Сообщить("По уиду: " + (ТекущаяДата()-ТекДата));

ТекДата = ТекущаяДата();
Пока ТекущаяДата() = ТекДата Цикл
   // ждем начала секунды, чтобы снизить погрешность;
КонецЦикла;
ТекДата = ТекущаяДата();
Для Сч = 1 По Повторов Цикл
   Орг = Справочники.Организации.ПолучитьСсылку(Новый УникальныйИдентификатор(УИД));
КонецЦикла;
Сообщить("ПолучитьСсылку: " + (ТекущаяДата()-ТекДата));
23 Fragster
 
гуру
19.07.13
20:03
По коду: 47
По уиду: 0
ПолучитьСсылку: 0
24 Fragster
 
гуру
19.07.13
20:04
убираем по коду, увеличиваем итерации в 100 раз:

По уиду: 21
ПолучитьСсылку: 27
25 Fragster
 
гуру
19.07.13
20:05
если вынести из цикла тип(), то
По уиду: 16
ПолучитьСсылку: 27
26 vde69
 
19.07.13
20:10
почему ни кто не посоветовал быдло ускорение?


Если Источник.Организация.Код = "00003" Тогда        
  Если Источник.Подразделение.Код = "00020    " Тогда
     Префикс = "СцК";
27 Defender aka LINN
 
19.07.13
20:20
Defender aka LINN разрыдался и ушел в отшельники
28 Fragster
 
гуру
19.07.13
20:21
(26) это считывает объект, возможно не быстрее
29 Grobik
 
19.07.13
20:24
30 EvgeniuXP
 
19.07.13
20:37
(0) вас уволить нужно, за решение НайтиПоКоду... вы сколько времени учились? копейку в себя вложили? чтобы потом зарабатывать?
31 Defender aka LINN
 
19.07.13
20:45
(29) Так лучше?
32 Grobik
 
19.07.13
20:49
(31) Если бы я себя по пьяни баним, то многим людям бы не помог.

Нет — не лучше.
33 Defender aka LINN
 
19.07.13
20:50
(32) Это печально ©
34 Mitriy
 
19.07.13
20:52
я плакаю...
35 Grobik
 
19.07.13
20:57
"Если жизнь печальна, она не заслуживает даже называться жизнью." Эразм Роттердамский.

"Никто из нас не говорит, живя без бед, что счастием своим судьбе обязан он; когда же к нам заботы и печаль придут, готовы мы сейчас во всем винить судьбу." Филет Косский

"Печальна судьба человека, который смотрит на жизнь с высоты своих несчастий." Н.Голубов

"Жизнь по преимуществу печальна. А сразу потом умираешь"  Януш Леон Вишневский
36 wertyu
 
19.07.13
21:01
(0) ещё никто не писал, что это ужасно?
37 iHell
 
19.07.13
21:03
Параметры сеанса еще не предлагали ?
38 iHell
 
19.07.13
21:04
+ И регистр сведений - что типа произвольных параметров.
39 Grobik
 
19.07.13
21:05
(36) гугл "Отрезал себе член и умер от потери крови"
40 wertyu
 
19.07.13
21:06
(39) это был риторический вопрос )
41 Конфигуратор1с
 
19.07.13
21:07
злые вы, девушку зря обижаете. Видно же что 7шница
42 Grobik
 
19.07.13
21:07
Надеюсь Лиза уже забыла про свой вопрос.
43 wertyu
 
19.07.13
21:09
(42) тем более, что даже переделывать ничего не надо было )
44 МЮЛЛЕР
 
19.07.13
21:12
о май гад!!!
46 Grobik
 
19.07.13
21:15
(44) oh my God было Помогите сделать конфигурацию тут. Человек выкинул от коллекторской конторы базу на 1300 человек по башкортостану на 173 с копейками миллиона.
47 Жан Пердежон
 
19.07.13
21:16
(28) тебя ждали
48 wertyu
 
19.07.13
21:18
(47) вы о чём спорите? в КА для префиксов точно всё сделано, как и в УПП, и в УСО
50 МЮЛЛЕР
 
19.07.13
21:19
51 Grobik
 
19.07.13
21:19
(48) Если такой разносторонне образованный - пожалуйста ответь мне здесь v8: Документооборот КОРП для Украины
52 Жан Пердежон
 
19.07.13
21:20
+(47) промахнулся, это я (26)
53 wertyu
 
19.07.13
21:20
(46) видимо у них на собеседовании обязательное условие было - всё время быть обдолбанным )
54 Grobik
 
19.07.13
21:20
(50) Про меня все ясно, никогда не скрывался
55 Fragster
 
гуру
19.07.13
21:21
(47) кто ждал? где ждал?
56 wertyu
 
19.07.13
21:21
(51) я хз какой документооборот на Украине, посмотри в личку )
57 wertyu
 
19.07.13
21:22
(55) см (52) )
58 Grobik
 
19.07.13
21:22
Нафиг личку, если шариш пиши на емыл. Можно заработать.
59 wertyu
 
19.07.13
21:23
(58) хорошо, напишу тут: Самара, Россия )
60 Лиза777
 
20.07.13
19:22
(30)(36) что ж вы сразу "уволить", вы же тоже не сразу умным стали. Я вот потому и задала вопрос, что не знаю как такой код оптимизировать. Я вот не знала, что НайтиПоКоду это тормоз. Хотя стараюсь запросы использовать, так как это быстрее, но тут вот что-то не додумалась.
"Ужасно" наверное почти все сначала программировали, но потом научились.
(13) надо же я вот так не догадалась, попробую так.
Спасибо всем добрым людям, которые пытались помочь и подсказали!
61 NS
 
20.07.13
20:05
(41) А что, в семерке так принято писать?
А пустые циклы от одного до миллиона - там вставлять не принято?
62 NS
 
20.07.13
20:05
(60) Зачем что-то находить, если можно тупо в условии сравнить код?
63 Лиза777
 
20.07.13
20:45
(61) я на 7-ке не пишу давно. Я на 8-ке пишу
64 zak555
 
20.07.13
20:47
(63) ты сеййчас в какой краске ?
65 Красный рассвет
 
20.07.13
20:48
(63) Лучше на сап уйди...
66 Красный рассвет
 
20.07.13
20:50
+(65) или замуж
67 Конфигуратор1с
 
20.07.13
20:50
(61) не. в семерке не было предопределенных элементов. виде не раз когда служебные справочники так юзали через найти по коду.
68 zak555
 
20.07.13
20:51
(67) были,ввидеглабльных пермененных
69 Конфигуратор1с
 
20.07.13
20:52
(60) ""Ужасно" наверное почти все сначала программировали, но потом научились. " в 99% так и есть, только фиг кто признается)
а найти по коду - это тот же запрос, таким образом в (0) у тебя 4 маленьких запроса в каждом документе
70 Конфигуратор1с
 
20.07.13
20:53
(68) тем не менее были. кстати не только как глобальные переменные)
71 Красный рассвет
 
20.07.13
20:54
(67) В семерке грамотные люди заводили отдельный справочник для подобных вещей.
Ну главное что не по наименованию... По коду еще ничего))
72 Конфигуратор1с
 
20.07.13
20:58
(71) ну так и искали по коду.
73 Конфигуратор1с
 
20.07.13
20:59
жаль не осталось ни одной семерочной базы - там такого было много
74 zak555
 
20.07.13
21:00
(73) выкладывать бдгазпрома ? =)
75 Конфигуратор1с
 
20.07.13
21:00
(74) давай
76 Красный рассвет
 
20.07.13
21:02
(74) Номенклатура "Газ", код "0001"?
77 Конфигуратор1с
 
20.07.13
21:08
(76) ну ту сподручнее в константу если газ один, правда если у них газы то печаль
78 Красный рассвет
 
20.07.13
21:11
ну вот, девачка просто помощи хотела, а тут все такие злобные и еще какими-то константами пугают. Стыдно должно быть
79 zak555
 
20.07.13
21:11
на старомхарде =)
80 NS
 
20.07.13
22:28
(67) там есть константы, и если и искали - то никак не в этом случае.
Зачем тут искать элемент? Тут реквизит в справочнике завести надо. А если без изменения - то просто сравнить код.
81 Конфигуратор1с
 
20.07.13
23:04
(80) "там есть константы" - констант на все не хватит. Но я не о этом случае
82 Lama12
 
21.07.13
13:16
(0)Давай будем честными. Код в (0) вообще работает? Ну если не считать тормозов?
83 Лиза777
 
21.07.13
17:24
(82) работает, если не считать тормозов ))
84 Лиза777
 
21.07.13
17:29
(78) спасибо за поддержку!
85 Torquader
 
21.07.13
17:43
А не проще ли сляпать регистр сведений, где задать префиксы для подразделений ?
86 1s_ivan
 
21.07.13
17:46
Лиза777, когда нужно сделать связи между 2-мя справочниками, (спр-спр), или (спр-число) и прочие пользовательские соответствия, лучше всего подходят регистры сведений. При желании, можно сделать регистр сведений периодическими, и в нем будут вся история изменений.
Например для вашей задачи:
1.    Создайте регистр сведений «ПрефиксыПодразделенийОрганизаций» : 2 измерения («Организация»{спр.организаций.ссылка}, {«Подразделение» спр.подразделений.ссылка}): 1 ресурс («Префикс»{строка} )
2.    Получаете значение префикса по организации и подразделению (Не нужно объяснят как?)
3.    НО обязательно проверяйте, если в регистре нет такой комбинации, тогда выполняется стандартный ДобавитьПрефиксУзла(Префикс);
87 Лиза777
 
21.07.13
17:49
(86) ну да мне ваш вариант понятен, пока сделаю как в (26), завтра посмотрю как будет программа работать под нагрузкой
88 Lama12
 
21.07.13
18:43
(83) А мне кажется либо не весь код приведен, либо в случае организации с кодом "00003" префикс узла не добавится, т.к. в этой ветке условия нет ДобавитьПрефиксУзла(Префикс);
89 1s_ivan
 
21.07.13
21:38
(88) думаю ошибки нет, ведь смысл в том, чтобы менять значение переменной "Префикс".
90 unkairosed
 
22.07.13
02:21
Про борщ уже кто-то писал?
Программист всегда исправляет последнюю ошибку.