Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 17:36

Запрет записи и сообщение

Автор Рома01, 28 янв 2023, 20:44

0 Пользователей и 1 гость просматривают эту тему.

Afinogen

Rettro,
это не лучший вариант,  при таком варианте система найдет первый совпадающий элемент, а им может быть помеченный на удаление
лучше искать запросом с условием не пометки на удаление

Рома01

Что то не получается у меня, если б кто то помог практически

Afinogen

а в какой момент он у вас записывается? при создании нового элемента или например из какого то документа?

Процедура ПередЗаписью(Отказ)

  Запрос= Новый Запрос;
  Запрос.Текст =
  "ВЫБРАТЬ ПЕРВЫЕ 1
     |ВашСправочник.Ссылка
     |ИЗ Справочник.ВашСправочник КАК ВашСправочник
     |ГДЕ НЕ ВашСправочник.ПометкаУдаления
     |И ВашСправочник ПОДОБНО "&Наименование""";

     Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Наименование", ИскомоеНаименование);
     Выборка = Запрос.Выполнить().Выбрать();

     Если Выборка.Следующий() Тогда
       Сообщить("такой элемент существует");
       Отказ = истина;
     КонецЕсли;

КонецПроцедуры

Так вы найдете первый элемент снаименованием как вы задали

Рома01

Afinogen, при создании нового элемента

Afinogen

все тоже самое
проверяете только ключевые реквизиты, при условии что они заполняются в процедуре "ОбработкаЗаполнения",
если нет, то тогда код такой

&НаКлиенте
Процедура ПриОткрытии(Отказ)
Проверитьсуществоавание(Отказ);
Конецпроцедуры

&НаСервере
Процедура Проверитьсуществоавание(Отказ)

  Запрос= Новый Запрос;
  Запрос.Текст =
  "ВЫБРАТЬ ПЕРВЫЕ 1
     |ВашСправочник.Ссылка
     |ИЗ Справочник.ВашСправочник КАК ВашСправочник
     |ГДЕ НЕ ВашСправочник.ПометкаУдаления
     |И ВашСправочник ПОДОБНО "&Наименование""";

     Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Наименование", ИскомоеНаименование);
     Выборка = Запрос.Выполнить().Выбрать();

     Если Выборка.Следующий() Тогда
       Сообщить("такой элемент существует");
       Отказ = истина;
     КонецЕсли;

КонецПроцедуры

Рома01

Afinogen, в данной процедуре у меня есть вопросы: ВашСпоавочник-это я пишу наименование   проверяемого справочника  и Наименование в ковычках то же самое пишу наименование справочника? И второй вопрос, в данной процедуре я проверяю один справочник, а если нужно проверить несколько то нужно писать ещё процедуры или можно в одной всё проверить?

Afinogen

ну есть у вас например справочник
"номенклатура"
вот вместо "вшСправочник" пишите "номенклатура

а конструкция

ВашСправочник ПОДОБНО "&Наименование""" - это рекомендация 1с - вы в тексте запроса просто указываете некий уникальный параметр  а затем просто перед тем как выполнить запрос этот  параметр подменяете нужным текстом

Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Наименование", ИскомоеНаименование)

Стрзаменить - заменяет искомый текст другим. в данном случае "ВашеНаименование" э то значение реквизита "наименования" в  справочнике,  можете передать его  еще спеди и(или) сзади добавив % тогда вам найдет не точное совпадение а совпадение по наименованию с  любым количеством произвольным символов спереди или сзади наименования

Afinogen

Рома01, пакетный запрос, каждый пакет - это новая проверка

например

|ВыБРАТЬ что то там из  справочник1 ГДЕ справочник1.реквизит = &п1
|;
|///////////////////////////////////////////////////////////////
|ВыБРАТЬ что то там из  справочник2 ГДЕ справочник2.реквизит = &п2

Пакет = Запрос.ВыполнитьПакет();
Для Н = 0 ПО Пакет.вГраница() Цикл
Т = Пакет[Н].Выгрузить();
Конеццикла;

либо можете каждую проверку- отдельный запрос, так даже будет удобнее

выполняете первый запрос,  если его результат вас устраивает , то переходите на следующий, если нет - сразу сообщение и отказ

я обычно делаю  флаг - флагОк

если результат запроса устаивает то ФлагОк = истина и идет дальше

просто начиная со второго запроса перед тем как стартовать делайте условие

Если ФлагОк Тогда
 запрос2 = новый запрос
КонецЕсли;

в данном случае как фантазия подсказывает




Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск