7.7. отлавливание пустого кода справочника

Новая тема
Показывать по 10 20 40 сообщений
"Пишу:

Процедура ПриЗаписи()
Спр = СоздатьОбъект("Справочник.Банки");
Спр.ВыбратьЭлементы();
Если Спр.НайтиПокоду(Код)=1 Тогда
Предупреждение("Банк с таким БИК уже существует!");
СтатусВозврата(0);
Возврат;

КонецЕсли;
//.....
Если ПустоеЗначение(СокрЛП(Код))=1 Тогда
Предупреждение("Не указан БИК банка!");
СтатусВозврата(0);
Возврат;
КонецЕсли;
КонецПроцедуры;

Почему-то первая половина процедуры работает, а до второй, даже дело не доходит, Прога сразу орет : "Не верно задан код!". Кто такой Код и почему он неверно задан, не до всех доходит. Начинают звонить чуть ли не с 6 утра. Хотел, чтоб прога ругалась, но по-русски. В роли Код - выступает БИК банка. Я с просонья, сначала не врубился, кто ругается на кота при вводе в новую банку и за что ему неверно задали...  :)
На кнопке "ОК", "#Записать Закрыть". По идее, при записи должна обрабатываться процедура в обоих случаях."
Мне кажется, что сначала надо делать проверку на пустой код, а уж потом, если он не пустой, проверять нет ли уже такого в справочнике.
И еще нужно добавить проверку на случай если редактируется уже записанный в справочник элемент. Без этой проверки Спр.НайтиПокоду найдет сам себя.
> Без этой проверки Спр.НайтиПокоду(...) найдет сам себя. Естейственно найдет, если справочник записан.А тут идет речь о создании нового справочника (он пока ещё не записан!).
> Мне кажется, что сначала надо делать проверку на пустой код
Вот я и делаю проверку на пустой код! Проверка не отрабатывается в процедлуре ПриЗаписи()! В этом то и состоит проблема.
"> Если ПустоеЗначение(СокрЛП(Код))=1 Тогда
> Предупреждение("Не указан БИК банка!");
> СтатусВозврата(0);
> Возврат;
> КонецЕсли;
Вставила ваш код в процедуру призаписи(). Все работает , элемент с пустым БИКом программа записать не дает. А поверка на существующий -установка галочки у контроля уникальности."
"А вы уверены в том что у вас нет в справочнике элементов с пустым БИК?
Еще раз поясняю, поменяйте порядок проверки. Сначала на пустой код, а потом на уникальность.
В вашем случае, если в справочнике уже есть элемент с пустым БИК, то всегда будет отрабатывать первая часть кода, а до второй как раз дело и не дойдет, поскольку стоит Возврат;"
"> установка галочки у контроля уникальности.
Галочка, давно установлена. Лет 5 назад. Только, выражение "Код не уникален", тоже не до всех доходит.
> если в справочнике уже есть элемент с пустым БИК
Его и быть не может, т.к. элемент с пустым кодом даже не записывается и начинает ругаться еще до того, как отработается процедура "ПриЗаписи()".
Придется, наверно, написать ещё одну процедурку, типа:

Процедура ПередЗаписью()
Если ПустоеЗначение(СокрЛП(Код))=1 Тогда
Предупреждение("Не указан БИК банка!");
СтатусВозврата(0);
Возврат;
КонецЕсли;
Записать();
Форма.Закрыть();
КонецПроцедуры

И вставить её в кнопку "ОК".

Анекдоты писать можно:
Краткий словарь к справочнику "Банки".
Код - БИК банка.
Не уникален - уже существует.
Не верно задан - не заполнен.
Редиска - нехороший человек.

Вот и получается:
Не верно задан код - Не заполнен БИК банка.
Код не уникален - БИК банка уже существует.

Слова, при которых нужно не задумываясь вызывать программиста:
Поле - это не то, на котором растёт пшеница.
Тело - это не голый торс!
Агрегатный объект - Не имеет ничего общего с холодильным агрегатом.
Переменная - это не женщина с легким поведением.
Массив - это не качёк, который весит 200 кг.
Индекс - это не то, что пишут на конвертах.
"Выходит за границы" - это не эмиграция!
И тд. и т.п.
Никогда не пытаться их переводить! :)
"
"Блин, после заклинаний "Записать()", "Форма.Закрыть()", предопределенная процедура "ПриЗаписи()", вообще перестала работать.
Пришел к такому варианту:
Процедуру "ПриЗаписи()" вообще удалил за ненадобностью.

Процедура ПередЗаписью()
ПроверкаСчета();
Если ПустоеЗначение(СокрЛП(Код))=1 Тогда
Предупреждение("Не указан БИК банка!");
СтатусВозврата(0);
Возврат;
КонецЕсли;      

Если Новый = 1 Тогда
Спр = СоздатьОбъект("Справочник.Банки");
Спр.ВыбратьЭлементы();
Если Спр.НайтиПокоду(Код)=1 Тогда
Предупреждение("Банк с таким БИК уже существует!");
СтатусВозврата(0);
Возврат;
КонецЕсли;
КонецЕсли;
Записать();
Форма.Закрыть();
КонецПроцедуры

Обращение к этой процедуре вставил в кнопку "ОК".

Всё работает :) Даже отрабатывается процедура "ПриЗакрытии()"!"
"Очень у вас все странно. Это ваш код, только поменяла местами проверку на пустое и повторяющиеся значение и все.

Бухг 7.7 модуль элемента в справочнике банк

Процедура ПриЗаписи()
Если ПустоеЗначение(СокрЛП(Код))=1 Тогда
Предупреждение("Не указан БИК банка!");
СтатусВозврата(0);
Возврат;
КонецЕсли;

Спр = СоздатьОбъект("Справочник.Банки");
Спр.ВыбратьЭлементы();
Если Спр.НайтиПокоду(Код)=1 Тогда
Предупреждение("Банк с таким БИК уже существует!");
СтатусВозврата(0);
Возврат;

КонецЕсли;



ПроверкаСчета();

КонецПроцедуры // ПриЗаписи()

Не дает записать пустой БИК и не дает записать элемент с уже имеющимся БИКом.
Все работает!!"
Tanya, спасибо за проверку. :)
Просто человек уверен что нулевого кода нет"Его и быть не может, т.к. элемент с пустым кодом даже не записывается и начинает ругаться еще до того, как отработается процедура "ПриЗаписи()"." Откуда такая уверенность. Ведь, наверное, данные уже какие-то были до того как менялась процедура ПриЗаписи()

"Ну НЕ РАБОТАЕТ!!!
Пишу:
Процедура ПриЗаписи()
Если ПустоеЗначение(СокрЛП(Код))=1 Тогда
Предупреждение("Не указан БИК банка!");
СтатусВозврата(0);
Возврат;
КонецЕсли;
КонецПроцедуры

Выдает "Код не уникален!" Стоит флажек "Контроль уникальности", уже более 5 лет. Я же писал об этом! Поэтому одинаковых БИК, а тем более пустых - просто быть не может!
Если я убираю этот флажек, тогда да, процедура ПриЗаписи() начинает обрабатывать.
Вполне возможно, что и с пустыми кодами справочник начнет записываться.
Флажек сначала выставите, потом процедуры проверяйте :)
В типовой конфе, вообще никаких предупреждений не выдаётся. Сколько пользователей, и каждый заводит ещё по банку, который уже есть в справочнике. Таких "Клонов" доходит за год - с десяток."
Читают тему
(гостей: 1)

Быстрый переход