Как Организовать Нумерацию Документов

Тема в разделе "1C и всё что с ней связано", создана пользователем Дайнеко, 23 окт 2011.

  1. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Задача возникает, если организовать в одной базе учет нескольких фирм. Как тогда нумеровать документы для каждой фирмы раздельно.
    Можно в номере писать префикс. Но:
    - хочется работать с нормальным номером. Взял да и набрал номер накладной или договора.
    - есть доки с цифровым номером.
     
  2. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Может быть, отключить контроль уникальности, и в подписке ПриУстановкеНовогоНомера считать код запросом?
     
  3. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    "считать код запросом" - это значит запросом найти последний номер?
    Если так, то по сути организовать замену встроенной нумерации. С теми же задачами периода и контроля уникальности. Сложновато.

    Я вот смотрю типовая позиционируется как для учета холдинга. А вот как там с нумерацией? Кто знает?
     
  4. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    А в чем сложность? Правда, на больших объемах, имхо, тормоза могут быть.
    Вы про какую конфигурацию? Во всех, которые я видел, префиксы.
    В управляемом приложении, при наборе номера в списке, открывается поиск, который позволяет...
    Сделать, чтобы не было. Зачем они?
    Видел цифровые номера только в очень старых типовых типа ТиС 8.7, или что-то в этом роде.
     
  5. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    К сожалению замена автоматического механизма нумерации. Пришлось мне такое сделать.
    на самом деле - очень просто: сносим контроль уникальности, берем подписку на события ПриУстановкеНовогоНомераДокумента, шаманим процедурку (вот например моя, там была трабла с любовью манагеров добавлять всякие "/" или "\" в нумерацию, доставшаяся по наследству):
    Код ( (Unknown Language)):
    Процедура ПриУстановкеНовогоНомераДокументаПриУстановкеНовогоНомера(Источник, СтандартнаяОбработка, Префикс) Экспорт
    //  ОбщегоНазначения.ДобавитьПрефиксОрганизации(Источник, Префикс); //15,08,11 Пушкарев
    Если (Источник.Метаданные().Имя = "РеализацияТоваровУслуг") Или
    (Источник.Метаданные().Имя = "ЗаказПокупателя") или
    (Источник.Метаданные().Имя = "СчетФактураВыданный") Тогда //15,08,11 Пушкарев;
    СтандартнаяОбработка = Ложь;
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 30
    |   Документ.Номер КАК Номер
    |ИЗ
    |   Документ.РеализацияТоваровУслуг КАК Документ
    |
    |УПОРЯДОЧИТЬ ПО
    |   Документ.Дата УБЫВ";
    ТЗ = Запрос.Выполнить().Выгрузить();
    Спс = Новый СписокЗначений;
    Для ааа = 0 по ТЗ.Количество()-1 Цикл
    Попытка
    Если ЕстьНеЦифры(СокрЛП(Тз[ааа].Номер)) Тогда
    Тз.Удалить(ааа);
    ааа = ааа -1;
    Иначе
    Спс.Добавить(Число(СокрЛП(Тз[ааа].Номер)));
    КонецЕсли;
    Исключение
    Прервать;
    КонецПопытки;
    КонецЦикла;
    Спс.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
    Номер = Спс[0].Значение +1;
    Источник.Номер = одДополнитьСтроку(СтрЗаменить(СокрЛП(Номер),Символ(160),""),6);// пока поставили 6 символов
    КонецЕсли;

    ОбщегоНазначения.ДобавитьПрефиксУзла(Префикс);
    КонецПроцедуры
    и вуоля! ( кстати - посмотрел и понял, что на смену года я не заложился, ну это то вообще не сложно. А номер у меня таки уникальный, так чот вторая часть вопроса мне ненужна).

    Кстати - интересно как будет себя вести функции найтиПоНомеру() - их таки придется всех переписывать.

    всвязи с этим - второй вариант. В базе вся нумерация хранится таки с преффиксами,тогда поиск по номеру остается нормальным.А вот при выводе документов на печать, отображении в формах усё подменяется.
     
  6. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Может быть, было бы изящнее использовать ПОДОБНО, и упорядочивание по номеру. Ну и "ПЕРВЫЕ 1".
     
  7. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    подобно очень медленно пашет. Все эти лайки с текстом вообще отвратно работают (по скорости). Посему сделал так . А почему 30 первых, так надо чтобы хоть один номер был чисто цифровым.
    А поле дата по жизни индексированно, по нему упорядочивание идет быстро. Можно как вариант еще переделывать индексы скриптом на скуле - чтоб совсем быстрее было.

    апдейт - если уж использовать ПОДОБНО так на результатах первого запроса, помещенных в временную таблицу, это действительно будет быстрее.
     
  8. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    А puh14-то разошелся. Видно что достал из архива процедуру времен молодости, так и прослезился, вспомнил сколько сил положил. :gigi:

    К делу, господа. Результата он добился такого - он меня напугал. Чтобы сделать ручную нумерацию нужно учесть:
    - запрос сделать с учетом Фирмы. Т.е. последний номер для данной фирмы.
    - сброс нумерации в новом периоде. Для одних доков это год, для других квартал, месяц
    - длину номера не навязывать программно, а желательно подстраиваться под пользователя.
    - а все-же номера разных фирм могут пересечься. При выключенном контроле сойдет - в базу запишет. А при обменах?

    Хочу рассмотреть такое направление мысли: сделать номер с префиксом. Он мне не нравится неудобством корректировки. А если номер показать на форме разложенным на 2 поля ввода: префикс и собственно номер. Префикс назначается прогой в зависимости от "Фирма". А номер предлагается процедурой вроде вышеизложенного "шэдэфра". Перед записью сформировать полный номер сложением. При этом системный контроль оставить - пусть не пропускает. Удобно тем, что легко номер изменить и в тоже время не лезут руки пачкать префикс.

    Кто не понял - переспросите.
     
  9. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Чорт, молодость два месяца назад кончилась! ;-)

    не проблема - добавить проверку на заполненность фирмы, пока не заполнено - фиг номер махнешь. Как заполнено - в условие в запрос.

    добавить в запрос условие на период с датами начала/конца. период брать из метаданных.

    Ну так у меня условие такое было - так как старую нумерацию гробить было нельзя и бухам хотелось "красоты", пришлось дополнять нуликами.

    Ну если в обмен пойдут документы только от одной фирмы - тогда нормально ,а иначе будет ошибками сыпать.


    Удобно - только все печатки переделывать придется, а то в документе номер из цифр, а на печатке какие-то буковки вылезають. А при условии что в большинстве печаток номер получается запросом и потом идет заполнение параметров секции шапка передачей в него первой строки выборки ... а СтрЗаменить в запросах не пашут ;-(. Хоть новый реквизит типа НомердляПечати добавляй.
     
Загрузка...

Поделиться этой страницей