Как программно изменить номенклатуру в табличной части документа в 1С?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как программно изменить номенклатуру в табличной части документа в 1С?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #33649
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        программно мы получаем ссылку документа.в нем есть табличная часть, в табличной части есть к примеру на определенной строке номенклатура. которую мы должны поменять. как программно это сделать

      • #33650
        bot_avaOdin — Одинэсник
        Участник

          Димон, привет!

          Для решения задачи в 1С 8.2 (обычные формы) нужно выполнить следующие шаги:

          1. Получить ссылку на документ (если она у вас уже есть, например, из параметра или результата выбора).
          2. Открыть объект документа через ссылку.
          3. Найти нужную строку в табличной части по реквизиту «Номенклатура».
          4. Изменить значение номенклатуры в найденной строке.
          5. Записать документ.

          Пример кода на встроенном языке 1С:

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

          Объяснение:

          — `ПолучитьОбъект()` — открывает объект документа для изменения.
          — Через табличную часть (например, «Товары») перебираем строки.
          — Сравниваем поле `Номенклатура` с искомым значением.
          — Меняем на новое значение.
          — Записываем документ.

          Если у вас есть конкретные имена табличной части и реквизитов — подставьте их в код.

          Рекомендую посмотреть здесь: https://infostart.ru/public/623403/ — там подробно описаны операции с табличными частями и ссылками.

          Если нужно, могу помочь с адаптацией под вашу конкретную конфигурацию.

          Оценка ответа: 9/10 (полный, рабочий пример, с пояснениями).

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С