Вход | Регистрация
 

Создание номенклатуры в конечной группе

Создание номенклатуры в конечной группе
Я
   Doroheart
 
03.03.20 - 12:31
Добрый день, подскажите как можно ограничить создание номенклатуры в корне и разрешить только в конечной папке?
http://prntscr.com/ras4qa
 
 
   dka80
 
1 - 03.03.20 - 12:34
перед записью делаешь проверку на наличие групп в текущем родителе. Если есть группы, тогда отказ=истина
   vova1122
 
2 - 03.03.20 - 13:08
Лучше проверять ПередОткрытием. А то чел пол часа трудился: заполнял реквизиты елемента справочника, а в конце ему такой облом сообщит система. А для програмной записи можно дополнительно проверить и ПередЗаписюю в модуле документа
   Doroheart
 
3 - 03.03.20 - 13:10
(2) я планирую проверять "ПередНачаломДобавления", но пока не додумался как сделать проверку на наличии групп в текущем родителе.
   Doroheart
 
4 - 03.03.20 - 13:14
(1) есть примеры?
   arsik
 
5 - 03.03.20 - 13:17
ВЫБРАТЬ ПЕРВЫЕ 1
    Номенклатура.Ссылка КАК Ссылка
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.ЭтоГруппа
    И Номенклатура.Родитель = &Родитель
   vova1122
 
6 - 03.03.20 - 13:29
Если Родитель=Справочники.Контрагенты.ПустаяСсылка() тогда
    Отказ=Истина;
Иначе
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    Контрагенты.Ссылка
    |ИЗ
    |    Справочник.Контрагенты КАК Контрагенти
    |ГДЕ
    |    Контрагенты.Родитель = &Група
    |    И Контрагенты.ЭтоГруппа = Истина";
    
    Запрос.УстановитьПараметр("Група", Родитель);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Всего = РезультатЗапроса.Выбрать().Количество();
    
    Если Всего>0 тогда
        Отказ=Истина;
    КонецЕсли;
КонецЕсли;
   Doroheart
 
7 - 03.03.20 - 13:50
Нашел вот такой вот запросец

    
    ВсеПапки = Новый Массив;
    
    Запрос = Новый Запрос("ВЫБРАТЬ 
    | Номенклатура.Родитель, 
    | Номенклатура.Родитель.Родитель, 
    | Номенклатура.Родитель.Родитель.Родитель, 
    | Номенклатура.Родитель.Родитель.Родитель.Родитель, 
    | Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель,
    | Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель, 
    | Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель,
    | Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель
    |ИЗ 
    | Справочник.Номенклатура КАК Номенклатура 
    |
    |ГДЕ 
    | Номенклатура.Ссылка = &НоменклатураСсылка");
    
    Пока Истина Цикл
        Запрос.УстановитьПараметр("НоменклатураСсылка", НоменклатураСсылка); 
        Результат = Запрос.Выполнить(); 
        Если Результат.Пустой() Тогда 
            Прервать; 
        КонецЕсли; 
        ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка();
        Выборка = Результат.Выбрать(); 
        Выборка.Следующий(); 
        Для НомерКолонки = 0 По Результат.Колонки.Количество() - 1 Цикл 
            ТекущийЭлементНоменклатуры = Выборка[НомерКолонки]; 
            Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда 
                Прервать; 
            Иначе 
                ВсеПапки.Вставить(0, ТекущийЭлементНоменклатуры); 
            КонецЕсли; 
        КонецЦикла; 
        Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда 
            Прервать; 
        КонецЕсли;
    КонецЦикла;    
    
    Возврат ВсеПапки;
   catena
 
8 - 03.03.20 - 13:59
(7)Это получение вышестоящих родителей, а вам нужно проверить наличие хотя бы одного нижестоящего.
   vova1122
 
9 - 03.03.20 - 14:03
(7) я же написал рабочий вариант (просто замени в нем Контрагенты на Номенклатура)
   arsik
 
10 - 03.03.20 - 14:05
(9) У тебя медленный вариант. Вариант в 5 идеальный. Ну и проверять нужно на Запрос.Выполнить().Пустой()
   Doroheart
 
11 - 03.03.20 - 14:08
(9) я увидел, спасибо) У (5) более оптимизированный вариант поэтому решил его запрос взять
   НЕА123
 
12 - 03.03.20 - 15:06
ВЫБРАТЬ ПЕРВЫЕ 1 1
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.ЭтоГруппа
    И Номенклатура.Родитель = &Родитель
.....
Запрос.Выполнить().Пустой()
   vova1122
 
13 - 03.03.20 - 15:13
(11) ну и не забудь добавить как я писал 
Если Родитель=Справочники.Номенклатура.ПустаяСсылка() тогда
    Отказ=Истина;

Так как если это не написать то будет возможность создавать товары в кореневой группе
   Doroheart
 
14 - 04.03.20 - 14:49
В общем выкладываю уже готовый рабочий вариант.

Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |    Номенклатура.Ссылка КАК Ссылка
    |ИЗ
    |   Справочник.Номенклатура КАК Номенклатура
    |Где
    |   Номенклатура.ЭтоГруппа
    |И     Номенклатура.Родитель = &Родитель";
    Запрос.УстановитьПараметр("Родитель", Родитель);
    РезультатЗапроса = Запрос.Выполнить();
    Всего = РезультатЗапроса.Выбрать().Количество();
    Если Всего>0 И НЕ ЭтоГруппа Тогда
        Отказ = Истина;
        Предупреждение("Номенклатуру можно создавать только в конечной группе!");
    ИначеЕсли НЕ Копирование И НЕ ЭтоГруппа Тогда
        Отказ= Истина;
        ФормаМастер = Справочники.Номенклатура.ПолучитьФорму("МастерВвода");
        ФормаМастер.Родитель = Родитель;
        ФормаМастер.Открыть();    
    КонецЕсли;
   arsik
 
15 - 04.03.20 - 15:58
Тебе же сказали, используй метод Пустой()
    РезультатЗапроса = Запрос.Выполнить();
    Всего = РезультатЗапроса.Выбрать().Количество();
    Если Всего>0 И НЕ ЭтоГруппа Тогда

заменить на
    Если не Запрос.Выполнить().Пустой() Тогда

И условия ЭтоГруппа и Копирование нужно проверять до запроса. Зачем лишние обращения к базе.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.