Имя: Пароль:
1C
1C 7.7
v7: Сбой нумерации во вкладке операции
0 Ihor
 
29.06.20
18:24
Добрый день. Сбилась нумерация, доходит до 99 и далее начинается с 10, куда копать?
скрин https://prnt.sc/t8kabs


Перем Новый;
Перем НачальнаяДатаДокумента;

Процедура ПолучитьСправку()
    Мн=СоздатьОбъект("СписокЗначений");
    Если ПроводкаВыбрана()=0 Тогда
        Возврат;
    КонецЕсли;
    Если Дебет.Счет.Выбран()=1 Тогда
        Мн.ДобавитьЗначение(Дебет.Счет);
    КонецЕсли;
    Если Кредит.Счет.Выбран()=1 Тогда
        Мн.ДобавитьЗначение(Кредит.Счет);
    КонецЕсли;
    Сч="";
    Если Мн.ВыбратьЗначение(Сч,,,,1) = 1 Тогда
        Норм_ПолучитьСправку("_&"+Сч.Код);
    КонецЕсли;
КонецПроцедуры

//_____________________________________________________________________________
Процедура ПриВыбореСубконто()
    Если Сред(Форма.АктивныйЭлемент(), 9, 2) = "Дт" Тогда
        Корреспонденция = Дебет;
    Иначе
        Корреспонденция = Кредит;
    КонецЕсли;
    НомерСубконто = Число(Прав(Форма.АктивныйЭлемент(), 1));
    
    Если Корреспонденция.Счет.ВидСубконто(НомерСубконто) = ВидыСубконто.Контрагенты Тогда
        Если Корреспонденция.Счет.КоличествоСубконто() > НомерСубконто Тогда
            Если Корреспонденция.Счет.ВидСубконто(НомерСубконто + 1) = ВидыСубконто.Договоры Тогда
                Если Корреспонденция.Субконто(НомерСубконто + 1).Владелец <> Корреспонденция.Субконто(НомерСубконто) Тогда
                    Корреспонденция.Субконто(НомерСубконто + 1, Корреспонденция.Субконто(НомерСубконто).ОсновнойДоговор);    
                КонецЕсли;
                
            ИначеЕсли (Корреспонденция.Счет.ВидСубконто(НомерСубконто + 1) = ВидыСубконто.СчетаФактурыПолученные)
            или (Корреспонденция.Счет.ВидСубконто(НомерСубконто + 1) = ВидыСубконто.СчетаФактурыВыданные) Тогда
                Если Корреспонденция.Субконто(НомерСубконто).Выбран() = 0 Тогда
                    Корреспонденция.Субконто(НомерСубконто + 1, "");
                ИначеЕсли Корреспонденция.Субконто(НомерСубконто + 1).Выбран() = 1 Тогда
                    Если Корреспонденция.Субконто(НомерСубконто + 1).Контрагент <> Корреспонденция.Субконто(НомерСубконто) Тогда
                        Корреспонденция.Субконто(НомерСубконто + 1, "");
                    КонецЕсли;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
        
    ИначеЕсли Корреспонденция.Счет.ВидСубконто(НомерСубконто) = ВидыСубконто.Договоры Тогда
        Если НомерСубконто > 1 Тогда
            Если Корреспонденция.Счет.ВидСубконто(НомерСубконто - 1) = ВидыСубконто.Контрагенты Тогда
                Если (Корреспонденция.Субконто(НомерСубконто).Выбран() = 1)
                и (Корреспонденция.Субконто(НомерСубконто).Владелец <> Корреспонденция.Субконто(НомерСубконто - 1)) Тогда
                    Корреспонденция.Субконто(НомерСубконто - 1, Корреспонденция.Субконто(НомерСубконто).Владелец);    
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
        
    //ИначеЕсли (Корреспонденция.Счет.ВидСубконто(НомерСубконто) = ВидыСубконто.СчетаФактурыПолученные)
    //или (Корреспонденция.Счет.ВидСубконто(НомерСубконто) = ВидыСубконто.СчетаФактурыВыданные) Тогда
    //    Если НомерСубконто > 1 Тогда
    //        Если Корреспонденция.Счет.ВидСубконто(НомерСубконто - 1) = ВидыСубконто.Контрагенты Тогда
    //            Если Метаданные.Документ(Корреспонденция.Субконто(НомерСубконто).Вид()).РеквизитШапки("Контрагент").Выбран() = 1 Тогда
    //                Если Корреспонденция.Субконто(НомерСубконто).Выбран() = 1 Тогда
    //                    Если Корреспонденция.Субконто(НомерСубконто).Контрагент <> Корреспонденция.Субконто(НомерСубконто - 1) Тогда
    //                        Корреспонденция.Субконто(НомерСубконто - 1, Корреспонденция.Субконто(НомерСубконто).Контрагент);
    //                    КонецЕсли;
    //                КонецЕсли;
    //            КонецЕсли;
    //        КонецЕсли;
    //    КонецЕсли;
    КонецЕсли;
КонецПроцедуры //ПриВыбореСубконто
//_____________________________________________________________________________
Процедура ПриНачалеВыбораЗначения(ИдентЭлемДиалога, ФлагСтандОбр)
    Если Лев(ИдентЭлемДиалога, 8) = "Субконто" Тогда
        Если Сред(ИдентЭлемДиалога, 9, 2) = "Дт" Тогда
            Корреспонденция = Дебет;
        Иначе
            Корреспонденция = Кредит;
        КонецЕсли;
        НомерСубконто = Число(Прав(ИдентЭлемДиалога, 1));
        
        ВидСубконто = Корреспонденция.Счет.ВидСубконто(НомерСубконто).Идентификатор();
        Если Найти(",СчетаФактурыВыданные,СчетаФактурыПолученные,", ","+ВидСубконто+",") > 0 Тогда
            Если НомерСубконто > 1 Тогда
                Если Корреспонденция.Счет.ВидСубконто(НомерСубконто - 1) = ВидыСубконто.Контрагенты Тогда
                    ФлагСтандОбр = 0;
                    Параметр = Корреспонденция.Субконто(НомерСубконто - 1);
                    ОткрытьФорму("Журнал."+ВидСубконто, Параметр);
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;  
КонецПроцедуры
//_____________________________________________________________________________
Процедура ВводНового(Копирование, ОбъектКопирования) //предопределенная
    Новый = 1;
    Если Копирование = 1 Тогда
        Документ.Комментарий = ОбъектКопирования.Комментарий;
    Иначе
        ТиповаяОперация = "";
        Если ПоТиповойОперации(ТиповаяОперация) = 1 Тогда
            Документ.Комментарий = "Введена на основании типовой операции """ + ТиповаяОперация+"""";
            СписокТиповыхОпераций = СоздатьОбъект("СписокЗначений");
            ВосстановитьЗначение("СписокТиповыхОпераций", СписокТиповыхОпераций);
            Позиция = СписокТиповыхОпераций.НайтиЗначение(ТиповаяОперация);
            Если Позиция > 0 Тогда
                СписокТиповыхОпераций.УдалитьЗначение(Позиция);
            КонецЕсли;
            СписокТиповыхОпераций.ВставитьЗначение(1, ТиповаяОперация);
            ПоследняяПозиция = 30;
            Если СписокТиповыхОпераций.РазмерСписка() > ПоследняяПозиция Тогда
                СписокТиповыхОпераций.УдалитьЗначение(ПоследняяПозиция+1, СписокТиповыхОпераций.РазмерСписка()-ПоследняяПозиция);
            КонецЕсли;
            СохранитьЗначение("СписокТиповыхОпераций", СписокТиповыхОпераций);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры //ВводНового
//_____________________________________________________________________________
Процедура ПриОткрытии()
    Если Выбрана() = 1 Тогда
        Если (ДатаОперации <= Константа.ДатаЗапретаРедактирования) и (Форма.ТолькоПросмотр() = 0) Тогда
            Форма.ТолькоПросмотр(1);
            Предупреждение("Разрешен только просмотр операции!", 4);
        КонецЕсли;
    КонецЕсли;
    Если Форма.ТолькоПросмотр() = 1 Тогда
        Форма.КнопкаОК.Доступность(0);
        Форма.КнопкаЗаписать.Доступность(0);
    КонецЕсли;
    
    ИспользоватьВалюту(глЗначениеПоУмолчанию("ОсновнаяВалюта"));
    ИспользоватьСубконто("МестаХранения", глЗначениеПоУмолчанию("ОсновнойСклад"));
    ИспользоватьСубконто("БанковскиеСчета", глЗначениеПоУмолчанию("ОсновнойБанковскийСчет"));
    //ИспользоватьСубконто("Подразделения", глЗначениеПоУмолчанию("ОсновноеПодразделение"));
    //ИспользоватьСубконто("ВариантыРеализации", глЗначениеПоУмолчанию("ОсновнойВариантРеализации"));
    //ИспользоватьСубконто("ВидыДеятельности", глЗначениеПоУмолчанию("ОсновнойВидДеятельности"));
    
    Форма.Кн_Справка.Видимость( ?(ТипЗначения(Норм_Компонента)=0,0,1 ));
    Форма.Кн_Видеокурс.Видимость( ?(ТипЗначения(Видео_Компонента)=0,0,1 ));
    
    КомментарийОперации = Документ.Комментарий;
    НачальнаяДатаДокумента = ДатаОперации;
КонецПроцедуры

Процедура ПриЗаписи()
    Если ДатаОперации <= Константа.ДатаЗапретаРедактирования Тогда
        Предупреждение("Нельзя записывать операции с датой, более ранней, чем дата запрета редактирования документов!");
        СтатусВозврата(0);
    КонецЕсли;
    
    //Контроль даты операции
    Если Документ.Вид() = "Операция" Тогда
        РазностьДат = НачГода(НачальнаяДатаДокумента)-НачГода(ДатаОперации);
        Если РазностьДат <> 0 Тогда
            Дубликат = СоздатьОбъект("Документ.Операция");
            Дубликат.Новый();
            Дубликат.НомерДок = Документ.НомерДок;
            Дубликат.ДатаДок = ДатаОперации;
            Дубликат.УстановитьНовыйНомер("");
            
            Если ( Дубликат.НомерДок <> Документ.НомерДок ) Тогда
                НовыйНомерДок = Дубликат.НомерДок;
                Если Дубликат.НайтиПоНомеру(Дубликат.НомерДок,Дубликат.ДатаДок)=0 Тогда
                    Если Вопрос( "Для документов вида ""Операция"" каждый год нумерация начинается заново."+РазделительСтрок+
                    "Присвоить новый номер?","Да+Нет") = "Да" Тогда
                        Документ.НомерДок = НовыйНомерДок;
                        СтатусВозврата(0);
                    КонецЕсли;
                КонецЕсли;
            КонецЕсли;
            НачальнаяДатаДокумента = ДатаОперации;
            Активизировать("НомерДок");
        КонецЕсли;
    КонецЕсли;
    
    Документ.Комментарий = КомментарийОперации;
КонецПроцедуры

//******************************************************************************
// Предопределенная процедура
//
Процедура ПриЗакрытии()
    
    глОткрытьЖурнал(Документ, Новый);    
    
КонецПроцедуры // ПриЗакрытии()
1 Злопчинский
 
29.06.20
18:33
перенумеровать штатными инструментами с наличием ведущих нулей.
далее отрубить всем руки по локоть кто лазит в нумерацию руками.
2 victuan1
 
30.06.20
04:44
(1) Надо не руки отрубать, а программный запрет ставить.
Всё что можно ограничить из кода - надо ограничить. Только для чего нельзя - применять меру "отрубания рук".
3 vladko
 
30.06.20
09:36
(0) чтобы нумерация перешла на "100" нельзя, чтобы был документ с номером "99", должен быть "099". А лучше всего "0000099". Там что переномеруй конфигурацию с лидирующими нулями. Длина номера документа (по количеству символов в нём) должна быть одинакова для какого-нибудь вида документа.
4 vladko
 
30.06.20
09:37
+(3) "переномеруй конфигурацию" читать как "перенумеруй документы"
5 Ihor
 
30.06.20
12:42
Злопчинский victuan1 vladko - спасибо