![]() |
![]() |
![]() |
|
v8: У меня появились дубли уникального кода, что делать? | ☑ | ||
---|---|---|---|---|
0
Гений 1С
гуру
18.08.06
✎
17:29
|
У меня есть некий справочник, пусть товары, есть поле "Уникальный код", в нем должен быть уникальный числовой код.
В событии перед записью я брал максимальный уник.код, увеличивал его на единицу, записывал элемент. Но вот по журналу регистрации сегодня в 14.00 два пользователя завели два договора с одинаковым кодом, разница в 2-3 секунды. Как это побороть? Знакомый предлагает константу завести, где хранить текущий номер договора. А по другому никак нельзя? |
|||
1
Господин ПЖ
18.08.06
✎
17:31
|
(0) Константа не спасет. Один создал элемент с ориентацией на константу еще не записл, второй создал - одинаковые номера.
|
|||
2
avmlvm
18.08.06
✎
17:31
|
(0) А поставить "галочку" уникальности кода - нельзя?
|
|||
3
Херрес
18.08.06
✎
17:31
|
использовать поле справочника Код
|
|||
4
MikleV
18.08.06
✎
17:33
|
В событии перед записью я брал максимальный уник.код, увеличивал его на единицу, записывал элемент.
блокировать записи.если брал запросом. |
|||
5
Гений 1С
гуру
18.08.06
✎
17:36
|
(2)(3) Блин, ну если бы можно было использовать код, я бы вопросы не задавал
|
|||
6
Гений 1С
гуру
18.08.06
✎
17:36
|
Код уже занят (так исторически сложилось)
|
|||
7
Гений 1С
гуру
18.08.06
✎
17:36
|
(4) аналогично, но дубли появились
|
|||
8
Херрес
18.08.06
✎
17:36
|
(6) ну используй тогда суррогатный справочник только для генерации кода
|
|||
9
Гений 1С
гуру
18.08.06
✎
17:37
|
(2)(3) Подход 1с-ников: Как доехать из питера в москву на лошади? Зачем на лошади, если есть поезд...
|
|||
10
Гений 1С
гуру
18.08.06
✎
17:37
|
(8) гыгыгы, ну это ваще офигенный совет - типа вырезать гланды через задницу...
Не кажется ли, что это из пушки по воробьям |
|||
11
Гений 1С
гуру
18.08.06
✎
17:38
|
Кто тут в транзакциях силен?
|
|||
12
MikleV
18.08.06
✎
17:38
|
(7) на основании уникального кода элемента делать преобразовнаие в число..
или тебе по возрастанию надо? |
|||
13
Херрес
18.08.06
✎
17:38
|
(10) используй ГУИД
|
|||
14
avmlvm
18.08.06
✎
17:40
|
(6) ё-ё-ё.. на основании уникального кода справочника (поле Код) получить новый уникальный код??? хм-м-м.. и чЁ?? Это так сложно???
|
|||
15
avmlvm
18.08.06
✎
17:41
|
(13) тс-с-с.. Про ГУИДы гении ещё не знают :-)))
|
|||
16
Гений 1С
гуру
18.08.06
✎
17:41
|
(14) Блин, неужели 1С так ограничивает восприятие?
В нашей ситуации код часто меняется пользователями! Сказано же - забудьте про код |
|||
17
Гений 1С
гуру
18.08.06
✎
17:42
|
(15) Опять в молоко. Заказчик отказался от GUID, хоть ему и было предложено.
Давайте не будем обсуждать ТЗ... |
|||
18
Гений 1С
гуру
18.08.06
✎
17:42
|
ТЗ блин все умеют обсудить, а вот как реально разрулить в транзакции генерацию кода, слабо придумать...
|
|||
19
Гений 1С
гуру
18.08.06
✎
17:43
|
(12) по возрастанию, под число всего 5 разряддов - много ты из Гуида напреобразуешь? 3 разряда под префикс базы... Менять ничего нельзя - работа по ТЗ
|
|||
20
Гений 1С
гуру
18.08.06
✎
17:45
|
(0) Добавляю, что код генерю только у новых элементов...
|
|||
21
avmlvm
18.08.06
✎
17:48
|
(16) Нет... 1С развивает фантазию...
Варианты А - запретить менять код пользователям (код это не игрушка для баловства) Б - разрешить менять, но поставить признак уникальности... При это твой "уникальный код - не менять... Уникальность твоего кода - гарантируется В - прекращай "канифолить" мозги... Транзакции тебе не помогут... :-) |
|||
22
Гений 1С
гуру
18.08.06
✎
17:51
|
(21) У меня просто нет слов. Заказчик хочет крокодила, а ему настойчиво втюхивают обезьяну, утверждая, что крокодила достать невозможно, что за странный подход?
А если бы мне нужно было служебное поле кроме кода, ты бы тоже меня кодом напрягал??? |
|||
23
Гений 1С
гуру
18.08.06
✎
17:51
|
Может быть вынести из передЗаписью в ПриЗаписи() ???
|
|||
24
Господин ПЖ
18.08.06
✎
17:53
|
Дать каждому контрагенту свой префикс?
|
|||
25
MikleV
18.08.06
✎
17:53
|
(23) не думаю что поможет.хотя вероятность возникновения дублей сократит
|
|||
26
Гений 1С
гуру
18.08.06
✎
17:54
|
(24) Господа. Пожалуйста в рамках ТЗ.
Префикс и так есть 3 буквы - префикс базы, 5 букв - число кода. |
|||
27
Гений 1С
гуру
18.08.06
✎
17:55
|
Должна быть некая служба выдачи кодов, типа:
Код-Ссылка Т.е. какой код выдан для какой ссылки. |
|||
28
Гений 1С
гуру
18.08.06
✎
17:55
|
И выполняться строго последовательную выдачу кодов
|
|||
29
avmlvm
18.08.06
✎
17:55
|
(22) У меня слов нет.. Заказчик хочет крокодила.. Вы умеете рожать только мышат.. Но тем не менее всё же берётесь "сделать" крокодила... Хм-м-м... чЁ? Разве другой развлекухи нет???
Короче... Если Вам Заказчик указывает чЁ делать вплоть до полей.. вплоть до кода - Вы не програмЁры, а кодеры... Тогда молча кодируйте чЁ говорит Заказчик и не канифольте мОзги окружающим... |
|||
30
Гений 1С
гуру
18.08.06
✎
17:57
|
(29) АВМЛВМ, ты реально тупишь и мне некогда тебе объяснять почему. Извини, я не могу прийти к заказчику и сказать - прости заказчик, я всего лишь тупой 1С-ник и не могу придумать, как управлять транзакциями, чтобы генерить уникальный код, поэтому будет не уникальный код, а ....
|
|||
31
Гений 1С
гуру
18.08.06
✎
17:58
|
Думается должна быть такая хрень
Функция ПолучитьУникальныйКод() Экспорт НачатьТранзакцию(); Сч=Константы.Счетчик.Получить(); Константы.Счетчик.Установить(Сч+1); ЗафиксироватьТранзакцию(); Возврат Сч; КонецФункции Вы согласны или нет??? |
|||
32
MikleV
18.08.06
✎
18:00
|
(31) а чиво тогда мозги морочил?)
|
|||
33
avmlvm
18.08.06
✎
18:03
|
(30) Твоя не способность понять очевидное - это даже не тупость это хуже...
Надеюсь всё же что это не летально и ты всё же от этого излечишься... :-) Короче... Если ты у Заказчика на таком "поводке" - то не выёживайся и делай чЁ он говорит.. или меняй стиль работы (да и общения тоже) |
|||
34
Гений 1С
гуру
18.08.06
✎
18:06
|
(33) Какие мы крутые, а написать простой код по генерации номеров не умеем, зато "лечить" заказчика - за милую душу. Заказчик хочет нормальные вещи, почему я должен обманывать его, что это не возможно? Это у франчайзей такие методы?
|
|||
35
Гений 1С
гуру
18.08.06
✎
18:07
|
(32) Счас вот придумал, но сомневаюсь, НачатьТранзакцию открывает глобальную транзакцию или как?
|
|||
36
Гений 1С
гуру
18.08.06
✎
18:09
|
(33) Кроме "очевидных" вещей есть и такие неочевидные вещи, как сложившиеся стереотипы, не всегда "последние, крутые, супер-пупер, универсальные" вещи ложатся на бизнес-процессы клиента, учите матчасть.
(31) так 31 будет работать или нет? |
|||
37
Гений 1С
гуру
18.08.06
✎
18:11
|
А можно сделать так?
В модуле ПриЗаписи написать так: Процедура ПриЗаписи() Если УнКод=Неопределено Тогда НачатьТранзакцию(); УнКод=ПолучитьУникальныйКодАнализомМаксКодаВСправочнике(); ЭтотОбъект.Записать(); ЗафиксироватьТранзакцию() КонецЕсли; КонецПроцедуры Только еще зацикливания избежать... |
|||
38
Гений 1С
гуру
18.08.06
✎
18:11
|
Тогда без константы будет?
|
|||
39
Херрес
18.08.06
✎
18:11
|
(36) ну будет.
Хотя гарантии уникальности не даст |
|||
40
Гений 1С
гуру
18.08.06
✎
18:16
|
(39) почему это не дает, ведь транзакция идет!!!
|
|||
41
avmlvm
18.08.06
✎
18:18
|
(34) Не тупи... иначе придётся сменить ник "Гений 1С" на "Бестолочь 1С"
млин.. не знать элементарного... Я в шок.... Запомни на всю жизнь.. Транзакция (от англ. transaction) — группа операций, которая может быть выполнена либо полностью успешно, соблюдая целостность данных и независимо от параллельно идущих других транзакций, либо не выполнена вообще и тогда она не должна произвести никакого эффекта. ru.wikipedia.org/wiki/Транзакция Транзакция гарантирует ЗАКОНЧЕННОСТЬ и ЦЕЛОСТНОСТЬ.. а не уникальность... Короче...ё-ё-ё-ё-ё.. Как всё запущено... |
|||
42
avmlvm
18.08.06
✎
18:19
|
(39) млин... во-во... "маЛчишка" не знает сути понятия транзакции...
|
|||
43
Гений 1С
гуру
18.08.06
✎
18:20
|
(41) Ответь за базар, смоделируй мне ситуацию, когда появятся дубли... и попроси извинения
|
|||
44
Херрес
18.08.06
✎
18:20
|
Эта, друзья. Давайте не ссориться. Пятница, конечно, все устали... Выпьем, няня, кружку пива.
|
|||
45
Гений 1С
гуру
18.08.06
✎
18:21
|
(42) ты в курсе, что вторая транзакция не сможет начаться, пока не закончится первая, а когда первая закончится, счетчик уже увеличится на единицу. Гнилые понты!
|
|||
46
avmlvm
18.08.06
✎
18:22
|
(40) Если тебе нужно что бы не было такого как (0) то только "блокировка" тебя спасёт... Т.е. блокируешь от любого доступа константу и из неё берёшь код и автоинкрементом.. При этом обращение к константе должно идти с исключением (ну что бы не вываливалось, а повторяло попытку
Короче... Это проходят "в детском садике" при изучении раздела написания драйверов устройств :-) |
|||
47
avmlvm
18.08.06
✎
18:24
|
(45) НЕ ПРАВ... Не путай блокировку и транзакцию...
Любая транзакция может идти в параллель с любым числом других транзакций.. Пример - баковская транзакция банкомата начинается одновременно с тысячами других транзакций.. но есть гарантия, что если сбой авторизации, то данная транзакция откатится, а другие будут "не тронутые"... ЗЫ.. Это же элементарно.. Ватсон (с) |
|||
48
Гений 1С
гуру
18.08.06
✎
18:24
|
(46) вот тебе дядя, метод без всяких констант, взраслей:
Процедура ПриЗаписи(Отказ) Если ЭтотОбъект.ОбменДанными.Получатели.АвтоЗаполнение и не ЭтотОбъект.ОбменДанными.Загрузка Тогда //fixin 20060728 Уникальный код договора Если Не Отказ И НЕ ЭтоГруппа Тогда //Префикс кода Если ЗначениеНеЗаполнено(УникальныйКод) Тогда НачатьТранзакцию(); Префикс = СокрЛП(ПланыОбмена.Подразделения.ЭтотУзел().Код); УникальныйКод=обПолучитьНовыйКод(Метаданные.Справочники.Договоры, Префикс, "УникальныйКод", Метаданные.Справочники.Договоры.Реквизиты.УникальныйКод.Тип.КвалификаторыСтроки.Длина); //Этот метод без транзакций, просто максимальный код в справочнике ЭтотОбъект.ОбменДанными.Загрузка=истина; //чтобы не циклился ЭтотОбъект.Записать(); ЭтотОбъект.ОбменДанными.Загрузка=ложь; //Возвращаем назад ЗафиксироватьТранзакцию(); Запрос=Новый Запрос("ВЫБРАТЬ | Договоры.Код |ИЗ | Справочник.Договоры КАК Договоры |ГДЕ | Договоры.УникальныйКод = &УникальныйКод"); Запрос.УстановитьПараметр("УникальныйКод", УникальныйКод); Если Запрос.Выполнить().Выбрать().Следующий() Тогда Сообщить("Нарушена последовательность кодов, не могу установить код нового договора: "+УникальныйКод, СтатусСообщения.Внимание); Отказ=истина; Возврат; КонецЕсли; КонецЕсли; КонецЕсли; обРегистрацияИзменений(ЭтотОбъект, ЭтотОбъект.Подразделение); КонецЕсли; КонецПроцедуры Так что не надо гения учить... Что ты там говорил про Бестолочей 1С? |
|||
49
Гений 1С
гуру
18.08.06
✎
18:25
|
(47) У меня явно написано НачатьТранзакцию - так что ясно речь идет о блокировке, не отмазывайся...
|
|||
50
Гений 1С
гуру
18.08.06
✎
18:25
|
Граждане (48) гарантирует уникальность или нет???
|
|||
51
avmlvm
18.08.06
✎
18:26
|
(49) млин.. БЛОКИРОВКА <> Транзакция...
читай медлено.. и запомни на ВСЕГДА... Транзакция (от англ. transaction) — группа операций, которая может быть выполнена либо полностью успешно, соблюдая целостность данных и независимо от параллельно идущих других транзакций, либо не выполнена вообще и тогда она не должна произвести никакого эффекта. Особенно читай и перечитывай: "независимо от параллельно идущих других транзакций"... О-о-о-чень полезно :-)))) |
|||
52
Гений 1С
гуру
18.08.06
✎
18:27
|
Другими словами, могут ли два пользователя одновременно начать транзакцию?
Если не смогут, ежу понятно, что уникальность будет. В 77 нельзя было успешно выполнить НачатьТранзакцию на двоих машинах сразу... В 80 так же??? |
|||
53
Гений 1С
гуру
18.08.06
✎
18:28
|
(51) Не "лечи" меня пожалуйста, речь не о теории, я тебе задал конкретный вопрос про функцию в (31), ты ступил, а счас отмазываешься... Тупи дальше...
|
|||
54
Херрес
18.08.06
✎
18:28
|
(51) ну вообще же по идее в момент исполнения ПриЗаписи, запись справочника будет заблокирована платформой, значит всё ок ?
|
|||
55
Гений 1С
гуру
18.08.06
✎
18:28
|
(50) потому как с константами в распределенке возиться неохота...
|
|||
56
Гений 1С
гуру
18.08.06
✎
18:29
|
(54) Без НачатьТранзакцию будет заблокирована вся таблица справочника договоры или только одна запись??? если вся таблица - не вопрос, сработает. Если только текущая запись - возможна конкуренция
|
|||
57
Гений 1С
гуру
18.08.06
✎
18:29
|
НачатьТранзакцию гарантированно дает уник.код по идее, если верно (52)
|
|||
58
avmlvm
18.08.06
✎
18:30
|
(52) Однозначно.. МОГУТ.. И два и три и сто
(53) я тебе конкретно ответил - чушь.. Поставленой цели приведённый код НЕ РЕШАЕТ |
|||
59
Херрес
18.08.06
✎
18:30
|
(56) да вообще наличие НачатьТранзакцию не повлияет на то, что будет заблокировано.
|
|||
60
avmlvm
18.08.06
✎
18:31
|
(52) Читай камасутру по 1С... А именно разделы "блокировки на уровни записи" и "блокировки на уровне таблиц"... В дбф-варианте - блокировки идут на уровне таблиц...
|
|||
61
Гений 1С
гуру
18.08.06
✎
18:32
|
(60) У меня СКЛ-версия
|
|||
62
Гений 1С
гуру
18.08.06
✎
18:32
|
(60) Хочешь быть полезным - ответь на (52)
|
|||
63
avmlvm
18.08.06
✎
18:32
|
(59) млин.. Одна (транзакция) нужна только для копускулярности записи данных.. Типа или записано всё или ничего.. И ВСЁ...
|
|||
64
Гений 1С
гуру
18.08.06
✎
18:33
|
(63) ты хочешь сказать, что в 80 НачатьТранзакцию не вызывает блокировок? А есть методы для блокировок???
|
|||
65
Гений 1С
гуру
18.08.06
✎
18:35
|
гы, а для констант метода Заблокировать нет... ;(
|
|||
66
Херрес
18.08.06
✎
18:36
|
(65) по идее можно сделать запрос со словом ДЛЯ ИЗМЕНЕНИЯ
|
|||
67
avmlvm
18.08.06
✎
18:37
|
(64) дурью не майся... :-)))
Это БЛОКИРОВКА - Объект = Справочник.Номенклатура.НайтиПоКолу(1).получитьОбъект(); Попытка Объект.Заблокировать(); Исключение Сообщить ("Данные заблокированы"); КонецПопытки; ЗЫ.. Если конечно это тебе поможет :-))) |
|||
68
avmlvm
18.08.06
✎
18:38
|
(64) Да.. именно это я и хочу сказать...
(65) Заведи справочник - в чем проблема??? Для "заблокировать" нужны ОБЪЕКТНЫЕ данные 1С |
|||
69
Гений 1С
гуру
18.08.06
✎
18:38
|
(67) Очередной ПЕРЛ - вместо константы предлагаешь использовать справочник, молодец, гыгыгы...
|
|||
70
Гений 1С
гуру
18.08.06
✎
18:39
|
(68) Вот видишь, а ты плакался, что задачу средствами 1С решить нельзя...
|
|||
71
avmlvm
18.08.06
✎
18:39
|
(69) я тебе предлагаю использовать ОБЪЕКТНЫЕ данные.. Или ты не знаешь что это такое???
|
|||
72
avmlvm
18.08.06
✎
18:40
|
(70) дай ссылку на такое моё утверждение...
Я лишь говорил, что ты не туда "ломишься" |
|||
73
Гений 1С
гуру
18.08.06
✎
18:40
|
(72) Да, ты предлагал ТЗ поменять и т.п.
|
|||
74
Гений 1С
гуру
18.08.06
✎
18:41
|
(71) Не оправдывай 1С, которая не догадалась что может понадобиться заблокировать весь справочник целиком и дать для этого метод, а также метод для блокировки констант....
|
|||
75
Гений 1С
гуру
18.08.06
✎
18:41
|
(73) весьма продвинутые способы решения задач клиента...
|
|||
76
avmlvm
18.08.06
✎
18:41
|
(73) Опять не умеешь читать.. Я говорил, что описаные тобой "взаимоотношения" с Заказчиком указывают на большие проблемы...
|
|||
77
avmlvm
18.08.06
✎
18:42
|
(74) Константы необъектный тип данных.. поэтому их пофик блокировать...
|
|||
78
Гений 1С
гуру
18.08.06
✎
18:46
|
(77) видимо ты хочешь сказать, что они хранятся не в базе данных, да, умник?
|
|||
79
Гений 1С
гуру
18.08.06
✎
18:47
|
Типо константы - это вещь в себе! гут... А ситуации, когда два процесса конкурируют по константе, ты вообразить себе не можешь?
|
|||
80
avmlvm
18.08.06
✎
18:51
|
(78) млин.. "учу 1С - гение за дорого" :-)))
объектными данными например являются: - Справочник - Документ - План видов характеристик - и т.д. необъектными данными являются например: - константы - регистры сведений - регистры накопления - и т.д. С какого "перепуга" ты решил, что необъектные данные не храняться а БД??? |
|||
81
Кандидат
18.08.06
✎
18:51
|
Извините, горячие финские парни, а может быть стоит сделать так:
УникальныйКод = ТекущееВремя()? И на этом закончить? |
|||
82
Кандидат
18.08.06
✎
18:53
|
Кто скажет точно с точки зрения теории вероятности, какого будет совпадение кодов в распределенке, скажем, из 10 узлов?
|
|||
83
Бубузяка
18.08.06
✎
19:03
|
Может использовать регистр сведений с одним измерением?
Пусть код живет в измерении - это гарантирует уникальность. В рессурсы можно кинуть ссылку на договор. При записи договора легко получить макс. значение и добавить 1. При удалении ссылки отловишь запись и удалишь. Что бы было хорошо с блокировкой, получай макс. код запросом с дерективой "ДЛЯ ИЗМЕНЕНИЯ" регистра кодов. Тема УРИБ требует префиксов. |
|||
84
Кандидат
18.08.06
✎
19:04
|
(83) УникальныйКод = КодСправочника+Строка(ТекущееВремя())
|
|||
85
Кандидат
18.08.06
✎
19:06
|
Какие регистры? Какие реквизиты? Все должно быть просто!!!!!!
|
|||
86
Бубузяка
18.08.06
✎
19:07
|
(84) Ну, если сквозная нумерация не нужна... Можно еще штрихкод генерить.
|
|||
87
avmlvm
18.08.06
✎
19:08
|
(84) у него ограничение на длину...
(26) "Префикс и так есть 3 буквы - префикс базы, 5 букв - число кода" При таких рамках ТекущееВремя() - нИкатит... |
|||
88
Кандидат
18.08.06
✎
19:09
|
(86) Речь идет про уникальность, про сквозную нумерацию здесь ничего не говорили...
|
|||
89
France
18.08.06
✎
19:09
|
руки прочь от транзации..
лучше уж про семафоры вспомнить. |
|||
90
Кандидат
18.08.06
✎
19:19
|
А если так:
УникальныйКод = Месяц(2знака) + День(2знака) + минуты(2знака) + Секунды(2знака) Без префиксов! Префиксы нужны только для соблюдения уникальности / ну и для того чтоб понять, где был создан элемент - это увидим из кода справочника |
|||
91
avmlvm
18.08.06
✎
19:23
|
(90) угу.. и в следующем году имеем гимор с уникальностью...
кстати.. префикс нужен из-за УРИБД.. Если от него отказываемся, то наступаем на грабли что после обмена не понятно где чей код.. И нет гарантий, что такой же код не придёт от другой база (все работают в теже рабочие дни и в тоже рабочее время) |
|||
92
Кандидат
18.08.06
✎
19:29
|
(91) Интересно сколько лет тебе понадобится, чтоб поиметь гемор. Вероятность совпадения: 0,00000003171. Три СТАМИЛИОННЫХ!!!!
|
|||
93
France
18.08.06
✎
19:35
|
(45) не ожидал от тебя - про вторую транзакцию..
|
|||
94
Neco
18.08.06
✎
20:28
|
(90) Вероятность что несколько пользователей одновременно будут вводить данные в одну и теже секунду очень велика, особенно если много пользоватлей, так что код в (81) и (90) не надежен. Такое проходили с регистром сведений с периодичность в секунду.
Код (48) вроде как хорош, пока никаких "багов" не видно. ЗЫ: можно конечно справочник привязать какому либо "внутреннему" документу, который и будет нумеровать уникальный код. Т.е. при создании элемента справчоники создавать документ, который номер которого и дает "УникальныйКод". Но это так из области фантастики |
|||
95
asady
18.08.06
✎
20:36
|
(0) службу выдачи уникальных номеров можно организовать на базе РегистраСведений
Измерение: ДержательНомера: ДокументСсылка Номер: Строка(Число); Ресурс: Статус: ПеречислениеСсылка.ВидыСтатусовСлужбыВыдачиНомеров; Независимый Непериодический. При вводе нового документа Запись РС ДержательНомера=ДокументКоторыйОткрыли; Номер=НомерКоторыйПолучили; Статус=Перечисления.ВидыСтатусовСлужбыВыдачиНомеров.Зарезервирован; При записи нового документа Запись РС ДержательНомера=ДокументКоторыйОткрыли; Номер=НомерКоторыйПолучили; Статус=Перечисления.ВидыСтатусовСлужбыВыдачиНомеров.Использован; При отказе от записи: ДержательНомера=ДокументКоторыйОткрыли; Номер=НомерКоторыйПолучили; Статус=Перечисления.ВидыСтатусовСлужбыВыдачиНомеров.Свободен; |
|||
96
asady
18.08.06
✎
20:38
|
(95)+ а функцию ПолучитьУникальныйНомер() наверное сам догонишь.
|
|||
97
asady
18.08.06
✎
20:40
|
(96) как получить ссылку для незаписанного документа наверное знаешь?
|
|||
98
France
18.08.06
✎
20:44
|
эта..сам насам чтоли?
|
|||
99
asady
18.08.06
✎
20:48
|
(83) Бубузяка дал правильное направление. Измерение ДержательНомера вполне можно перенсети в ресурс.
|
|||
100
clappa
18.08.06
✎
20:53
|
(0) Если увеличивать максимальный номер на случайное число от 1 до 100, вероятность появления дублей уменьшится в 100 раз.
|
|||
101
clappa
18.08.06
✎
20:59
|
(100) Кстати, 100
|
|||
102
clappa
18.08.06
✎
21:04
|
А если серьёзно, то правильное решение в (3) - использовать Код. И завести дополнительный реквизит "ИсторическиСложившийсяКодДляИзмененияПользователями". Заказчик не заметит подмены ;-)
|
|||
103
asady
18.08.06
✎
21:11
|
(102) и надо будет править еще и журналы доков чтобы юзеры не узрели истинный номер, а пялились на подставной!
|
|||
104
asady
18.08.06
✎
21:14
|
(103)+ еще придется править печатные формы чтобы на печать выходили "правильные " номера.
|
|||
105
Гений 1С
гуру
21.08.06
✎
09:52
|
(94) Типовая служба выдачи кодов в 1С не обрабатывает эту ситуацию, т.е. если на двух машинах завести например карточку товара, то код будет у них одинаковый, просто он не запишется из-за контроля уникальности.
|
|||
106
Гений 1С
гуру
21.08.06
✎
09:53
|
(95) тогда уж проще через элемент справочника и функции Блокировать, Разблокировать - блокировать элемент на момент записи элемента в базу...
|
|||
107
Гений 1С
гуру
21.08.06
✎
09:54
|
(102) какой ты умный, код уже используется... я писал выше... на колу мочало, начинай с начала.
Сказано - ни код, ни ГУИД не катят... |
|||
108
Гений 1С
гуру
21.08.06
✎
09:55
|
если бы можно было поставить на поле УникальныйКод галку - уникальность, я бы забил на все. А так даже если я буду делать проверку при записи, есть вероятность появления дублей...
Проверка сработала одновременно - затем одновременно записалась |
|||
109
avmlvm
21.08.06
✎
09:55
|
(107) ты не умничай :-)))
Ты давай код, который в итоге написал... посмотрим и повосхищаемся :-))) |
|||
110
Гений 1С
гуру
21.08.06
✎
09:57
|
(109) Пока я забил - не горит ведь... Жду умных мыслей...
|
|||
111
Гений 1С
гуру
21.08.06
✎
09:57
|
не охота ради одного кода заводить регистр... или справочник...
Блин, такие надежды были на (48), а обломс |
|||
112
avmlvm
21.08.06
✎
09:59
|
(110) хм-м.. А зачем "заводить" регистр??? ё-ё-ё.. неужели не понятно??? Ведь всё уже расжевали.. чЁ нужно и в рот положить и проглатить за тебя???
|
|||
113
Гений 1С
гуру
21.08.06
✎
10:03
|
(112) пока не вижу пережеванных результатов... Ты хоть намекни, о чем жевали...
|
|||
114
avmlvm
21.08.06
✎
10:15
|
(113) Как всё запущено :-)))
(тяжко вздыхая) повторяем для особо одарённых :-))) шаг 1. Организуешь цикл, по условию которое возвращает функция, Т.е. функция "крутится" в цикле, пока на получит "Истина" - это понятно? шаг 2. Внутри своей функции, ты с в своём справочнике ищешь элемент (объект) имеющий максимальный использованный код и "открываешь" блок "попытка" -> "исключение" в котором ты будешь блокировать данный объект - это понятно? шаг 3. после "внутри "попытки" после блокировки, ты увеличиваешь на единицу мак. номер и "заполняешь" его в своё поле, снимаешь блокировку и возвращаешь "истину" - понятно? шаг 4. внутри исключения - ничего не делаешь, а только возвращаешь "ложь" Короче... Это же элементарно, Ватсон... чЁ тут "неделю" мучатся??? :-))) |
|||
115
kuzen
21.08.06
✎
10:20
|
Блокировка=1;
Пока Блокировка=1 Цикл Попытка НачатьТранзакцию(); Константа.УникальныйКод=Константа.УникальныйКод; Блокировка=0 Исключение ОтменитьТранзакцию(); Блокировка=1; КонецПопытки; КонецЦикла; Константа.УникальныйКод=Число(Константа.УникальныйКод)+1; ЗафиксироватьТранзакцию(); |
|||
116
Гений 1С
гуру
21.08.06
✎
10:21
|
(114) а если этот объект заблокирован пользователем? Вполне вероятно, что карточка еще открыта, пользователь нажал записать???
Блокировать предопределенный условный элемент справочника? |
|||
117
Гений 1С
гуру
21.08.06
✎
10:22
|
(114) кстати, это ты сейчас написал, ранее такого не было, так что не вздыхай
|
|||
118
Гений 1С
гуру
21.08.06
✎
10:22
|
(115) транзакция <> блокировка, иначе бы меня устроило (48)
|
|||
119
avmlvm
21.08.06
✎
10:24
|
(116) Для этого и нужен цикл.. Пока всё не пройдёт ОК у тебя "поиск максимального" и попытка блокировки будут продолжаться...
Блокировать можно ЛЮБОЙ элемент справочника... (117) Конечно же не было.. Я же тебя "подводил" к коду.. намекал.. ждал что ты сам "сообразишь" :-))) |
|||
120
Neco
21.08.06
✎
10:31
|
(105) Так это тебе и нужно! Просто, если, возникат не уникальность из-за кода при записи увеличиваешь код на 1 и пытаешься записать еще раз.
|
|||
121
Гений 1С
гуру
21.08.06
✎
10:38
|
(120) Нет, товарищ, уже писал, контроль уникальности если происходит одновременно пропустит код, т.е. нет гарантии уникальности!
(119) Ггыгыгы, это ты называешь разжевать? Не уверен, что твой метод правильный (писал уже, запись с макс.кодом может быть заблокированной по другой причине), разве что если блокировать спец. элемент справочника. |
|||
122
Гений 1С
гуру
21.08.06
✎
10:43
|
Кстати, блокировка живет до момента разлогинивания пользователя, который ее вызвал? Как бы не пришлось всем пользователям подвиснуть, ожидая нового кода, если вдруг чего не так будет с блокировкой?
|
|||
123
avmlvm
21.08.06
✎
10:49
|
(122) хм-м-м.. лично я бы за использование блокировок "без нужды" - убивал бы :-)))
Но есть вы совместно со своим заказчиком - такие "извращенцы" - то это имхо наиболее оптимальный выход... Если боишься "вечной блокировки" поставь отсечку на количество "оборотов цикла".. ну-у-у.. если за 200 кругов "всё так плохо" - то соответствующее сообщение с просьбой искать проблему в консерватории :-))) " Не уверен, что твой метод правильный " хм-м-м.. "не уверен - не обгоняй"... Тут не в больнице - тут не обманут :-)) Другая причина блокировки - пофик... ты при следующем "влёте" просто всегда будешь выбирать макс. номер.. на поиск - блокировка не мешает, так же как и причина этой блокировки... Короче... не выёживайся.. и кончай канифолить мОзги :-))) |
|||
124
Гений 1С
гуру
21.08.06
✎
10:52
|
Мне больше импонирует другой метод. Не подскажете по нему?
Т.е. я завожу констанут - ПолучательУникальногоКода. В ней храню ссылку на объект, который получает в данный момент код. При получении уник.кода я устанавливаю в этой константе ссылку на элемент. При завершении получении кода я сбрасываю константу. Чтобы избежать зацикливания, можно проверять, что если запись закончилась, то сбрасывать константу, даже если она не пустая. Но как определить, что запись уже завершена? По непустому уникальному коду наверное, надо подумать... |
|||
125
Гений 1С
гуру
21.08.06
✎
10:53
|
(123) Заказчик не извращенец - вполне нормальное пожелание...
|
|||
126
Гений 1С
гуру
21.08.06
✎
10:53
|
(124) единственно - боюсь конкуренции и зацикливания, придется делать случайные паузы...
|
|||
127
ottto
21.08.06
✎
10:57
|
Я бы завел префик на пользователей :)
|
|||
128
ottto
21.08.06
✎
10:59
|
+(127) В параметрах сеанса или глобально переменной, запоминал бы какой последний код был у этого пользователя
|
|||
129
Triumph
21.08.06
✎
11:03
|
Если база на основе SQL-сервера, я бы посоветовал создать ключ по этому полю. Работает)
|
|||
130
avmlvm
21.08.06
✎
11:04
|
(124) это классический семафор.. Но проблема в том, что всё равно нет гарантии, что два юзера "одновременно" проверили, что константа пуста и одновременно произвели туда запись (уверенные, что они "одиноки")...
Короче... ты не можешь гарантировать, что запись в константу произошла только от одного "пользователя"... это проблема на уровне платформы для всех необъектных данных... И ты эту проблему так просто (и гарантированно) - НЕ РЕШИШЬ... (126) ё-ё-ё.. если ещё начнёшь "развлекаться" со случайными паузами - вообще труба будет... |
|||
131
Bahmet
21.08.06
✎
11:08
|
(0)А программно подвязать нумератор не дано???
|
|||
132
Гений 1С
гуру
21.08.06
✎
11:10
|
(127) нельзя по условиям задачи.
(130) Проверка после записи - изменилось ли значение семафора... |
|||
133
Bahmet
21.08.06
✎
11:10
|
//Фрагмент 1
Объект1 = Справочники.Номенклатура.СоздатьЭлемент(); Объект1.УстановитьНовыйКод(); Сообщить(Объект1.Код); //4753 Объект2 = Справочники.Номенклатура.СоздатьЭлемент(); Объект2.УстановитьНовыйКод(); Сообщить(Объект2.Код); //4754 //Фрагмент 2 Объект1 = Справочники.Номенклатура.СоздатьЭлемент(); Объект1.УстановитьНовыйКод(); Сообщить(Объект1.Код); //4753 Объект1 = Неопределено; Объект2 = Справочники.Номенклатура.СоздатьЭлемент(); Объект2.УстановитьНовыйКод(); Сообщить(Объект2.Код); //4753 //Фрагмент 3 Объект1 = Справочники.Номенклатура.СоздатьЭлемент(); Объект1.УстановитьНовыйКод(); Сообщить(Объект1.Код); //4753 Объект1.Записать(); Объект2 = Справочники.Номенклатура.СоздатьЭлемент(); Объект2.УстановитьНовыйКод(); Сообщить(Объект2.Код); //4754 В первом фрагменте, так как в памяти существовал объект с установленным новым кодом, то при получении кода для второго объекта система пропустила заблокированный код. Во втором фрагменте, так как первый объект уже не существовал, новому объекту был присвоен тот же код, что и первому. В третьем фрагменте второму объекту присвоен код отличный от кода первого объекта, так как первый объект уже был записан. Это из ИТС...не ужто мистят про то что стандартное всё пашет? |
|||
134
Гений 1С
гуру
21.08.06
✎
11:12
|
(133) Товарищ, все хорошо, инфа полезная, только это не поле Кода, а другое поле...
|
|||
135
Sonic
21.08.06
✎
11:12
|
(0) выйди в аську
|
|||
136
ottto
21.08.06
✎
11:16
|
Или как префикс использовать номер соединения тачки.
|
|||
137
Гений 1С
гуру
21.08.06
✎
11:17
|
(136) нельзя, это попытка выкрутиться. По условию задачи префиксом должен быть префикс ИБ.
|
|||
138
Tristan
21.08.06
✎
11:20
|
НачатьТранзакцию();
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Константы.УникальныйНомер |ИЗ | Константы КАК Константы"; |ДЛЯ ИЗМЕНЕНИЯ"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Выборка.Следующий(); Предупреждение("Приостановим систему, номер в константе:"+Выборка.УникальныйНомер); Константа = Константы.УникальныйНомер; Константа.Установить(Константа.Получить()+1); ЗафиксироватьТранзакцию(); Такой код в двух копиях одновременно не отработает, пока не будет завершена одна из транзакций. Этим и можно гарантировать вычисление уникальности. |
|||
139
Гений 1С
гуру
21.08.06
✎
11:21
|
А что если так?
В процедуре призаписи проверяем, есть ли уже элемент с таким кодом? Если есть несколько таких элементов, то или ругаемся или если код текущего элемента равен минимальной из ссылок, то не ругаемся, а если не равны, то меняем код и повторяем. Единственно, надо или несколько раз сделать запись или паузу на некоторе число секунд, чтобы избежать случая, когда контроль и запись происходят синхронно? |
|||
140
Гений 1С
гуру
21.08.06
✎
11:21
|
(138) А почему не работает одновременно?
|
|||
141
Tristan
21.08.06
✎
11:23
|
Попробуй
|
|||
142
Гений 1С
гуру
21.08.06
✎
11:25
|
(141) как я попробую, это проверяется не практически, а теоретически, на практике может и за 100 лет не возникнуть, а видишь - возникло
|
|||
143
Neco
21.08.06
✎
11:28
|
В 8.1 можно использовать блокировку через "Заблокировать()"
|
|||
144
Гений 1С
гуру
21.08.06
✎
11:29
|
(143) уже было в топике, можно конечно поиграться, но как-то опасно.
|
|||
145
Гений 1С
гуру
21.08.06
✎
11:32
|
Почитал Книга знаний: v8: Ключевое слово ДЛЯ ИЗМЕНЕНИЯ
Можно конечно использовать "Для изменения", это дает побольше гарантий, но есть маленький промежуток времени, когда уникальность может нарушиться! |
|||
146
Гений 1С
гуру
21.08.06
✎
11:33
|
О, Эврика! А что, если дважды прочитать данные ДЛЯ ИЗМЕНИЯ - до записи и после, это гарантия того, что проверяться будут данные только в одном цикле!!!
|
|||
147
AntonioS
21.08.06
✎
11:34
|
суть вопроса - в блокировках
только никто почему то не уточняет что это за блокировка: на запись или на чтение? блокировки с помощью НачатьТранзакцию() - не помогут, так как они позволяют "грязное чтение" и максимальный код будет считан неверно. в случае, например, с регистрами, заблокировать запись на чтение поможет ДЛЯ ИЗМЕНЕНИЯ. Не уверен, что получится при считывании реквизита справочника, хотя нужно проверять. Поэтому, выходом кажется блокировка на запись, в результате которой система не даст записать неверно сформированный "последний" уникальный код. Отсюда присоединяюсь к вариантам использования регистра сведений. Остальные варианты через константы или блокировки объекта представляются неким моделированием блокировки. |
|||
148
Гений 1С
гуру
21.08.06
✎
11:34
|
Скажите, черепа, а в процедуре ПриЗаписи запись уже есть в базе данных, или еще нет?
А если я в ПриЗаписи устанавливаю значение атрибута, он появится в базе только после завершения процедуры ПриЗаписи? |
|||
149
Гений 1С
гуру
21.08.06
✎
11:35
|
(147) Хочешь сказать ДляИзменения на справочниках не работает???
|
|||
150
AntonioS
21.08.06
✎
11:38
|
(149) "Не уверен, что получится при считывании реквизита справочника, хотя нужно проверять"
ключевое слово "Не уверен" :) |
|||
151
Гений 1С
гуру
21.08.06
✎
11:41
|
(150) а ты уверен?
|
|||
152
AntonioS
21.08.06
✎
11:43
|
(151) ты что-то хочешь спросить или что-то хочешь сказать?
|
|||
153
Tristan
21.08.06
✎
11:44
|
(141)
на практике может и за 100 лет не возникнуть, а видишь - возникло специально для практики в код вставлено Предупреждение(), в первой копии надо запустить данную процедуру, и не нажимая окей, попытаться выполнить во второй - хоть пытайтесь читать код иногда! маленького промежутка времени нет! посколько таблица блокируется до считывания из нее данных, это раз. Во вторых при инкременте я не использовал данные выборки, а опять насильно считал ее значение после блокировки. И это действительно работает - РТФМ. |
|||
154
Tristan
21.08.06
✎
11:45
|
ключевое слово "ДЛЯ ИЗМЕНЕНИЯ" блокирует таблицы и на чтени и на запись, но на чтение нам нафих не нужно
|
|||
155
Гений 1С
гуру
21.08.06
✎
11:50
|
(153)(154) Если верить РТФМ, то при ключевом слове ПриИзменении данные, участвующие в запросе, блокируются до завершения транзакции. В файловом варианте - вся таблица, в локальном - записи, участвующие в запросе, но для функции МАКС - будет вся таблица.
(153) да, попробую использовать предупреждение для отладки. Т.е. по ходу катит вариант (48) если в функции обПолучитьНовыйКод использовать ключевое слово "ДЛЯ ИЗМЕНЕНИЯ" в запросе. По ходу можно обойтись без констант.. Я прав, товагищи??? |
|||
156
Гений 1С
гуру
21.08.06
✎
12:04
|
(155) по ходу, я прав, т.к. проверил на тестовом куске, все работает.
Причем в отладчике видно, как выполнение кода стопорится на запросе, пока не закончится первая транзакция... Процедура ПриЗаписи(Отказ) Если ЭтотОбъект.ОбменДанными.Получатели.АвтоЗаполнение и не ЭтотОбъект.ОбменДанными.Загрузка Тогда //fixin 20060728 Уникальный код договора Если Не Отказ И НЕ ЭтоГруппа Тогда //Префикс кода Если ЗначениеНеЗаполнено(УникальныйКод) Тогда НачатьТранзакцию(); Префикс = СокрЛП(ПланыОбмена.Подразделения.ЭтотУзел().Код); УникальныйКод=обПолучитьНовыйКод(Метаданные.Справочники.Договоры, Префикс, "УникальныйКод", Метаданные.Справочники.Договоры.Реквизиты.УникальныйКод.Тип.КвалификаторыСтроки.Длина); ЭтотОбъект.ОбменДанными.Загрузка=истина; //чтобы не циклился ЭтотОбъект.Записать(); ЭтотОбъект.ОбменДанными.Загрузка=ложь; //Возвращаем назад Предупреждение("Перед фиксацией транзакции, код:"+УникальныйКод); //чисто для отладки ЗафиксироватьТранзакцию(); Запрос=Новый Запрос("ВЫБРАТЬ | Договоры.Код |ИЗ | Справочник.Договоры КАК Договоры |ГДЕ | Договоры.УникальныйКод = &УникальныйКод | И Договоры.Ссылка <> &Ссылка"); Запрос.УстановитьПараметр("УникальныйКод", УникальныйКод); Запрос.УстановитьПараметр("Ссылка", Ссылка); Если Запрос.Выполнить().Выбрать().Следующий() Тогда Сообщить("Нарушена последовательность кодов, не могу установить код нового договора: "+УникальныйКод, СтатусСообщения.Внимание); Отказ=истина; Возврат; КонецЕсли; КонецЕсли; КонецЕсли; обРегистрацияИзменений(ЭтотОбъект, ЭтотОбъект.Подразделение); КонецЕсли; КонецПроцедуры |
|||
157
Гений 1С
гуру
21.08.06
✎
12:07
|
Мне кажется, что запись является сама по себе транзакцией, счас проверю, может двойная запись не нужна
|
|||
158
avmlvm
21.08.06
✎
12:09
|
(156) (задумчиво) Что за любовь использовать где "нипоподя" "незнакомые вещи"???
Ну какой смысл использовть тут механизм транзакций??? |
|||
159
Neighbour
21.08.06
✎
12:14
|
Предлагаю создатть регистр сведений для хранения 1й единственной записи - максимального значения кода. ПриЗаписи нового элемента - запрос к регистру с блокированием данных, запись нового значения максимального кода.
|
|||
160
ERWINS
21.08.06
✎
12:25
|
не поможет транзакция так как в 1с 7.7 и 8.0 нет вложенных транзакций
|
|||
161
avmlvm
21.08.06
✎
12:29
|
(160) +1
Механизм транзакций в восьмёрке не такой уж простой.. и пользоваться им нужно с пониманием очень большого количества нюансов... Так что если несмотря на предупреждения всё таки хочется "развлекухи" с непредсказуемыми эффектами - что ж... "флаг в руки и попутного ветра"... |
|||
162
Tristan
21.08.06
✎
12:31
|
(157) Запись ОбработкаПроведения являются транзакциями, в них можно опустить НачатьТранзакцию(), ЗафиксироватьТранзакцию().
(160) А ты пример хотябы проверь, ну так, чтобы хотябы хоть какойнить довод привести а не просто так пальцами на клавиатуре стучать. (161) тоже самое что относилось к (160) любой пример, а не - "не, нифига у вас не получится" |
|||
163
avmlvm
21.08.06
✎
12:35
|
(162) Ты тоже всё пузырьки" пробуешь на вкус??? :-)
Про то, что в восьмёрке "нет вложенных транзакций" - написано в "букваре".. Так что вместо того, что бы "попустому" стучать по клаве - почитай "камасутру" в виде ЖКК... |
|||
164
Bahmet
21.08.06
✎
12:39
|
Кажись пора прекращать карячится под глумлённое ТЗ,и карячить желания клиента под возможности платформы
|
|||
165
Tristan
21.08.06
✎
12:39
|
(163) я тебе не предлогаю глотать/жевать стеклянную бутылочку (вставить в рабочую базу), я тебе предлогаю привести довод, хотябы основанный на том, что в пациент которому дали эту бутылочку пожевать - умер (в пустой базе создать обработку и вставить 15-20 строчек кода). Т.е. надо пологать это было неумелое желание обкакать.
|
|||
166
Tristan
21.08.06
✎
12:41
|
(163) и я еще не могу понять, при чем тут "вложенные" транзакции???? где я про такое догадался написать?
|
|||
167
avmlvm
21.08.06
✎
12:57
|
(166) ты дагадался это "оспорить" своим (162) п.2 и п.3
А про твоё "не понимание" что происходит с транзакциями и блокировками свидетельствует твой (154)... А теперь внимание вопрос.. что произойдёт, если два юзеря одновременно "стукнутся" с запросом на чтение с ключевым словом "ДЛЯ ИЗМЕНЕНИЯ"??? Твоя версия как я понял - "пофик".. Да???? Так нужно понимать твоё "но на чтение нам нафих не нужно"???? |
|||
168
Гений 1С
гуру
21.08.06
✎
12:57
|
ВСЕМ: ЧУВАКИ! получилось!!!! Ура!!!
Ничего не нужно менять, просто в запросе Код нужно устанавливать в процедуре ПередЗаписью. Я проверил через Предупреждение - все работает: Запрос=Новый Запрос("ВЫБРАТЬ | МАКСИМУМ(Договоры.Код) КАК Зн |ИЗ | Справочник.Договоры КАК Договоры |ГДЕ | Договоры.Код ПОДОБНО &Шаблон | |ДЛЯ ИЗМЕНЕНИЯ"); Ура, всем спасибо. действительно, запись представляет собой единую транзакцию, т.е. если заблокирована таблица, то блокировка идет на весь цикл записи... |
|||
169
Гений 1С
гуру
21.08.06
✎
12:59
|
(162) не спорьте, я тоже думал сначала сделать транзакцию, начинающуюся в ПередЗаписью, а заканчивающуюся в ПриЗаписи.
Кстати, забавно, если устанавливать в ПриЗаписи значение реквизита (я от этого отказался), изменения без явного Записать в базу не вносятся, а объект считается модифицированным... Ура!!! Все сенька. |
|||
170
Гений 1С
гуру
21.08.06
✎
13:00
|
Гыгыгы... а сколько було шуму... Но все равно, в споре рождается истина... Теперь можно флеймить.
|
|||
171
Tristan
21.08.06
✎
13:01
|
(167) может я изъяснил не для вашего понимания, но еще раз перечитайте именно (154) там я и написал что таблица блокирует НА ЧТЕНИЕ И НА ЗАПИСЬ. Читайте впредь более внимательно.
|
|||
172
Херрес
21.08.06
✎
13:01
|
(167) ну расскажи, что же произойдёт в таком случае
|
|||
173
Tristan
21.08.06
✎
13:02
|
(172) да он сам не знает что произойдет, а у пользователя начавшим считывание вторым будет вызвано исключение
|
|||
174
Херрес
21.08.06
✎
13:03
|
(173) думаешь, сразу произойдёт исключение ? Может по какому-нибудь таймауту ?
|
|||
175
Tristan
21.08.06
✎
13:04
|
(173) есессено, просто мы то рассматриваем пример из (138), а там кнопочку Ок не жмем =) А таймаут обязательно должен быть
|
|||
176
Гений 1С
гуру
21.08.06
✎
13:05
|
||||
177
Гений 1С
гуру
21.08.06
✎
13:06
|
(174) У меня висит довольно долго запрос, счас проверю, есть тайм-аут или нет...
|
|||
178
Tristan
21.08.06
✎
13:06
|
Гений меня постоянно поражает своей скоростью в чеканке ненужных, бесполезных статей ;-)
|
|||
179
Гений 1С
гуру
21.08.06
✎
13:07
|
(175) Да, где-то через минуту ошибка транзакции СКЛ выскакивает...
|
|||
180
avmlvm
21.08.06
✎
13:10
|
(173) о-о-о-о.. чу.... Всё таки будет "исключение"??? хм-м-м.. а ты сказал, что "пофик"...
(168) вот из-за него всё и будет "гикаться"... |
|||
181
Tristan
21.08.06
✎
13:12
|
(180) Юноша, это вы сказали что "пофих", я говорил, что "но на чтение нам нафих не нужно", а это обозначает, что, нам бы заблокировать таблицу на запись, а вот считывать надо бы разрешить - идите учите буквы.
|
|||
182
Херрес
21.08.06
✎
13:13
|
(180) ну на практике-то исключение будет возникать очень редко. Может быть никогда не выскочит.
|
|||
183
avmlvm
21.08.06
✎
13:16
|
(181) ё-ё-ё.. типа (154) писал чукча "не читатель", а "писатель"???
Ты посоветовал использовать ключевое слово "Для изменения" именно для КОНКУРЕНТНОГО ЧТЕНИЯ, а не записи.. И при этом "забыл" (ну ведь по клаве фигачить мастер), что при заданном условии (0) (КОНКУРЕНТНОЕ ЧТЕНИЕ) у нас будет заведомое ИСКЛЮЧЕНИЕ... (182) читай (0).. Из-за этого и весь сыр-бор... |
|||
184
Tristan
21.08.06
✎
13:20
|
(183) кароче, ты уже начинаешь всякую чушь нести и к словам придераться. Для клуба любителей танков обясняю какбы я изменил работу запроса с использованием слова "ДЛЯ ИЗМЕНЕНИЯ":
Если в запросе используется ключевое слово "ДЛЯ ИЗМЕНЕНИЯ" то если таблица уже блокирована, тогда, после некоторого таймаута, если таблица не разблокировалась, вызывать исключение. Если в запросе НЕ используется ключевое слово "ДЛЯ ИЗМЕНЕНИЯ" то даже если таблица уже блокирована, всеравно дать возможность считать данные. Именно это я имел ввиду под выражением "но на чтение нам нафих не нужно". |
|||
185
OlafMasterson
21.08.06
✎
14:18
|
Господа, а пробейте неграмотному можно ли было использовать фигню типа "компоненты V7plus.dll" с размерностью типа 5 знаков для генерации уникальных кодов?
Я ей пользуюсь для создания уникальных кодов при программном образовании новой карточки и соот-но штрих-кода. Нет ли подобного в 8.0 версии? Правда номера будут не по парядку. |
|||
186
avmlvm
21.08.06
✎
14:19
|
(184) Я просто в "ауте"... Фраза - "то если таблица уже блокирована, тогда, после некоторого таймаута, если таблица не разблокировалась, вызывать исключение"
Показывает, что аФФтор лыка не вяжет в элементарном... чЁ??? Если иллюзия что исключение "после тайм-аута" вызывает сам програмЁр по "дуновению святого духа"??? Мдя-я-я... "как всё запущено".... |
|||
187
Гений 1С
гуру
21.08.06
✎
14:20
|
(184) солидарен полностью, так больше пространства для маневра, чем безусловная блокировка даже на чтение.
|
|||
188
Гений 1С
гуру
21.08.06
✎
14:21
|
(185) не в тему! Это про другое... ГУИД в восьмерке есть и без компонент
|
|||
189
Гений 1С
гуру
21.08.06
✎
14:21
|
(186) ЛВЛВМ ты опять тупишь...
|
|||
190
MikleV
21.08.06
✎
14:22
|
нда. а ларчик просто открывалси.)
|
|||
191
avmlvm
21.08.06
✎
14:25
|
(189) хм-м.. ты опять ничего не догоняешь...
Швабра Tristan-а, это то, на что и ты "наступаешь" в (168) у тебя там нет обработки исключения при чтении... |
|||
192
OlafMasterson
21.08.06
✎
14:25
|
Ета штука просто генерит псевдослучайный набор достаточно валидного разброса, а потом просто делает поиск по коду - есть - пишем, нет - noch ein mall.
Это примерно тоже самое, что в Gayny's обработке, нет? |
|||
193
Гений 1С
гуру
21.08.06
✎
14:25
|
(190) да... ;-)
(184) Тристан, так оно и есть, я проверил, если таблица заблокирована через "ДЛЯ ИЗМЕНЕНИЯ", то запрос без "ДЛЯ ИЗМЕНЕНИЯ" не виснет, он считывает нормально таблицу. Виснут только другие запросы, у которых есть "ДЛЯ ИЗМЕНЕИНЯ". |
|||
194
Tristan
21.08.06
✎
14:25
|
(186) ну этож надо быть таким непонятливым!!!! Я не про програмное управление говорил, а "какбы я изменил работу запроса с использованием слова "ДЛЯ ИЗМЕНЕНИЯ"", т.е. на уровне платформы это менять надо, я фигею с вас товарищь, идите учите буквы, возмите чтоль орфографические словари для облегчения понимания смысла некоторых слов.
|
|||
195
Tristan
21.08.06
✎
14:26
|
(193) о пля! Знач ничего и менять не надо =) Тогда все норм =)
|
|||
196
Гений 1С
гуру
21.08.06
✎
14:27
|
(192) нет, коды должны идти по порядку... (читайте топик)...
Ответ уже найден... |
|||
197
Tristan
21.08.06
✎
14:32
|
(193) вот именно это я и хотел, что таблицу блокировать для чтения и записи только в том случае, если я хочу получить информацию для последующщего ее изменения ,о чем свидетельствовало бы слово "ДЛЯ ИЗМЕНЕНИЯ", а если я хочу просто считать, тогда должно быть пофиг на блокировки. Надо еще поковыряться с этим, потому как тогда смутно представляется смысл слов "блокируется на ЧТЕНИЕ и запись" в ЖЖК.
|
|||
198
acsent
21.08.06
✎
14:35
|
А может лучше средставми MSSQL делать?
|
|||
199
avmlvm
21.08.06
✎
14:36
|
(194) Если чукча - писатель, то он конечно всегда будет предлагать под него переписывать и словари и платформу...
Короче.. зачем показывать глупость и флеймить о том, о чем ни малейшего понятия не имеешь??? уровень "понималки" продемонстрирован в (184)... Короче... не нужно "оправдываться".. Если "ляпнул" чушь - имей мужество признать это.. А всякие "отмазы" типа "на уровне платформы это менять надо" - оставь для барышень... этих "оговорок" нигде раньше - не было... Короче... иди "кури буквари ЖКК" и дай спокойно разобрать ситуацию :-))) |
|||
200
Salvador Limones
21.08.06
✎
14:37
|
200
|
|||
201
avmlvm
21.08.06
✎
14:37
|
(193) естественно.. именно это и написанно в букварях ЖКК
или ты любишь на грабли наступать самолично??? |
|||
202
Tristan
21.08.06
✎
14:52
|
(201) у меня аська не скрыта, раз переходишь на личности, пиши туда, я тебе там все подробно объясню
|
|||
203
avmlvm
21.08.06
✎
15:01
|
(202) а у меня аськи нет.. так что сорри... :-)))
просто ещё раз.. проблема не такая простая... всё равно всё упирается в блокировки.. и если это "зло неизбежно", то и подходить к нему нужно осознанно и очень аккуратно... А не "в слепую"... при этом понимая, что часто в 1С этот механизм не столь "прозрачен" и есть куча подводных камней... чтение в транзакциях по большому счёту (с пониманием уровней изоляций транзакций и "низкого" уровня и "среднего" и "высокого") - это "высший пилотаж" и советовать так.. в тёмную.. использовать "при изменении" - просто опасно... ЗЫ.. Если интересно, то ключевые слова для поиска информации... уровни изоляции SERIALIZABLE SQL, блокировки Update Lock и Shared Lock и Exclusive Lock |
|||
204
Tristan
21.08.06
✎
15:05
|
(203) Опять же пустые слова. О чем можно говорить, если даже не интересно потестить код и сообщения переполнены оскорблениями и переходом на личности?
Странно, такие слова страшные про сиквел знаете, а как "освободить" базу при вылете из монопольного режима не знаете.... интересно |
|||
205
avmlvm
21.08.06
✎
15:15
|
(204) Если для тебя "уровни изоляции" - пустые слова, то тогда зачем тут "тусуешься"???
А насчёт перехода на личности - следи вначале за своей речью... |
|||
206
Гений 1С
гуру
21.08.06
✎
15:26
|
(198) Нафига, если мы уже нашли клевый способ, простой как 5 копеек???
(204)(205) да хорош вам, зачем ссориться, я вот уже на АЛВЛМа забил - но если бы не его участие, может быть и не догадался бы про этот 5-копеечный метод, спасибо что и пинал, пусть и не в том направлении. ;-) А насчет чтения во время транзакции - думаю читать все равно можно только тогда, когда запись целостная, т.е. на момент записи чтение приостанавливается. Но запись - это 0.0001% времени от времени всей блокировки. Так что все пучком. Выводы изложил в: Книга знаний: v8: Ключевое слово ДЛЯ ИЗМЕНЕНИЯ |
|||
207
Гений 1С
гуру
21.08.06
✎
15:27
|
(205) в 1С нет понятия "Уровни изоляции", так что для меня это пустые слова. Нельзя объять необъятного. И на уровне платформы уровней изоляции нет.
|
|||
208
Гений 1С
гуру
21.08.06
✎
15:28
|
А в ЖКК все действительно плохо изложено. Поэтому я и разжевал в КЗ.
|
|||
209
Кецалькоатль
21.08.06
✎
15:37
|
Можно сделать с 2-мя константами и без транзакций. Номер будет 100% уникальным. Вне зависимости от количества одномоментных обращений.
|
|||
210
Кецалькоатль
21.08.06
✎
15:51
|
Вру, даже с 1 константой, без блокировок и транзакций.
|
|||
211
Кецалькоатль
21.08.06
✎
16:01
|
|
|||
212
Кецалькоатль
21.08.06
✎
16:12
|
Теория рекомендует еще устанавливать рандомный интервал ожидания. Но можно использовать тот же номер соединения. Можно реализовать так:
|
|||
213
Гений 1С
гуру
21.08.06
✎
16:26
|
(211) Вот это то, что я просил узнать в (124)
Только нужно еще предусмотреть что делать, если константа не сбросилась (например 1с-ка снята внутри цикла)... А то придется ее ручками сбрасывать, когда договора перестанут заводиться. Все-таки найденный метод лучше, т.к. ваще не нужны никакие константы, а есть толкько блокировка. ;-) |
|||
214
John Connor
21.08.06
✎
17:02
|
2 Гений 1С
Опцию ДЛЯ ИЗМЕНЕНИЯ следует использовать только для тех таблиц, которые будут затем изменены в этой же транзакции. Для желающих ознакомиться с блокировками рекомендую книгу "Профессиональная разработка в системе 1С:Предприятие 8" ЗЫ: Прекратите заниматься ПРОФАНАЦИЕЙ. |
|||
215
Кецалькоатль
21.08.06
✎
17:08
|
Блокировка не сработает, когда у пользователя будет открыто окно редактирования (элемента справочника, документа, и пр.). Особенно актуально в файловом варианте базы.
Средства против снятия 1С-ки внутри цикла нет. Я просто делал еще проверку, если цикл крутится больше 5-15 секунд, я константу обнулял. |
|||
216
Кецалькоатль
21.08.06
✎
17:10
|
(214) Да ладно, расслабься, блокировка - значит только то, что это блокировка. Данные изменять не обязательно.
|
|||
217
John Connor
21.08.06
✎
17:23
|
(216)Некоторые не очень сведущие люди, начитавшись подобных писулек и начав использовать подобные "рекомендации", могут оказаться в глубокой ж... А все потому что вы описываете задачу однобоко и не задумываетесь о последствиях применения подобных действий. Если не раскрываете всей информации, то хотя бы ссылайтесь на более подробные источники.
|
|||
218
avmlvm
21.08.06
✎
18:36
|
(214) +1
Я уже устал боротся с "поверхностью знаний"... Млин.. чЁ за привычка... "шашки на голо" и налево и направо раздавать советы о последствиях которых сами даже не отдают отчёта... Когда на флаге - "понятие "Уровни изоляции" для меня - пустые слова"... То становится просто страшно... |
|||
219
Гений 1С
гуру
21.08.06
✎
18:41
|
(214)(217) Ну ка, обясни нам, какой ж... это нам обернется... Или так, попуг(к)ать чисто?
|
|||
220
Гений 1С
гуру
21.08.06
✎
18:42
|
(218) ну ка прохфессор, поясните нам, в чем мы не правы с нашей блохировкой...
|
|||
221
Гений 1С
гуру
21.08.06
✎
18:43
|
(217) это не пустые рекомендации, все проверено в отладчике...
|
|||
222
Гений 1С
гуру
21.08.06
✎
18:44
|
(217) Так что Ваня как это говорится, ответьте за базар, другими словами, объяснитесь, что вы имели ввиду.
|
|||
223
Гений 1С
гуру
21.08.06
✎
18:45
|
(218) ну нет в механизме блокировок и транзакций 1С понятия "уровни изоляции"!
|
|||
224
Гений 1С
гуру
21.08.06
✎
18:46
|
(223)
поэтом надо использовать другие термины!!! |
|||
225
Гений 1С
гуру
21.08.06
✎
18:50
|
Кстати, АЛВЛМ, тебя жаба не душит, что ты не догадался до такого простого метода решения задачи в (0) ???? Может отсюда вся эта желчь?
|
|||
226
avmlvm
21.08.06
✎
18:53
|
(223) понимаешь... э-э-э-э.. ну как бы тебе объяснить :-)))
Ты же знаешь что между клиент-сервером и файл-сервером есть различия.. в том числе и с транзакциями и с блокировками и с валидностью (целостностью) данных.. Так вот... можно всё "зубрить" механистически... догматически.. А можно понимать суть и источник этих отличий... А они как раз и базируются именно на уровнял изоляции и понимании когда и прикаких условиях 1С "влетает" в тот или иной тип блокировок... (225) Насчёт желчи... Хм-м-м.. я этим и в юности не болел.. а теперь и тем более.. Если тебе хочется набивать шишки через расквашенные юзерами носы - что ж.. дело хозяйское... |
|||
227
Гений 1С
гуру
21.08.06
✎
18:54
|
(226) окей, докажи, что я обшибся с решением этой задачи - и я возьму свои слова обратно... Приведи хоть один пример, где метод не сработает... жду!
|
|||
228
Гений 1С
гуру
21.08.06
✎
18:56
|
(226) какая разница. Для того чтобы программировать не нужно знать ассемблер.
1С мне гарантирует, что некоторые данные будут заблокированы на всю транзакцию, мне большего для данной задачи и не надо. Отладка показывает что все ок. В чем я ошибся??? Не надо тут разводить демагогию о доскональном знании системы. Я не знаю, как работает винда, но на 1С окошки программирую, то же самое и про транзакции... В этом и прелесть использования ЯП, что многие вещи скрыты от кодера. |
|||
229
Гений 1С
гуру
21.08.06
✎
18:56
|
1С гарантирует мне блокировку и мне пофиг на "уровни изоляции".
А если у нее что-то не так с гарантией, есть отдел приемки багов. |
|||
230
avmlvm
21.08.06
✎
19:07
|
(226) " Для того чтобы программировать не нужно знать ассемблер."
Язык программирования - это образ мышления... Программировать можно на любых языках, но чем лучше ты знаешь "кухню" реализации, тем меньше ты наступаешь как на очевидные грабли, так и на не очевидные. Насчёт "тестирования".. хм-м-м.. ты уверен, что твои "тесты" - исчерпывающие??? Ты такой тест проводил? Ну-у-у.. например... "завесь" отладчиком или циклом свою процедуру от имени одного клиента и обратись к ней же в этот же момент - от имени другого клиента... Что у тебя в этот момент будет??? Ты же сам в (0) поставил условие, что чтение могут быть одномоментны и конкурентны... ЗЫ.. лучше это моделировать в ситуации приближенной к "боевой"... в классической n-звенке... с сервером БД, сервером 1С и двумя юзеровскими компами. (229) ЗЫЫ.. Про "гарантии" 1С (ну мол что это грёбанная 1С - виновата) ты не мне.. ты Заказчику "пой" :-))) |
|||
231
Bahmet
21.08.06
✎
19:11
|
(229)Круто переложил отвественность за своё творение своих рук на чужие плечи.
Хотя это на это решение вы оба смотрите с разных сторон. avmlvm смотрит на это решение широкое в своем применении,поэтому и видит возможные возникновения проблем. Гений 1С как на частное решение под конкретного клиента,и оно в этом случае пашет. так шо решение есть,как оно есть |
|||
232
Гений 1С
гуру
22.08.06
✎
09:22
|
(230) ндык так и делаю, в одной 1с-ке вешаю Предупреждение, во второй пытаюсь прочитать - пока не нажмешь кнопку на Предупреждении, второй запрос висит, ждет. Если висит больше минуты - выдает ошибку блокировки. Чего и требовалось по условию задачи.
(231) Слишком широко иногда не есть хорошо, можно за лесом деревьев не увидеть. |
|||
233
Гений 1С
гуру
22.08.06
✎
09:23
|
(231) Алвлм блин предложил такие убогие методы реализации задачи, с его-то познаниями транзакций! Посмотрите его "разжеванный" вариант с блокировкой объекта с максимальным кодом. И он еще меня убеждает, что он крут в транзакциях. Да он демагог...
|
|||
234
avmlvm
22.08.06
✎
09:26
|
(233) Мдя-я-я... "Бестолочь 1С" даже читать толком не умеет... Где он прочёл что ему предлагалось использовать транзакции??? Зачем в этой задаче использовать транзакции??? Хм-м-м...
|
|||
235
Гений 1С
гуру
22.08.06
✎
09:30
|
(234) Не увиливай... И я тебя еще не оскорблял. Ну это к слову, я имел ввиду про твой разжеванный метод с блокировками, где я написал про транзакции? Видимо я не одинок в плохих навыках чтения, не софиствуй, а ответь конкретно - да, блин, темный я, но корчу из себя знатока, чтобы важным казаться.
|
|||
236
SnarkHunter
22.08.06
✎
09:30
|
Я в шоке...
|
|||
237
Гений 1С
гуру
22.08.06
✎
09:30
|
Ты не придумал решения задачи в (0) а только беспочвенно охаиваешь классный метод ее решения. это меня бесит
|
|||
238
avmlvm
22.08.06
✎
09:44
|
(235) Почитай свои постинги... Не только по отношению ко мне - они оскорбительны..
Относительно метода с блокировками... Надеюсь ты понял, что: - транзакции тут нафик не нужны; - задача решается именно на использовании механизмов "блокировки". Если ДА, то я не зря потратил на тебя время... Тогда переходим к следующему.. ВСЕГДА лучше управлять "процессом" ЯВНО, а не надеятся на "неявное правило"... Только тогда ты будешь получать устойчивый и гарантированный результат... Использование в запросе "для изменения" - это механизм неявных блокировок.. им пользуются тогда когда иного выхода нет... В твоём случае, ты можешь использовать ЯВНЫЙ вызов (полностью контролируемый) блокировки... Короче... Если ты ещё "не созрел" до понимания таких простых вещей.. что ж.. будем надеятся, что со временем "дозреешь" (хотя есть куча народа, которые так и не "дозрели" то такого.. даже до среднего уровня понимания)... |
|||
239
Гений 1С
гуру
22.08.06
✎
09:47
|
(238) Афигеть, почему же неявный? В ЖКК четко написано и ЗАДОКУМЕНТИРОВАНО, что блокируется при этом.
Я уже писал в КЗ, что блокировка в ДЛЯ ИЗМЕНЕНИЯ живет ровно столько, пока длится транзакция, в отличии от явного вызова Заблокировать. Не упорствуй, грешник, сознайся, что ты ошибся... |
|||
240
avmlvm
22.08.06
✎
10:05
|
(239) (грустно вздыхая) значит "вторую часть" так и не понял.. :-(((
Ну ладно... я же не "максималист".. Я доволен и той малой долей, которую всё же удалось "втемяшить" :-))) ЗЫ.. не путай транзакции "на уровне" 1С и транзакции на уровне сиквела... На уровне 1С транзакции только "явные" и по "умолчанию" их нет.. а вот на уровне сиквела всё делается только через транзакции... Но чЁ об этом говорить.. ты к большому сожалению ещё не созрел до понимания "уровней изоляции", "видов блокировок" и понимания транзакций... А жаль... |
|||
241
Херрес
22.08.06
✎
10:19
|
Гений, ты молодец.
Задачу нормально решил, я бы даже сказал изящно получилось |
|||
242
avmlvm
22.08.06
✎
10:40
|
(241) угу.. только вот тебе вопрос... а насколько "устойчива" его фича "Если висит больше минуты - выдает ошибку блокировки"... Как думаешь... Что это за параметр "больше минуты" и насколько он "воспроизводим" на разных платвормах сейчас и в ближайшем будущем???
|
|||
243
Гений 1С
гуру
22.08.06
✎
10:58
|
(242) мне такое поведение и нужно... Документы при проведении тоже порой такую хрень выдают... Это типовое поведение 1С 80
В 77 выдавалось предупреждение - ошибка блокировки, продолжить д/н, в 80 выдается ошибка и транзакция отменяется, все пучком... Так что незачет тебе... |
|||
244
Херрес
22.08.06
✎
11:20
|
(242) да не всё ли равно ?
Фича работает, с какой периодичностью выдаёт ошибку блокировки - с практической точки зрения совершенно безразлично. На счёт будущих платформ - на 8.1 должно работать по идее. |
|||
245
avmlvm
22.08.06
✎
11:26
|
(244) "с какой периодичностью выдаёт ошибку блокировки - с практической точки зрения совершенно безразлично"
Да нет... Есть.. есть разница... "на 8.1 должно работать по идее" угу.. очень.. очень "жизнеутверждающе" :-))) |
|||
246
Гений 1С
гуру
22.08.06
✎
11:52
|
(245) не знаю, о чем речь. У меня на 8.0 работает, как часы... Все уже проверено и отлажено, АЛВЛМ, ты о чем?
|
|||
247
Гений 1С
гуру
22.08.06
✎
11:53
|
(245) АЛВЛМ, расслабься, почитай (243). Ошибка блокировки - нормальное поведение системы, юзвери не пугаются, все хоккей, что за прогоны?
|
|||
248
avmlvm
22.08.06
✎
11:55
|
(246) Ну ладно.. если есть иллюзия про "часы", тогда "бум ждать" :-)))
(247) а я и "не напрягаюсь".. Это собственно твоя разработка.. и тебе с Заказчикам если чЁ - "перетерать"... А не обработанное "плановое" исключение - это всегда "плюха" програмЁра... |
|||
249
megalodon
22.08.06
✎
12:02
|
блин... неужели, чтобы понять о чем спор придется читать всю ветку :-) может кто нибудь пояснит суть разногласий?
|
|||
250
Херрес
22.08.06
✎
12:10
|
(249) зачем, просто читай 3 последних поста и наезжай на кого-нибудь, быстро втянешься :)
|
|||
251
Ballexa
22.08.06
✎
12:13
|
Хрена се написали. Интересно это все по теме?
|
|||
252
Гений 1С
гуру
22.08.06
✎
12:20
|
(246) ну так а фига ты в тему ввязался. Я считаю что сделал все правильно и перетирать мне не нужно будет. А ты НЕ ОБОСНОВЫВАЯ НИЧЕМ зашел и начал говорить, что мой метод работать будет с глюками.
Или обоснуй, почему, или забери свои слова обратно... Суть конфликта в этом. В (168) после долгих рассуждений и обсуждения с участниками пришли к методу решения задачи в (0). АлВЛМ ничего лучше, чем (114) предложить не смог. А счас наезжает на красивый и элегантный, работающий, отлаженный метод. Не приводя никаких доказательст, а чисто - я крутой, а ты - дурак. Так вот или обоснуй или скажи, что ты неправ, наезжая на метод. |
|||
253
avmlvm
22.08.06
✎
12:36
|
(252) хм-м-м.. тебе хочется жить с иллюзиями? Ну я же писал.. "флаг в руки и попутного ветра"... Это же не мне, а тебе нужно будет объяснятся с Заказчиком... То что твой код потенциально "неустойчевый" - я тебе говорил.. объяснял где.. ты не понял (не смог или не захотел - какая фиг разница)...
Я что смог (ну насчёт лажи с транзакциями) - я тебе втемяшил.. а больше??? Хм-м-м ты не хочешь шевелить извилинами... тебя нравиться та лужа в которой ты седишь???.. Ну так и оставайся в ней... Я же не возражаю... :-))) но терять на тебя время дальше - мне уже надоело... короче.. удачи... :-)) |
|||
254
megalodon
22.08.06
✎
12:37
|
(252) Гений, я с тобой :-) У меня примерно также уже год с лишним работает все. Что в общем то неудивительно, если знать кухню SQL-ных блокировок.
|
|||
255
Bahmet
22.08.06
✎
13:01
|
(254)где ты был раньше,"знаток кухни SQL"? Ща бы баталию с гурманом этой кухни устроили...да жалко он кажись забил на эту ветвь:(
|
|||
256
Гений 1С
гуру
22.08.06
✎
13:02
|
(253) конкретно номер поста, где ты объяснил, почему код неустойчив...
(254) АЛВМЛ попытался наехать, но не удалось. Не на того наехал, ладно АЛВЛМ, отдыхай, ты никому ничего здесь не доказал... Решение изящное, надежное, Гениальное! |
|||
257
Гений 1С
гуру
22.08.06
✎
13:04
|
(253) По ходу все что АЛВЛМ смог сказать - это типо выскочит сообщение "Ошибка блокировки при транзакции".
Ну товарищ, это будет, если запись нового элемента справочника будет идти больше минуты, но даже если так, ты предлагаешь альтернативу - бесконечный цикл, маладец... Лучше уж пусть юзверь нажмет еще раз записать, чем сидит и ждет, когда ж бесконечный цикл законцится.. Гыгыгыгы... А больше замечаний по существу не было. |
|||
258
megalodon
22.08.06
✎
13:09
|
(255) че тут спорить то? если потрейсить SQL то сразу видно, что процедура УстановитьНовыйКод работает точно также, как и запрос Гения.
|
|||
259
Pashkaa
22.08.06
✎
13:11
|
А если при открытии формы нового договора назначать код медодом например УстановитьУникальныйКод() и тут же записывать его программно
|
|||
260
Feanor
22.08.06
✎
13:13
|
Лень читать все, может повторю, создай триггер, который после перед добавлением в таблицу СКЛ (в ней храницца твой справочник) будет проверять, нет ли уже такой записи с таким значением твоего поля, если есть, то увеличивай на 1.
|
|||
261
Гений 1С
гуру
22.08.06
✎
13:38
|
(260) Спасибо, мой метод штатный и главное красивый, без всяких СКЛ работает. ;-)
(259) Так в 1С не принято... ;-) |
|||
262
mx-daemon
22.08.06
✎
13:41
|
эх... понаписали-то... тсс.. про план обмена в случае распределенки так никто и не заикнулся
|
|||
263
Simbad
22.08.06
✎
13:41
|
(261) 1с пишет в скл таблицу только после записи и не допустит задвоение, а если твой метод работает то зачем бадью на 262 сообщения разодить, или у тебя дефицит общенеия.
|
|||
264
Simbad
22.08.06
✎
13:43
|
Млин а на фика базу знаний захломляьб
|
|||
265
Гений 1С
гуру
22.08.06
✎
13:45
|
(263) Да нет, не люблю пустозвонов, которые беспочвенно и неаргументированно обливают грязью полезные вещи. Меня такое поведение задело.
(264) по поводу??? |
|||
266
Гений 1С
гуру
22.08.06
✎
13:45
|
(263) да ну, в 1С можно объявить уникальный индекс???
|
|||
267
Simbad
22.08.06
✎
13:48
|
(266) В СКЛ, можно задать ключ, но дело не в том, внимательно читаем сообщение (260) где написано, что уникальность может соблюдаться тригером, который при записи в таблу будет проверять уникальность, про методы 1с там ничего не описано,
те че лень читать |
|||
268
Гений 1С
гуру
22.08.06
✎
13:50
|
(267) чувак, а ты в курсе, что БГ не рекомендует лазить в СКЛ? К тому же нужно, чтобы метод одинаково работал в файловой и скл версии, че, на файлы тоже триггер будешь ставить, не смеши меня, плиз
|
|||
269
mx-daemon
22.08.06
✎
13:51
|
(263) 1с пишет в скл таблицу только после записи и допустит задвоение при обмене.
Если, конечно программер заплатку не поставил. |
|||
270
Херрес
22.08.06
✎
13:53
|
(267) триггеры - ужасное решение, его поддерживать трудно
|
|||
271
mx-daemon
22.08.06
✎
13:54
|
(268) Таки с рапределенками как быть?
|
|||
272
mx-daemon
22.08.06
✎
13:54
|
+(270) к тому же, сказывается на быстродействии.
|
|||
273
Гений 1С
гуру
22.08.06
✎
13:55
|
(271) в смысле с распределнками?
|
|||
274
Simbad
22.08.06
✎
13:55
|
Млин ты вообще читать умеешь, я не говорю использовать метод СКЛ, на 260 сообщение ты ответил, что у тебя все работает. Я тогда тебя и спросил "на фига же такую ветку подымать было?", а работу тригера я констатирую как факт,
|
|||
275
Simbad
22.08.06
✎
13:55
|
(274 +) на сообщение 268
|
|||
276
John Connor
22.08.06
✎
13:59
|
2 Гений 1С
Вообще-то решение этой проблемы уже было подсказано в посте (133). Минус: надо завести еще один справочник Плюс: можно записывать ссылку на объект, которому отдали код. За уникальностью кода будет следить сама 1С, + можно мутить всякие префиксы. |
|||
277
Feanor
22.08.06
✎
14:20
|
(268) Гы, а ты свое решение потестил на файл-серверной?
|
|||
278
Feanor
22.08.06
✎
14:20
|
(277)+ чЁ т я не совсем уверен, что там будет все казырно... :)))
|
|||
279
Feanor
22.08.06
✎
14:24
|
(267) хмм... насчет ключа в голову как то не пришло, интересно, что будет, если сделать...
(268) "чувак, а ты в курсе, что БГ не рекомендует лазить в СКЛ?" Значешь, напомнил анекдот: "Сын программиста папе: -Пап, а как это работатет?!? -Тссс... работает, и пусть работает")) |
|||
280
Гений 1С
гуру
22.08.06
✎
14:24
|
(277) нету под рукой? Почему ты не уверен, в ЖКК сказано, что вся таблица заблокируется целиком... Думаю ДЛЯ ИЗМЕНЕНИЯ тестили и до меня, иначе бы уже слышал, что там баги с этой конструкцией.
|
|||
281
Гений 1С
гуру
22.08.06
✎
14:24
|
нету под рукой ФС
|
|||
282
Feanor
22.08.06
✎
14:32
|
(280) Почему не уверен? потому, что склонен подвергать все сомнению. Хотя на самом деле думаю, что все будет работать, просто насколько корректно и недежно этот механизм реализован самой 1С - вот вопрос, явно ниже, чем в сиквеле.
|
|||
283
sad
22.08.06
✎
14:37
|
Почитайте Профессиональная разработка в среде 1с Предприятие 8.
там все написаност 43 44, 70 |
|||
284
Гений 1С
гуру
22.08.06
✎
14:38
|
(283) нету такой книжки
|
|||
285
Гений 1С
гуру
22.08.06
✎
14:38
|
вы хоть намекните, про что написано
|
|||
286
sad
22.08.06
✎
14:41
|
Я ваш спор читал думал жалко скорость у меня плохая буквы тискать.
А речь там про блокировки и транзакции. У меня таже трабла была. Я константу менял. Вылез глюк. Посавил для надежности две фишки для регистра сведений Для Изменения и для константы Транзакцию. Пока работает супер. |
|||
287
sad
22.08.06
✎
14:43
|
Купи харошая книга. Я такую и хотел найти. Не просто 1с програмирование а как работает и думает 1с там написано.
|
|||
288
sad
22.08.06
✎
14:45
|
А ругатся зачем. Я считаю скажи если знаешь. не знаешь сиди читай ветку, кто знает поскажет и ты будеш знать.
|
|||
289
Bahmet
22.08.06
✎
14:49
|
(287)может в нетленном электронном виде эта книга будет?
|
|||
290
John Connor
22.08.06
✎
14:50
|
(287)Да было в этой ветке уже и про книги и про блокировки и про транзакции... просто товарисч не прислушивается к чужим советам.
|
|||
291
Гений 1С
гуру
22.08.06
✎
14:51
|
(290) Еще один, гыгыгы... К каким советам? В чем я неправ в решении задачи?
|
|||
292
sad
22.08.06
✎
14:52
|
(289)может. но 40 у.е. она стоит это факт. Интересно почитать на досуге. Многое что методом тыка дошел теперь читаю в понятном изложении. Пока нравится. До середины дойду может мнение поменяется ..:)
|
|||
293
John Connor
22.08.06
✎
14:55
|
(291) В том что не хочешь знать больше чем "работает же!".
|
|||
294
Херрес
22.08.06
✎
14:59
|
(293) а что, разьве кто-то пытался рассказать что-то интересное, что-нибудь кроме
"да это же элементарно", "да это для тебя слишком сложно", "сходи-ка почитай буквари, ЖКК, профессиональную разработку" |
|||
295
Гений 1С
гуру
22.08.06
✎
15:00
|
(293) извини, товарищ, я знаю не только, что работает, но и почему. Внятно знаю почему. А ты здесь гонишь пургу на работающий код...
(294) Ну были товарищи, предлагали методы с константами, вполне неплохие кстати. А вот АЛВЛМ и Ваня Коннор предлагали "покурить буквари" |
|||
296
John Connor
22.08.06
✎
15:08
|
(295)Ты еще книжку издай "Как тяжело быть Гением 1С". См.(276).
Твой код - твои проблемы, меня это не волнует. А курить буквари еще никому не вредило. |
|||
297
Simbad
22.08.06
✎
15:11
|
(296) Нет нужно издать книгу "Как тяжко жить с ошибкой в ДНК"
|
|||
298
argiT
22.08.06
✎
15:13
|
кто победит Гений 1С или его ДНК? делаем ставки!
|
|||
299
Simbad
22.08.06
✎
15:15
|
(295) Мля так оно работет или пургу гонит
|
|||
300
Simbad
22.08.06
✎
15:16
|
300
|
|||
301
argiT
22.08.06
✎
15:16
|
301
|
|||
302
sad
22.08.06
✎
15:17
|
302
|
|||
303
Simbad
22.08.06
✎
15:17
|
Ну че продолжим
|
|||
304
sad
22.08.06
✎
15:17
|
:)
|
|||
305
John Connor
22.08.06
✎
15:17
|
Кто больше?!!
|
|||
306
sad
22.08.06
✎
15:18
|
ню щас ктото девятками завалить сообщениек до макисмума и все
|
|||
307
Simbad
22.08.06
✎
15:18
|
Довайте еще че нибудь добавим в базу знаний
|
|||
308
sad
22.08.06
✎
15:19
|
302,5
|
|||
309
Simbad
22.08.06
✎
15:20
|
Гениииииииииий1с ты где
|
|||
310
argiT
22.08.06
✎
15:20
|
Добавлено в базу знаний [Гений 1С - 21.08.2006 16:33] :)
хорошо звучит (не я это написал!) |
|||
311
Simbad
22.08.06
✎
15:23
|
Волшебник бань ветку!
|
|||
312
Bahmet
22.08.06
✎
15:23
|
как и любого гения,от избытка чувств открытого им кода,его сразил эпеллиптический приступ....и он щас дятелит по клаве хаосный код ногой,застрявшей над столом...
|
|||
313
sad
22.08.06
✎
15:24
|
да давно уже ее прибить надобно
|
|||
314
Bahmet
22.08.06
✎
15:25
|
(311) есчо ФАС скажи
|
|||
315
Simbad
22.08.06
✎
15:25
|
(312) Зачет
|
|||
316
Zolberg
22.08.06
✎
15:25
|
И нескольких участников!
|
|||
317
Simbad
22.08.06
✎
15:27
|
(316) Привед!
|
|||
318
Bahmet
22.08.06
✎
15:30
|
Айда дополним анекдотами базу знаний или приколами....
|
|||
319
Гений 1С
гуру
22.08.06
✎
15:31
|
(300) работает конечно, потому и разбухаю...
|
|||
320
sad
22.08.06
✎
15:31
|
Урок в школе.
- Кто прочитал "Войну и мир"? - А что, ее прочитать надо было? - Конечно. - Бля, а я переписал. |
|||
321
Bahmet
22.08.06
✎
15:31
|
<Dj_Ярик|Enamoured> с тя девки и пиво
<Zont> оО <Zont> ок <Zont> Kusi4ka: пиво захвати <Zont> Dj_Ярик|Enamoured: вопрос улажен |
|||
322
Bahmet
22.08.06
✎
15:33
|
25.02.2005 16:49:07, Светик.
вот б*я... на какой мне нужен телефон? никто за целый день не позвонил... 25.02.2005 16:49:41, 0z. вот б*я... зачем мне нужен член... никто за целый день не отсосал... 25.02.2005 16:49:53, Светик. Денис..! 25.02.2005 16:50:03, 0z. ) Хочешь позвоню? 25.02.2005 16:50:13, Светик. б*ять!!! |
|||
323
Bahmet
22.08.06
✎
15:34
|
<Солнышкин> Настенька: Вы само совершенство, Вы не многословны, и при этом умны.
<Солнышкин> Настенька: Именно это и притягивает меня к Вам. <Настенька> ЙА ЛЮЬЛЮ ЙБАЦО!! |
|||
324
Bahmet
22.08.06
✎
15:34
|
<N.O.E.D.> Tetsuo: как думаешь, сколько минимально необходимо мужиков, сношающихся "паровозиком" чтобы было можно замкнуть круг?
<N.O.E.D.> просто интересно вдруг стало.... <N.O.E.D.> что все замолчали?! <alabama> N.O.E.D.: строишь планы на выходные? |
|||
325
Bahmet
22.08.06
✎
15:34
|
<Imian> балашиха готова к встрече велосипедистов из Юбилейного? :)
<N.O.E.D.> Imian: хыхы. скоро у местных пацанов появяцца новые велики )) |
|||
326
Bahmet
22.08.06
✎
15:36
|
Ща мне Волшебник вручит с улыбкой БАНАН
|
|||
327
sad
22.08.06
✎
15:37
|
Волшбника наверно нету. А то ветку давно убил.
|
|||
328
Bahmet
22.08.06
✎
15:39
|
(327)Тагды дальше травим анекдотики...
|
|||
329
Гений 1С
гуру
22.08.06
✎
15:40
|
(328) сча тебе лайт-модераторы потравят
|
|||
330
argiT
22.08.06
✎
15:45
|
7 страница на подходе!
|
|||
331
Bahmet
22.08.06
✎
15:46
|
(329)Поднатужься...вытяни ветку в макс листов...скажи еще ченить абсурдное...
|
|||
332
Bahmet
22.08.06
✎
15:53
|
(330) лимит скока???
|
|||
333
sad
22.08.06
✎
15:58
|
(332) это ты про терпение модератора :)))
|
|||
334
Bahmet
22.08.06
✎
15:59
|
(333)и про это тоже
|
|||
335
Feanor
23.08.06
✎
03:27
|
(144) Господин гений, а что будет, если ты заблокируешь целиком таблицу с твоим справочником, и кто-то из юзверей попытаецца записать какой-то объект этого справочника? По всей видимости, исключение... Может наступить такой момент, когда элементы активно добавляются и изменяются. Не есть гут. Ничего лучше, чем предврительно создавать элемент и потом выставлять в нем флаг его доступности для записи. Если нет ни одного элемента, доступного для записи (или этот объект заблокирован), то твоя таблица занята для "добавления нового элемента", а запись объекта делает следующие действия: в транзакции записывает захваченный объект и создает новый пустой, с уже увеличенным кодом. "+" - блокировка не всей таблицы, а объекта, "-" - некоторое количество геморроя.
|
|||
336
Гений 1С
гуру
23.08.06
✎
09:25
|
(335) Товарищ Феанор, запись договора идет быстро (блокировка ненадолго), причем блокируется только в результате заведения нового договора, не тот случай, чтобы из пушки по воробьям стрелять. Вполне адекватное задаче решение...
|
|||
337
Feanor
23.08.06
✎
10:12
|
(336) Согласен целиком, что для данной задачи адекватен. Но вот концептуально... Итак, тему, так понимаю, закрыли... ))
|
|||
338
Гений 1С
гуру
23.08.06
✎
13:24
|
а че концептуально, че мудрить... ;-)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |