8.х Проблема с префиксами в нумерации документа

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем vitaliy1911, 14 мар 2013.

  1. TopicStarter Overlay
    vitaliy1911
    Offline

    vitaliy1911

    Регистрация:
    10 сен 2012
    Сообщения:
    37
    Симпатии:
    0
    Баллы:
    1
    Есть документ, который может создаваться вручную пользователем, а может создаваться программно из другого документа. Требуется сделать, чтобы у документов, добавленных программно был префикс "абн", а у документов, добавленных вручную не было префикса вообще. У документа нет нумератора, в свойствах стоит автонумерация.
    В процедуре программного добавления я пишу:
    Код:
    НовыйДокумент.УстановитьНовыйНомер("абн");
    и все ок. Но, когда пользователь вручную добавляет документ к нему теперь автоматически добавляется "абн". Причем этот префикс остается, даже если предварительно вызвать
    Код:
    НовыйДокумент.УстановитьНовыйНомер("");
    то есть, чтобы от него избавиться нужно влоб указывать другой префикс. А можно ли его просто удалить из автонумерации? Например, чтобы после программного добавления документа удалялся этот префикс и до следующего программного добавления все новый документы создавались без префикса? Или как лучше поступить в такой ситуации?
  2. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    добавляйте префикс "0"
  3. TopicStarter Overlay
    vitaliy1911
    Offline

    vitaliy1911

    Регистрация:
    10 сен 2012
    Сообщения:
    37
    Симпатии:
    0
    Баллы:
    1
    Тогда префикс останется, хоть и будет равен "0". Количество доступных номеров будет на один порядок меньше. Когда нумерация дойдет до 0999999, уже новый документ будет ругаться на неуникальность номера. Кроме того, я сейчас попробовал, даже если указать префикс "0", при добавлении вручную все равно остается "абн". Чтобы при добавлении вручную префикс изменился, надо указывать символ, отличный от "0".
  4. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    длина номера типового документа 11 символов - вы их столько плодите? :)

    в случае с базой sql можно почистить префикс, но не стоит.
  5. МихаилC
    Offline

    МихаилC

    Регистрация:
    12 мар 2013
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Какая конфигурация?
    В бухгалтерии у организации установил пробел в префиксе, вручную изменил номер, добавил "абн", записал, создал новый, записал "абн" не добавилось.
  6. TopicStarter Overlay
    vitaliy1911
    Offline

    vitaliy1911

    Регистрация:
    10 сен 2012
    Сообщения:
    37
    Симпатии:
    0
    Баллы:
    1
    Конфигурация БГУ 1.0.17.5. Документ НД_ПКО. Длина номера 8 символов, но планируется создавать по несколько сотен документов в день. я не совсем понял последовательность ваших действий, вы предлагаете установить новый номер без префикса, а потом просто заменить первые три символа на "абн"? Мне нужны две независимые друг от друга нумерации, поэтому я и хочу использовать префикс
  7. МихаилC
    Offline

    МихаилC

    Регистрация:
    12 мар 2013
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Я руками сделал то, что вы делаете программно, ведь сначала создается документ вообще без номера, а затем с помощью функции вы присваиваете номеру префикс, и записываете документ в базу. А при интерактивном создании берется префикс учреждения, вот и предложил поставить пробел, ведь это тоже символ, а при записи документа в базу система скорее всего использует что- то вроде СокрЛП, соответственно пробел должен будет уйти... Сейчас попробую...

    А то за докумемент НД_ПКО?
  8. МихаилC
    Offline

    МихаилC

    Регистрация:
    12 мар 2013
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Документ НД_ПКО оказывается приходный кассовый ордер, а нумерация в кассе сквозная, Посмотри если в константах в настройках параметров учета на закладнке центролизованная бухгалтерия стоит признак: Одна кассовая книга, то для кассовых ордеров префиксация использоваться не будет, и поэтому если программно изменишь номер, то следующий будет присваиваться от него. И к сожалению пробел в префиксе Учреждения не считается префиксом, попробовал - убедился.
    Можно предложить следующее - проверять при записи - программно или интерактивно вводится документ и присваивать префикс насильно
  9. TopicStarter Overlay
    vitaliy1911
    Offline

    vitaliy1911

    Регистрация:
    10 сен 2012
    Сообщения:
    37
    Симпатии:
    0
    Баллы:
    1
    Всем большое спасибо за помощь. В модуле формы документа в обработчик "ПередЗаписью" добавил
    Код:
    НовыйДокумент.УстановитьНовыйНомер("0");
    если пользователь вручную добавляет, то обработчик присвоит новый номер, начинающийся на 0. Получилось конечно коряво и пришлось пожертвовать одним разрядом, но ничего другого я не придумал
  10. andreya81
    Offline

    andreya81 Опытный в 1С

    Регистрация:
    27 ноя 2014
    Сообщения:
    61
    Симпатии:
    0
    Баллы:
    26
    Народ, а может мне тоже подскажете? У нас два подразделения в первом префикс ВЛ, а во втором ВЛЖ. Так воооот))) С нового года программа по непонятной на то причине начала катать в первом подразделении префикс второго подразделения. Ничто не помогает, не перенумерация с помощью обработки и ручками правил бесполезняк. Документов с таким префиксом нет чтобы грешить на последний документ. И главное ведь один документ грешит - РКО, остальное все тип-топ. И еще создаю док в прошлом году - префикс правильный, в новом опять косяк. Не пойму. У кого какие мысли на этот счет?
    --- Объединение сообщений, 22 янв 2015 ---
    Погуглив в интернете нашел, что цитирую: "При получении нового номера всегда получаем максимальный.
    Первых две буквы одинаковы, соответственно более длинный номер будет всегда последним". Но почему только в РКО? Можно ли решить данную проблему? И где в модуле он так сказать выбирает более длинный?
    --- Объединение сообщений, 22 янв 2015 ---
    В модуле смущает данный код. Что думаете?
    Код:
    // Получает пользовательский префикс номера/кода объекта
    // Переменная НомерОбъекта должна соответствовать шаблону: ООГГ-ХХХ...ХХ или ГГ-ХХХ...ХХ, где
    // ОО - префикс организации;
    // ГГ - префикс информационной базы;
    // "-" - разделитель;
    // АА - пользовательский префикс;
    // ХХ..ХХ - номер/код объекта.
    //
    // Параметры:
    //  НомерОбъекта - Строка - номер или код объекта из которого требуется получить пользовательский префикс
    //
    Функция ПолучитьПользовательскийПрефикс(Знач НомерОбъекта) Экспорт
       
        // возвращаемое значение функции (пользовательский префикс)
        Результат = "";
       
        Если НомерСодержитПятизначныйПрефикс(НомерОбъекта) Тогда
            НомерОбъекта = Сред(НомерОбъекта, 6);
        ИначеЕсли НомерСодержитШестизначныйПрефикс(НомерОбъекта) Тогда
            НомерОбъекта = Сред(НомерОбъекта, 7);
        Иначе
            НомерОбъекта = Сред(НомерОбъекта, 4);
        КонецЕсли;
       
        СтрокаЦифровыхСимволов = "0123456789";
       
        Для Индекс = 1 По СтрДлина(НомерОбъекта) Цикл
           
            Символ = Сред(НомерОбъекта, Индекс, 1);
           
            Если Найти(СтрокаЦифровыхСимволов, Символ) > 0 Тогда
                Прервать;
            КонецЕсли;
           
            Результат = Результат + Символ;
           
        КонецЦикла;
       
        Возврат Результат;
    КонецФункции
    
    // Получает номер документа для вывода на печать; из номера удаляются префиксы и лидирующие нули
    // Функция:
    // отбрасывает префикс организации,
    // отбрасывает префикс информационной базы (опционально),
    // отбрасывает пользовательские префиксы (опционально),
    // удаляет лидирующие нули в номере объекта
    //
    Функция ПолучитьНомерНаПечать(Знач НомерОбъекта, УдалитьПрефиксИнформационнойБазы = Ложь, УдалитьПользовательскийПрефикс = Ложь, Знач УдалитьЛидирующиеНули = Истина) Экспорт
       
        // удаляем пользовательские префиксы из номера объекта
        Если УдалитьПользовательскийПрефикс Тогда
            НомерОбъекта = УдалитьПользовательскиеПрефиксыИзНомераОбъекта(НомерОбъекта);
        КонецЕсли;
       
        // удаляем лидирующие нули из номера объекта
        Если УдалитьЛидирующиеНули Тогда
            НомерОбъекта = УдалитьЛидирующиеНулиИзНомераОбъекта(НомерОбъекта);
        КонецЕсли;
       
        // удаляем префикс организации и префикс информационной базы из номера объекта
        НомерОбъекта = УдалитьПрефиксыИзНомераОбъекта(НомерОбъекта, Истина, УдалитьПрефиксИнформационнойБазы);
       
        Возврат НомерОбъекта;
    
    КонецФункции
    
    //
    
    Функция НомерСодержитПятизначныйПрефикс(НомерОбъекта)
       
        Возврат Найти(НомерОбъекта, "-") = 5;
       
    КонецФункции
    
    Функция НомерСодержитШестизначныйПрефикс(НомерОбъекта)
       
        Возврат Найти(НомерОбъекта, "-") = 7;
       
    КонецФункции
    
    

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