Имя: Пароль:
1C
1С v8
Генерировать числа по порядку
0 Олеся999
 
16.02.15
07:45
http://lvkr.ru/f/ubQsyc/640.jpg


Нужно сгенерировать числа по порядку
Например: 000001
          000002
          000003
          000004
Потом Говорим "Провести и закрыть" ...у нас записываются эти числа в регистр.
Потом говорим создать новый элемент списка.
И заново нажимаем сгенирировать
И у нас уже продолжается с 000005
                           000006
                           000007
                           и.т.д
Как это можно осуществить ?
1 hhhh
 
16.02.15
07:57
дык, в 1с всё так генерируется. Добавьте справочник Штрихкоды. Коды в этом справочнике будут так и генерироваться.
2 ilyavorobyev
 
16.02.15
08:01
Говорить много еще надо?
3 Олеся999
 
16.02.15
08:52
(1) А можно по подробнее ?
4 Cube
 
16.02.15
09:01
(3) Тебе предлагают вместо регистра сведений использовать справочник для этой задачи.
Когда фотка новая будет? :)
5 Олеся999
 
16.02.15
09:32
(4) Так просто в регистре сведений он будет уникальный и не будет повторяться ... а если повторится  то док не проведется
Поменяла позже обновится:)
6 Timon1405
 
16.02.15
09:37
(0) Все уже придумано, посмотрите форму "ФормаГрупповогоДобавления" справочника "ОсновныеСредства" в БП 2.0/УПП
7 ilyavorobyev
 
16.02.15
09:45
(0) конфигурация типовая? реквизит ШК это строка? или ссылка на справочник?
8 Олеся999
 
16.02.15
09:51
(7) конфигурация не типовая ....самописная
9 ilyavorobyev
 
16.02.15
09:58
(8) есть два типа пути:
1.Как сказали в (0) добавить справочник штрихкоды и пользователи сами будут создавать элемент справочника при заполнении и номера у этих элементов будут генерироваться автоматически а реквизит в табл. части ШК будет ссылкой на справочник Штрихкоды.
2.Генерировать числа от последнего числа взятого из регистра в котором ты будешь запись делать
10 AliAksA
 
16.02.15
10:01
(1) как вариант - использовать константу числового типа и переводить форматом в строку
11 Олеся999
 
16.02.15
10:13
(9) а как вот 2 вариант осуществить?
12 Остап Сулейманович
 
16.02.15
10:14
(11) Прочитать значение из регистра. Добавить единичку. Заюзать там, где нужно. В регистр записать значение + 1.
13 vde69
 
16.02.15
10:18
(12) эммм....

а если сразу два человека прочитают одновременно и добавят по 1шт...

тут без блокировки не обойтись (или контроля уникальности....)
14 AliAksA
 
16.02.15
10:19
(13) транзакция спасет мир)
15 Олеся999
 
16.02.15
10:21
а если делать чтобы при создании позиции номер присваивался автоматически ...как это можно осуществить ?
16 ilyavorobyev
 
16.02.15
10:22
(15) позиции это новой строки в табличной части?
17 ilyavorobyev
 
16.02.15
10:22
(16) или когда номенклатура создается?
18 Остап Сулейманович
 
16.02.15
10:24
(15) Для хранения вот этого вот "позиции" можно использовать справочник см (9)п.1. И тогда нумерация будет автоматической. Только геморроя поимеешь больше, чем с РС.
19 vde69
 
16.02.15
10:25
(14) транзакция спасет только если внутри будет запрос "для изменения" а это и есть явная блокировка....
20 ilyavorobyev
 
16.02.15
10:25
(18) с чего это они гемора поимеет с нового справочника или регистра сведений?!?
21 Остап Сулейманович
 
16.02.15
10:27
(20) Со справочника? Очень просто. Вводим новый документ - создаем позиции в справочнике. Все отлично автонумеруется. Потом хлоп - решаем, что документ не нужен. Отказываемяс его записывать. Что делать с новосозданными элементами справочника?
22 ilyavorobyev
 
16.02.15
10:28
(21) очисти, удали, это самописка, можешь там свой блэкджек с ш... сделать
23 Остап Сулейманович
 
16.02.15
10:30
(22) Количество шлюх в блекджеке может получиться значительно меньше полученного геморроя.
24 AliAksA
 
16.02.15
10:30
(19) это для константы) её все равно шустрее менять чем по регистру барахтаться
25 vde69
 
16.02.15
10:35
НачатьТранзакцию();
        
        ID_Поставки = ОбменДанными.ПолучитьМаксИДП();    
        ПолныеПрава.ЗаблокироватьID_КлиентскогоДокумента (ID_Поставки - 1);
        НовыйУИД = Строка(Новый УникальныйИдентификатор);
        МенеджерЗаписи = РегистрыСведений.КлиентскиеДокументы.СоздатьМенеджерЗаписи();

-------------------------------
-------------------------------
-------------------------------

Процедура ЗаблокироватьID_КлиентскогоДокумента (ID_Поставки) Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст=
        "ВЫБРАТЬ
        |ИЗ
        |    (ВЫБРАТЬ

        |    ИЗ
        |        РегистрСведений.КлиентскиеДокументы КАК КлиентскиеДокументы
        |    ГДЕ
        |        КлиентскиеДокументы.ID_Поставки = &ID_Поставки
        |        И КлиентскиеДокументы.Основной) КАК ВложенныйЗапрос
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлиентскиеДокументы КАК КлиентскиеДокументы
        |        ПО ВложенныйЗапрос.ДоговорПоставки = КлиентскиеДокументы.ДоговорПоставки
        |            И ВложенныйЗапрос.ТипДокумента = КлиентскиеДокументы.ТипДокумента
        |            И ВложенныйЗапрос.НомерДокумента = КлиентскиеДокументы.НомерДокумента
        |            И ВложенныйЗапрос.ДатаДокумента = КлиентскиеДокументы.ДатаДокумента
        |
        |ДЛЯ ИЗМЕНЕНИЯ
        |    РегистрСведений.КлиентскиеДокументы";
        
    Запрос.УстановитьПараметр("ID_Поставки", ID_Поставки);
    Запрос.Выполнить();
КонецПроцедуры
26 Не молодой
 
16.02.15
10:39
(25) а в данном случае блокировка продлится до окончания транзакции или завершится сразу после процедуры ЗаблокироватьID_КлиентскогоДокумента?
27 Олеся999
 
16.02.15
10:40
(25) Да я думаю можно без блокировки потому что делает приход только 1 человек
28 ilyavorobyev
 
16.02.15
10:42
(27) за все время существования этой темы, можно было уже решить задачу, тебе столько вариантов скинули
29 Олеся999
 
16.02.15
10:42
Мне тупо нужно считывать последний номер из регистра и делать +1
30 vde69
 
16.02.15
10:43
(26) до конца транзакции
31 AliAksA
 
16.02.15
10:45
(27) (29) ну так юзани константу для счетчика - на кой тебе геморой с регистром, да и перевести ручками можно при необходимости - бывали случаи
32 ilyavorobyev
 
16.02.15
10:47
(0) добавь голосовалку к теме)))
33 Cube
 
16.02.15
10:50
(5) "Поменяла позже обновится:)"
Молодец))
34 Олеся999
 
16.02.15
10:52
А есть какие-нибудь примеры ?)
35 Cube
 
16.02.15
10:52
(29) У тебя РС периодический? Номер хранится где: в измерениях/ресурсах/реквизитах?
36 Остап Сулейманович
 
16.02.15
10:56
(34) Примеры чего?
- установки блокировки?
- Чтения из РС?
- инкрементирования?
- записи в РС?
- снятия блокировки?
37 Cube
 
16.02.15
10:58
(36) Сразу видно - первый раз зашел в тему Олеся999 ? :)
38 Олеся999
 
16.02.15
10:59
39 Cube
 
16.02.15
11:02
(38) Для чего нужен ШК? Где он потом используется?
Странно, что ты его в измерения положила...
40 vde69
 
16.02.15
11:04
(39) ШК в измерении гарантирует отсутствие задвоеных элементов :)
41 Олеся999
 
16.02.15
11:05
(39) в ШК хранятся штрих коды в измерения сделала что бы документ проводился , в случае если штрих код повторяется то документ не проведется.
42 Олеся999
 
16.02.15
11:07
РС Непереодический ....
Подчинение ригистру
43 Cube
 
16.02.15
11:08
(41) Если РС нужен он только для контроля уникальности, то выкинь его нафиг))
У тебя же номенклатура не привязана к этому РС...

Вопрос: о одной позиции номенклатуры может быть только один ШК или ШК может быть несколько?
44 Олеся999
 
16.02.15
11:09
(36) Чтение из РС штрих кода +1
45 AliAksA
 
16.02.15
11:09
(41,42) писец тупость ... если сведения по ШК не меняются - нафиг регистр - ура справочнику, но их изменений (допустим в случае переупаковки изменилась масса изделия, а штрихкод остался) - только регистр
46 Cube
 
16.02.15
11:10
(40) На бумаге... :)
47 AliAksA
 
16.02.15
11:11
+(46) это точно)
48 vde69
 
16.02.15
11:12
вообще можно без регистра....


при печати:

    мСтрокаШапка = НомерДока + "," + СсылкаНаОбъект.УникальныйИдентификатор();
    мСтрокаШапка = СтрЗаменить(мСтрокаШапка, "-", "");
    ОбластьШапка.Рисунки.ШтрихКодШапка.Объект.ТипКода = 4;
    ОбластьШапка.Рисунки.ШтрихКодШапка.Объект.Сообщение = ВРег(мСтрокаШапка);
49 Остап Сулейманович
 
16.02.15
11:14
(48) В наличии одна неприятность. Строка документа не имеет УИД.
50 Cube
 
16.02.15
11:14
(48) Нафиг там номер дока?)) Боишься, что попадешь в вероятность 1 / 3,4?10^38 ? :))))
51 AliAksA
 
16.02.15
11:17
из практики: на восьми одновременно работающих конвейерах, с которых генерируются штрихкоды на одном справочнике, бывали пробои - создавались записи с неуникальными кодами, несмотря на внутренние настройки ... но это фигня - один раз два человека с разных мест умудрились один док одновременно открыть - вот тогда веселуха была)
52 Олеся999
 
16.02.15
11:18
(43) Этот ШК не как не привязан к номенклатуре
Он присваивается  в приходной накладной ...(штрих код уникальный для каждого товара)  
То есть в номенклатуре  например  есть Блокнот 1 с заводским штрихом 23143124
В приходной накладной  по  23143124 мы идентифицируем что это   Блокнот1.
Например   пришло 3шт
мы заносим и присваиваем  ШК на нашем складе каждому блокноту1  
Блокнот1 ШК 1111 ячейка 1
Блокнот1 ШК 1112 ячейка 1
Блокнот1 ШК 1113 ячейка 2
И раскладываем  по ячейкам
53 Олеся999
 
16.02.15
11:20
(52) После чего распечатываем ШК и клеем на каждый блокнот свой ШК
54 vde69
 
16.02.15
11:21
(50) это не номер доупента а идентификатор ВИДА документа, что-бы потом по нему открыть элемент можно было...
55 vde69
 
16.02.15
11:23
(54)+

    НомерДока = "";
    Если ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.Сделка") Тогда
        ИмяДок = "Сделка";
        НомерДока = "1";
    ИначеЕсли ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.СчетНаОплату") Тогда
        ИмяДок = "СчетНаОплату";
        НомерДока = "2";
    ИначеЕсли ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
        ИмяДок = "РеализацияТоваровУслуг";
        НомерДока = "3";
    ИначеЕсли ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.ПеремещениеТоваров") Тогда
        ИмяДок = "ПеремещениеТоваров";
        НомерДока = "4";
    ИначеЕсли ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.ОприходованиеТоваров") Тогда
        ИмяДок = "ОприходованиеТоваров";
        НомерДока = "5";
    ИначеЕсли ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.СписаниеТоваров") Тогда
        ИмяДок = "СписаниеТоваров";
        НомерДока = "6";
    ИначеЕсли ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.ПоступлениеТоваровУслуг") Тогда
        ИмяДок = "ПоступлениеТоваровУслуг";
        НомерДока = "7";
    ИначеЕсли ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.ЗаявкаНаЗакупку") Тогда
        ИмяДок = "ЗаявкаНаЗакупку";
        НомерДока = "8";
    ИначеЕсли ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.ЗаказПоставщику") Тогда
        ИмяДок = "ЗаказПоставщику";
        НомерДока = "9";
    Иначе
        Возврат ТабДок;
    КонецЕсли;
56 Cube
 
16.02.15
11:25
(52) Делай константу ПоследнийШтрихкод и ей пользуйся.
57 Cube
 
16.02.15
11:26
(54) (55) Ну, тогда "вопросов больше не имею" (с) Дискотека авария :)
58 Олеся999
 
16.02.15
11:28
(56) ПоследнийШтрихкод его как то запросом нужно брать ?)
59 Олеся999
 
16.02.15
11:28
(58) из РС ?
60 AliAksA
 
16.02.15
11:29
(52) у вас там не мазохисты часом собрались или вы тупо волыните, потому что нечем занятся в рабочее время?
61 Cube
 
16.02.15
11:30
(58) СП:

КонстантаМенеджер.<Имя константы> (ConstantManager.<Имя константы>)
Получить (Get)

Синтаксис:
Получить()

Возвращаемое значение:
Тип: Произвольный.
Текущее значение константы.

Описание:
Получает значение константы.

Доступность:
Сервер, толстый клиент, внешнее соединение.
Примечание:

При каждом использовании метода происходит считывание значения из базы данных.

Пример:
Сообщить("Директор у нас: " + Константы.Директор.Получить());
62 AliAksA
 
16.02.15
11:30
(57) = (10) - якорь отцепляй, кады на форум лезешь ... возвращаю "вопросов больше не имею")))
63 Cube
 
16.02.15
11:30
(59) РС удали и забудь про него.
64 AliAksA
 
16.02.15
11:31
(61)и про транзакцию не забудь - в (14) упоминалась)
65 Cube
 
16.02.15
11:34
(62) (64) Пациент: Доктор, помогите, меня никто не замечает
Доктор: Кто здесь?
=))
66 AliAksA
 
16.02.15
11:38
(65) как-то так) ... но РС я бы не удалял - возможно где-то из него и читаются характеристики предметов, которым присвоен штрихкод
67 Олеся999
 
16.02.15
11:45
(65)
http://lvkr.ru/f/YZEpWP/800.jpg
создала константу
А генератор что то вроде этого ?



&НаСервере
Процедура СгенерироватьНаСервере()
ЗначениеКонстанты = Константы.ШК_Константа.Получить()    
КонецПроцедуры

&НаКлиенте
Процедура Сгенерировать(Команда)
    СгенерироватьНаСервере();
    Элементы.ТаблЧасть.ТекущаяСтрока=ЗначениеКонстанты+1;
    Элементы.ТаблЧасть.ТекущиеДанные.ШК = Объект.ТекстШтрихКода;

    

КонецПроцедуры
68 AliAksA
 
16.02.15
11:49
(67) жесть))) а сразу после получения константу на 1-ку увеличить и сохранить и все это в транзакции не хочешь?
да и проделать все этов функции которая возвращает готовое значение было-бы куда веселее)
69 AliAksA
 
16.02.15
11:50
(67) ну все равно удачи)
70 Cube
 
16.02.15
11:55
(67) Почти угадала:

&НаСервере
Функция СгенерироватьНаСервере()
    ЗначениеКонстанты = Константы.ШК_Константа.Получить() + 1;
    Константы.ШК_Константа.Установить(ЗначениеКонстанты);
    Вернуть ЗначениеКонстанты;
КонецФункции

&НаКлиенте
Процедура Сгенерировать(Команда)
    Элементы.ТаблЧасть.ТекущаяСтрока = СгенерироватьНаСервере();
КонецПроцедуры
71 Cube
 
16.02.15
11:55
(70) Ой, очепятка:

&НаСервере
Функция СгенерироватьНаСервере()
    ЗначениеКонстанты = Константы.ШК_Константа.Получить() + 1;
    Константы.ШК_Константа.Установить(ЗначениеКонстанты);
    Возврат ЗначениеКонстанты;
КонецФункции

&НаКлиенте
Процедура Сгенерировать(Команда)
    Элементы.ТаблЧасть.ТекущаяСтрока = СгенерироватьНаСервере();
КонецПроцедуры
72 Cube
 
16.02.15
11:57
(71) Блин, ещё и с ТЧ ошибки...
Делай так:

&НаСервере
Функция СгенерироватьНаСервере()
    ЗначениеКонстанты = Константы.ШК_Константа.Получить() + 1;
    Константы.ШК_Константа.Установить(ЗначениеКонстанты);
    Возврат ЗначениеКонстанты;
КонецФункции

&НаКлиенте
Процедура Сгенерировать(Команда)
    Для Каждого СтрокаДокумента Из ТаблЧасть Цикл
        СтрокаДокумента.ШК = СгенерироватьНаСервере();
    КонецЦикла;
КонецПроцедуры
73 AliAksA
 
16.02.15
11:57
(70) брависимо))) но этот урок должна была сама сделать)
74 Cube
 
16.02.15
11:59
(72) Совершенству нет предела - не надо сервер дергать, надо делать всё на сервере:

&НаСервере
Процедура СгенерироватьНаСервере()
    ШК = Константы.ШК_Константа.Получить() + 1;
    Константы.ШК_Константа.Установить(ШК);
    Для Каждого СтрокаДокумента Из ТаблЧасть Цикл
        СтрокаДокумента.ШК = ШК;
    КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура Сгенерировать(Команда)
    СгенерироватьНаСервере();
КонецПроцедуры
75 Cube
 
16.02.15
12:00
(74) Позор на мою седую голову...
Исправляюсь:

&НаСервере
Процедура СгенерироватьНаСервере()
    ШК = Константы.ШК_Константа.Получить();
    Для Каждого СтрокаДокумента Из ТаблЧасть Цикл
        ШК = ШК + 1;
        СтрокаДокумента.ШК = ШК;
    КонецЦикла;
    Константы.ШК_Константа.Установить(ШК);
КонецПроцедуры

&НаКлиенте
Процедура Сгенерировать(Команда)
    СгенерироватьНаСервере();
КонецПроцедуры
76 AliAksA
 
16.02.15
12:01
(72) сделано !!! кнопка сгенерировать тогда позволит перепечатать штрихкоды, если они испортились и нечитабельны
а прежде чем распределенку делать, когда обычно все в терминале сидят, стоит задаться вопросом - "нафига мне лишний геморой?"
77 Cube
 
16.02.15
12:02
"Что-то холестеринчик подскочил" (с) РЭД :)
78 Олеся999
 
16.02.15
12:07
(77) Спасибо Круто работает :))
79 AliAksA
 
16.02.15
12:09
(77) ну разомнись ещё - представь что накладные с нескольких точек вводят))) ... (14) прочитай на всякий)
80 Cube
 
16.02.15
12:15
(79) Да дочитай ты до (27) уж наконец)))
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.