anton13
Участник
Offline
|
|
« : 06-04-2010 10:04 » |
|
Делаю выборку из другого справочника, значение ключа передаю из текущей строки (текущиеданные.столбец), потом к выборке применяю ПолучитьОбъект и указываю имя нужного мне реквизита для получения значения в переменную, запускаю 1с, а он сообщает мне, что элемент не выбран, как будто выборка не получает значение ключа. С чем это может быть связано?
|
|
« Последнее редактирование: 06-04-2010 15:23 от Алексей1153++ »
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #1 : 06-04-2010 10:09 » |
|
текущиеданные.столбец какой тип этого значения?
|
|
|
Записан
|
|
|
|
anton13
Участник
Offline
|
|
« Ответ #2 : 06-04-2010 12:44 » |
|
Строка
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #3 : 06-04-2010 14:02 » |
|
Напиши полный код, как ты это пытаешься сделать
|
|
|
Записан
|
|
|
|
|
Kivals
|
|
« Ответ #5 : 07-04-2010 12:44 » |
|
Почитай встроенный помощник на тему СправочникВыборка: тебе нужен еще перебор элементов, полученных отбором: Пока УслугиВыборка.Следующий() Цикл ... КонецЦикла; Или если уверен что значений не больше одного, тогда Если УслугиВыборка.Следующий() Тогда ... КонецЕсли;
|
|
|
Записан
|
|
|
|
anton13
Участник
Offline
|
|
« Ответ #6 : 07-04-2010 12:52 » |
|
Да зачем мне перебор элементов я конкретное значение сообщаю. Он такую же ошибку выдаёт если делаешь отбор по наименованию. И ещё что идивительно если делаешь сообщить(ЗначениеВыборки) вообще игнорирует.
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #7 : 07-04-2010 13:04 » |
|
зачем - читать хелп!
|
|
|
Записан
|
|
|
|
anton13
Участник
Offline
|
|
« Ответ #8 : 07-04-2010 13:05 » |
|
Квадратные скобки попробовал ПолучитьОбъект()[Всего] тоже самое да и не должно быть так чтобы одно работало, а другое нет. Тут что-то не то.
|
|
|
Записан
|
|
|
|
anton13
Участник
Offline
|
|
« Ответ #9 : 07-04-2010 13:07 » |
|
У меня один элемент пока больше не создавал на него и ссылка в текущей строке справочника он не может себя не находить.
|
|
|
Записан
|
|
|
|
anton13
Участник
Offline
|
|
« Ответ #10 : 07-04-2010 13:20 » |
|
Теперь вот так сделал:
Процедура СписокУслугКолРазПриИзменении(Элемент) Кол=ЭлементыФормы.СписокУслуг.ТекущиеДанные.КолРаз; Услуга=ЭлементыФормы.СписокУслуг.ТекущиеДанные.Услуги; Отбор=Новый Структура("Наименование",Услуга); УслугиВыборка=Справочники.Услуги.Выбрать(,,Отбор,); Пока УслугиВыборка.Следующий() Цикл Всего=УслугиВыборка.ПолучитьОбъект().Всего; КонецЦикла; Цена=ЭлементыФормы.СписокУслуг.ТекущиеДанные.Цена; Цена=Кол*Всего; КонецПроцедуры
Выдаёт:
{Справочник.Работы.Форма.ФормаЭлемента(16)}: Преобразование значения к типу Число не может быть выполнено Цена=Кол*Всего;
|
|
|
Записан
|
|
|
|
anton13
Участник
Offline
|
|
« Ответ #11 : 07-04-2010 13:30 » |
|
Вы вот мне как специалист скажите, после передачи в выборку структуры и совершению выборки что должно быть в переменной куда эта выборка передаётся?
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #12 : 07-04-2010 13:40 » |
|
Это все есть в хелпе, нужно только читать внимательно: в значении переменной будет элемент типа СправочникВыборка, но не спозиционированная ни на один элемент. Чтобы последовательно позиционироваться на элементы и есть метод Следующий(). Код в принципе правильный, поставь точку останова на ошибочную строку (Цена=Кол*Всего;) и проверь значения переменных Кол и Всего.
И научись пользоваться [code]!
|
|
|
Записан
|
|
|
|
anton13
Участник
Offline
|
|
« Ответ #13 : 07-04-2010 15:37 » |
|
Пишу так:
Процедура СписокУслугКолРазПриИзменении(Элемент) Кол=ЭлементыФормы.СписокУслуг.ТекущиеДанные.КолРаз; Услуга=ЭлементыФормы.СписокУслуг.ТекущиеДанные.Услуги; Отбор=Новый Структура("Наименование",Услуга); УслугиВыборка=Справочники.Услуги.Выбрать(,,Отбор,); Пока УслугиВыборка.Следующий() Цикл Объект=УслугиВыборка.ПолучитьОбъект(); КонецЦикла; Всего=Объек
|
|
« Последнее редактирование: 07-04-2010 16:08 от anton13 »
|
Записан
|
|
|
|
anton13
Участник
Offline
|
|
« Ответ #14 : 08-04-2010 07:29 » |
|
Ура получилось! Всё оказалось намного проще чем я думал. Вот посмотрите какой короткий код:
Процедура СписокУслугКолРазПриИзменении(Элемент) ТекущаяСтрока=ЭлементыФормы.СписокУслуг.ТекущиеДанные; СсылкаУслуги=Справочники.Услуги.НайтиПоНаименованию(ТекущаяСтрока.Услуги); ТекущаяСтрока.Цена=ТекущаяСтрока.КолРаз*СсылкаУслуги.Всего; КонецПроцедуры
Я сделал несколько больших выводов:
1. Нельзя задавать переменной значение ячейки таблицы напрямую. Например:
(Неправильно) Цена=ЭлементыФормы.СписокУслуг.ТекущиеДанные.Цена; Цена=Кол*Всего;
(Правильно) ТекущаяСтрока=ЭлементыФормы.СписокУслуг.ТекущиеДанные; ТекущаяСтрока.Цена=ТекущаяСтрока.Кол*Всего
2. Нельзя давать имя "Ссылка" переменной. Видимо есть какое-то совпадение хотя в справочнике в таблице это слово не относится к зарезервированым.
А выборка я так понимаю для более большого количества элементов. И вообще я заметил что с именами в 1С всё время какие-то проблемы например есть наименование элемента, потом создаёшь таблицу в форме этого элемента и там например у тебя тоже столбец наименование так вот программа их путает и возникают ошибки как только создашь разные имена ошибки пропадают.
НАРОД ВНИМАТЕЛЬНО ОТНОСИТЕСЬ К ИМЕНАМ ТАБЛИЦ, ПЕРЕМЕННЫХ И Т.Д.
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #15 : 08-04-2010 08:10 » |
|
Вот посмотрите какой короткий код: ...
Если не найдет - вылетит с исключением. Желательна еще проверка Если ЗначениеЗаполнено(СсылкаУслуги) Тогда... 1. Нельзя задавать переменной значение ячейки таблицы напрямую
Если ты хочешь, чтобы поменялось значение в таблице - то естественно да. ИМХО это и так понятно (если ты понимаешь что такое передача параметров по значению и по ссылке) 2. Нельзя давать имя "Ссылка" переменной
Естественно - поищи в синтакс-помощнике что такое переменная Ссылка в модулях (и модулях форм) документа/справочника/... И вообще я заметил что с именами в 1С всё время какие-то проблемы ... так вот программа их путает и возникают ошибки
Просто нужна аккуратность и понимание к чему (какой переменной) ты обращаешься. Я наоборот стараюсь чтобы имена совпадали, при этом никаких подобных проблем не возникает.
|
|
|
Записан
|
|
|
|
anton13
Участник
Offline
|
|
« Ответ #16 : 08-04-2010 09:39 » |
|
Просто нужна аккуратность и понимание к чему (какой переменной) ты обращаешься. Я наоборот стараюсь чтобы имена совпадали, при этом никаких подобных проблем не возникает. Это глупость в VisualBasic всё проще и значение можно передать разными способами, а в 1С так намудрили, что даже когда всё делаешь правильно получается, что не правильно.
|
|
« Последнее редактирование: 08-04-2010 09:42 от anton13 »
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #17 : 08-04-2010 09:59 » |
|
Offtopic: Ага. А в бейсике на ЕС-1840 еще все проще и понятней было Извини, но форум не для того, чтобы меряться "бейсиками". Свой комментарий я оставил потому, чтобы те, кто будут читать твое сообщение, не сделали неправильных выводов. Если хочешь сравнить 1С и VB - заведи тему в Общении. Но ИМХО конструктивного там ничего не будет. Судя по вопросам - ты только начинаешь осваивать 1С, а уже делаешь вывод что "это глупость".
|
|
|
Записан
|
|
|
|
anton13
Участник
Offline
|
|
« Ответ #18 : 08-04-2010 10:14 » |
|
Что такое ИМХО?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #19 : 08-04-2010 10:17 » |
|
anton13, ИМХО == "по моему скромному мнению" )
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #20 : 08-04-2010 10:47 » |
|
|
|
|
Записан
|
|
|
|
|