|
Типовые методы для формирования префикса номера документа 🠗Ø (Волшебник 13.02.2024 10:04) | ☑ | ||
---|---|---|---|---|
0
zelenprog
12.02.24
✎
15:36
|
Добрый день!
Программно создается новый документ. Номер документа (число), который должен быть у этого документа, известен. К этому номеру-числу надо добавить префиксы в типовом формате. Типовой формат нумерации в базе стандартный: "ИИОО-0000ХХ", где "ИИ" – префикс информационной базы, "ОО" префикс организации, 0000ХХ – номер с лидирующими нулями. Какими методами нужно воспользоваться, чтобы преобразовать число "ХХ", которое известно, в строку с префиксами "ИИОО-0000ХХ"? Объясните пожалуйста. |
|||
1
Волшебник
12.02.24
✎
15:38
|
ДокОбъект.Номер = "ИИОО-0000" + ХХ;
или ДокОбъект.Номер = "ИИОО-" + Формат(ХХ,"<форматная строка с ведущими нулями>"); |
|||
2
YFedor
12.02.24
✎
15:45
|
(0) Создаешь новый документ, применяешь к нему УстановитьНовыйНомер - получаешь номер документа со всеми префиксами.
Смотришь, если последние 2 знака числа - то заменяешь их на ХХ. Дальше смотришь в обратную сторону до "-", если это число, но не 0, заменяешь на 0 |
|||
3
mikecool
12.02.24
✎
16:07
|
(0) а в чем проблема?
типовые средства сами все пронумеруют или тебе надо "встраивать" номера в существующие? |
|||
4
zelenprog
12.02.24
✎
16:09
|
(1) Так не сработает.
"ИИ" и "ОО" - это шаблон. У каждой базы и организации они "свои". Надо чтобы типовой метод сам автоматически подставил конкретный "ОО" в зависимости от организации. |
|||
5
zelenprog
12.02.24
✎
16:12
|
(3) >> или тебе надо "встраивать" номера в существующие?
Да, можно так сказать. Числовой номер документа уже имеется. То есть имеется "ХХ". Надо только к нему добавить "правильные" префиксы (в зависимости от базы и организации в документе) и нужное количество нулей, чтобы весь номер получился в типовом формате. |
|||
6
Волшебник
12.02.24
✎
16:14
|
(4) ДокОбъект.Номер = ПрефиксИБ + ПрефиксОрганизации + "-0000" + ХХ;
|
|||
7
zelenprog
12.02.24
✎
16:18
|
(2) >> Создаешь новый документ, применяешь к нему УстановитьНовыйНомер - получаешь номер документа со всеми префиксами.
>> Смотришь, если последние 2 знака числа - то заменяешь их на ХХ... Знаков в числе не обязательно 2, может быть и больше. Но идею я понял, спасибо. Странно, что нету типового метода, который бы просто по числу давал номер в "правильном" формате. |
|||
8
mikecool
12.02.24
✎
16:22
|
(7) "Странно, что нету типового метода, который бы просто по числу давал номер в "правильном" формате. " - то, что ты хочешь - не банально
система рассчитана на ведение учета и последовательной нумерации |
|||
9
AlexeyKh
12.02.24
✎
16:28
|
"Странно, что нету типового метода"
- как раз есть, именно типовой, именно в типовых базах, просто найдите его, при необходимости подправьте его. он и дальше будет генерить новые номера по заданным правилам хоть с тройным префиксом. |
|||
10
zelenprog
12.02.24
✎
16:31
|
(9) >> как раз есть, именно типовой, именно в типовых базах,
Это радует. А почему про него никто не знает? >> просто найдите его Где искать то? |
|||
11
mikecool
12.02.24
✎
16:35
|
(9) ты о чем?
|
|||
12
AlexeyKh
12.02.24
✎
16:43
|
(10) я знаю, Типовой метод - то что написано разработчиком
открываем любую типовую базу УТ, БП, и др. в них как раз и находим типовую процедуру что-то там ПриУстановкеНовогоНомера (может происходит путаница с Платформенными методами?) |
|||
13
Kigo_Kigo
12.02.24
✎
16:47
|
(12) И скорее всего это подписка
|
|||
14
YFedor
12.02.24
✎
17:03
|
(10) Нету его.
В типовых при установке нового номера срабатывает процедура, которая просто присваивает новому объекту номер, который формирует на основании настроек (причем, формируется даже не сам номер, а префикс, номер же генерит платформа). Необходимости преобразовывать число в какой-то номер, который соответствует формату нумерования я не вижу, наверное и разработчики типовых тоже. |
|||
15
Волшебник
12.02.24
✎
17:09
|
Если человек знает префикс, он вызывает типовой метод установки нового номера.
Если человек уже знает номер, то он наверняка знает префикс, значит типовой метод вызывать нельзя и даже вредно. |
|||
16
AlexeyKh
12.02.24
✎
17:11
|
платформенный метод нумерации с переданным ему префиксом
генерит следующий номер по порядку, а если вам надо использовать "дырки/пропуски" в номерах и как автор пишет что у него есть сам номер/число - ХХ то вот здесь и нужна доработка с форматным преобразованием с лидирующими нулями. |
|||
17
zelenprog
12.02.24
✎
17:22
|
(16) >> а если ... как автор пишет что у него есть сам номер/число - ХХ
то вот здесь и нужна доработка с форматным преобразованием с лидирующими нулями. Так значит все-таки нужна доработка. Типового такого метода нету. В общем задача в следующем. Есть две базы. В этих базах какое-то время работали параллельно. В них должны быть одинаковые документы, с одинаковыми числовыми номерами, но с разными префиксами и с разным количеством дополнительных нулей, так как формат нумерации отличается. Нужно проверить все ли документы из одной базы есть в другой базе. Для этого из номера документа из первой базы я беру только последние цифры без нулей, получается номер-число. При проверке по второй базе нужно сформировать номер документа в формате второй базы, используя этот номер-число. Если документа с таким номером во второй базе нету, надо создать его. |
|||
18
Волшебник
12.02.24
✎
17:23
|
(17) Не взлетит. Всё задублируется и будет полная жопа.
|
|||
19
AlexeyKh
12.02.24
✎
17:28
|
(17) так добавьте новый реквизит
ВходящийНомерОбмена - и пишите туда оригинал вх.номера по ним легко определите все ли документы "переехали" |
|||
20
Сияющий Асинхраль
12.02.24
✎
23:57
|
ДокОбъект.Номер = ПрефиксИБ + ПрефиксОрганизации + "-" + Прав("000000" + Формат(ХХ,"ЧГ"),6);
|
|||
21
AAA
13.02.24
✎
04:41
|
Вообще то, если мне память не изменяет, сначала идет префикс организации, а потом уже префикс базы
|
|||
22
DrZombi
гуру
13.02.24
✎
06:32
|
Ужас, просто ужас... Все время думал, что 1С по префиксу само номера дает.... А тут руками... А потом "А чего это номера дублируются?"
УстановитьНовыйНомер(<Ваш префикс>) Есть еще подписки на события, "ПриУстановкеНовогоНомера", ищите: // Устанавливает префикс источника подписки в соответствии с префиксом информационной базы и префиксом организации. // Источник подписки должен содержать // обязательный реквизит шапки "Организация", с типом "СправочникСсылка.Организации". // // Параметры: // Источник - Произвольный - источник события подписки. // Любой объект из множества [Справочник, Документ, План видов характеристик, Бизнес процесс, Задача]. // СтандартнаяОбработка - Булево - флаг стандартной обработки подписки. // Префикс - Строка - префикс объекта, который нужно изменить. // Процедура УстановитьПрефиксИнформационнойБазыИОрганизации(Источник, СтандартнаяОбработка, Префикс) Экспорт УстановитьПрефикс(Источник, Префикс, Истина, Истина); КонецПроцедуры |
|||
23
DrZombi
гуру
13.02.24
✎
06:33
|
(21) По хорошему, тенденция префиксов заведомо заложена только руками разработчика :)
|
|||
24
DrZombi
гуру
13.02.24
✎
06:35
|
(0) В вашем варианте, когда "Номер известен", вам нужен префикс ваш личный, иначе вы нарветесь рано или поздно на дублирование номеров.
|
|||
25
maxab72
13.02.24
✎
08:29
|
В Документообороте очень гибко настраиваемая система нумерации документов. При нужде можно оттуда выдрать механизм.
|
|||
26
Волшебник
13.02.24
✎
08:39
|
(25) Смешно. Гибкая система нумерации потянет за собой все справочники...
|
|||
27
maxab72
13.02.24
✎
09:00
|
(26) А кто обещал, что будет легко? Хотите гибкости - извольте ее обеспечить за счет каких-то ресурсов.
|
|||
28
Волшебник
13.02.24
✎
09:16
|
(27) Есть такой аспект мира "Экономично", то есть возможность достигать заданного результата с разумными затратами ресурсов (время, деньги, когнитивная сложность). Иногда ещё говорят про "эффективность", "экологичность" или просто "здравый смысл". Выражается в пословице "из пушки по воробьям". Мотайте на ус.
|
|||
29
zelenprog
13.02.24
✎
09:50
|
(18) >> Всё задублируется и будет полная жопа.
Почему задублируется? Там нечему дублироваться. В базе-источнике документы с уникальными номерами. Если такой же номер уже есть в приемнике, то такой документ не записывается. Дублирование исключено. (19) >> так добавьте новый реквизит >> ВходящийНомерОбмена - и пишите туда оригинал вх.номера Документы в базе-приемнике должны быть точной копией документов из базы-источника. В том числе и номера (число номера) должны быть одинаковые. А префиксы надо оставить в соответствии с настройками базы. (22) >> Все время думал, что 1С по префиксу само номера дает.... А тут руками... А потом "А чего это номера дублируются?" У нас задача другая. 1С само номера дает новым документам. А при переносе (например при синхронизации) новый номер не формируется, он берется из синхронизируемого документа. У нас задача похожая на синхронизацию. Соответственно, номера надо брать из источника. Насчет дублирования - см. выше. |
|||
30
YFedor
13.02.24
✎
09:51
|
(17) Что значит работали параллельно?
Я это понял так: Бухгалтер Маша занесла документ в базе 1 и занесла его же в базе 2. Если это так, то: Были Маша и Глаша. Маша заносит документ 1 в базу 1, в базе 1 он запишется с номером 12, Глаша заносит документ 2 в базу 1, в базе 1 он запишется с номером 13. Потом обе стали заносить эти документы в базу 2, но у Маши зачесался затылок, она отвлеклась, в результате Глаша записала документ 2 в базу 2 раньше Маши. Имеем: Документ 1 имеет в базе 2 номер 13, Документ 2 имеет в базе 2 номер 12. (предполагаем, что до этого номера совпадали). Имеем в базах числовые номера документов одинаковые, но каждый конкретный документ с неким числовым номером в общем случае не соответствует такому же документу с таким же числовым номером в другой базе. |
|||
31
Волшебник
13.02.24
✎
09:51
|
(29) Похоже, Вы уже всё знаете, раз употребляете императивы типа "надо", "должны быть" и "исключено". Действуйте!
|
|||
32
zelenprog
13.02.24
✎
09:52
|
Кстати... В связи с пояснением в предыдущем посте.
При синхронизации 1С-ка как формирует номера при записи документа в базу-приемник? Тупо копирует номер из источника? Префиксы приемника не добавляет? |
|||
33
Волшебник
13.02.24
✎
09:53
|
(32) При синхронизации 1С-ка ничего не делает. Всё делает алгоритм синхронизации.
Вам пора перестать верить в чудеса. |
|||
34
zelenprog
13.02.24
✎
10:01
|
(30) >> Что значит работали параллельно?
>> Я это понял так: Бухгалтер Маша занесла документ в базе 1 и занесла его же в базе 2... >> Имеем в базах числовые номера документов одинаковые, но каждый конкретный документ с неким числовым номером в общем случае не соответствует такому же документу с таким же числовым номером в другой базе. Да, правильно понял. За соблюдением номеров очень тщательно следили. Но даже если и закрались расхождения, то они будут выявлены. В обработку можно добавить еще сравнение и по сумме документа. В общем, исключить дубли и расхождения - это немного другая задача. Это конечно надо будет учитывать. Но сейчас стоит задача сформировать номер, соответствующий по формату базе-приемнику на основании номера (числа) из базы-источника. |
|||
35
Волшебник
13.02.24
✎
10:02
|
(34) Цели ясны, задачи поставлены. За работу, товарищи!
|
|||
36
zelenprog
13.02.24
✎
10:03
|
(31) >> ... употребляете императивы типа "надо", "должны быть" и "исключено"
Использование таких императивов - это обычное явление при формулировке требований. Да, требования к обработке у нас уже сформулированы и выданы в качестве задания. В данный момент больше интересует реализация - как формировать номер по этим требованиям. (33) >> При синхронизации 1С-ка ничего не делает. Всё делает алгоритм синхронизации. А разве алгоритм синхронизации, реализованный в программном коде 1С, не является частью 1С? Под "1С" я конечно имею ввиду не фирму "1С", а конкретную программу "1С", например "Управление торговлей". |
|||
37
Волшебник
13.02.24
✎
10:05
|
(36)
1) Вы свои требования предъявляйте тому, кому платите деньги. 2) Нет, не является. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |