Страницы: 1
RSS
Как перебрать строки реквизита Номенклатура табличной части справочника
 

Всем здравствуйте. Как перебрать строки реквизита Номенклатура табличной части справочника и узнать, есть ли из этой номенклатуры помеченная на удаление? Нужно ли делать запрос и как-то его связать с переборкой номенклатуры?

 
Цитата
Karina написал:
Всем здравствуйте. Как перебрать строки реквизита Номенклатура табличной части справочника и узнать, есть ли из этой номенклатуры помеченная на удаление? Нужно ли делать запрос и как-то его связать с переборкой номенклатуры?

Можно попробовать использовать цикл Для Каждого или запрос. Также найдите строки с условием Номенклатура.ПометкаУдаления = Истина. Должно помочь. Сначала запросом выберите помеченные на удаление элементы, входящие в ТЧ, затем при обходе выборке формируйте сообщение. Ну и Отказ = Истина установить, если выборка не пустая.

Если проверка перед записью, то в запрос должна передаётся ТЗ из ТЧ объекта. Если при записи/проведении, то можно обратиться собственно к ТЧ ссылки.

 
Цитата
horap написал:
Цитата
Karina написал:
Всем здравствуйте. Как перебрать строки реквизита Номенклатура табличной части справочника и узнать, есть ли из этой номенклатуры помеченная на удаление? Нужно ли делать запрос и как-то его связать с переборкой номенклатуры?
 Можно попробовать использовать цикл Для Каждого или запрос. Также найдите строки с условием Номенклатура.ПометкаУдаления = Истина. Должно помочь. Сначала запросом выберите помеченные на удаление элементы, входящие в ТЧ, затем при обходе выборке формируйте сообщение. Ну и Отказ = Истина установить, если выборка не пустая.  Если проверка перед записью, то в запрос должна передаётся ТЗ из ТЧ объекта. Если при записи/проведении, то можно обратиться собственно к ТЧ ссылки.

Если нужно получить всю таблицу справочника с колонкой есть внутри проблемные номенклатуры или нет:

ВЫБРАТЬ

   РесурсныеСпецификацииМатериалыИУслуги.Ссылка,

   МАКСИМУМ(РесурсныеСпецификацииМатериалыИУслуги.Номенклатура.ПометкаУдаления) КАК НоменклатураПометкаУдаления

ПОМЕСТИТЬ ТаблицаПоТЧ

ИЗ

   Справочник.РесурсныеСпецификации.МатериалыИУслуги КАК РесурсныеСпецификацииМатериалыИУслуги

СГРУППИРОВАТЬ ПО

  РесурсныеСпецификацииМатериалыИУслуги.Ссылка

;

////////////////////////////////////////////////////////////­////////////////////

ВЫБРАТЬ

   РесурсныеСпецификации.Ссылка,

   ЕСТЬNULL(ТаблицаПоТЧ.НоменклатураПометкаУдаления, ЛОЖЬ) КАК НоменклатураПометкаУдаления

ИЗ

    Справочник.РесурсныеСпецификации КАК РесурсныеСпецификации

       ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаПоТЧ КАК ТаблицаПоТЧ

       ПО ТаблицаПоТЧ.Ссылка = РесурсныеСпецификации.Ссылка

Также можно использовать: ОбщегоНазначения.ЗначениеРеквизитаОбъектов(МассивНоменклатуры, "ПометкаУдаления ")

 

Мне кажется это может не сработать. Нужно из ТЧ выгрузить в ТЗ номер строки и номенклатуру, по этой ТЗ сделать временную таблицу в запросе, соединить со справочником номенклатуры, получить номера строк с помеченной на удаление номенклатурой, сформировать из этих номеров сообщение. И я бы еще условие на пометку удаления тоже в условиях связи перенес.

Можно еще так попробовать.

ЭлементСправочника = Справочники.Контрагенты.НайтиПоКоду("Ю0006");

Для Каждого ТекущаяСтрока Из ЭлементСправочника.ВидыДеятельности Цикл

   Сообщить(ТекущаяСтрока.ВидДеятельности);

КонецЦикла;

 
Цитата
horap написал:
Мне кажется это может не сработать. Нужно из ТЧ выгрузить в ТЗ номер строки и номенклатуру, по этой ТЗ сделать временную таблицу в запросе, соединить со справочником номенклатуры, получить номера строк с помеченной на удаление номенклатурой, сформировать из этих номеров сообщение. И я бы еще условие на пометку удаления тоже в условиях связи перенес.   Можно еще так попробовать.  ЭлементСправочника = Справочники.Контрагенты.НайтиПоКоду("Ю0006");   Для Каждого ТекущаяСтрока Из ЭлементСправочника.ВидыДеятельности Цикл       Сообщить(ТекущаяСтрока.ВидДеятельности);   КонецЦикла;

Вообще я знаю, что обход строк табличной части проще всего реализуется с помощью цикла Для Каждого СтрокаТЧ Из ТабЧасть Цикл.

При этом переменной цикла будет являться не номер строки, а вся строка как объект. Если нужен еще номер строки, то можно использовать свойство НомерСтроки или добавить переменную и инкрементировать ее в теле цикла. Есть также возможность использовать обычный цикл Для ... По ... Цикл, но необходимо помнить, что индекс 1-го элемента коллекции всегда равен 0 (нулю).

Если вам нужно получить только проблемные элементы справочника, можно сделать так:

ВЫБРАТЬ РАЗЛИЧНЫЕ

   РесурсныеСпецификацииМатериалыИУслуги.Ссылка

ИЗ

   Справочник.РесурсныеСпецификации.МатериалыИУслуги КАК РесурсныеСпецификацииМатериалыИУслуги

ГДЕ

   РесурсныеСпецификацииМатериалыИУслуги.Номенклатура.ПометкаУдаления = ИСТИНА

 
Цитата
Борис Романов написал:
Цитата
horap написал:
Мне кажется это может не сработать. Нужно из ТЧ выгрузить в ТЗ номер строки и номенклатуру, по этой ТЗ сделать временную таблицу в запросе, соединить со справочником номенклатуры, получить номера строк с помеченной на удаление номенклатурой, сформировать из этих номеров сообщение. И я бы еще условие на пометку удаления тоже в условиях связи перенес.   Можно еще так попробовать.  ЭлементСправочника = Справочники.Контрагенты.НайтиПоКоду("Ю0006");   Для Каждого ТекущаяСтрока Из ЭлементСправочника.ВидыДеятельности Цикл       Сообщить(ТекущаяСтрока.ВидДеятельности);   КонецЦикла;
 Вообще я знаю, что обход строк табличной части проще всего реализуется с помощью цикла Для Каждого СтрокаТЧ Из ТабЧасть Цикл.   При этом переменной цикла будет являться не номер строки, а вся строка как объект. Если нужен еще номер строки, то можно использовать свойство НомерСтроки или добавить переменную и инкрементировать ее в теле цикла. Есть также возможность использовать обычный цикл Для ... По ... Цикл, но необходимо помнить, что индекс 1-го элемента коллекции всегда равен 0 (нулю).  Если вам нужно получить только проблемные элементы справочника, можно сделать так:  ВЫБРАТЬ РАЗЛИЧНЫЕ      РесурсныеСпецификацииМатериалыИУслуги.Ссылка  ИЗ      Справочник.РесурсныеСпецификации.МатериалыИУслуги КАК РесурсныеСпецификацииМатериалыИУслуги  ГДЕ      РесурсныеСпецификацииМатериалыИУслуги.Номенклатура.ПометкаУдаления = ИСТИНА

Вспомнил, что колонку то одну можно выгрузить, чтобы ВТ не создавать. Передал массив номенклатуры в параметр запроса и просто выбрал из справочника номенклатуры, только ту, что в этом параметре и помечена на удаление.

Для вывода информации из табличной части объекта служит элемент формы Табличное поле. Для включения возможности выделения нескольких строк на табличном поле нужно установить значение Множественный у его свойства Режим выделения.

Для получения перечня выделенных строк используется следующий код: ВыделенныеСтроки=ЭлементыФормы.ИмяТабличногоПоля.ВыделенныеСтроки;

Чтобы программно снять выделение строк табличного поля: ЭлементыФормы.ИмяТабличногоПоля.ВыделенныйСтроки.Очистить();

Добавление новой строки в любое место табличной части (последующие строки будут сдвинуты):

НоваяСтрока=ТабличнаяЧасть.Вставить(Индекс)

//Индекс - номер добавляемой строки. Нумерация строк начинается с нуля.

НоваяСтрока.Реквизит1="Значение";

Если нужно программно заполнить реквизиты строки табличной части, которую добавляет пользователь, необходимо использовать обработчик события табличной части ПриНачалеРедактирования.

Страницы: 1