Имя: Пароль:
1C
 
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

лТекНомерСоединения = НомерСоединенияИнформационнойБазы();
Пока Константы.БлокировкаНумерации.Получить() <> лТекНомерСоединения Цикл
   Пока Константы.БлокировкаНумерации.Получить() <> 0 Цикл
   КонецЦикла;
   Константы.БлокировкаНумерации.Установить(лТекНомерСоединения);
КонецЦикла;                        
// Здесь получаем уникальный номер
// Например запросом: ВЫБРАТЬ МАКСИМУМ(Документы.КакойТоДокумент.Код)
Константы.БлокировкаНумерации.Установить(0);
212 Кецалькоатль
 
21.08.06
16:12
Теория рекомендует еще устанавливать рандомный интервал ожидания. Но можно использовать тот же номер соединения. Можно реализовать так:


лТекНомерСоединения = НомерСоединенияИнформационнойБазы();
Пока Константы.БлокировкаНумерации.Получить() <> лТекНомерСоединения Цикл
   Пока Константы.БлокировкаНумерации.Получить() <> 0 Цикл
   КонецЦикла;
   Константы.БлокировкаНумерации.Установить(лТекНомерСоединения);
   Для лСчетчик = 1 по лТекНомерСоединения * 5 Цикл
   КонецЦикла;
КонецЦикла;                        
// Здесь получаем уникальный номер
// Например запросом: ВЫБРАТЬ МАКСИМУМ(Документы.КакойТоДокумент.Код)  
Константы.БлокировкаНумерации.Установить(0);
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
а че концептуально, че мудрить... ;-)
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший