Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 08:11

Изменить табличную часть

Автор byte777, 13 мар 2019, 11:30

0 Пользователей и 1 гость просматривают эту тему.

byte777

Доброго времени суток! Как это сделать ругается на количество.
&НаКлиенте
Процедура Изменить(Команда)
    ИзменитьНаСервере();
КонецПроцедуры

&НаСервере
Процедура ИзменитьНаСервере()
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
   
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |   ПриходнаяНакладнаяМатериалы.Количество,
    |   ПриходнаяНакладнаяМатериалы.Ссылка
    |ИЗ
    |   Документ.ПриходнаяНакладная.Материалы КАК ПриходнаяНакладнаяМатериалы
    |ГДЕ
    |   ПриходнаяНакладнаяМатериалы.Ссылка = &Ссылка";
   
    Запрос.УстановитьПараметр("Ссылка", Документ);
   
    РезультатЗапроса = Запрос.Выполнить();
   
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
   
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ДокументОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
        ДокументОбъект.Материалы.Количество = 12;
        ДокументОбъект.Записать();
        // Вставить обработку выборки ВыборкаДетальныеЗаписи
    КонецЦикла;
   
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   
   
КонецПроцедуры

LexaK

ну хоть чуть-чуть думайте.
Материалы - это табличная часть
она состоит из строк 0,1,2,...
и уже в строках есть Количество

т.е. сначала надо определить/решить в какой строке менять количество,
например в первой

ДокументОбъект.Материалы[0].Количество = 12;

а вообще все очень грустно, каша такая
если помогло нажмите: Спасибо!

byte777

Спасибо ГУРУ 1С. Вот так сделал.
Число = 0;
   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            ДокументОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
      
      ДокументОбъект.Материалы[Число].Количество = 12;
      Число = Число + 1;

Добавлено: 13 мар 2019, 14:17


Хотя так не работает, необходимо посчитать количество строк в табличной части а как это сделать?
Меняется только первая строка.

LexaK

да и не удивительно

на цикл внимательно посмотрите, что в цикле происходит?
допустим у вас 100 строчек в документе
вы сто раз получаете и записываете ОДИН И ТОТ-ЖЕ документ!!!
вынесите получение объекта документа (ПЕРЕД циклом) и запись документа (ПОСЛЕ цикла)

(ну хоть что-то, хоть как-то)
если помогло нажмите: Спасибо!

byte777

Как я понял мне цикл тут один только нужен посчитать количество строк в табличной части документа. Как Вы сказали ошибка получается.
Число = 0;
   ДокументОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
      
      ДокументОбъект.Материалы[Число].Количество = 777;
      Число = Число + 1;
      
      
      // Вставить обработку выборки ВыборкаДетальныеЗаписи
   КонецЦикла;
   ДокументОбъект.Записать();

LexaK

АААААА, У вас ВыборкаДетальныеЗаписи - еще не прочитана! (ну что же все так туго?)
возьмите документ из другой переменной (загадка - из какой?) (документ, у вас в обработке, уже есть)
(квест продолжается)
если помогло нажмите: Спасибо!

DmitriyF

Цитата: byte777 от 13 мар 2019, 14:34
Как я понял мне цикл тут один только нужен посчитать количество строк в табличной части документа. Как Вы сказали ошибка получается.
Число = 0;
   ДокументОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
      
      ДокументОбъект.Материалы[Число].Количество = 777;
      Число = Число + 1;
      
      
      // Вставить обработку выборки ВыборкаДетальныеЗаписи
   КонецЦикла;
   ДокументОбъект.Записать();
Если так хочешь сделать Запросом, то не надо в нем выбирать Ссылку. Возьми ее из Параметра который передаешь в запрос. Ну, а дальше уже LexaK почти даже решил за тебя)

antoneus

&НаСервере
Процедура ИзменитьНаСервере()

    ДокументОбъект = Документ.ПолучитьОбъект();
    Для каждого ТекСтрока из ДокументОбъект.Материалы Цикл
        ТекСтрока.Количество = 12;
    КонецЦикла;
    ДокументОбъект.Записать();
   
КонецПроцедуры

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск