|
Как перебрать строки реквизита Номенклатура табличной части справочника | ☑ | ||
---|---|---|---|---|
0
yabashu
29.06.23
✎
16:14
|
Как перебрать строки реквизита Номенклатура табличной части справочника и узнать, есть ли из этой номенклатуры помеченная на удаление? Помогите джуну плиз
|
|||
1
Волшебник
29.06.23
✎
16:15
|
используйте цикл Для Каждого или запрос
|
|||
2
yabashu
29.06.23
✎
16:15
|
Задание такое:
На наличие в табличной части «Материалы и работы» элементов справочника «Номенклатуры», помеченных на удаление. В случае обнаружения помеченных на удаление элементов система должна выдать блокирующее сообщение: «В табличной части «Материалы и работы» в строке <№ строки> указана номенклатура, помеченная на удаление. Укажите корректную номенклатуру». Если строк, содержащих элементы, помеченные на удаление несколько, то они все должны быть указаны в сообщении через запятую: «В табличной части «Материалы и работы» в строках <№ строки 1>, <№ строки 2>,…, указана номенклатура, помеченная на удаление. Укажите корректную номенклатуру». В таком случае статус ресурсной спецификации должен остаться прежним, и карточка не записывается. |
|||
3
Волшебник
29.06.23
✎
16:17
|
(2) ищите строки с условием: Номенклатура.ПометкаУдаления = Истина
Должно помочь |
|||
4
Donkey_hot
29.06.23
✎
17:13
|
(2) Главное запрос в цикле не пишите, других тонкостей тут вроде нет.
Сначала запросом выберите помеченные на удаление элементы, входящие в ТЧ, затем при обходе выборке формируйте сообщение. |
|||
5
Donkey_hot
29.06.23
✎
17:14
|
(4) Ну и Отказ = Истина установить, если выборка не пустая.
|
|||
6
azernot
29.06.23
✎
17:22
|
Если это задача на собеседовании, то только запрос.
Использование конструкции СтрокаТЧ.Номенклатура.ПометкаУдаления - верный способ завалить собеседование. Использование конструкции ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаТЧ.Номенклатура, "ПометкаУдаления") - запрос в цикле, тоже не есть гуд. Остаётся только запрос. Если проверка перед записью, то в запрос должна передаётся ТЗ из ТЧ объекта. Если при записи/проведении, то можно обратиться собственно к ТЧ ссылки. |
|||
7
yabashu
29.06.23
✎
18:56
|
(6) (5) (3) Спасибо Вам большое за обратную связь! Я предполагаю этот запрос нужно как-то связать с переборкой номенклатуры? Есть идеи, как это правильно сделать?
|
|||
8
yabashu
29.06.23
✎
18:56
|
ВЫБРАТЬ
РесурсныеСпецификацииМатериалыИУслуги.Номенклатура.Ссылка КАК НоменклатураСсылка, РесурсныеСпецификацииМатериалыИУслуги.Номенклатура.ПометкаУдаления КАК НоменклатураПометкаУдаления ИЗ Справочник.РесурсныеСпецификации.МатериалыИУслуги КАК РесурсныеСпецификацииМатериалыИУслуги ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РесурсныеСпецификации КАК РесурсныеСпецификации ПО РесурсныеСпецификацииМатериалыИУслуги.Ссылка = РесурсныеСпецификации.Ссылка ГДЕ РесурсныеСпецификацииМатериалыИУслуги.Номенклатура.ПометкаУдаления = &Истина |
|||
9
Волшебник
29.06.23
✎
19:21
|
(8) в запросе &Истина замените на ИСТИНА
добавьте условие на конкретный документ/элемент (ресурсную спецификацию) |
|||
10
lodger
29.06.23
✎
19:42
|
Получить всю таблицу справочника с колонкой есть внутри проблемные номенклатуры или нет:
ВЫБРАТЬ РесурсныеСпецификацииМатериалыИУслуги.Ссылка, МАКСИМУМ(РесурсныеСпецификацииМатериалыИУслуги.Номенклатура.ПометкаУдаления) КАК НоменклатураПометкаУдаления ПОМЕСТИТЬ ТаблицаПоТЧ ИЗ Справочник.РесурсныеСпецификации.МатериалыИУслуги КАК РесурсныеСпецификацииМатериалыИУслуги СГРУППИРОВАТЬ ПО РесурсныеСпецификацииМатериалыИУслуги.Ссылка ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РесурсныеСпецификации.Ссылка, ЕСТЬNULL(ТаблицаПоТЧ.НоменклатураПометкаУдаления, ЛОЖЬ) КАК НоменклатураПометкаУдаления ИЗ Справочник.РесурсныеСпецификации КАК РесурсныеСпецификации ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаПоТЧ КАК ТаблицаПоТЧ ПО ТаблицаПоТЧ.Ссылка = РесурсныеСпецификации.Ссылка |
|||
11
lodger
29.06.23
✎
19:44
|
Получить только проблемные элементы справочника
ВЫБРАТЬ РАЗЛИЧНЫЕ РесурсныеСпецификацииМатериалыИУслуги.Ссылка ИЗ Справочник.РесурсныеСпецификации.МатериалыИУслуги КАК РесурсныеСпецификацииМатериалыИУслуги ГДЕ РесурсныеСпецификацииМатериалыИУслуги.Номенклатура.ПометкаУдаления = ИСТИНА |
|||
12
lodger
29.06.23
✎
19:45
|
з.ы. зато кратко, хотя может быть и не оптимально.
|
|||
13
timurhv
29.06.23
✎
21:16
|
(6) Можно использовать:
ОбщегоНазначения.ЗначениеРеквизитаОбъектов(МассивНоменклатуры, "ПометкаУдаления ") |
|||
14
Donkey_hot
29.06.23
✎
21:40
|
(13) Придется тогда все равно поиском по ТЧ бегать, а в запросе можно сразу соединить с номерами строк. Не говорю, что это неправильно, но напрямую запросом как-то изящнее, что ли...
|
|||
15
uPstart_
30.06.23
✎
08:37
|
(10) Не сработает. По условию у него проверка перед записью документа. Еще по условию надо группировку по номенклатуре, что бы через запятую вывести список номеров строк. Тут нужно выгрузить список номенклатуры в таблицу, свернуть ее. Передать в Запрос для проверки на пометку на удаление и уже выводить сообщение.
|
|||
16
azernot
30.06.23
✎
11:36
|
(15) Не надо ничего сворачивать. Нужно из ТЧ выгрузить в ТЗ номер строки и номенклатуру, по этой ТЗ сделать временную таблицу в запросе, соединить со справочником номенклатуры, получить номера строк с помеченной на удаление номенклатурой, сформировать из этих номеров сообщение. Всё.
|
|||
17
yabashu
03.07.23
✎
12:33
|
После ваших комментариев окончательно запутался, может кто-то подсказать, какой механизм дальше реализовывать?
&После("ПередЗаписью") Процедура ПередЗаписью(Отказ) ТЗ = ЭтотОбъект.МатериалыИУслуги.Выгрузить(); Для Каждого Номенклатура Из ТЗ Цикл ОтобратьПоПометке = Новый Запрос; ОтобратьПоПометке.Текст = " |ВЫБРАТЬ РАЗЛИЧНЫЕ |РесурсныеСпецификацииМатериалыИУслуги.Ссылка |ИЗ |Справочник.РесурсныеСпецификации.МатериалыИУслуги КАК РесурсныеСпецификацииМатериалыИУслуги |ГДЕ |РесурсныеСпецификацииМатериалыИУслуги.Номенклатура.ПометкаУдаления = ИСТИНА" ; КонецЦикла; КонецПроцедуры |
|||
18
АгентБезопасной Нацио
03.07.23
✎
12:34
|
(17) начинайте осваивать отладчик.
|
|||
19
lodger
03.07.23
✎
12:47
|
(17) а.
ты сейчас написал такой код, будто тебе дали коробку с лего, ты его вытряхнул на пол, взял несколько крупных собранных кусков и просто положил на стол. так игра не заиграет. |
|||
20
azernot
03.07.23
✎
12:52
|
(17) Что именно вы хотите? Чтобы кто-то сделал вашу задачу за вас? Медвежью услугу?
Да пожалуйста. Процедура ПередЗаписью(Отказ) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДанныеТЧ.НомерСтроки КАК НомерСтроки, | ДанныеТЧ.Номенклатура КАК Номенклатура |ПОМЕСТИТЬ ТекущиеДанныеТЧ |ИЗ | &ДанныеТЧ КАК ДанныеТЧ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТекущиеДанныеТЧ.НомерСтроки КАК НомерСтроки |ИЗ | ТекущиеДанныеТЧ КАК ТекущиеДанныеТЧ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура | ПО ТекущиеДанныеТЧ.Номенклатура = СправочникНоменклатура.Ссылка |ГДЕ | СправочникНоменклатура.ПометкаУдаления"; Запрос.УстановитьПараметр("ДанныеТЧ", МатериалыИРаботы.Выгрузить()); МассивНомеровСтрок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("НомерСтроки"); Если МассивНомеровСтрок.Количество() > 0 Тогда ТекстОшибки = "В табличной части ""Материалы и работы"" в строках "+СтрСоединить(МассивНомеровСтрок,", ") +", указана номенклатура, помеченная на удаление. Укажите корректную номенклатуру ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,,Отказ); КонецЕсли; КонецПроцедуры |
|||
21
Donkey_hot
03.07.23
✎
15:33
|
(20) Абсолютно верно.
|
|||
22
Donkey_hot
03.07.23
✎
15:35
|
(20) Единственное, наверное, условие на пометку удаления тоже в условия связи перенес бы.
|
|||
23
CepeLLlka
03.07.23
✎
15:41
|
(20)А что одну колонку нельзя выгрузить, чтобы ВТ не создавать? Передал массив номенклатуры в параметр запроса и просто выбрал из справочника номенклатуры, только ту, что в этом параметре и помечена на удаление.
|
|||
24
CepeLLlka
03.07.23
✎
15:42
|
Понятно, нужен номер строки
|
|||
25
lodger
03.07.23
✎
15:50
|
(24) ну можно по вернувшимся результатам сделать скан в ТЧ. думаю, это не так уж напряжно?
|
|||
26
yabashu
03.07.23
✎
16:17
|
(20) Нет, задача не в том, чтобы кто-то сделал за меня. Хотел просто принцип действия понять, чтобы научиться делать подобное. Большое спасибо за показательный пример. Буду теперь делать следующее задание - дубли искать =)
|
|||
27
Donkey_hot
03.07.23
✎
16:45
|
(25) Можно, но решение из 20 более наглядно (ИМХО)
|
|||
28
Donkey_hot
03.07.23
✎
16:47
|
(26) Странно немного Вы пытались понять принцип действия. Все в один голос посоветовали делать что угодно, но только не запрос в цикле. И плодом всех этих советов стал код из (17)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |