Присвоение номера документа при загрузке

Новая тема
Показывать по 10 20 40 сообщений
Есть обработка, которой загружаем накладные в базу, предварительно выгруженные в файл из идентичных конфигураций, подскажите что поправить в коде обработки загрузки, чтобы номер загружаемого документа был не указанный в файле, а присваивался следующий по порядку в текущей базе.

Ниже код

Код
Функция ЗаполнитьСписокЗначений(Стр)
    Сп = СоздатьОбъект("СписокЗначений"); 
    Пока 1=1 Цикл
        ПозЗпт = Найти(Стр,",");
        Если ПозЗпт>0 Тогда
            Сп.ДобавитьЗначение(Лев(Стр,ПозЗпт-1));
            Стр = Сред(Стр,ПозЗпт+1);
        Иначе
            Сп.ДобавитьЗначение(Стр);
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Возврат Сп;
КонецФункции
//*******************************************

Процедура ВыбратьФайл()    
    
    Перем Каталог;          
    
    ИмяФайла = СокрЛП(ФайлЗагрузки);
    
    Каталог = "C:\";
    
    Если ФС.ВыбратьФайл(0, ИмяФайла, Каталог, "Выберите файл", "Текстовые (*.txt) |*.txt|Все файлы (*.*) |*.*")=1 Тогда
        ФайлЗагрузки=Каталог+ИмяФайла;
    КонецЕсли;
    
КонецПроцедуры      
//*******************************************

Процедура ОткрытьФайл()
    
    ИмяФайла = СокрЛП(ФайлЗагрузки);
    
    Текст=СоздатьОбъект("Текст");
    Текст.КодоваяСтраница<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=0" target="_blank" title="Комментарий 0" class="comment-ref">(0)</a>
    
    Если ФС.СуществуетФайл(ИмяФайла) = 1 Тогда
        Текст.Открыть(ИмяФайла);
        Текст.Показать("Файл",ИмяФайла);
    Иначе
        Предупреждение("Указанный файл не существует");
    КонецЕсли;
    
КонецПроцедуры

//*******************************************
Процедура Загрузить()
       
    ДокВН = СоздатьОбъект("Документ.РасходнаяНакладнаяВнутр");
    
    СпрМХ = СоздатьОбъект("Справочник.МестаХранения");
    
    СпрНом = СоздатьОбъект("Справочник.Номенклатура");
    
    СпРекв = СоздатьОбъект("СписокЗначений");
    
    Текст = СоздатьОбъект("Текст");
    
    Текст.КодоваяСтраница<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=0" target="_blank" title="Комментарий 0" class="comment-ref">(0)</a>
    
    Если ФС.СуществуетФайл(СокрЛП(ФайлЗагрузки)) = 1 Тогда
        Текст.Открыть(СокрЛП(ФайлЗагрузки));
    Иначе
        Предупреждение("Указанный файл не существует");
    КонецЕсли;
    СчДок = 0;
    Сч = 0;
    Стр = "";
    
    Для Сч=1 По Текст.КоличествоСтрок() Цикл
        
        Стр = Текст.ПолучитьСтроку(Сч);
        
        Стр = СтрЗаменить(Стр,",","$");
        Стр = СтрЗаменить(Стр,"|",",");
        
        СпРекв = ЗаполнитьСписокЗначений(Стр);
        
        Если (СпРекв.РазмерСписка()=5) И (Лев(СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=1" target="_blank" title="Комментарий 1" class="comment-ref">(1)</a>,1)="#") Тогда
            
            Ответ = Вопрос("Файл: "+ФайлЗагрузки+" включает документы: "+СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=2" target="_blank" title="Комментарий 2" class="comment-ref">(2)</a>+" за период с: "+СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=3" target="_blank" title="Комментарий 3" class="comment-ref">(3)</a>+"-"+СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=4" target="_blank" title="Комментарий 4" class="comment-ref">(4)</a>+" по месту отгрузки: "+СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=5" target="_blank" title="Комментарий 5" class="comment-ref">(5)</a>+". Загрузить?","Да+Нет");
            Если Ответ="Нет" Тогда
                Прервать;
            КонецЕсли;
            
        ИначеЕсли (СпРекв.РазмерСписка()=7) И (Лев(СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=1" target="_blank" title="Комментарий 1" class="comment-ref">(1)</a>,1)="*") Тогда
            
            Если Сч>2 Тогда  // т.е. если текущий док-т не первый - записываем и проводим предшествующий документ
                ДокВН.Записать();
                ДокВН.Провести();
                СчДок = СчДок + 1;
            КонецЕсли;
            
            НомерДок = СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=2" target="_blank" title="Комментарий 2" class="comment-ref">(2)</a>
            ДатаДок =  Дата(СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=3" target="_blank" title="Комментарий 3" class="comment-ref">(3)</a>);
            
            Если СпрМХ.НайтиПоНаименованию(СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=4" target="_blank" title="Комментарий 4" class="comment-ref">(4)</a>,0,1)=1 Тогда
                МестоХранения = СпрМХ.ТекущийЭлемент();
            Иначе
                МестоХранения = "";
            КонецЕсли;                                
            
            Если СпрМХ.НайтиПоНаименованию(СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=6" target="_blank" title="Комментарий 6" class="comment-ref">(6)</a>,0,1)=1 Тогда
                Получатель = СпрМХ.ТекущийЭлемент();
            Иначе
                Получатель = "";
            КонецЕсли;
            
            Если ДокВН.НайтиПоНомеру(НомерДок,ДатаДок)=1 Тогда
                ДокВН.СделатьНеПроведенным(); 
                ДокВН.НомерДок = НомерДок;
                ДокВН.ДатаДок = ДатаДок;
                ДокВН.МестоХранения = МестоХранения;
                ДокВН.Получатель = Получатель;
                ДокВН.УдалитьСтроки();
            Иначе
                ДокВН.Новый();
                ДокВН.НомерДок = НомерДок;
                ДокВН.ДатаДок = ДатаДок;
                ДокВН.МестоХранения = МестоХранения;
                ДокВН.Получатель = Получатель;
                
            КонецЕсли;
            
        ИначеЕсли СпРекв.РазмерСписка()=8 Тогда
            КодТовара = СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=1" target="_blank" title="Комментарий 1" class="comment-ref">(1)</a>
            НаимТовара = СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=2" target="_blank" title="Комментарий 2" class="comment-ref">(2)</a>
            Количество = СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=3" target="_blank" title="Комментарий 3" class="comment-ref">(3)</a>
            ЦенаРозничная = СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=4" target="_blank" title="Комментарий 4" class="comment-ref">(4)</a>
            СуммаРозничная = СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=5" target="_blank" title="Комментарий 5" class="comment-ref">(5)</a>
            ЦенаОптовая = СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=6" target="_blank" title="Комментарий 6" class="comment-ref">(6)</a>
            СуммаОптовая = СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=7" target="_blank" title="Комментарий 7" class="comment-ref">(7)</a>
            Вес = СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=8" target="_blank" title="Комментарий 8" class="comment-ref">(8)</a>
            
            ДокВН.НоваяСтрока();
            Если СпрНом.НайтиПоКоду(КодТовара,0)=1 Тогда
                ДокВН.Товар = СпрНом.ТекущийЭлемент();
            ИначеЕсли СпрНом.НайтиПоКоду(НаимТовара,0)=1 Тогда
                ДокВН.Товар = СпрНом.ТекущийЭлемент();
            Иначе
                ДокВН.Товар = "";
            КонецЕсли;    
            
            ДокВН.Количество         = Количество;
            ДокВН.ЦенаРозничная     = ЦенаРозничная;
            ДокВН.СуммаРозничная     = СуммаРозничная;
            ДокВН.ЦенаОптовая         = ЦенаОптовая;
            ДокВН.СуммаОптовая         = СуммаОптовая;
            ДокВН.Вес                 = Вес;
            
        КонецЕсли;    
    КонецЦикла;
    ДокВН.Записать();
    ДокВН.Провести();
    Если Ответ="Нет" Тогда
        Сообщить("Загрузка отменена пользователем: "+ИмяПользователя());
        Возврат;
    Иначе
        Предупреждение("Загрузка завершена! Загружено: "+СчДок+" документов.");
    КонецЕсли;
    
КонецПроцедуры
 
Ответили: пост #3
Antares пишет:
Цитата

           ДокВН.НомерДок = НомерДок;
вместо этого поставить:
Код
ДокВН.НомерДок = УстановитьНовыйНомер();

но проблема в том, что перед этим выполняется поиск по номеру документа, а т.к. исходного номера документа уже нет, то при повторной загрузке не найдет уже созданный документ и создаст новый.
Ответ на пост №1
Antares, и еще в:
Код
ДокВН.Записать(); 
ДокВН.Провести(); 
Если Ответ="Нет" Тогда&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

добавить проверку
Код
Если Сч>2 Тогда   
   ДокВН.Записать(); 
   ДокВН.Провести();   
КонецЕсли; 
Код
чтобы не записывался пустой документ, если строк < 2.
Спасибо за помощь. Если написать:
Код
ДокВН.НомерДок = УстановитьНовыйНомер();

сообщает что синтаксические ошибки функция не обнаружена. Я просто закоментировал эту строку и вуаля, присваивает следующий порядковый номер, что меня вполне устраивает. Есть ещё вопрос по этой обработке, всегда сообщает что загружено 0 документов.
Ответили: пост #5
Ответ на пост №4
Antares, еще надо добавить после цикла после записи:
СчДок = СчДок + 1;
Что-то мистика какая-то, в копии базы работает правильно, в рабочей базе присваивает тот номер который в файле выгрузки.
Ответили: пост #7
Ответ на пост №6
Antares, значит в рабочей базе лежит старая версия обработки.
Ответили: пост #8
Ответ на пост №7
Вьюн,
Кажется понял почему. Сейчас почему-то присваивается следующий порядковый номер с префиксом из файла, мне нужен следующий порядковый номер с префиксом Цск. И ещё заметил, если в базе есть такой документ с таким же номером как в файле, то обработка документ в базе просто заменяет документом из файла.
Antares пишет:
Цитата

Кажется понял почему. Сейчас почему-то присваивается следующий порядковый номер с префиксом из файла, мне нужен следующий порядковый номер с префиксом Цск. И ещё заметил, если в базе есть такой документ с таким же номером как в файле, то обработка документ в базе просто заменяет документом из файла.
ДокВН.УстановитьНовыйНомер("Цск");

и убрать поиск по номеру документа, всегда создавать новый.
Ответили: пост #10
Ответ на пост №9
Вьюн, выдаёт Номер не уникальный!
Ответили: пост #11
Читают тему
(гостей: 1)

Быстрый переход