Новости для бухгалтера, бухучет, налогообложение, отчетность, ФСБУ, прослеживаемость и маркировка, 1С:Бухгалтерия

Вход или Регистрация

Показывать по 10 20 40 сообщений
Новая тема Ответить
Письмо в техподдержку 1С
[1С:Предприятие 7.7]

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

Antares
читатель
офлайн
Дата регистрации: 05.10.2010
Сообщений: 76
Пост №1
 
03.11.2016 13:58

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

Ниже код

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

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

Процедура ОткрытьФайл()
    
    ИмяФайла = СокрЛП(ФайлЗагрузки);
    
    Текст=СоздатьОбъект("Текст");
    Текст.КодоваяСтраница(0)
    
    Если ФС.СуществуетФайл(ИмяФайла) = 1 Тогда
        Текст.Открыть(ИмяФайла);
        Текст.Показать("Файл",ИмяФайла);
    Иначе
        Предупреждение("Указанный файл не существует");
    КонецЕсли;
    
КонецПроцедуры

//*******************************************
Процедура Загрузить()
       
    ДокВН = СоздатьОбъект("Документ.РасходнаяНакладнаяВнутр");
    
    СпрМХ = СоздатьОбъект("Справочник.МестаХранения");
    
    СпрНом = СоздатьОбъект("Справочник.Номенклатура");
    
    СпРекв = СоздатьОбъект("СписокЗначений");
    
    Текст = СоздатьОбъект("Текст");
    
    Текст.КодоваяСтраница(0)
    
    Если ФС.СуществуетФайл(СокрЛП(ФайлЗагрузки)) = 1 Тогда
        Текст.Открыть(СокрЛП(ФайлЗагрузки));
    Иначе
        Предупреждение("Указанный файл не существует");
    КонецЕсли;
    СчДок = 0;
    Сч = 0;
    Стр = "";
    
    Для Сч=1 По Текст.КоличествоСтрок() Цикл
        
        Стр = Текст.ПолучитьСтроку(Сч);
        
        Стр = СтрЗаменить(Стр,",","$");
        Стр = СтрЗаменить(Стр,"|",",");
        
        СпРекв = ЗаполнитьСписокЗначений(Стр);
        
        Если (СпРекв.РазмерСписка()=5) И (Лев(СпРекв.ПолучитьЗначение(1),1)="#") Тогда
            
            Ответ = Вопрос("Файл: "+ФайлЗагрузки+" включает документы: "+СпРекв.ПолучитьЗначение(2)+" за период с: "+СпРекв.ПолучитьЗначение(3)+"-"+СпРекв.ПолучитьЗначение(4)+" по месту отгрузки: "+СпРекв.ПолучитьЗначение(5)+". Загрузить?","Да+Нет");
            Если Ответ="Нет" Тогда
                Прервать;
            КонецЕсли;
            
        ИначеЕсли (СпРекв.РазмерСписка()=7) И (Лев(СпРекв.ПолучитьЗначение(1),1)="*") Тогда
            
            Если Сч>2 Тогда  // т.е. если текущий док-т не первый - записываем и проводим предшествующий документ
                ДокВН.Записать();
                ДокВН.Провести();
                СчДок = СчДок + 1;
            КонецЕсли;
            
            НомерДок = СпРекв.ПолучитьЗначение(2)
            ДатаДок =  Дата(СпРекв.ПолучитьЗначение(3));
            
            Если СпрМХ.НайтиПоНаименованию(СпРекв.ПолучитьЗначение(4),0,1)=1 Тогда
                МестоХранения = СпрМХ.ТекущийЭлемент();
            Иначе
                МестоХранения = "";
            КонецЕсли;                                
            
            Если СпрМХ.НайтиПоНаименованию(СпРекв.ПолучитьЗначение(6),0,1)=1 Тогда
                Получатель = СпрМХ.ТекущийЭлемент();
            Иначе
                Получатель = "";
            КонецЕсли;
            
            Если ДокВН.НайтиПоНомеру(НомерДок,ДатаДок)=1 Тогда
                ДокВН.СделатьНеПроведенным(); 
                ДокВН.НомерДок = НомерДок;
                ДокВН.ДатаДок = ДатаДок;
                ДокВН.МестоХранения = МестоХранения;
                ДокВН.Получатель = Получатель;
                ДокВН.УдалитьСтроки();
            Иначе
                ДокВН.Новый();
                ДокВН.НомерДок = НомерДок;
                ДокВН.ДатаДок = ДатаДок;
                ДокВН.МестоХранения = МестоХранения;
                ДокВН.Получатель = Получатель;
                
            КонецЕсли;
            
        ИначеЕсли СпРекв.РазмерСписка()=8 Тогда
            КодТовара = СпРекв.ПолучитьЗначение(1)
            НаимТовара = СпРекв.ПолучитьЗначение(2)
            Количество = СпРекв.ПолучитьЗначение(3)
            ЦенаРозничная = СпРекв.ПолучитьЗначение(4)
            СуммаРозничная = СпРекв.ПолучитьЗначение(5)
            ЦенаОптовая = СпРекв.ПолучитьЗначение(6)
            СуммаОптовая = СпРекв.ПолучитьЗначение(7)
            Вес = СпРекв.ПолучитьЗначение(8)
            
            ДокВН.НоваяСтрока();
            Если СпрНом.НайтиПоКоду(КодТовара,0)=1 Тогда
                ДокВН.Товар = СпрНом.ТекущийЭлемент();
            ИначеЕсли СпрНом.НайтиПоКоду(НаимТовара,0)=1 Тогда
                ДокВН.Товар = СпрНом.ТекущийЭлемент();
            Иначе
                ДокВН.Товар = "";
            КонецЕсли;    
            
            ДокВН.Количество         = Количество;
            ДокВН.ЦенаРозничная     = ЦенаРозничная;
            ДокВН.СуммаРозничная     = СуммаРозничная;
            ДокВН.ЦенаОптовая         = ЦенаОптовая;
            ДокВН.СуммаОптовая         = СуммаОптовая;
            ДокВН.Вес                 = Вес;
            
        КонецЕсли;    
    КонецЦикла;
    ДокВН.Записать();
    ДокВН.Провести();
    Если Ответ="Нет" Тогда
        Сообщить("Загрузка отменена пользователем: "+ИмяПользователя());
        Возврат;
    Иначе
        Предупреждение("Загрузка завершена! Загружено: "+СчДок+" документов.");
    КонецЕсли;
    
КонецПроцедуры
 

Ответили: пост №3
Вьюн
читатель
офлайн
Дата регистрации: 14.01.2007
Сообщений: 657
Пост №2
 
03.11.2016 21:53

Antares пишет:

Цитата

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

но проблема в том, что перед этим выполняется поиск по номеру документа, а т.к. исходного номера документа уже нет, то при повторной загрузке не найдет уже созданный документ и создаст новый.

Вьюн
читатель
офлайн
Дата регистрации: 14.01.2007
Сообщений: 657
Пост №3
 
03.11.2016 22:09
Ответ на пост №1

Antares, и еще в:

Код
ДокВН.Записать(); 
ДокВН.Провести(); 
Если Ответ="Нет" Тогда       

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

Antares
читатель
офлайн
Дата регистрации: 05.10.2010
Сообщений: 76
Пост №4
 
07.11.2016 08:58

Спасибо за помощь. Если написать:

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

сообщает что синтаксические ошибки функция не обнаружена. Я просто закоментировал эту строку и вуаля, присваивает следующий порядковый номер, что меня вполне устраивает. Есть ещё вопрос по этой обработке, всегда сообщает что загружено 0 документов.

Ответили: пост №5
Вьюн
читатель
офлайн
Дата регистрации: 14.01.2007
Сообщений: 657
Пост №5
 
07.11.2016 09:06
Ответ на пост №4

Antares, еще надо добавить после цикла после записи:
СчДок = СчДок + 1;

Antares
читатель
офлайн
Дата регистрации: 05.10.2010
Сообщений: 76
Пост №6
 
07.11.2016 10:39

Что-то мистика какая-то, в копии базы работает правильно, в рабочей базе присваивает тот номер который в файле выгрузки.

Ответили: пост №7
Вьюн
читатель
офлайн
Дата регистрации: 14.01.2007
Сообщений: 657
Пост №7
 
07.11.2016 10:42
Ответ на пост №6

Antares, значит в рабочей базе лежит старая версия обработки.

Ответили: пост №8
Antares
читатель
офлайн
Дата регистрации: 05.10.2010
Сообщений: 76
Пост №8
 
07.11.2016 10:51
Ответ на пост №7

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

Вьюн
читатель
офлайн
Дата регистрации: 14.01.2007
Сообщений: 657
Пост №9
 
07.11.2016 12:14

Antares пишет:

Цитата

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

и убрать поиск по номеру документа, всегда создавать новый.

Ответили: пост №10
Antares
читатель
офлайн
Дата регистрации: 05.10.2010
Сообщений: 76
Пост №10
 
07.11.2016 12:42
Ответ на пост №9

Вьюн, выдаёт Номер не уникальный!

Ответили: пост №11
Показывать по 10 20 40 сообщений

Читают тему:

Быстрый переход
Для технических специалистов
  • Книга жалоб и предложений по работе сайта
  • Для технических специалистов
  • Представление регламентированной отчетности
  • Говорильня
  • Бухгалтерский учет: обсуждаем проекты нормативных актов и рекомендаций по ведению учета от БМЦ
  • Новый порядок применения ККТ (онлайн кассы с передачей сведений в ФНС)
  • Интернет-конференция: Оформление командировок по новым правилам
  • МАРКИРОВКА
  • ЕГАИС
  • Учет, налогообложение, автоматизация