Имя: Пароль:
1C
1С v8
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
Спасибою Ты очень добрый!!!
Ошибка? Это не ошибка, это системная функция.