Имя: Пароль:
1C
 
Изменение строк табличной части документа
0 alex2808
 
19.02.09
16:14
Есть ссылка на документ.

Нужно зайти в его табличную часть Товары.

Найти в ней
1) Номенклатура-1
2) Номенклатура-2
3) Номенклатура-3

И в них поменять количество товара.

Подскажите как это сделать?

Пробовал так

Док = БазовоеПеремещение.ПолучитьОбъект(); //ссылка на документ
Пока НоваяСтрокаВозврата.Следующий() Цикл
Док.Товары.НайтиСтроки(Новый Структура("Номенклатура",НоваяСтрокаВозврата.Номенклатура));
Если Строка.Количество()<=0 Тогда
  Сообщить(НоваяСтрокаВозврата.Номенклатура+" не найдена!!!");
Иначе
 Строка[0].Количество = Строка[0].Количество - НоваяСтрокаВозврата.Количество;
КонецЕсли;
КонецЦикла;
Док.Записать();

Не получается.
Что неправильно?
1 Stepa86
 
19.02.09
16:17
переменная строка это что?
2 tsr
 
19.02.09
16:17
Это откуда?
Если Строка.Количество()<=0 Тогда
  Сообщить(НоваяСтрокаВозврата.Номенклатура+" не найдена!!!");
Иначе
 Строка[0].Количество = Строка[0].Количество - НоваяСтрокаВозврата.Количество;
КонецЕсли;

Тогда уж
строка=Док.Товары.НайтиСтроки(Новый Структура("Номенклатура",НоваяСтрокаВозврата.Номенклатура));
3 alex2808
 
19.02.09
16:17
Извиняюсь
Строка = Док.Товары.НайтиСтроки(Новый Структура("Номенклатура",НоваяСтрокаВозврата.Номенклатура));
4 Stepa86
 
19.02.09
16:18
на вскидку как то так:

Док = БазовоеПеремещение.ПолучитьОбъект(); //ссылка на документ
Пока НоваяСтрокаВозврата.Следующий() Цикл
МассивСтрок = Док.Товары.НайтиСтроки(Новый Структура("Номенклатура",НоваяСтрокаВозврата.Номенклатура));

Для Каждого цСтрока Из МассивСтрок Цикл
цСтрока.Количество = цСтрока.Количество - НоваяСтрокаВозврата.Количество;
КонецЦикла;
Док.Записать();
5 alex2808
 
19.02.09
16:23
По идее этот код ведь тоже рабочий, если мне нужна только 1-я строка из найденного массива?!


Док = БазовоеПеремещение.ПолучитьОбъект(); //ссылка на документ

Пока НоваяСтрокаВозврата.Следующий() Цикл
Строка = Док.Товары.НайтиСтроки(Новый Структура("Номенклатура",НоваяСтрокаВозврата.Номенклатура));
Если Строка.Количество()<=0 Тогда
  Сообщить(НоваяСтрокаВозврата.Номенклатура+" не найдена!!!");
Иначе
 Строка[0].Количество = Строка[0].Количество - НоваяСтрокаВозврата.Количество;
КонецЕсли;
КонецЦикла;
Док.Записать();
6 butterbean
 
19.02.09
16:25
(5) зачем тогда НайтиСтроки, можно просто Найти
7 tsr
 
19.02.09
16:25
Зачем тогда ищешь массив строк? Ищи одну. А лучше посмотри отладчиком где косяк
8 alex2808
 
19.02.09
16:32
(6)
Блин а ведь точно! :)
Так правильно?  

Док = БазовоеПеремещение.ПолучитьОбъект(); //ссылка на документ

Пока НоваяСтрокаВозврата.Следующий() Цикл
Строка = Док.Товары.Найти(НоваяСтрокаВозврата.Номенклатура,"Номенклатура");
Если Строка = Неопределено Тогда
  Сообщить(НоваяСтрокаВозврата.Номенклатура+" не найдена!!!");
Иначе
 Строка.Количество = Строка.Количество - НоваяСтрокаВозврата.Количество;
КонецЕсли;
КонецЦикла;
Док.Записать();
9 alex2808
 
19.02.09
16:34
Тут вопрос в ньюансе, Док можно сохранять после цикла, когда
были изменены множество строк?

Или Док.Записать() надо делать после изменения каждой строки?
10 Stepa86
 
19.02.09
16:36
(9) фигасе ньюанс - если не учитывать тормоза во втором случае, то без разницы =)
11 svent0vit
 
19.02.09
17:33
(9), будешь писать в цикле - будут тормоза. Сделай флаг "Записать":

Записать = Ложь;
Если Строка = Неопределено Тогда
  Сообщить(НоваяСтрокаВозврата.Номенклатура+" не найдена!!!");
Иначе
 Строка.Количество = Строка.Количество - НоваяСтрокаВозврата.Количество;
 Записать = Истина;
КонецЕсли;
КонецЦикла;
Если Записать Тогда Док.Записать();