Имя: Пароль:
1C
1С v8
Изменение нумерации в документах при перепроведении
,
0 Валидатор
 
20.02.14
11:08
КА 8.2. Есть РС, в котором есть дата, и организация(Например конфетпром 01.01.2014). Есть документы ПКО и РКО, в которых есть реквизит касса, у которых есть реквизит подразделение, у подразделений в свою очередь есть префиксы. Так вот, для каждой кассы ставится префикс: Касса1 например с префиксом К1, Касса2 с префиксом К2. В итоге если дата документа больше той, что в РС указана, что при проведении документа, номер у документа будет такой (рассмотрим случай, когда у нас в ПКО касса1 с префиксом К1) : К10000001. Так в принципе и работает, но чтобы номер документа поменялся, нужно перевыбрать кассу и провести документ, а как сделать, чтобы при групповой обработки проведения документов, номер автоматически сам подставился?
Делал в процедуре перед записью:
Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    ттПараметрыУчетаКассыПоПодразделениям.Организация,
    |    ттПараметрыУчетаКассыПоПодразделениям.ДатаРедактирования
    |ИЗ
    |    РегистрСведений.ттПараметрыУчетаКассыПоПодразделениям КАК ттПараметрыУчетаКассыПоПодразделениям
    |ГДЕ
    |    ттПараметрыУчетаКассыПоПодразделениям.Организация = &Организация";
    Запрос.УстановитьПараметр("Организация", ЭтотОбъект.Организация);
    Результат = Запрос.Выполнить().Выгрузить();
    Для каждого Строка из Результат Цикл
        Если  Строка.ДатаРедактирования < ЭтотОбъект.Дата Тогда
            Если НЕ ЭтотОбъект.Касса.ттПодразделение.Наименование = ""  Тогда
                Если НЕ ЭтотОбъект.Ссылка.Касса.ттПодразделение.ттПрефиксКассовыхДокументов = ЭтотОбъект.Касса.ттПодразделение.ттПрефиксКассовыхДокументов Тогда
                    ЭтотОбъект.УстановитьНовыйНомер();
                КонецЕсли;
                Если ЭтотОбъект.Ссылка.Касса.ттПодразделение.ттПрефиксКассовыхДокументов = "" ИЛИ НЕ ЭтотОбъект.Ссылка.Касса.ттПодразделение.ттПрефиксКассовыхДокументов = ЭтотОбъект.Касса.ттПодразделение.ттПрефиксКассовыхДокументов Тогда
                    ЭтотОбъект.УстановитьНовыйНомер();
                КонецЕсли;
            КонецЕсли;
        Иначе
        КонецЕсли;
    КонецЦикла;


а вот в общем модуле сама процедура установки номера:
Процедура ПриУстановкеНовогоНомераДляДокументов(Источник, СтандартнаяОбработка, Префикс) Экспорт
  

    Если ТипЗнч(Источник) = Тип("ДокументОбъект.ПриходныйКассовыйОрдер") ИЛИ ТипЗнч(Источник) = Тип("ДокументОбъект.РасходныйКассовыйОрдер") Тогда
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
        |    ттПараметрыУчетаКассыПоПодразделениям.Организация,
        |    ттПараметрыУчетаКассыПоПодразделениям.ДатаРедактирования
        |ИЗ
        |    РегистрСведений.ттПараметрыУчетаКассыПоПодразделениям КАК ттПараметрыУчетаКассыПоПодразделениям
        |ГДЕ
        |    ттПараметрыУчетаКассыПоПодразделениям.Организация = &Организация";
        Запрос.УстановитьПараметр("Организация", Источник.Организация);
        Результат = Запрос.Выполнить().Выгрузить();
        Для каждого Строка из Результат Цикл
            Если  Строка.ДатаРедактирования < Источник.Дата Тогда
                ПервыйПрефикс  =  (Источник.Организация.Префикс);
                ВторойПрефикс = Источник.Касса.ттПодразделение.ттПрефиксКассовыхДокументов;
                Префикс = ПервыйПрефикс+ВторойПрефикс;
                ДобавитьПрефиксОрганизации(Источник, Префикс + Префикс);
                ДобавитьПрефиксУзла(Префикс+Префикс);
            Иначе
                ДобавитьПрефиксОрганизации(Источник, Префикс);
                ДобавитьПрефиксУзла(Префикс);
            КонецЕсли;
        КонецЦикла;
    Иначе
      

        ДобавитьПрефиксОрганизации(Источник, Префикс);
        ДобавитьПрефиксУзла(Префикс);
    КонецЕсли;
КонецПроцедуры

но приходится перевыбирать одну кассу, проводить документ, потом выбирать первую кассу, проводить и тогда префикс ставится, и причем в таком случае первый документ с этим префиксом будет не К10000001, а К1000002, а нужно, чтобы нумерация была с 1
1 Валидатор
 
20.02.14
11:29
Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    ттПараметрыУчетаКассыПоПодразделениям.Организация,
    |    ттПараметрыУчетаКассыПоПодразделениям.ДатаРедактирования
    |ИЗ
    |    РегистрСведений.ттПараметрыУчетаКассыПоПодразделениям КАК ттПараметрыУчетаКассыПоПодразделениям
    |ГДЕ
    |    ттПараметрыУчетаКассыПоПодразделениям.Организация = &Организация";
    Запрос.УстановитьПараметр("Организация", ЭтотОбъект.Организация);
    Результат = Запрос.Выполнить().Выгрузить();
    
    ПервыйПрефикс  =  Организация.Префикс;
    ВторойПрефикс = Касса.ттПодразделение.ттПрефиксКассовыхДокументов;
    Префикс = ПервыйПрефикс+ВторойПрефикс;

  
      
      
    Для каждого Строка из Результат Цикл
        Если  Строка.ДатаРедактирования < ЭтотОбъект.Дата Тогда
            Если Лев(номер,стрДлина(Префикс))<>Префикс тогда
                УстановитьНовыйНомер(Префикс);
            КонецЕсли;
        КонецЕсли;
        
    КонецЦикла;
2 Валидатор
 
20.02.14
11:29
вот так работает
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн