Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Подскажите с перенумерацией документов          
kosalex Подменю пользователя
сообщение 25.05.15, 18:26
Сообщение #1

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

Доброго времени суток, есть документы ПТУ в трех базах. С этих трех баз скидываются в приемник, в приемнике нужно перенумеровать документы, чтобы номера шли по порядку.

Имею вот такой код:
        
    вОпределитьТипИДлиннуНомера("Поступление");
    НеУникальныеНомера = Новый Соответствие;
    
    МаксимальныйНомер  = Число(вДополнитьСтрокуСимволами("", мДлинаНомера, "9"));
        
        Если Не ЗначениеЗаполнено(НачПериода) или Не ЗначениеЗаполнено(КонПериода) Тогда
            Сообщить("Укажите дату начала и окончания периода обработки", СтатусСообщения.Внимание);
            Возврат;
        КонецЕсли;
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ПоступлениеТоваровУслуг.Ссылка,
                   |    ПоступлениеТоваровУслуг.Дата
                   |ИЗ
                   |    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
                   |ГДЕ
                   |    ПоступлениеТоваровУслуг.Дата >= &НачПериода
                   |    И ПоступлениеТоваровУслуг.Дата <= &КонПериода
                   |    И ПоступлениеТоваровУслуг.Организация В(&Организация)
                   |    И ВЫРАЗИТЬ(ПоступлениеТоваровУслуг.Номер КАК СТРОКА(200)) ПОДОБНО ""%"" + &ПрефиксОрганизации + ""%""
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    ПоступлениеТоваровУслуг.Дата";
    Запрос.УстановитьПараметр("НачПериода", НачалоДня(НачПериода));
    Запрос.УстановитьПараметр("КонПериода", КонецДня(КонПериода));
    Запрос.УстановитьПараметр("Организация", Организация);
    Запрос.УстановитьПараметр("ПрефиксОрганизации", Организация.Префикс);
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    //Получить последний номер документа ПТУ перед датой начала обработки
    //++
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |    ПоступлениеТоваровУслуг.Ссылка,
        |    ПоступлениеТоваровУслуг.Дата
        |ИЗ
        |    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
        |ГДЕ
        |    ПоступлениеТоваровУслуг.Дата < &НачПериода
        |    И ПоступлениеТоваровУслуг.Организация В(&Организация)
        |    И ВЫРАЗИТЬ(ПоступлениеТоваровУслуг.Номер КАК СТРОКА(200)) ПОДОБНО ""%"" + &ПрефиксОрганизации + ""%""

        |
        |УПОРЯДОЧИТЬ ПО
        |    ПоступлениеТоваровУслуг.Дата УБЫВ";
    
    Запрос.УстановитьПараметр("НачПериода", НачПериода);
    Запрос.УстановитьПараметр("Организация", Организация);
    Запрос.УстановитьПараметр("ПрефиксОрганизации", Организация.Префикс);

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


При записи возникает ситуация когда такой номер уже есть в базе, как решить эту проблему? Смотрел обрабботку "УниверсальныйПодборИОБработкаОбъектов", последний цикл с нее, но это не решает проблему.

Подскажите как сделать?

Второй цикл перенес за первый, сори сразу не заметил...

kosalex Подменю пользователя
сообщение 25.05.15, 21:25
Сообщение #2

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

Проблема была в запросе который возврашал последний номер. Вопрос закрыт.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 16.04.24, 9:41
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!