|
Загрузка данных в уже существующий документ | ☑ | ||
---|---|---|---|---|
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 , нужно обязательно указывать, а если не хочешь то искать запросом например
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |