|   |   | 
| 
 | Загрузка данных в уже существующий документ | ☑ | ||
|---|---|---|---|---|
| 0
    
        Валидатор 25.10.13✎ 13:39 | 
        Написал обработку по загрузке данных из тхт файла в ТЗ, потом обхожу эту ТЗ и на основании ее строк заполняю документы поступления товаров и услуг, конфа комплексная автоматизация 8.2. Вот код:
 Для каждого Строка из ТаблицаЗначений Цикл ПоискДокумента = Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру(Строка.НомерНакладной); Если ЗначениеЗаполнено(ПоискДокумента) Тогда НайденДокумент = ПоискДокумента.ПолучитьОбъект(); НайденДокумент.Комментарий = Комментарий; НайденДокумент.Дата = Строка.ДатаНакладной; НайденДокумент.Контрагент = Контрагент; НайденДокумент.СкладОрдер = Склад; НайденДокумент.Организация = Организация; СтруктураРеквизитовДокумента = Ценообразование.ПолучитьСтруктуруРеквизитовДокументаДляЦенообразования(НайденДокумент); //добавляем строки в ТЧ НоваяСтрокаНайденДокумент = НайденДокумент.Товары.Добавить(); НоменклатураПоискПоНаименованию = Справочники.Номенклатура.НайтиПоНаименованию(строка.Номенклатура); Если НоменклатураПоискПоНаименованию = Справочники.Номенклатура.ПустаяСсылка() Тогда НоменклатураПоискПоНаименованию = СоздатьНоменклатуру(строка.Артикул, строка.Номенклатура, ГруппаТоваровНов); НоменклатураПоискПоНаименованию = НоменклатураПоискПоНаименованию.Ссылка; КонецЕсли; НоваяСтрокаНайденДокумент.ЕдиницаИзмерения = НоменклатураПоискПоНаименованию.БазоваяЕдиницаИзмерения; НоваяСтрокаНайденДокумент.Номенклатура = НоменклатураПоискПоНаименованию; НоваяСтрокаНайденДокумент.Количество = Строка.Количество; НоваяСтрокаНайденДокумент.Цена = Строка.Цена; Попытка НайденДокумент.Записать(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Иначе НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент(); НовыйДокумент.Комментарий = Комментарий; Номер = Строка.НомерНакладной; НовыйДокумент.Номер = СокрЛП(Номер); НовыйДокумент.Дата = Строка.ДатаНакладной; НовыйДокумент.Контрагент = Контрагент; НовыйДокумент.СкладОрдер = Склад; НовыйДокумент.Организация = Организация; СтруктураРеквизитовДокумента = Ценообразование.ПолучитьСтруктуруРеквизитовДокументаДляЦенообразования(НовыйДокумент); НоваяСтрока = НовыйДокумент.Товары.Добавить(); НоменклатураПоискПоНаименованию = Справочники.Номенклатура.НайтиПоНаименованию(строка.Номенклатура); Если НоменклатураПоискПоНаименованию = Справочники.Номенклатура.ПустаяСсылка() Тогда НоменклатураПоискПоНаименованию = СоздатьНоменклатуру(строка.Артикул, строка.Номенклатура, ГруппаТоваровНов); НоменклатураПоискПоНаименованию = НоменклатураПоискПоНаименованию.Ссылка; КонецЕсли; НоваяСтрока.ЕдиницаИзмерения = НоменклатураПоискПоНаименованию.БазоваяЕдиницаИзмерения; НоваяСтрока.Номенклатура = НоменклатураПоискПоНаименованию; НоваяСтрока.Количество = Строка.Количество; НоваяСтрока.Цена = Строка.Цена; НоваяСтрока.Сумма = Строка.Цена * Строка.Количество; КонецЕсли; Попытка НовыйДокумент.Записать(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЦикла; Но при поиске документа в строке: ПоискДокумента = Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру(Строка.НомерНакладной); по отладчику например номер 172, а в строке когда мы создаем документ попадает "172 ", и вот этот пробел никак не убрать, СокрП пробовал, все равно, и в итоге в уже созданный документ не пишутся новые данные, почему? | |||
| 1
    
        m-serg74 25.10.13✎ 13:42 | 
        /по отладчику например номер 172, а в строке когда мы создаем документ попадает "172     ",/
 Строка.НомерНакладной - здесь кто - Строка или Число? | |||
| 2
    
        Wobland 25.10.13✎ 13:42 | 
        искать документы по номеру принято в каком-то периоде     | |||
| 3
    
        m-serg74 25.10.13✎ 13:43 | 
        + (1) и зачем для каждой строки каждый раз искать документ?     | |||
| 4
    
        Валидатор 25.10.13✎ 13:45 | 
        (3) потому что в тхт файле миллион позиций номенклатурных, и у каждой из них есть номер накладной, то есть
 Ванна 172 Шторы 172 унитаз 173 ванна и шторы должны в 1 документ сохраниться, а унитаз в другой (1) Число | |||
| 5
    
        m-serg74 25.10.13✎ 13:46 | 
        отсортировать по номеру документа не предлагать?     | |||
| 6
    
        m-serg74 25.10.13✎ 13:48 | 
        (4) /(1) Число/
 тогда не знаю почему так... по идее нулями спереди должна платХорма сама добивать... | |||
| 7
    
        Валидатор 25.10.13✎ 13:48 | 
        (5) вряд ли, просто первый документ создается с номером:
 "172 ", а когда идет поиск по документу, ищется документ "172" а не "172 ", и почему то при создании документа, даже если использовать функцию по обрезанию пробелов по бокам, он все равно создастся как "172 " вот нахрена эти пробелы в номер подставляются? | |||
| 8
    
        George Wheels 25.10.13✎ 13:48 | 
        Видимо у документа тип кода Строка, а ты пытаешься указать число для поиска по номеру.     | |||
| 9
    
        Михаил Козлов 25.10.13✎ 13:49 | 
        (4) Сформируйте дерево при загрузке, или получите разные номера накладных и ТЗ.НайтиСтроки.     | |||
| 10
    
        Валидатор 25.10.13✎ 13:49 | 
        (8) строковый тип тоже пробовал, все равно тоже самое     | |||
| 11
    
        m-serg74 25.10.13✎ 13:49 | 
        (4) погоди!!! вот оно
 /НовыйДокумент.Номер = СокрЛП(Номер);/ не надо его к строке преобразовывать | |||
| 12
    
        m-serg74 25.10.13✎ 13:50 | 
        пиши число, платформа за тебя все сама сделает как надо     | |||
| 13
    
        Валидатор 25.10.13✎ 13:51 | 
        (12) я грузил из тхт файла в мою ТЗ номер этот с типом число. И потом при создании документа пишу:
 для каждого .... цикл НовйыДокумент = ... создать .. НовйДокумент = Строка.Номер; и не прокатывает | |||
| 14
    
        m-serg74 25.10.13✎ 13:51 | 
        (13) я вижу что ты строку пишешь     | |||
| 15
    
        Валидатор 25.10.13✎ 13:52 | 
        Пока Стр <> Неопределено Цикл 
 МассивСтрок = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр,"¦"); НоваяТЗ = ТаблицаЗначений.Добавить(); Артикул = МассивСтрок[0]; НоваяТЗ.Артикул = СокрЛП(Артикул); Номенклатура = МассивСтрок[1]; НоваяТЗ.Номенклатура = СокрЛП(Номенклатура); ГТД = МассивСтрок[2]; НоваяТЗ.ГТД = СокрЛП(ГТД); СтранаПроисхождения = МассивСтрок[3]; НоваяТЗ.СтранаПроисхождения = СокрЛП(СтранаПроисхождения); ДатаНакладной = МассивСтрок[6]; ДатаНакладной = ПолучитьДатуИзСтроки(ДатаНакладной); НоваяТЗ.ДатаНакладной = ДатаНакладной; НомерНакладной = МассивСтрок[7]; НоваяТЗ.НомерНакладной = СокрЛП(НомерНакладной); Импортер = МассивСтрок[8]; НоваяТЗ.Импортер = СокрЛП(Импортер); Количество = МассивСтрок[9]; НоваяТЗ.Количество = СокрЛП(Количество); Цена = МассивСтрок[10]; НоваяТЗ.Цена = СокрЛП(Цена); Стр = Текст.ПрочитатьСтроку(); Если ТипЗнч(Стр) = Неопределено Тогда Продолжить; КонецЕсли; КонецЦикла; вот загрузка на стадии заполнения ТЗ из тхт файла | |||
| 16
    
        Валидатор 25.10.13✎ 13:52 | 
        НоваяТЗ.НомерНакладной = НомерНакладной
 вот так только теперь | |||
| 17
    
        m-serg74 25.10.13✎ 13:53 | 
        НоваяТЗ.НомерНакладной = СокрЛП(НомерНакладной);
 после СокрЛП даже если б там число было свелось бы к строковому типу | |||
| 18
    
        m-serg74 25.10.13✎ 13:54 | 
        НоваяТЗ.НомерНакладной = Число(НомерНакладной )     | |||
| 19
    
        Валидатор 25.10.13✎ 13:59 | 
        (18) сделал так, все равно не пишет нормально номер, а так же "172    "     | |||
| 20
    
        m-serg74 25.10.13✎ 14:29 | 
        (19) значит так сделай:
 
 | |||
| 21
    
        m-serg74 25.10.13✎ 14:31 | 
        Метаданные.Документы.РеализацияТоваровУслуг.ДлинаНомера
 у тебя ПоступлениеТоваровУслуг | |||
| 22
    
        m-serg74 25.10.13✎ 14:33 | 
        (19) а чтоб находился Дату Интервала поиска по номеру как сказал Wobland , нужно обязательно указывать, а если не хочешь то искать запросом например     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |