|
v8: Заполнить через внешнюю обработку табличную часть документа | ☑ | ||
---|---|---|---|---|
0
Natulea27
25.01.12
✎
16:50
|
Помоготе пожлуйста
Из внешнего XLS файла, хочу дополнить некоторые поля табличной части документа. Если ПутьКФайлуСпискаБанки = "" Тогда Возврат; КонецЕсли; Excel = ОткрытьExcel (ПутьКФайлуСпискаБанки); КоличествоСтрокФайла = ПолучитьДанныеExcel (Excel); ЭлементыФормы.НадписьПроцесса.Заголовок = "Загрузка ОС в эксплуатации..."; ЭлементыФормы.ИндикаторПроцесса.МаксимальноеЗначение = КоличествоСтрокФайла; ЭлементыФормы.ИндикаторПроцесса.МинимальноеЗначение = 2; // Выбираем данные из файла Для а = 2 по КоличествоСтрокФайла-2 Цикл ЭлементыФормы.ИндикаторПроцесса.Значение = а; Кол1Имя= СокрЛП(Excel.Cells(а,1).Value); //Код = СокрЛП(Excel.Cells(а,2).Value); ИнвентНомСтар = СокрЛП(Excel.Cells(а,2).Value); ИнвентНом = СокрЛП(Excel.Cells(а,3).Value); ОС = СокрЛП(Excel.Cells(а,4).Value); //ЕдинИзмер= СокрЛП(Excel.Cells(а,5).Value); //Количество= СокрЛП(Excel.Cells(а,6).Value); Износ= СокрЛП(Excel.Cells(а,8).Value); ДокОстатков=документы.ВводПервоначальныхДанныхПоОС.Выбрать(дата,Дата); Пока ДокОстатков.Следующий() цикл Если сокрлп(ДокОстатков.ПодразделениеКомпании)= сокрлп(Подразделение) тогда Для Каждого СтрокатабЧастиТовары из ДокОстатков.ОС Цикл Если (Сокрлп(СтрокатабЧастиТовары.ИнвНомер)=Сокрлп(ИнвентНом))и(Сокрлп(СтрокатабЧастиТовары.СтарыйИнвНом)=Сокрлп(ИнвентНомСтар)) тогда ДокОстатков.ПолучитьОбъект(); СтрокатабЧастиТовары.СуммаИзноса=Износ ; ДокОстатков.записать(); Конецесли; КонецЦикла; Иначе Конецесли; КонецЦикла; КонецЦикла; //Закрываем Excel Excel.DisplayAlerts = 0; Excel.ActiveWorkbook.Close(); Excel.DisplayAlerts = 1; Excel.Application.Quit(); Выдает ошибку Поле объекта недоступно для записи (СуммаИзноса) СтрокатабЧастиТовары.СуммаИзноса=Износ ; |
|||
1
andrewks
25.01.12
✎
16:55
|
как-то лихо ты строки ТЧ начинаешь выбирать, ещё до ПолучитьОбъект()
|
|||
2
zbv
25.01.12
✎
16:55
|
ДокументОбъект = ДокОстатков.ПолучитьОбъект();
- вынести из цикла по строкам ОС и цикл делать: Для Каждого СтрокатабЧастиТовары из ДокументОбъект.ОС Цикл |
|||
3
andrewks
25.01.12
✎
16:57
|
+(1) и вообще, логика неправильная. ты не тот объект мучаешь для выборки ТЧ и записи
|
|||
4
Natulea27
25.01.12
✎
16:59
|
а как надо?
|
|||
5
andrewks
25.01.12
✎
17:00
|
чем больше я смотрю на твой код, тем грязнее хочется выругаться
|
|||
6
Natulea27
25.01.12
✎
17:00
|
Не надо пожалуйста!!!
|
|||
7
andrewks
25.01.12
✎
17:01
|
документов за этот день много? как часто буде производится эта операция?
|
|||
8
Natulea27
25.01.12
✎
17:03
|
один раз, для закачки данных по остаткам.
|
|||
9
Buster007
25.01.12
✎
17:05
|
что-то непонятное, мне кажется лучше бы было создать ТЗ из эксель файла, проиндексировать колонки поиска и потом документы выбирать и, пробегаясь по строкам документа, искать в ТЗ экселевской.
|
|||
11
Natulea27
25.01.12
✎
17:07
|
сПАСИБО ОГРОМНОЕ ЗА ИДЕЮ. у МЕНЯ ВСЕ ПОЛУЧИЛОСЬ.
|
|||
12
andrewks
25.01.12
✎
17:08
|
(8) а, ну тогда ладно. держи
ВыборкаДок=Документы.ВводПервоначальныхДанныхПоОС.Выбрать(дата,Дата); Пока ВыборкаДок.Следующий() цикл ДокОбъект=ВыборкаДок.ПолучитьОбъект(); Если сокрлп(ДокОбъект.ПодразделениеКомпании)= сокрлп(Подразделение) тогда БылоИзм=Ложь; Для Каждого СтрокатабЧастиТовары из ДокОбъект.ОС Цикл Если (Сокрлп(СтрокатабЧастиТовары.ИнвНомер)=Сокрлп(ИнвентНом))и(Сокрлп(СтрокатабЧастиТовары.СтарыйИнвНом)=Сокрлп(ИнвентНомСтар)) тогда СтрокатабЧастиТовары.СуммаИзноса=Износ ; БылоИзм=Истина; Конецесли; КонецЦикла; Если БылоИзм Тогда ДокОбъект.записать(); КонецЕсли; Конецесли; КонецЦикла; |
|||
13
andrewks
25.01.12
✎
17:09
|
(11) заходи ещё
|
|||
14
andrewks
25.01.12
✎
17:12
|
(9) а ещё лучше - соединить потом эту ТЗ в запросе с таблицей дока, и обработать.
|
|||
15
Natulea27
25.01.12
✎
17:50
|
Спасибою Ты очень добрый!!!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |