Как программно удалить строки из табличной части по условию
В статье рассмотрено несколько основных алгоритмов удаления строк из табличной части по условию. Каждый из вариантов по своему хорош, вам нужно подобрать для себя наиболее подходящий. Оглавление (нажмите, чтобы раскрыть) Первый вариант удаления строк по условию Второй вариант удаления строк […]
Другое в 1С
- 1С: Массивы и коллекции. Массивы
- Как передать структуру в параметр. Конвертация данных
- Менеджер заданий не активен. Как исправить
- Как пропорционально распределить сумму
- Как программно отключить регистрацию объектов в планах обмена при записи объекта
В статье рассмотрено несколько основных алгоритмов удаления строк из табличной части по условию. Каждый из вариантов по своему хорош, вам нужно подобрать для себя наиболее подходящий.
1С 8.3 Удалить строки табличной части документа/справочника — Программист 1С Минск. Автоматизация бизнеса.
1С 8.3 Удалить строки табличной части документа/справочника
&НаСервере
Процедура УдалитьСтрокиВТЧпоУсловию ()
ОтгрузкаСсылка = Документы . ОтгрузкаТоваров . НайтиПоНомеру ( «МРБ-000123» , ‘20200430’ );
МассивСтрокУдалить = Новый Массив ;
// Вариант 1
Для Каждого Строка Из ОтгрузкаСсылка . Номенклатура Цикл
Если НЕ ЗначениеЗаполнено ( Строка . Номенклатура ) Тогда
МассивСтрокУдалить . Добавить ( Строка );
КонецЕсли;
КонецЦикла;
Для Каждого ЭлементМассив Из МассивСтрокУдалить Цикл
Объект . Номенклатура . Удалить ( ЭлементМассив ); //удаляем нужную строку
КонецЦикла;
// Вариант 2
//КоличествоСтрок = ОтгрузкаСсылка.Номенклатура.Количество()-1;
//ИндексСтроки = КоличествоСтрок;
//Для А = 0 по КоличествоСтрок Цикл
// Строка = ОтгрузкаСсылка.Номенклатура.Получить(ИндексСтроки);
// Если НЕ ЗначениеЗаполнено(Строка.Номенклатура) Тогда
// ОтгрузкаСсылка.Номенклатура.Удалить(Строка);
// КонецЕсли;
// ИндексСтроки = ИндексСтроки — 1;
//КонецЦикла;
&НаСервере
Процедура УдалитьСтрокиВТЧпоОтбору ()
ОтгрузкаСсылка = Документы . ОтгрузкаТоваров . НайтиПоНомеру ( «МРБ-000123» , ‘20200430’ );
ОтгрузкаТоваров = ОтгрузкаСсылка . ПолучитьОбъект ();
СтруктураДляПоиска = Новый Структура ( «Количество» , 0 );
//Получаем список строк соответсвтвующих отбору, и перебором удаляем.
МассивСтрокУдалить = ОтгрузкаТоваров . Номенклатура . НайтиСтроки ( СтруктураДляПоиска );
Для Каждого Строка Из МассивСтрокУдалить Цикл
ОтгрузкаТоваров . Номенклатура . Удалить ( Строка );
КонецЦикла;
ОтгрузкаТоваров . Записать (); // Записываем изменения в документ
&НаСервере
Процедура УдалитьСтрокиВТЧпоОтборуЧерезТЗ ()
ОтгрузкаСсылка = Документы . ОтгрузкаТоваров . НайтиПоНомеру ( «МРБ-000123» , ‘20200430’ );
// Укажем условия отбора: Нужно оставить только строки где СубконтоКт1 = РБПНаПФР
ПараметрыОтбора = Новый Структура ( «СубконтоКт1» , Справочники . РасходыБудущихПериодов . РБПНаПФР );
//Теперь выгружаем табличную часть в таблицу значений
ТЗисходн = ОтгрузкаСсылка . Номенклатура . Выгрузить ();
//Скопируем ТЗ с заданным отбором в новую ТЗ
ТЗ = ТЗисходн . Скопировать ( ПараметрыОтбора );
//Очистим табличную часть
ОтгрузкаСсылка . Номенклатура . Очистить ();
//Загружем в табличную часть новую таблицу значений
ОтгрузкаСсылка . Номенклатура . Загрузить ( ТЗ );
1С Как удалить строки из табличной части документа
Практически во всех документах которые есть в типовых конфигурациях 1С присутствует табличная часть и порой даже не одна. Поэтому каждый должен уметь обрабатывать её программно, заполнять, добавлять удалять строки, производить пересчет и многое другое. Задачи подобного рода Вам будут встречаться очень часто. Обо все об этом в одной статье рассказать не получиться, поэтому сначала расскажу о том как можно удалить строки из ТЧ документов. Делается это на самом деле достаточно просто, удалить можно не все строки а только необходимые по определенным условиям.
Команда для удаления строк из табличной части по условию 1С
На первых этапах с этим будет гораздо проще разобраться на примере простого документа созданного вами лично, так как в нем будет минимум кода. Я для примера так же создам новый документ «Поступление» с табличной частью «Товары». У которой будет несколько реквизитов «Номер», «Наименование», «Количество», «Цена», «НДС» и «Комментарий», кстати последний реквизит добавлен на форму программно, об этом можете прочитать в предыдущей статье.
Давайте будем удалить не все строки а скажем те у которых нет НДС.
Первым делам создадим новую команду «Удалить строки бех НДС» и разместим её на форме.
Теперь в процедуре напишем вот такой код.
Постарался весь код описать но если остались вопросы пишите!
Сохраняем конфигурацию, открываем документ и нажимаем на кнопку «Удалить строки без НДС».
Если Вы все сделали правильно то 1 и 5 строка должны удалиться из документа.
Условие можно изменить на любое другое, например удалять строки с определенной ценой, количеством и т.д. Главное на начальном этапе понять принцип.
Удаление строк из ТЧ : 1 комментарий
Отбор = Структура («НДС», ПредопределенноеЗначение(«Перечисление.СтавкаНДС.БезНДС»));
МассивСтрокБезНДС = Объект.Товары.НайтиСтроки(Отбор);
Для Каждого СтрокаМассива из МассивПустыхСтрок Цикл
Объект.Товары.Удалить(СтрокаМассива);
КонецЦикла;
как удалить строки по условию 8.3
помогите пожалуйста, необходимо удалить строку по условию (выбрать необходимую номенклатуру) в документе «Отчет о розн. продажах » с последущим проведением.
Бухгалтерия 8.3 управляемые формы.
программировать только начинаю.
- Скопировать ссылку
- Перейти
Попробуйте использовать методы Найти() и Удалить() применительно к ТЧ Объекта:
- Скопировать ссылку
- Перейти
можно и на клиенте. у в ДанныеФормыКоллеция тоже есть методы поиска строк по отбору.
если же ориентироваться на ТЧ, то на сервере объект необходимо получить из реквизита, потом загрузить в форму — тернистый путь.
- Скопировать ссылку
- Перейти
Пример удаления в табличной части документа строк с нулевым значением реквизита «Количество»?
ОбъектДок = СсылкаДок.ПолучитьОбъект();
СтруктураДляПоиска = Новый Структура(«Количество», 0);
ТабличнаяЧастьДок = ОбъектДок.Товары;
МассивПустыхСтрок = ТабличнаяЧастьДок.НайтиСтроки(СтруктураДляПоиска);
Для каждого Строка Из МассивПустыхСтрок Цикл
ТабличнаяЧастьДок.Удалить(Строка);
КонецЦикла;
- Скопировать ссылку
- Перейти
- Скопировать ссылку
- Перейти
- Скопировать ссылку
- Перейти
- Скопировать ссылку
- Перейти
- Скопировать ссылку
- Перейти
- Скопировать ссылку
- Перейти
(9) от спросил как выбрать, а не как удалить — зачем «зашумлять» неокрепший ум еще больше.
Выбор — это всегда клиентский, как правило, интеракткивный метод.
главное понять — выбор из чего и где?
- Скопировать ссылку
- Перейти
(8) если вы не укажете контекст обработки, то будет еще много «шума»
возможные контексты:
1. открыта форма форма документа и в ней необходимо выбрать номенклатуру, удалить строки из формы этого документа и провести — это клиентский контекст в чистом виде и все предложенные выше варианты избыточны.
2. где-то (в списке, в обработке) выбран документ-ссылка и в этом объекте необходимо выбрать номенклатуру, удалить строки с ней из объекта и провести объект — это серверный контекст
3. ваше описание контекста задачи.
Прежде чем задать вопрос ВСЕГДА правильно формулируйте контекст вашей задачи и среду исполнения(планформа, конф.)
Тогда ответы будут содержать меньше «шума и пыли».
- Скопировать ссылку
- Перейти
(10)спасибо за описание моей задачи.
т.е. в выбранном документе, выбираем номенклатуру далее удалем все найденные строки и проводим документ.
- Скопировать ссылку
- Перейти
- Скопировать ссылку
- Перейти
- Скопировать ссылку
- Перейти
(14) задача по выбору номенклатуру не решена.
после выбора документа необходимо
1. получить список уникальных значений колонки номенклатура
2. вызвать асинхронный метод выбора из этого списка
3. в обработчике завершения выбора удалить строки и записать объект.
Как программно удалить строки из табличной части по условию
В статье рассмотрено несколько основных алгоритмов удаления строк из табличной части по условию. Каждый из вариантов по своему хорош, вам нужно подобрать для себя наиболее подходящий. Оглавление (нажмите, чтобы раскрыть) Первый вариант удаления строк по условию Второй вариант удаления строк […]
Другое в 1С
- 1С: Массивы и коллекции. Массивы
- Как передать структуру в параметр. Конвертация данных
- Менеджер заданий не активен. Как исправить
- Как пропорционально распределить сумму
- Как программно отключить регистрацию объектов в планах обмена при записи объекта
В статье рассмотрено несколько основных алгоритмов удаления строк из табличной части по условию. Каждый из вариантов по своему хорош, вам нужно подобрать для себя наиболее подходящий.
1С 8.3 Удалить строки табличной части документа/справочника — Программист 1С Минск. Автоматизация бизнеса.
1С 8.3 Удалить строки табличной части документа/справочника
&НаСервере
Процедура УдалитьСтрокиВТЧпоУсловию ()
ОтгрузкаСсылка = Документы . ОтгрузкаТоваров . НайтиПоНомеру ( «МРБ-000123» , ‘20200430’ );
МассивСтрокУдалить = Новый Массив ;
// Вариант 1
Для Каждого Строка Из ОтгрузкаСсылка . Номенклатура Цикл
Если НЕ ЗначениеЗаполнено ( Строка . Номенклатура ) Тогда
МассивСтрокУдалить . Добавить ( Строка );
КонецЕсли;
КонецЦикла;
Для Каждого ЭлементМассив Из МассивСтрокУдалить Цикл
Объект . Номенклатура . Удалить ( ЭлементМассив ); //удаляем нужную строку
КонецЦикла;
// Вариант 2
//КоличествоСтрок = ОтгрузкаСсылка.Номенклатура.Количество()-1;
//ИндексСтроки = КоличествоСтрок;
//Для А = 0 по КоличествоСтрок Цикл
// Строка = ОтгрузкаСсылка.Номенклатура.Получить(ИндексСтроки);
// Если НЕ ЗначениеЗаполнено(Строка.Номенклатура) Тогда
// ОтгрузкаСсылка.Номенклатура.Удалить(Строка);
// КонецЕсли;
// ИндексСтроки = ИндексСтроки — 1;
//КонецЦикла;
&НаСервере
Процедура УдалитьСтрокиВТЧпоОтбору ()
ОтгрузкаСсылка = Документы . ОтгрузкаТоваров . НайтиПоНомеру ( «МРБ-000123» , ‘20200430’ );
ОтгрузкаТоваров = ОтгрузкаСсылка . ПолучитьОбъект ();
СтруктураДляПоиска = Новый Структура ( «Количество» , 0 );
//Получаем список строк соответсвтвующих отбору, и перебором удаляем.
МассивСтрокУдалить = ОтгрузкаТоваров . Номенклатура . НайтиСтроки ( СтруктураДляПоиска );
Для Каждого Строка Из МассивСтрокУдалить Цикл
ОтгрузкаТоваров . Номенклатура . Удалить ( Строка );
КонецЦикла;
ОтгрузкаТоваров . Записать (); // Записываем изменения в документ
&НаСервере
Процедура УдалитьСтрокиВТЧпоОтборуЧерезТЗ ()
ОтгрузкаСсылка = Документы . ОтгрузкаТоваров . НайтиПоНомеру ( «МРБ-000123» , ‘20200430’ );
// Укажем условия отбора: Нужно оставить только строки где СубконтоКт1 = РБПНаПФР
ПараметрыОтбора = Новый Структура ( «СубконтоКт1» , Справочники . РасходыБудущихПериодов . РБПНаПФР );
//Теперь выгружаем табличную часть в таблицу значений
ТЗисходн = ОтгрузкаСсылка . Номенклатура . Выгрузить ();
//Скопируем ТЗ с заданным отбором в новую ТЗ
ТЗ = ТЗисходн . Скопировать ( ПараметрыОтбора );
//Очистим табличную часть
ОтгрузкаСсылка . Номенклатура . Очистить ();
//Загружем в табличную часть новую таблицу значений
ОтгрузкаСсылка . Номенклатура . Загрузить ( ТЗ );
1С Как удалить строки из табличной части документа
Практически во всех документах которые есть в типовых конфигурациях 1С присутствует табличная часть и порой даже не одна. Поэтому каждый должен уметь обрабатывать её программно, заполнять, добавлять удалять строки, производить пересчет и многое другое. Задачи подобного рода Вам будут встречаться очень часто. Обо все об этом в одной статье рассказать не получиться, поэтому сначала расскажу о том как можно удалить строки из ТЧ документов. Делается это на самом деле достаточно просто, удалить можно не все строки а только необходимые по определенным условиям.
Команда для удаления строк из табличной части по условию 1С
На первых этапах с этим будет гораздо проще разобраться на примере простого документа созданного вами лично, так как в нем будет минимум кода. Я для примера так же создам новый документ «Поступление» с табличной частью «Товары». У которой будет несколько реквизитов «Номер», «Наименование», «Количество», «Цена», «НДС» и «Комментарий», кстати последний реквизит добавлен на форму программно, об этом можете прочитать в предыдущей статье.
Давайте будем удалить не все строки а скажем те у которых нет НДС.
Первым делам создадим новую команду «Удалить строки бех НДС» и разместим её на форме.
Теперь в процедуре напишем вот такой код.
Постарался весь код описать но если остались вопросы пишите!
Сохраняем конфигурацию, открываем документ и нажимаем на кнопку «Удалить строки без НДС».
Если Вы все сделали правильно то 1 и 5 строка должны удалиться из документа.
Условие можно изменить на любое другое, например удалять строки с определенной ценой, количеством и т.д. Главное на начальном этапе понять принцип.
Удаление строк из ТЧ : 1 комментарий
Отбор = Структура («НДС», ПредопределенноеЗначение(«Перечисление.СтавкаНДС.БезНДС»));
МассивСтрокБезНДС = Объект.Товары.НайтиСтроки(Отбор);
Для Каждого СтрокаМассива из МассивПустыхСтрок Цикл
Объект.Товары.Удалить(СтрокаМассива);
КонецЦикла;
Удаление строк из табличной части документа
Сегодня в работе столкнулся с неверным вводом остатков, нужно было по определенному отбору удалить строки из табличной части документа. В этой заметке разберу как очистить табличную часть, как удалить определенные строки с отбором.
Удалить все из табличной части
Начу с самого простого, бывают случаи когда нужно полностью очистить табличную часть документ. Для этого необходимо использовать команду Очистить()
Удаление строк из табличной части с отбором
В этом примере удалим из документа ввода остатков все взаимоотношения с партнерами меньше 1 рубля.
Удалить строки из табличной части которые не соответствуют отбору
Иногда ситуация складывается так, что мы точно знаем какие строки нужно оставить, а правил для удаления строк слишком много. В этом случае удалим все строки из табличной части которые не соответствуют отбору.
Как не надо удалять записи из табличной части
В этом коде мы видим как программист решил выполнить удаление строк из табличной части перебором табличной части.
Перебирает табличную часть, по ходу проверяя условия удаления и сразу удаляет если условие выполняется, но в этом примере не учтено что при удалении строки изменится индекс у строкиТЧ и часть строк будет пропущена.