Имя: Пароль:
1C
1С v8
Типовые методы для формирования префикса номера документа
↓Ø (Волшебник 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) Нет, не является.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.