![]() |
![]() |
|
Изменение строк табличной части документа | ☑ | ||
---|---|---|---|---|
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), будешь писать в цикле - будут тормоза. Сделай флаг "Записать":
Записать = Ложь; Если Строка = Неопределено Тогда Сообщить(НоваяСтрокаВозврата.Номенклатура+" не найдена!!!"); Иначе Строка.Количество = Строка.Количество - НоваяСтрокаВозврата.Количество; Записать = Истина; КонецЕсли; КонецЦикла; Если Записать Тогда Док.Записать(); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |