7.7 Уникальность в пределах группы

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем learlo2631, 5 фев 2015.

  1. TopicStarter Overlay
    learlo2631
    Offline

    learlo2631

    Регистрация:
    1 апр 2010
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Добрый день. Подскажите пожалуйста как проверить уникальность реквизита не записанного элемента справочника в пределах группы ?
  2. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    411
    Симпатии:
    72
    Баллы:
    54
    Здравствуйте.

    Процедура Проверка()
    Спр = СоздатьОбъект("Справочник.ВашСправочник");
    Спр.ВыбратьЭлементы();
    Если Спр.НайтиПоРеквизиту("ВашРеквизит",ЗначениеРеквизитаЭлемента, 0) = 1 Тогда
    Сообщить("Значение "+СокрЛП(ЗначениеРеквизитаЭлемента)+" уже есть в справочнике!");
    КонецЕсли;
    КонецПроцедуры
    learlo2631 нравится это.
  3. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    Ух блин......а если элементов в справочнике 1млн?
    Разве нельзя выбрать только в пределах определенного родителя?
    learlo2631 нравится это.
  4. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    411
    Симпатии:
    72
    Баллы:
    54
    НайтиПоРеквизиту(<?>,,);
    Синтаксис:
    НайтиПоРеквизиту(<ИмяРеквизита>,<Значение>,<ФлагГлобальногоПоиска>)
    Назначение:
    Найти элемент справочника по значению реквизита.
    Возвращает: 1 - если действие выполнено;
    0 - если действие не выполнено (элемент не найден).
    Параметры:
    <ИмяРеквизита> - строка с наименованием реквизита;
    <Значение> - значение реквизита для поиска;
    <ФлагГлобальногоПоиска> - флаг поиска:
    0 - поиск выполняется в пределах подчинения справочника,
    1 - поиск выполняется по всему справочнику.

    Замечание:
    Метод можно использовать только для реквизитов с установленным признаком ''Сортировка''.
    Метод можно использовать только для объектов, созданных функцией СоздатьОбъект.
    learlo2631 и nomad_irk нравится это.
  5. TopicStarter Overlay
    learlo2631
    Offline

    learlo2631

    Регистрация:
    1 апр 2010
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Нет. Найти по реквизиту не работает, так как пока элемент не записан у него нету родителя.
    --- Объединение сообщений, 5 фев 2015 ---
    Нет. Найти по реквизиту не работает, так как пока элемент не записан у него нету родителя.
    --- Объединение сообщений, 5 фев 2015 ---
    Можно как то получить группу где создается новый элемент ?
    Последнее редактирование: 5 фев 2015
  6. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    411
    Симпатии:
    72
    Баллы:
    54
    ИспользоватьРодителя(<?>,);
    Синтаксис:
    ИспользоватьРодителя(<Родитель>,<ФлагИзменения>)
    Назначение:
    Установить выборку элементов по группе справочника.
    Возвращает: значение текущей группы для справочника (на момент до исполнения метода).
    Параметры:
    <Родитель> - значение группы справочника, среди элементов которой делается выборка.
    <ФлагИзменения> - необязательный параметр. Этим флагом регулируется возможность интерактивного изменения родителя. 1 - пользователь может изменить родителя интерактивно, 0 - пользователь не может интерактивно изменить родителя. Значение по умолчанию: 1. Данный параметр действует при интерактивном выборе элемента справочника - в случае, когда метод применен для элементов диалога типа ''Справочник''. Если метод применен для объекта, созданного функцией СоздатьОбъект, то данный параметр срабатывает при вызове метода Выбрать.
    Замечание:
    Метод можно использовать для объектов, созданных функцией СоздатьОбъект или для элементов диалога типа ''Справочник''.
    learlo2631 нравится это.
  7. TopicStarter Overlay
    learlo2631
    Offline

    learlo2631

    Регистрация:
    1 апр 2010
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Я что то не догоняю. При использовании ИспользоватьРодителя я сам должен установить родитель а его у меня нету.
    Ситуация такая.
    Когда пользователь создает новый эелемент справочника (Создал новую но пока еще не записал) в какой бы группе он не был создан пока элемент не записан родител = "". Я как то должен получить ту группу который был открыт при нажатии Insert.
    --- Объединение сообщений, 5 фев 2015 ---
    Извиняюсь. Был открыт не при нажатии а перед нажатием кнопки Insert.
  8. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    411
    Симпатии:
    72
    Баллы:
    54
    Если у Вас форма списка и элементы вводятся в списке, то текущую группу можно узнать в предопределенной процедуре

    Процедура ПриВводеСтроки()
    Гр = ТекущийЭлемент();
    Если Гр.ЭтоГруппа() = 0 Тогда
    Сообщить(Гр.Родитель.Наименование);
    КонецЕсли;
    КонецПроцедуры

    С формой элемента сложнее. Я не знаю, как родителя получить. Все время возвращает пустую строку :(
    Последнее редактирование: 5 фев 2015
    learlo2631 нравится это.
  9. TopicStarter Overlay
    learlo2631
    Offline

    learlo2631

    Регистрация:
    1 апр 2010
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Нет у меня не форма списка .
    Похоже я должен предварительно записать элемент и при закрытии проверить если пользователь не записал тогда удалить.
    Тогда просто может нарушится последовательность нумерации если другой пользователь в это же время создал другой элемент.
    И все таки не думаю что записать потом удалить это самая лучшая версия.
    Я временно сделаю так но пожалуйста если будут другие идеи поделитесь.
    Спасибо заранее.
  10. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    411
    Симпатии:
    72
    Баллы:
    54
    Боюсь, что без записи не получится. Форма, как я понимаю - это не таблица справочника, а отдельный элемент интерфейса, который только упрощает ввод данных, поэтому до записи в справочнике этого элемента не существует.
    Предлагаю два выхода:
    1. Редактировать справочник в списке
    2. На форме сделать дополнительное поле с группой справочника и обязать пользователя выбрать нужную.
    Последнее редактирование: 5 фев 2015
    learlo2631 нравится это.
  11. TopicStarter Overlay
    learlo2631
    Offline

    learlo2631

    Регистрация:
    1 апр 2010
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Вариант 1 не годится так как у меня там 4 листочка реквизитов разбросаны.
    А вариант 2 в принцыпе намного лучше чем моя.
    И перетаскивание из группы в группу будет выполнено через форму по кнопке записать.
    Там только надо будет отключить системную функцию ПеренестиВДругуюГруппу для этого справочника и все.
    Спасибо большое так и сделаю.
  12. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Тривиальщина..
    Код:
    Функция ВернутьРодителя()
        НачатьТранзакцию();
        Записать();
        ТекРод=Родитель;
        ОтменитьТранзакцию();
        Возврат ТекРод;
    КонецФункции
    
    slavyan55 нравится это.

Поделиться этой страницей