Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Выборка справочника  (Прочитано 9902 раз)
0 Пользователей и 1 Гость смотрят эту тему.
anton13
Участник

ru
Offline Offline

« : 06-04-2010 10:04 » 

Делаю выборку из другого справочника, значение ключа передаю из текущей строки (текущиеданные.столбец), потом к выборке применяю ПолучитьОбъект и указываю имя нужного мне реквизита для получения значения в переменную, запускаю 1с, а он сообщает мне, что элемент не выбран, как будто выборка не получает значение ключа. С чем это может быть связано?
« Последнее редактирование: 06-04-2010 15:23 от Алексей1153++ » Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 06-04-2010 10:09 » 

Цитата
текущиеданные.столбец
какой тип этого значения?
Записан
anton13
Участник

ru
Offline Offline

« Ответ #2 : 06-04-2010 12:44 » 

Строка
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 06-04-2010 14:02 » 

Напиши полный код, как ты это пытаешься сделать
Записан
anton13
Участник

ru
Offline Offline

« Ответ #4 : 07-04-2010 08:24 » 

Код:
Процедура СписокУслугКолРазПриИзменении(Элемент)
Кол=ЭлементыФормы.СписокУслуг.ТекущиеДанные.КолРаз;
Услуга=ЭлементыФормы.СписокУслуг.ТекущиеДанные.Услуги;
Отбор=Новый Структура("Наименование",Услуга);
УслугиВыборка=Справочники.Услуги.Выбрать(,,Отбор,);
Всего=УслугиВыборка.ПолучитьОбъект().Всего;
Цена=ЭлементыФормы.СписокУслуг.ТекущиеДанные.Цена;
Цена=Кол*Всего;
КонецПроцедуры

Kivals: Пользуйся [code] и отступами
« Последнее редактирование: 07-04-2010 12:40 от Kivals » Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 07-04-2010 12:44 » 

Почитай встроенный помощник на тему СправочникВыборка: тебе нужен еще перебор элементов, полученных отбором:
Код:
Пока УслугиВыборка.Следующий() Цикл
...
КонецЦикла;
Или если уверен что значений не больше одного, тогда
Код:
Если УслугиВыборка.Следующий() Тогда
...
КонецЕсли;
Записан
anton13
Участник

ru
Offline Offline

« Ответ #6 : 07-04-2010 12:52 » 

Да зачем мне перебор элементов я конкретное значение сообщаю. Он такую же ошибку выдаёт если делаешь отбор по наименованию. И ещё что идивительно если делаешь сообщить(ЗначениеВыборки) вообще игнорирует.
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 07-04-2010 13:04 » 

зачем - читать хелп!
Записан
anton13
Участник

ru
Offline Offline

« Ответ #8 : 07-04-2010 13:05 » 

Квадратные скобки попробовал ПолучитьОбъект()[Всего] тоже самое да и не должно быть так чтобы одно работало, а другое нет. Тут что-то не то.
Записан
anton13
Участник

ru
Offline Offline

« Ответ #9 : 07-04-2010 13:07 » 

У меня один элемент пока больше не создавал на него и ссылка в текущей строке справочника он не может себя не находить.
Записан
anton13
Участник

ru
Offline Offline

« Ответ #10 : 07-04-2010 13:20 » 

Теперь вот так сделал:

Процедура СписокУслугКолРазПриИзменении(Элемент)   
Кол=ЭлементыФормы.СписокУслуг.ТекущиеДанные.КолРаз;
Услуга=ЭлементыФормы.СписокУслуг.ТекущиеДанные.Услуги;
Отбор=Новый Структура("Наименование",Услуга);
УслугиВыборка=Справочники.Услуги.Выбрать(,,Отбор,);
Пока УслугиВыборка.Следующий() Цикл
Всего=УслугиВыборка.ПолучитьОбъект().Всего;
КонецЦикла;
Цена=ЭлементыФормы.СписокУслуг.ТекущиеДанные.Цена;
Цена=Кол*Всего;
КонецПроцедуры

Выдаёт:

{Справочник.Работы.Форма.ФормаЭлемента(16)}: Преобразование значения к типу Число не может быть выполнено
Цена=Кол*Всего;
Записан
anton13
Участник

ru
Offline Offline

« Ответ #11 : 07-04-2010 13:30 » 

Вы вот мне как специалист скажите, после передачи в выборку структуры и совершению выборки что должно быть в переменной куда эта выборка передаётся?
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 07-04-2010 13:40 » 

Это все есть в хелпе, нужно только читать внимательно: в значении переменной будет элемент типа СправочникВыборка, но не спозиционированная ни на один элемент. Чтобы последовательно позиционироваться на элементы и есть метод Следующий().
Код в принципе правильный, поставь точку останова на ошибочную строку (Цена=Кол*Всего;) и проверь значения переменных Кол и Всего.

И научись пользоваться [code]!
Записан
anton13
Участник

ru
Offline Offline

« Ответ #13 : 07-04-2010 15:37 » 

Пишу так:

Процедура СписокУслугКолРазПриИзменении(Элемент)   
Кол=ЭлементыФормы.СписокУслуг.ТекущиеДанные.КолРаз;
Услуга=ЭлементыФормы.СписокУслуг.ТекущиеДанные.Услуги;
Отбор=Новый Структура("Наименование",Услуга);
УслугиВыборка=Справочники.Услуги.Выбрать(,,Отбор,);
Пока УслугиВыборка.Следующий() Цикл
Объект=УслугиВыборка.ПолучитьОбъект();
КонецЦикла;
Всего=Объек
« Последнее редактирование: 07-04-2010 16:08 от anton13 » Записан
anton13
Участник

ru
Offline Offline

« Ответ #14 : 08-04-2010 07:29 » 

Ура получилось!
Всё оказалось намного проще чем я думал. Вот посмотрите какой короткий код:

Процедура СписокУслугКолРазПриИзменении(Элемент)
ТекущаяСтрока=ЭлементыФормы.СписокУслуг.ТекущиеДанные;
СсылкаУслуги=Справочники.Услуги.НайтиПоНаименованию(ТекущаяСтрока.Услуги);
ТекущаяСтрока.Цена=ТекущаяСтрока.КолРаз*СсылкаУслуги.Всего;
КонецПроцедуры

Я сделал несколько больших выводов:

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

(Неправильно)
Цена=ЭлементыФормы.СписокУслуг.ТекущиеДанные.Цена;
Цена=Кол*Всего;

(Правильно)
ТекущаяСтрока=ЭлементыФормы.СписокУслуг.ТекущиеДанные;
ТекущаяСтрока.Цена=ТекущаяСтрока.Кол*Всего

2. Нельзя давать имя "Ссылка" переменной. Видимо есть какое-то совпадение хотя в справочнике в таблице это слово не относится к зарезервированым.

А выборка я так понимаю для более большого количества элементов. И вообще я заметил что с именами в 1С всё время какие-то проблемы например есть наименование элемента, потом создаёшь таблицу в форме этого элемента и там например у тебя тоже столбец наименование так вот программа их путает и возникают ошибки как только создашь разные имена ошибки пропадают.

НАРОД ВНИМАТЕЛЬНО ОТНОСИТЕСЬ К ИМЕНАМ ТАБЛИЦ, ПЕРЕМЕННЫХ И Т.Д.
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 08-04-2010 08:10 » 

Вот посмотрите какой короткий код: ...
Если не найдет - вылетит с исключением. Желательна еще проверка Если ЗначениеЗаполнено(СсылкаУслуги) Тогда...

1. Нельзя задавать переменной значение ячейки таблицы напрямую
Если ты хочешь, чтобы поменялось значение в таблице - то естественно да. ИМХО это и так понятно (если ты понимаешь что такое передача параметров по значению и по ссылке)

2. Нельзя давать имя "Ссылка" переменной
Естественно - поищи в синтакс-помощнике что такое переменная Ссылка в модулях (и модулях форм) документа/справочника/...

И вообще я заметил что с именами в 1С всё время какие-то проблемы ... так вот программа их путает и возникают ошибки
Просто нужна аккуратность и понимание к чему (какой переменной) ты обращаешься. Я наоборот стараюсь чтобы имена совпадали, при этом никаких подобных проблем не возникает.
Записан
anton13
Участник

ru
Offline Offline

« Ответ #16 : 08-04-2010 09:39 » 

Цитата
Просто нужна аккуратность и понимание к чему (какой переменной) ты обращаешься. Я наоборот стараюсь чтобы имена совпадали, при этом никаких подобных проблем не возникает.

Это глупость в VisualBasic всё проще и значение можно передать разными способами, а в 1С так намудрили, что даже когда всё делаешь правильно получается, что не правильно.
« Последнее редактирование: 08-04-2010 09:42 от anton13 » Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 08-04-2010 09:59 » 

Offtopic:
Ага. А в бейсике на ЕС-1840 еще все проще и понятней было

Извини, но форум не для того, чтобы меряться "бейсиками". Свой комментарий я оставил потому, чтобы те, кто будут читать твое сообщение, не сделали неправильных выводов.
Если хочешь сравнить 1С и VB - заведи тему в Общении. Но ИМХО конструктивного там ничего не будет. Судя по вопросам - ты только начинаешь осваивать 1С, а уже делаешь вывод что "это глупость".
Записан
anton13
Участник

ru
Offline Offline

« Ответ #18 : 08-04-2010 10:14 » 

Что такое ИМХО?
Записан
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #19 : 08-04-2010 10:17 » 

anton13, ИМХО == "по моему скромному мнению" )
Записан

Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #20 : 08-04-2010 10:47 » 

См. Википедию: ИМХО
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines