|
Создание номенклатуры в конечной группе | ☑ | ||
---|---|---|---|---|
0
Doroheart
03.03.20
✎
12:31
|
Добрый день, подскажите как можно ограничить создание номенклатуры в корне и разрешить только в конечной папке?
http://prntscr.com/ras4qa |
|||
1
dka80
03.03.20
✎
12:34
|
перед записью делаешь проверку на наличие групп в текущем родителе. Если есть группы, тогда отказ=истина
|
|||
2
vova1122
03.03.20
✎
13:08
|
Лучше проверять ПередОткрытием. А то чел пол часа трудился: заполнял реквизиты елемента справочника, а в конце ему такой облом сообщит система. А для програмной записи можно дополнительно проверить и ПередЗаписюю в модуле документа
|
|||
3
Doroheart
03.03.20
✎
13:10
|
(2) я планирую проверять "ПередНачаломДобавления", но пока не додумался как сделать проверку на наличии групп в текущем родителе.
|
|||
4
Doroheart
03.03.20
✎
13:14
|
(1) есть примеры?
|
|||
5
arsik
гуру
03.03.20
✎
13:17
|
ВЫБРАТЬ ПЕРВЫЕ 1
Номенклатура.Ссылка КАК Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.ЭтоГруппа И Номенклатура.Родитель = &Родитель |
|||
6
vova1122
03.03.20
✎
13:29
|
Если Родитель=Справочники.Контрагенты.ПустаяСсылка() тогда
Отказ=Истина; Иначе Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Контрагенты.Ссылка |ИЗ | Справочник.Контрагенты КАК Контрагенти |ГДЕ | Контрагенты.Родитель = &Група | И Контрагенты.ЭтоГруппа = Истина"; Запрос.УстановитьПараметр("Група", Родитель); РезультатЗапроса = Запрос.Выполнить(); Всего = РезультатЗапроса.Выбрать().Количество(); Если Всего>0 тогда Отказ=Истина; КонецЕсли; КонецЕсли; |
|||
7
Doroheart
03.03.20
✎
13:50
|
Нашел вот такой вот запросец
ВсеПапки = Новый Массив; Запрос = Новый Запрос("ВЫБРАТЬ | Номенклатура.Родитель, | Номенклатура.Родитель.Родитель, | Номенклатура.Родитель.Родитель.Родитель, | Номенклатура.Родитель.Родитель.Родитель.Родитель, | Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель, | Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель, | Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель, | Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель |ИЗ | Справочник.Номенклатура КАК Номенклатура | |ГДЕ | Номенклатура.Ссылка = &НоменклатураСсылка"); Пока Истина Цикл Запрос.УстановитьПараметр("НоменклатураСсылка", НоменклатураСсылка); Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда Прервать; КонецЕсли; ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка(); Выборка = Результат.Выбрать(); Выборка.Следующий(); Для НомерКолонки = 0 По Результат.Колонки.Количество() - 1 Цикл ТекущийЭлементНоменклатуры = Выборка[НомерКолонки]; Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда Прервать; Иначе ВсеПапки.Вставить(0, ТекущийЭлементНоменклатуры); КонецЕсли; КонецЦикла; Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда Прервать; КонецЕсли; КонецЦикла; Возврат ВсеПапки; |
|||
8
catena
03.03.20
✎
13:59
|
(7)Это получение вышестоящих родителей, а вам нужно проверить наличие хотя бы одного нижестоящего.
|
|||
9
vova1122
03.03.20
✎
14:03
|
(7) я же написал рабочий вариант (просто замени в нем Контрагенты на Номенклатура)
|
|||
10
arsik
гуру
03.03.20
✎
14:05
|
(9) У тебя медленный вариант. Вариант в 5 идеальный. Ну и проверять нужно на Запрос.Выполнить().Пустой()
|
|||
11
Doroheart
03.03.20
✎
14:08
|
(9) я увидел, спасибо) У (5) более оптимизированный вариант поэтому решил его запрос взять
|
|||
12
НЕА123
03.03.20
✎
15:06
|
ВЫБРАТЬ ПЕРВЫЕ 1 1
ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.ЭтоГруппа И Номенклатура.Родитель = &Родитель ..... Запрос.Выполнить().Пустой() |
|||
13
vova1122
03.03.20
✎
15:13
|
(11) ну и не забудь добавить как я писал
Если Родитель=Справочники.Номенклатура.ПустаяСсылка() тогда Отказ=Истина; Так как если это не написать то будет возможность создавать товары в кореневой группе |
|||
14
Doroheart
04.03.20
✎
14:49
|
В общем выкладываю уже готовый рабочий вариант.
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | Номенклатура.Ссылка КАК Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура |Где | Номенклатура.ЭтоГруппа |И Номенклатура.Родитель = &Родитель"; Запрос.УстановитьПараметр("Родитель", Родитель); РезультатЗапроса = Запрос.Выполнить(); Всего = РезультатЗапроса.Выбрать().Количество(); Если Всего>0 И НЕ ЭтоГруппа Тогда Отказ = Истина; Предупреждение("Номенклатуру можно создавать только в конечной группе!"); ИначеЕсли НЕ Копирование И НЕ ЭтоГруппа Тогда Отказ= Истина; ФормаМастер = Справочники.Номенклатура.ПолучитьФорму("МастерВвода"); ФормаМастер.Родитель = Родитель; ФормаМастер.Открыть(); КонецЕсли; |
|||
15
arsik
гуру
04.03.20
✎
15:58
|
Тебе же сказали, используй метод Пустой()
заменить на
И условия ЭтоГруппа и Копирование нужно проверять до запроса. Зачем лишние обращения к базе. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |