Имя: Пароль:
1C
1С v8
Пропуски номеров
,
0 Dimon1C
 
02.02.16
08:45
Добрый день, использую разные префиксы для документа Реализация, в зависимости от галки Отражать в бух учете. Так как пользователи бывает сначала галку поставят, а потом уберут, то происходят пропуски  номеров.
Например:
1. Пользователь установил галку Отражать в бух учете, номер присвоился Б000001.
2. Пользователи ошибся и убрал галку Отражать в бух учете, номер присвоился У000001.
3. Новая Реализация (с галкой Бух) уже будет иметь номер Б000002.
Получается пропустили номер Б000001.
Что можете посоветовать?
1 Рэйв
 
02.02.16
08:48
дурацкая идея с префиксами если они могут туда сюда галку гонять. Сделай колонку для признака БУ и пусть радуются
2 Dimon1C
 
02.02.16
08:56
(1) Не понял про колонку...
3 zak555
 
02.02.16
08:57
что за конфигурация ?
4 Dimon1C
 
02.02.16
09:07
КА 1.1
5 zak555
 
02.02.16
09:09
а не проще чурнуху на отдельной "организации" держать ?
6 Dimon1C
 
02.02.16
09:33
(5) Так руководству удобней, уже ведем как есть.
Получается вариант только один, свою нумерацию колбасить, искать пропуски программно?
7 vde69
 
02.02.16
09:38
зачем нужна сквозная нумерация???

и что делать если нужно сделать документы задним числом???



я себе сделал авто пропуск 5 номеров каждый день, при смене даты программа размещается в этом пропуске
8 zak555
 
02.02.16
09:40
(6) в смысле удобнее ?

какой смысл колбасить конфигурацию, если можно всё решить простым выделением чернухи на "отдельный баланс" ?
9 vde69
 
02.02.16
09:40
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    
    Если ЭтоНовый()
        и (НачалоДня(ТекущаяДата()) = НачалоДня(Дата)) Тогда
        
        Номер = ПолныеПрава.ПолучитьНовыйНомерДокумента ("СчетНаОплату", ПИ.ТекущийПользователь(), 10);
        
    ИначеЕсли (Дата <> Ссылка.Дата) Тогда
        
        Режим = РежимДиалогаВопрос.ОКОтмена;
        Ответ = Вопрос("Изменена дата счета, попробовать изменить номер?", Режим, 0);
        Если Не Ответ = КодВозвратаДиалога.ОК Тогда
            Если Не ПараметрыСеанса.ЭтоАдминистраторБазы Тогда
                Отказ = Истина;
            КонецЕсли;
            Возврат;
        КонецЕсли;
        
        Если (НачалоДня(ТекущаяДата()) = НачалоДня(Дата)) Тогда
            Номер = ПолныеПрава.ПолучитьНовыйНомерДокумента ("СчетНаОплату", ПИ.ТекущийПользователь(), 10);
        Иначе
            Номер = ПолныеПрава.НайтиНомерДокументаВСквознойНумерации ("СчетНаОплату", ПИ.ТекущийПользователь(), Дата);
        КонецЕсли;
        
        Если не ЗначениеЗаполнено(Номер) Тогда
            Предупреждение("Не удалось установить номер документа");
            Отказ = Истина;
            Возврат;
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры;


//-------------------------------------
Функция ПолучитьНовыйНомерДокумента (ИмяТаблицы, Ответственный, ИнкрементНовогоДня = 1) Экспорт
    Запрос = Новый Запрос (
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |    СчетНаОплату.Номер
    |ПОМЕСТИТЬ ПоследнийНомер
    |ИЗ
    |    Документ."+ИмяТаблицы+" КАК СчетНаОплату
    |ГДЕ
    |    ГОД(СчетНаОплату.Дата) = &Год
    |
    |УПОРЯДОЧИТЬ ПО
    |    СчетНаОплату.Номер УБЫВ
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ ПЕРВЫЕ 1
    |    СчетНаОплату.Ссылка
    |ПОМЕСТИТЬ ТекущиеСчета
    |ИЗ
    |    Документ."+ИмяТаблицы+" КАК СчетНаОплату
    |ГДЕ
    |    СчетНаОплату.Дата >= &Дата
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ПоследнийНомер.Номер,
    |    ВЫБОР
    |        КОГДА ТекущиеСчета.Ссылка ЕСТЬ NULL
    |            ТОГДА "+ИнкрементНовогоДня+"
    |        ИНАЧЕ 1
    |    КОНЕЦ КАК Инкремент,
    |    ТекущиеСчета.Ссылка
    |ИЗ
    |    ПоследнийНомер КАК ПоследнийНомер
    |        ПОЛНОЕ СОЕДИНЕНИЕ ТекущиеСчета КАК ТекущиеСчета
    |        ПО (ИСТИНА)");
    Запрос.УстановитьПараметр("Дата", НачалоДня(ТекущаяДата()));
    Запрос.УстановитьПараметр("Год", Год(ТекущаяДата()));
    
    мНомер = "00000000000";
    мИнкр = 1;
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        мНомер = Выборка.Номер;
        мИнкр = Выборка.Инкремент;
    КонецЦикла;
    
    НовыйНомер = "";
    д = СтрДлина(мНомер);
    Для е = 1 по д Цикл
        мКод = КодСимвола(мНомер, е);
        Если (мКод >= 48) и (мКод <= 57) Тогда
            НовыйНомер = НовыйНомер + Символ(мКод);
        Иначе
            Прервать;
        КонецЕсли;
    КонецЦикла;
    НовыйНомер = Число(НовыйНомер) + мИнкр;
    НовыйНомер = Формат(НовыйНомер, "ЧГ=0");      
    НовыйНомер = Прав("00000000000000" + НовыйНомер + СокрЛП(УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(Ответственный, "Нумератор")), 12);
    
    Возврат НовыйНомер;
КонецФункции
10 Dimon1C
 
02.02.16
10:12
(8) Как минимум остатки полетят у этой организации, так как используется один склад.
11 zak555
 
02.02.16
10:15
(10) склад единый, без разделния по юрикам