8.х Код справочника

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

  1. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    День добрый. Подскажите, пожалуйста как сделать. На данный момент коды элементов справочника формируются автоматически с префиксом (А0001, А0002, А0003). Нудно сделать чтобы нумерация дальше продалжалась без префикса и без лидирующих нулей (4, 5, 6...).
  2. 1Cnica
    Offline

    1Cnica Опытный в 1С

    Регистрация:
    13 фев 2009
    Сообщения:
    416
    Симпатии:
    0
    Баллы:
    26
    Привет. Сталкивалась с такой же проблемой.
    Значитца,

    1. для начала тебе надо, думаю, в справочнике Организации в реквизите Префикс убрать "А"
    2. в пофигураторе меняешь тип кода справочника Число, а не Строка
    3. там же ставишь длину кода какую тебе надо.
    усё. номера должны автоматом встать как надо.


    п.с. не знаю понадобится или нет, у меня есть такая чудесная обработка (с инэта стырино :unsure: ), там собраны все универсальные обработки, удобно. так что если надо качайте.

    Вложения:

  3. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    Два больших НО:
    1. В справочнике Организации стоит в префиксе другая буква, которая используется для документов, а не для справочников.
    2. Числом Код делать нельзя, ошибки в коде вылезают, в которые лезть не желательно:(
    Если Других вариантов быть не может, то спасибо:)
  4. 1Cnica
    Offline

    1Cnica Опытный в 1С

    Регистрация:
    13 фев 2009
    Сообщения:
    416
    Симпатии:
    0
    Баллы:
    26
    странно, у меня так прокатило и ничо не ругалось
  5. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Как вариант:
    1 - разобраться откуда приходит этот префикс, и там его заменить на 0
    2 - при создании элемента включить обработку, которая будет вести вашу нумерацию
  6. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Префикс появился потому что кто-то один раз его добавил и программа его подхватила. Убрать его не сложно обработкой в 5 строк. А вот если надо ез лидирующих нулей, то скорее всего только писать обработчик. А тогда вопрос: нули вначале не по фен-шую, чем так смущают???
  7. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    Нули вначале мешают сравнению
  8. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Сравнению чего?
    Посмотри сравнение на вхождение. Например в УТ есть поиск по части кода.
  9. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    Точно не знаю, но там связано с Бух7.7.
    А можно по-подробнее как обработкой убрать префикс и нули? Какой алгоритм действий?
  10. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Советую узнать, что же там связано. А то вы наделаете чудес.
    Код:
    	СправочникВыборка = Справочники.Номенклатура.Выбрать();
    Пока СправочникВыборка.Следующий() Цикл
    
    // тут можно выбросить группы
    
    // проверим наличие префикса
    Если Найти(СправочникВыборка.Код, "А") = 1 Тогда
    
    // получаем непосредственно объект
    СправочникОбъект = СправочникВыборка.ПолучитьОбъект();
    // заменяем в коде префикс
    СправочникОбъект.Код = СтрЗаменить(СправочникОбъект.Код, "А", "0");
    // записываем объект
    СправочникОбъект.Записать();
    
    КонецЕсли; 
    
    КонецЦикла; 
    
    
  11. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    Огромное спасибо за код. Что именно нужно выясню.
    Как прояснится ситуация, отпишусь:)
  12. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    Эпопея продолжается:)
    Значит так, префикс я убрала (если кому будет интересно, расскажу как, но у меня Рарус, там куча настроек, которых в обычной 1С нету). Теперь проблема другая - код у меня строковый (длина 8), в данный момент номера превысили 50000, а он мне при создании нового элемента выдает код 9999. Сделать код числовым никак, т.к. получаются неуникальные номера и есть номера например 10.10.
    Подскажите, как сделать так, чтоб нумерация продалжалась 50001, 50002... :unsure:
  13. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    попробуйте ввести 50001 по идее, если нет превышений и отслеживания освободившихся номеров, то 1с сама подхватит...
  14. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    неа, не подхватывает :unsure:
    скажите, а если попадаются коды 10.10 среди остальных, т.е. не всегда попорядку номера, это сильно влияет? Просто до этого когда был префикс автонумерация работала, а теперь получается нет
  15. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Первое. Определяем максимальный код, кроме "гомодрильных" "10,10", "10.101" и т.п.
    Код:
    Запрос1С = Новый Запрос;
    Запрос1С.Текст = 
    "ВЫБРАТЬ
    |    МАКСИМУМ(НашСправочник.Код) КАК Код
    |ИЗ
    |    Справочник.НашСправочник КАК НашСправочник
    |ГДЕ
    |    НЕ НашСправочник.Код ПОДОБНО ""%[,.АA]%""";
    //в запросе исключаем коды, содержащие ., A-латинскую, А-киррилическую
    Выборка1С = Запрос1С.Выполнить().Выбрать();
    МаксимальныйЗаписанныйКод = Неопределено;
    Пока Выборка1С.Следующий() Цикл
    МаксимальныйЗаписанныйКод = Выборка1С.Код;
    КонецЦикла;
    
    
    
    Далее анализируем, если
    Код:
    МаксимальныйЗаписанныйКод = Неопределено
    
    
    
    бъем в набат выдавая сообщения "нарушен механизм назначения кодов" - нихай руками ставят, или завут Вас.

    2) Из етого как бы максимального кода "вытягиваем" цифирь
    Код:
    КодПодУвеличение    = Число(МаксимальныйЗаписанныйКод);
    
    
    
    Если на вход прийдет строка "00005000" - то вернет число 5 000
    Ну а далее к этому коду добавили единичку и готово.

    Если всетаки надо получать код в виде "00005001" - то добавляем "добивку" нулями
    Код:
    НовыйКод = ""+КодПодУвеличение;
    Пока СтрДлина(НовыйКод) < 8 Цикл
    НовыйКод = "0"+НовыйКод;
    КонецЦикла; 
    
    
    
    Если же нам надо исключить из получения максимального номера 0, то модифицируем "подобно" в запросе на ""0%[,.АA]%""

    Одним из кривых мест алгоритма является ситуация, когда пользователь Юзер1 открыл форму нового эл-та справочника, и получил код 5001, но сам элемент не записал - а ушел негодник курить. В это время пользователь Юзер2 создает новый эл-т справочника, и получает код 5001 и записывает свой эл-т.
    Возвращается с перекура Юзер1 и ловит "код не уникальный".
    Посему либо
    а) предусмотрите в форме справочника кнопочку "Получить новый код",
    б) либо при записи, сверяйте наличие такого кода в базе, и если он там есть, переназначайте новый код, с уведомлением пользователя, что код изменился (если это надо)
  16. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    Спасибо ограмное. Нумерация там действительно адско сбита, из-за этого ничего не хочет работать. Пусть теперь нчальство думает что делать, но если перекинут опять мне, то воспользуюсь вашим кодом:)
  17. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Я бы на Вашем месте, сразу бы озаботился обдумкой действий.
    1) Что завязанно на код справочника в рамках данной конфигурации.
    2) Что завязанно на код справочника на внешних БД (у вас это, как я понял 7ка)
    3) Имеется ли возможность изменить привязку по П1. И в какие сроки может быть реалзиованно.
    4) Имеется ли возможность изменить привязку по П2. И сроки.
    5) Подготовить программу перенумерации (если есть время). Которая бы перенумеровала справочник и выгрузила во внешний файл данные:
    а) Код до перенумерации
    б) Код после перенумерации
    в) Наименование (для информации)
    ... какие то еще необходимые реквизиты.
    А уже на основании этого файла, готовить программу(ы) по перепривязке кодов по П1 и П2

    Руководство любит, когда перед ним ставят не только проблему, но и пути ее решения, с оценкой времени и рисков ;)
  18. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    Пути решения я предложила некоторые, начальство выслушало и решила оставить все как есть :unsure:
    Спасибо всем за помощь!!!
  19. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    Если кому-то интересно или пригодится.
    Ввсела константу, куда записала последний код справочника. в справочнике при открытии если новый, тогда присваиваю коду значение номенклатуры. После записи делаю константа + 1.
  20. vitaly_mnpz
    Offline

    vitaly_mnpz Опытный в 1С

    Регистрация:
    15 фев 2009
    Сообщения:
    267
    Симпатии:
    0
    Баллы:
    26
    Круто.
    Вот универсальный подбор и обработка объектов с ИТС. Перекодируйте элементы и не чудите с константами :)

    Вложения:

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