Имя: Пароль:
1C
1С v8
Покритикуйте нумератор документов
,
0 LenaAt
 
03.08.17
13:23
Написала свой нумератор документов. Программирую в 1С не много, поэтому прошу совета. Может это делается как - то иначе?

Процедура УстановитьНомерДокумента(Источник, СтандартнаяОбработка, Префикс) Экспорт
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Номер");
    
    Попытка
        СтандартнаяОбработка = Ложь;
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ Ссылка.Номер КАК Номер
        |ИЗ Документ." + Источник.Метаданные().Имя + "
        |ГДЕ Ссылка.Дата МЕЖДУ &НачалоГода И &КонецГода И Ссылка.УчастокРК = &УчастокРК";
        Запрос.УстановитьПараметр("НачалоГода", НачалоГода(Источник.Дата));
        Запрос.УстановитьПараметр("КонецГода", КонецГода(Источник.Дата));
        Запрос.УстановитьПараметр("УчастокРК", Источник.УчастокРК);
        Выборка = Запрос.Выполнить().Выбрать();
        Пока Выборка.Следующий() Цикл
            Если Выборка.Номер <> "" Тогда
                Номер = СлужебныеФункции.УбратьЛидирующиеНули(Выборка.Номер);
                Номер = СлужебныеФункции.УбратьСимволыАлфавита(Номер);
                НоваяСтрока = ТЗ.Добавить();
                НоваяСтрока.Номер = Номер;
            КонецЕсли;
        КонецЦикла;
        ТЗ.Сортировать("Номер УБЫВ");
    Исключение
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = ОписаниеОшибки();
        Сообщение.Сообщить();
        СтандартнаяОбработка = Истина;
    КонецПопытки;
    Если ТЗ.Количество() > 0 Тогда
        ПоследнийНомер = ТЗ[0].Номер;
    Иначе
        ПоследнийНомер = 0;
    КонецЕсли;
    Если Источник.УчастокРК = Перечисления.УчасткиРК.Хорошево Тогда
        Источник.Номер = Строка(ПоследнийНомер + 1) + "/ХРК";
    ИначеЕсли Источник.УчастокРК = Перечисления.УчасткиРК.Мытищи Тогда
        Источник.Номер = Строка(ПоследнийНомер + 1) + "/МРК";
    ИначеЕсли Источник.УчастокРК = Перечисления.УчасткиРК.Ярославль Тогда
        Источник.Номер = Строка(ПоследнийНомер + 1) + "/ЯРК";
    ИначеЕсли Источник.УчастокРК = Перечисления.УчасткиРК.Коломна Тогда
        Источник.Номер = Строка(ПоследнийНомер + 1) + "/КРК";
    КонецЕсли;
КонецПроцедуры
47 LenaAt
 
03.08.17
14:23
(38) Это не подразделения, это направления. За 20 лет существования компании они не менялись ни разу.
48 1Снеговик
 
гуру
03.08.17
14:24
(45) православный сын божий)
49 dezss
 
03.08.17
14:24
(43) в паспорте это пишут?
50 dezss
 
03.08.17
14:24
(48) Т.е. в любом случае мужиг)
51 catena
 
03.08.17
14:25
(42)(45)Те, которые "Не определился".
52 Любопытная
 
03.08.17
14:25
(47) это прекрасный довод.
53 LenaAt
 
03.08.17
14:25
(44) Пользователь нигде сам ничего настроить не может. А если сделает, так только дублирование справочника.
54 Любопытная
 
03.08.17
14:26
У меня больше нет вопросов. Ставьте зеленую галочку и в путь :)
55 dezss
 
03.08.17
14:26
(51) А почему же тогда именно Пэ, а не неопределено?
56 catena
 
03.08.17
14:27
(47)Это не повод писать фигню в коде. На 21-м году придет прогрессивное руковдство и начнет все переколбашивать. Поверьте человеку, которому пришлось "убирать дырку в филиалах" (был закрыт давным-давно один из филиалов, новому руководству не понравился пробел у нумерации)
57 catena
 
03.08.17
14:28
(55)Потому что по-русски они всегда были п-сы.
58 1Снеговик
 
гуру
03.08.17
14:28
(55) еще подходит "путиноид")
Но на самом деле я думаю это "пансексуал")
59 1Снеговик
 
гуру
03.08.17
14:29
Пансексуальность — это сексуальная ориентация, не учитывающая различия между полами.
60 LenaAt
 
03.08.17
14:30
(56) Добавить 1 строчку в коде за 20 лет - это какая - то проблема?
61 1Снеговик
 
гуру
03.08.17
14:30
То есть не "Не определился", а "Мне все равно" :)
62 1Снеговик
 
гуру
03.08.17
14:31
(60) как правило, перечисления используются далеко не в одной строчке кода.  В вашем случае да, может быть не критично.
63 LenaAt
 
03.08.17
14:34
(62) И у меня это перечисление не в одном месте используется. Но с современными средствами рефакторинга, которые в 1С появились, я лучше изменю код, чем буду программно работать со справочниками. С перечислением работать легче и надёжнее.
64 Любопытная
 
03.08.17
14:35
(60) Я одного не пойму - вы ж уверены в своей правоте, зачем вопросы задавать?
65 LenaAt
 
03.08.17
14:37
(64) Извините, пожалуйста, если нельзя.
66 1Снеговик
 
гуру
03.08.17
14:37
(63) скажем так, вместо одной строчки будет та же строчка но с вызовом функции, возвращающей постфикс, да придется написать функцию, но это код ты больше никогда трогать не будешь, и никто после тебя не будет должен разбираться куда что надо срочно в коде добавить.
67 Любопытная
 
03.08.17
14:38
(65) я не говорю, что нельзя, я интересуюсь зачем) Это немного разные вещи
68 Йохохо
 
03.08.17
14:39
(63) чем программная работа с перечислением отличается от программной работы с предопределенными справочника?
за "/" в номере вы себя через месяц так проклянете что будете баобабом 10 раз по 300 лет
69 LenaAt
 
03.08.17
14:42
(68) Тем, что элемент перечисления прописан в конфигураторе, он очевиден, а элемент справочника нужно искать с заранее неизвестным результатом.
70 1Снеговик
 
гуру
03.08.17
14:43
А автоматический рефакторинг для меня зло - я его отключаю)

(68) тсс! Не выдавай секреты восьмерки)
А есть еще предопределенное значение плана видов характеристик - тоже можно использовать как перечисление)
71 LenaAt
 
03.08.17
14:43
(67) А зачем вы интересуетесь зачем я задаю вопросы?
72 Amra
 
03.08.17
14:43
(69) Искать предопределенный элемент? Вы б не позорились
73 1Снеговик
 
гуру
03.08.17
14:43
(69) с предопределенными все тоже более чем очевидно. Зато можно еще реквизиты использовать, а в перечислении нет!)
74 LenaAt
 
03.08.17
14:44
(70) И предопределенные значения справочников...
75 Amra
 
03.08.17
14:44
(73) Да, например реквизит "Префикс" :) Но (64)...
76 LenaAt
 
03.08.17
14:46
(72) Расшифруйте свою мысль, пожалуйста? Кто у вас ищет предопределенный элемент справочника?
77 Любопытная
 
03.08.17
14:46
(71) Я пытаюсь понять
78 LenaAt
 
03.08.17
14:46
(77) Что Вы пытаетесь понять?
79 Amra
 
03.08.17
14:46
(76) Вы. Судя по (69)
80 dezss
 
03.08.17
14:47
офф: оспаде...такое ощущение, что я попал в бухгалтерию, а не на форму программистов
81 dezss
 
03.08.17
14:48
*форум
82 LenaAt
 
03.08.17
14:48
(79) А где там написано про предопределенные элементы справочника?
83 X Leshiy
 
03.08.17
14:48
КГ/АМ в общем.
84 Amra
 
03.08.17
14:49
(82) Вы под дурочку косите? Вы там отвечаете тестом про поиск элемента справочника, отвечая на пост про предопределенные элементы
85 LenaAt
 
03.08.17
14:50
(83) Это нормально так хамить другому человеку? Не интересна тема - я вас не держу здесь насильно.
86 Любопытная
 
03.08.17
14:51
(78) Я пытаюсь понять зачем вы просите покритиковать, но при этом критику воспринимаете в штыки.
87 Йохохо
 
03.08.17
14:51
(85) "Тем, что элемент перечисления прописан в конфигураторе, он очевиден, а элемент справочника нужно искать с заранее неизвестным результатом" это что? из (69)
88 Йохохо
 
03.08.17
14:52
хотел человек чтоб его похвалили за проделанную работу, но пошел не в курилку, а на форум =)
89 dezss
 
03.08.17
14:52
(88) +100500...точняк...
Это как вопрос от девушки про то, как она выглядит...
90 X Leshiy
 
03.08.17
14:53
(85) Я грубиян.


Тему неправильно назвала.

Правильно так: "Похвалите мой нумератор документов и меня тоже!"
91 1Снеговик
 
гуру
03.08.17
14:53
Короче по теме вопроса могу сказать: надо добавить вот такие значения перечисления "Пол", чтобы всем хватило:
мужчина, женщина, андрогин, интергендер, бигендер, трансгендер, гендерквир. ))
92 LenaAt
 
03.08.17
14:53
(86) Потому что многие не поняли, что я прошу покритиковать. Я прошу покритиковать саму идею и некоторые участники этой беседы высказали ценные для меня соображения. А работать мне с перечислениями или со справочником - мне виднее самой.
93 X Leshiy
 
03.08.17
14:53
(88) +100500
94 X Leshiy
 
03.08.17
14:53
(92) Какую "идею"?
95 Amra
 
03.08.17
14:54
(91) Да чо паришься, в ЗиК пол - справочник!)
96 catena
 
03.08.17
14:54
(91)и "Другое"
97 LenaAt
 
03.08.17
14:54
(90) Я с грубиянами не общаюсь. Извините...
98 X Leshiy
 
03.08.17
14:54
(92) Идею написать свой нумератор? Ну если есть необходимость, электричка навстречу.
99 1Снеговик
 
гуру
03.08.17
14:55
(92) виднее - не значит правильнее) Надо учиться выбирать оптимально, исходя из задачи, и стараться думать на будущее.
100 LenaAt
 
03.08.17
14:55
В общем я поняла. Налетели жирные тролли и кормятся. Спасибо всем, кто обсуждал тему конструктивно.
101 Барматолог
 
03.08.17
14:58
(0) Не закладывайте в номер документа какую либо логику. Это методологически не верно.

Префиксация оправдана только в том случае, когда есть несколько баз, которые сливаются в одну. Остальное от лукавого.

Все.
102 Amra
 
03.08.17
15:00
(101) Расскажи это законодателям, требующим раздельную нумерацию например счетов-фактур, и им пофиг что десяток организаций ведется в одной базе. Ну и т.д.
103 Барматолог
 
03.08.17
15:03
(102) Законодателям зачем рассказывать?

А с налоговой можно договориться - она закрывает глаза на нарушения нумерации.
104 ptiz
 
03.08.17
15:18
(63) В справочник можно было суффикс запихнуть. Да и сейчас - лучше его в рег.сведений, чем в коде прописывать.
105 Dmitrii
 
гуру
03.08.17
16:09
(0) Изначально идея писать свой нумератор - бред.
Безумный, бесполезный, беспощадный и никому ненужный бред.
1С-ка замечательно нумерует объекты (документы, элементы справочников и т.д.) с использованием префиксов.
Задача решается несколькими строчками простейшего кода в подписке на соответствующее событие.
Применение постфиксов (или как их называют иногда суффиксов) - маразм и дебилизм.

Код в (0) - работа ради работы.

Ну и феерией этого бреда будет падение системы с ошибками "Неуникальный номер". В зависимости от количества одновременно работающих пользователей и объема генерируемого ими документопотока, частота этой ошибки будет варьироваться от пары раз в неделю до "постоянно и регулярно".

И кстати я не совсем понял как система будет себя вести при изменении периода нумератора (года). Например, декабрьский документ решили переделать на январь...
106 LenaAt
 
03.08.17
16:30
(105) Мне нужен номер в виде Число + постфикс. Поэтому я и написала свой нумератор. Потом, из - за неуникального номера система не падает, а не даёт записать документ. Пользователь в данной ситуации может просто ввести свой номер, так что не надо наводить ужасы. А если снять галочку контроль уникальности, то проблемы вообще не будет. А при изменении даты документа можно номер изменить в соответствии с нумерацией следующего года. Как видите, всё просто.
107 Барматолог
 
03.08.17
16:54
(106) >>Пользователь в данной ситуации может просто ввести свой номер

Плохо это. Очень плохо. Пользователей нельзя допускать к изменению номеров.
108 LenaAt
 
03.08.17
16:59
(107) Как у меня задумано, нарушение уникальности быть не может. Если такое случится, пользователь мне позвонит, а я ошибку исправлю. Если меня не будет, то поставит пользователь в конце номера /2 и делов - то. Что в это плохого? Я как увижу, разберусь с причинами и опять же исправлю ошибку.
109 Любопытная
 
03.08.17
17:00
(106) для таких извращений обычно добавляют свой реквизит типа "номер внутренний" и в него вписывают что угодно, не ломая при этом типовую нумерацию объектов.
110 dezss
 
03.08.17
17:04
(108) Да пойми же ты. Тебя тут пытаются научить как писать правильно и универсально, а не как задумано, а ты все думаешь, что пытаются унизить)
111 LenaAt
 
03.08.17
17:06
(109) Я не вижу здесь никаких извращений. Сегодня запустила свой нумератор в реальную работу - пока всё хорошо. Пользователи довольны.
112 Любопытная
 
03.08.17
17:08
(111) Ну и прекрасно тогда.
113 LenaAt
 
03.08.17
17:08
(110) Ничего я такого не думаю. Мне действительно нужен номер в формате Число + Постфикс. Стандартный номератор 1С с такой задачей не справляется. Мой работает и пока без единой проблемы.
114 dezss
 
03.08.17
17:11
(113) тебе же сказали, типовой не трогать, завести свой отдельно и делать с ним что угодно, уже несколько раз сказали. А твой все равно может нарушить уникальность, и сразу звонки, правки и т.д. И зачем тебе это?
115 qsunnx
 
03.08.17
17:12
(8) Архитектор.
В 1С.
Архитектор чего, позвольте уточнить. Канбан-доски?
116 LenaAt
 
03.08.17
17:20
(114) Нарушение уникальности возможно только в случае грязного чтения из БД. Но я подумаю над эти вопросом. Пока флажок контроль уникальности снят и звонков не будет.
117 ptiz
 
03.08.17
17:20
Можете меня пинать, но в ЗУП 2.5 у меня сделано аналогично. Возможны 2 варианта номеров кадровых документов: с суффиксами "-а", "-о", "-к".
Юзер жмет в документе горячую клавишу - и ему предлагается выбор префикса.
Основное отличие от (0) только в том, что в запросе есть "ПЕРВЫЕ".

P.S. Ни одна форма и модуль документов не пострадали :)
118 ptiz
 
03.08.17
17:21
+(117) "3 варианта "
119 Diman000
 
03.08.17
17:21
Сколько крутых архитекторов и кодеров в ветке, прямо ужас.
Ну да, код с перебором значений перечисления кривоват. Но идея переделать перечисление в справочник в системе, которая несколько лет работает, намного более безумна. Вы хоть понимаете чем это потенциально грозит? И ради чего, ради того чтобы на мисте все похлопали в ладоши?
Если хочется убрать кривизну кода, то надо добавить регистр сведений с постфиксами. А за идею переделать перечисление в справочник только ради одного реквизита я бы к стенке поставил.
120 Garykom
 
гуру
03.08.17
17:25
(0) "- Хорошо... Хорошо... Очень хорошо... "©
121 Garykom
 
гуру
03.08.17
17:25
Врач слушает больного и приговаривает:
- Хорошо... Хорошо... Очень хорошо...
- А что же хорошего? Все болит!
- Хорошо, что у меня такого нет! ...
122 Diman000
 
03.08.17
17:26
Ну и сходу назвать бредом свой нумератор с постфиксами это тоже чересчур. Мало ли для чего это надо, бывают корпоративные стандарты нумерации, в конце концов. Если нет возможности их изменить придется придумывать техническое решение, платформа это позволяет.
Создать отдельный реквизит ВнутреннийНомер это один из вариантов, но надо и понимать все его минусы. Надо искать золотую середину, а не называть бредом попытки автора.
123 LenaAt
 
03.08.17
17:26
(120, 121) Пожалуй покину тему на часик, пока троли разбегутся.
124 Garykom
 
гуру
03.08.17
17:27
(119) Делаешь справочник и туда реквизитом засовываешь перечисление, в чем трабла то?
125 Йохохо
 
03.08.17
17:28
(113) у Вас номер документа состоит (ну должен)из уникального числа и постфикса. Зачем писать в базу номер с постфиксом? зачем? показать пользователю можно хоть с картинкой. Если пользователь хочет искать и вводит суффикс аффикс префикс их можно тупо отбросить (тихо тихо молча) и искать по уникальному числу. Надо было просто обработать что ПОКАЗАТЬ ПОЛЬЗОВАТЕЛЮ, а не портить нумератор нумерацию базу и карму
126 Diman000
 
03.08.17
17:28
Лучше бы спросили автора, что будет в случае одновременного создания нескольких документов одного вида. Похоже, что здесь-то уникальность и нарушится.

Вот давать пользователю редактировать номер, пожалуй, единственное однозначно плохое решение. По крайней мере нельзя это делать бесконтрольно.
Пусть хоть записывается куда-то это действие где можно быстро найти. И предупреждающее сообщение выскакивает.
127 Diman000
 
03.08.17
17:28
(124) А потом конфу перепахиваешь где это перечисление используется. Шикарный план.
128 Garykom
 
гуру
03.08.17
17:28
(127) Не тупим плиз, конфу не трогаем
129 dezss
 
03.08.17
17:30
(126) Об этом в основном и была речь в конце темы.
130 Diman000
 
03.08.17
17:30
(128) А, то есть ты просто хочешь еще один справочник с постфиксами, где реквизиты наше перечисление и постфикс?
131 Garykom
 
гуру
03.08.17
17:31
(130) Угу чисто для нумерации, переделывать ли на справочники прочий кривой код это уже отдельный вопрос.
132 Garykom
 
гуру
03.08.17
17:34
1. Стандартную нумерацию не трогать, "постфиксы" писать как префиксы и еще отдельно хранить этот "постфикс" в виде справочника или еще как.
2. Сделать отдельный реквизит для доков куда писать в нужной форме с постфиксом и на печать и для журналов юзать этот "изврат".
133 Diman000
 
03.08.17
17:34
(131) Тогда надо не справочник добавлять, а РС, как я и написал. В справочнике уникальность значений перечисления не будет контролироваться, а она нам нужна.
134 Dmitrii
 
гуру
03.08.17
17:35
(113) >> Мне нужен номер в формате Число + Постфикс

Нет. Тебе это не нужно.
Опытные и неглупые люди тебе пытаются объяснить почему.
Как минимум две причины:
1. Никакой написанный тобою нумератор не будет работать лучше, чем стандартный встроенный в платформу. К сожалению встроенный в платформу умеет нумеровать только с префиксами (с постфиксами/суфиксами он не работает).
2. использование постфиксов пораждает множество проблем с сортировками в отчетах и списках. Отмазка про сортировку по дате - детский лепет.

(108) >> нарушение уникальности быть не может.

Может. Как только два пользователя одновременно попытаются записать документ у обоих будет выдан один и тот же номер. Если же ты достаточно грамотно наложишь исключительные блокировки, то появляется риск отваливания по ошибке ожидания на взаимоблокировкахю

>> Если такое случится, пользователь мне позвонит, а я ошибку исправлю.

Это вообще бред. Ты вечная? Бессмертная?
F если пользователю нужно распечатать срочно документы? Он их распечатает с каким-нибудь кривым номером, который вобьет вручную. А как потом исправлять? - перепечатывать и переподписывать первичку? Идиотизм!

Так делать нельзя.

>> ...поставит пользователь в конце номера /2 и делов - то. Что в это плохого? Я как увижу, разберусь с причинами и опять же исправлю ошибку.

Это то и плохо! Это породит бардак в нумерации.
135 Garykom
 
гуру
03.08.17
17:37
(133) Пофиг можно и РС и справочник это уже дело вкуса.
Я бы справочник заюзал ибо эти постфиксы к чему то наверно привязаны и может их проще "выбирать".
136 azernot
 
03.08.17
17:38
(119) надо всего лишь в модуле менеджера перечисления сделать функцию возвращающую префикс.

Типа
Функция ПолучитьПрефиксУчастка(ЗначениеПеречисления) Экспорт
Префикс = "";
Если ЗначениеПеречисления = Перечисления.УчасткиРК.Хорошево Тогда
       Префикс = "/ХРК";
    ИначеЕсли Источник.УчастокРК = Перечисления.УчасткиРК.Мытищи Тогда
        Источник.Номер = Строка(ПоследнийНомер + 1) + "/МРК";
    ИначеЕсли Источник.УчастокРК = Перечисления.УчасткиРК.Ярославль Тогда
        Источник.Номер = Строка(ПоследнийНомер + 1) + "/ЯРК";
    ИначеЕсли Источник.УчастокРК = Перечисления.УчасткиРК.Коломна Тогда
        Источник.Номер = Строка(ПоследнийНомер + 1) + "/КРК";
    КонецЕсли;

КонецФункции

И при нумерации обращаться к этой процедуре.
Значение перечисления по-любому исправлять в конфигураторе, поэтому одновременно можно и функцию в модуле менеджера подправить.
137 azernot
 
03.08.17
17:39
*(136)
Пардон, не тот копипаст

Функция ПолучитьПрефиксУчастка(ЗначениеПеречисления) Экспорт
    
    Префикс = "";
    Если ЗначениеПеречисления = Перечисления.УчасткиРК.Хорошево Тогда
       Префикс = "ХРК";
    ИначеЕсли ЗначениеПеречисления = Перечисления.УчасткиРК.Мытищи Тогда
        Префикс = "МРК";
    ИначеЕсли ЗначениеПеречисления = Перечисления.УчасткиРК.Ярославль Тогда
        Префикс = "ЯРК";
    ИначеЕсли ЗначениеПеречисления = Перечисления.УчасткиРК.Коломна Тогда
        Префикс = "КРК";
    КонецЕсли;
    
    Возврат Префикс;
КонецФункции
138 azernot
 
03.08.17
17:41
+(136)
ну и соответсвенно в процедуре нумерации

Источник.Номер = Строка(ПоследнийНомер + 1) + "/"+Перечисления.УчасткиРК.ПолучитьПрефиксУчастка(Источник.УчастокРК);
139 azernot
 
03.08.17
17:41
(134) +100
140 КоньЛапчатый
 
03.08.17
17:43
В модуле объекта есть процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)

в которой можно установить любой префикс, да хоть 10 префиксов, если надо и никаких постфиксов городить не надо. Например, у нас в нетленке 3 префикса, нумератор стандартный. Всё работает, как часики.

А вообще, автор - тролль.
141 КонецЕсли
 
03.08.17
19:19
А у вас всех вот это: Строка(КакоетоЧисло)  нормально работает когда КакоетоЧисло до 1000 дойдёт? У меня вот оно начинает символы группировок в номера вставлять :). Поэтому только Формат() и "ЧГ=".
142 DomovoiAtakue
 
03.08.17
19:25
Я плачу. Некем будет нас заменить.
143 Garykom
 
гуру
03.08.17
20:06
(142) Фрешем заменят и кучей обезьянок которые будут вручную переименовывать

Сча переизбыток малоквалифицированной рабсилы, поэтому тем кому не нужна и скорость и качество могут обойтись подешевле ))
144 Franchiser
 
гуру
03.08.17
20:25
Это не нумератор, а нумерация.
Жди ошибок "номер не уникальный" : при реальной работе пользователей несколько  одновременном могут  получить из базы один и тот же номер для инкремента
145 Franchiser
 
гуру
03.08.17
20:26
Если нужен суффикс, я бы завел отдельный реквизит ПредставлениеНомера как это сделано в типовых.
146 DomovoiAtakue
 
03.08.17
23:03
(145)Тут на галочку строчат и объекты правильные внедрять не хотят, а чтоб голову применять для решения нетопорно в лоб, только если 3 галочки за задание дадут :)