» Казахстанский Бухгалтерский форум www.balans.kz

Переменная=Еще не записанный элемент справочника как присвоить???

 
Показать сообщения:
Начиная со старых .::. Начиная с новых


Автор: daysemsk
Добавлено: #1  Пн Авг 25, 2008 11:16:00
Заголовок сообщения: Переменная=Еще не записанный элемент справочника как присвоить???

Привет всем! Как присвоить переменной еще не записанный элемент справочника?, то есть который находиться еще перед записью?.


Автор: d.Fedor
Добавлено: #2  Пн Авг 25, 2008 11:34:46
Заголовок сообщения:

Никак.. С точки зрения системы его "еще нет". Так что записывайте, а потом присваиваете...
Может осветите задачу, что-бы стало понятно что Вы хотите сделать?



Автор: daysemsk
Добавлено: #3  Пн Авг 25, 2008 11:38:48
Заголовок сообщения:

Хорошо. Задача проста. есть справочник, есть стандартное поле наименование, в качестве значения наименование выступает числа(номера), необходимо при записи нового элемента проверять имееться ли такой элемент в спрвочнике или нет, то есть проверка дублей в справочнике.


Автор: d.Fedor
Добавлено: #4  Пн Авг 25, 2008 11:51:46
Заголовок сообщения:

Присвойте переменной значения поля с "новым наименованием" и поищите в справочнике например конструкцией Справочник.НайтиПоНаименованию(Строка(Переменная));


Автор: Darjal
Добавлено: #5  Пн Авг 25, 2008 14:24:33
Заголовок сообщения:

Или запросом - в процедуре модуля "ПередЗаписью". Параметром выставляете свою строку и группировку КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВашСправочник.Ссылка). А если используете Справочник.НайтиПоНаименованию(Строка(Переменная)) то лучше тогда так: Справочник.НайтиПоНаименованию(Строка(Переменная), ИСТИНА) :)

<Точное соответствие> (необязательный)
Тип: Булево. Определяет режим поиска по полному соответствию.
Поиск будет успешным, если строка поиска: в случае значения параметра Ложь - будет соответствовать левой части наименования; в случае значения параметра Истина - будет полностью совпадать с наименованием (за исключением "хвостовых" пробелов в наименовании).
Значение по умолчанию: Ложь



Автор: daysemsk
Добавлено: #6  Пн Авг 25, 2008 14:33:16
Заголовок сообщения:

Все это понятно, я делал и через запрос и через конструкцию найтипонаименованию, но везде в переменную надо присваивать записываемое значение, как его прописать ????
Перем=Записываемое значение. или речь тут о другой переменной....



Автор: Технический
Добавлено: #7  Пн Авг 25, 2008 14:42:51
Заголовок сообщения:

daysemsk Переменная не записалась, а ее значение проверяется на присутствие. Это понимаемо? Еще не записали, то есть ПередЗаписью


Автор: Darjal
Добавлено: #8  Пн Авг 25, 2008 14:48:23
Заголовок сообщения:

Я кажется понял, с чем daysemsk "парится"...

В модуле справочника если оьтработка проверки идет, то объект.ссылка.наименование - там конечно пусто, а вот Объект.Наименование - там то, что пользователь в форму забил, т.е. искомое значение, которое и надо "выловить" среди записанных элементов уже.

Добавлено спустя 6 минут 29 секунд:

Перем=Объект.Наименование - это в модуле справочника (равно как и в модуле формы). ВОт эту Перем и надо отлавливать.

Добавлено спустя 43 минуты 13 секунд:

Глянул поточнее - ЭтотОбъект.Наименование :lol:



Автор: NoName
Добавлено: #9  Пн Авг 25, 2008 17:04:52
Заголовок сообщения:

Делал подобную задачу: перед записью контрагента проверял наличие записей с подобными наименованиями.

Проверку делал в форме элемента в процедуре ПередЗаписью.

Новое наименование получал через ЭтаФорма.ЭлементыФормы.Наименование.Значение



Автор: Круглая Земля
Добавлено: #10  Пн Авг 25, 2008 17:24:50
Заголовок сообщения:

Извините, торможу. А почему не просто Наименование? У формы объекта основной реквизит же типа Объект? В модуле объекта перед записью тем более.


Автор: Darjal
Добавлено: #11  Пн Авг 25, 2008 18:44:33
Заголовок сообщения:

Круглая Земля говорит:
Извините, торможу. А почему не просто Наименование? У формы объекта основной реквизит же типа Объект? В модуле объекта перед записью тем более.


Знаете, человеку "срочно" надо было, поэтому ЭтотОбъект.Наименование сказал, знаю что это уже без вариаций на 100% сработает. "Наименование" по идее тоже должно получить наименование элемента, но это надо проверять, отладчик запускать и т.д. - времени особо тоже нет на это. А в форме элемента перед записью - этот код работать не будет в случае программного создания элемента (без получения и открытия формы).



Автор: daysemsk
Добавлено: #12  Пт Авг 29, 2008 12:07:07
Заголовок сообщения:

Спасибо всем !!! Вопрос дублейв справочнике отошелна второй план, но у меня возник другой вопрос, в запросе на отбор данных с непустыми реквезитами типа дата не выбираеться по заданному условию, почему ??? вот он код:
ВЫБРАТЬ РАЗЛИЧНЫЕ
ДвиженияВагонов.Период,
КОЛИЧЕСТВО(ДвиженияВагонов.Вагоны) КАК Вагоны,
ДвиженияВагонов.ДатаВозврата,
ДвиженияВагонов.Регистратор
ИЗ
РегистрСведений.ДвиженияВагонов КАК ДвиженияВагонов
ГДЕ
ДвиженияВагонов.Период МЕЖДУ &Дата1 И &дата2
и (не ДвиженияВагонов.ДатаВозврата = "")

СГРУППИРОВАТЬ ПО
ДвиженияВагонов.Период,
ДвиженияВагонов.ДатаВозврата,
ДвиженияВагонов.Регистратор

Добавлено спустя 1 минуту 25 секунд:

Он мне начинаеть выбирать все движения и с пустыми и с не пустыми значениями Датавозврата ...



Автор: Darjal
Добавлено: #13  Пт Авг 29, 2008 15:21:50
Заголовок сообщения:

И правильно делает... У машины запросов свой язык, а вы ей не объяснили, что нужно в итоге получить, это не ДвиженияВагонов.ДатаВозврата = "" - ерунда. Может подождем :D , и этот вопрос тоже на второй план отойдет? :lol:


Автор: KrEAtive
Добавлено: #14  Пт Авг 29, 2008 15:28:52
Заголовок сообщения:

daysemsk говорит:
(не ДвиженияВагонов.ДатаВозврата = "")

Попробуй так:
(не ДвиженияВагонов.ДатаВозврата = &ПустДата)
Запрос.УстановитьПараметр("ПустДата", Дата(1,1,1);
Не уверен, но я бы так для начала сделал



Автор: daysemsk
Добавлено: #15  Пт Авг 29, 2008 15:30:36
Заголовок сообщения:

Большое спасибо решение нашлось, вэтом месте надо ставить вот так
а программно не проставлять параметр. вот и все
И (НЕ ДвиженияВагонов.ДатаВозврата = &дата222)
Darjal говорит:
, и этот вопрос тоже на второй план отойдет?

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



Автор: KrEAtive
Добавлено: #16  Пт Авг 29, 2008 15:45:49
Заголовок сообщения:

daysemsk говорит:
а программно не проставлять параметр. вот и все

Как это?
Запрос.УстановитьПараметр("ПустДата", Сюда ничего не ставить?);



Автор: daysemsk
Добавлено: #17  Пт Авг 29, 2008 16:01:04
Заголовок сообщения:

Да вот именно , если вы заметили
у меня в начале запроса выбираеться период

ГДЕ
ДвиженияВагонов.Период МЕЖДУ &Дата1 И &дата2

, а параметр
И (НЕ ДвиженияВагонов.ДатаВозврата = &дата222)
просто напросто не заполнять, на форме я просто напросто сделал поле параметра невидимым, соответсвенно поле осталось и параметр запрос прочитает, но поле где заполнять дату(параметр) не видно пользователю, попробуйте сами, убедитесь

Добавлено спустя 10 минут 29 секунд:

daysemsk говорит:
Как это?
Запрос.УстановитьПараметр("ПустДата", Сюда ничего не ставить?);

Нет вэтом месте я как положено пишу параметр

Запрос.УстановитьПараметр("дата222", дата222);
, я имею ввиду не давать пользователю заполнять(выбирать дату) параметр!

а в условий стоит операнд НЕ РАВНО, то есть не равно ПУСТОМУ значению



Автор: KrEAtive
Добавлено: #18  Пт Авг 29, 2008 16:13:58
Заголовок сообщения:

daysemsk говорит:
просто напросто не заполнять, на форме я просто напросто сделал поле параметра невидимым

Ясно. Это не поле параметра, а реквизит обработки (или документа, не знаю откуда Вы запускаете запрос).
Можно было обойтись без него.
Запрос.УстановитьПараметр("Дата222", Дата(1,1,1));
Вот выдржка из Габец, Гончаров:
Цитата:
Значение типа Дата не бывает «пустым». Если в явном виде значение переменной типа Дата не задано, она будет иметь значение по умолчанию: начало первого дня первого месяца первого года (00 часов 00 минут 00 секунд). Поэтому проверку проще сделать так:
Листинг 1.2. Проверка даты на пустое значение
Если ДатаПроверяемая = Дата(1, 1, 1) Тогда
Сообщить("Пустая дата!");
КонецЕсли;




Автор: daysemsk
Добавлено: #19  Пт Авг 29, 2008 16:18:42
Заголовок сообщения:

да читал об этом, но у меня опыт разработки в восьмерке месяц с небольшим, и опыта маловато а задачу надо было решить быстро, поэтому стал изврщяться с запросом. программно я как не додумался, зато у нас сеть километровая, а запросом не будет грузить сетку и трафик.


Автор: Darjal
Добавлено: #20  Пт Авг 29, 2008 16:24:13
Заголовок сообщения:

А я дату через кавычки одинарные обычно делаю. Привычка...

"поэтому стал изврщяться с запросом" - а НЕ ЗАПРОСОМ - это как?



Автор: daysemsk
Добавлено: #21  Пт Авг 29, 2008 16:27:45
Заголовок сообщения:

Darjal говорит:
я дату через кавычки одинарные обычно делаю. Привычка...
, не знаю я беру дату в двойные кавычки.
Darjal говорит:
поэтому стал изврщяться с запросом" - а НЕ ЗАПРОСОМ - это как?


Я то как раз таки и заросом и извращялся...



Автор: daysemsk
Добавлено: #22  Вт Сен 09, 2008 09:45:30
Заголовок сообщения:

Darjal говорит:
а НЕ ЗАПРОСОМ - это как?


Не запросом это средствами встроенного языка.



  

Служба поддержки WWW.BALANS.KZ