Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
15 Дек 2017, 07:37
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Создать программно СписокВыбора  (Прочитано 15245 раз)

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

Оффлайн Public_enemy

  • **
  • Сообщений: 52
  • РЕПУТАЦИЯ: 6
  • КПД: 12%
  • Регистрация: 2011-10-13
  • Сайт: www.alliancesystems.ru
  • Профессия: Программист 1С
Всем доброго времени суток.
Я начинающий программист, тока недавно сдал на профессионала
Есть не большая загвоздка, для собственных нужд создаю БД (что-то вместо практики)
     Имеется  БД (не типовая) на платформе 8.2 . Есть документ Приходная с реквизитами и табличной частью, в таблице есть колонки номенклатура ,   ,   ,  , цена.   У данного поля(ТекущиеДанные.Цена )  табличной части  есть Свойство  "СписокВыбора"
необходимо создать этот список с помощью запроса из Регистра Сведений "ЦеныНоменклатуры" , что-бы при нажатии на кнопку списка выбора выпадал СписокВыбора с вариантами цен, взятых из этого регистра
Все выше описаное мной сделано, но в результате в "СписокВыбора"  возвращается одно значение вместо нескольких .
Никак ни могу сообразить как передать несколько значений.
Кто знает пожалуйста подскажите
Здесь текст кода:
         
        &НаКлиенте
Процедура ТаблицаПокупокЦенаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
     Строка = Элементы.ТаблицаПокупок.ТекущиеДанные;
     СтрокаТаблицы = Строка.Номенклатура;
     Элементы.ТаблицаПокупокЦена.СписокВыбора.Добавить( СписокЦенНоменклатуры(СтрокаТаблицы));
КонецПроцедуры

  &НаСервере
  Функция  СписокЦенНоменклатуры(СтрокаТаблицы)
             
    Запрос = Новый Запрос;
    Запрос.Текст =  "ВЫБРАТЬ
                    |   ЦеныНоменклатуры.Номенклатура,
                    |   ЦеныНоменклатуры.Цена КАК Цена
                    |ИЗ
                    |   РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
                    |ГДЕ
                    |   ЦеныНоменклатуры.Номенклатура = &СтрокаТаблицы";

    Запрос.УстановитьПараметр("СтрокаТаблицы",СтрокаТаблицы);

    Результат = Запрос.Выполнить();
    Итог = Результат.Выбрать();
   
    Пока Итог.Следующий() Цикл
      Возврат  Итог.Цена; 
         
    КонецЦикла;
   
 
  КонецФункции


Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2857
  • РЕПУТАЦИЯ: 546
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
Как то так.
        &НаКлиенте
Процедура ТаблицаПокупокЦенаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
     Строка = Элементы.ТаблицаПокупок.ТекущиеДанные;
     СтрокаТаблицы = Строка.Номенклатура;
     Элементы.ТаблицаПокупокЦена.СписокВыбора = СписокЦенНоменклатуры(СтрокаТаблицы);
КонецПроцедуры

  &НаСервере
  Функция  СписокЦенНоменклатуры(СтрокаТаблицы)
            
    Запрос = Новый Запрос;
    Запрос.Текст =  "ВЫБРАТЬ
                    |   ЦеныНоменклатуры.Номенклатура,
                    |   ЦеныНоменклатуры.Цена КАК Цена
                    |ИЗ
                    |   РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
                    |ГДЕ
                    |   ЦеныНоменклатуры.Номенклатура = &СтрокаТаблицы";

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

Оффлайн Public_enemy

  • **
  • Сообщений: 52
  • РЕПУТАЦИЯ: 6
  • КПД: 12%
  • Регистрация: 2011-10-13
  • Сайт: www.alliancesystems.ru
  • Профессия: Программист 1С
При исполнении кода вот таткаяошибка
{Документ.Покупки.Форма.ФормаДокумента.Форма(170)}: Поле объекта недоступно для записи (СписокВыбора)
     Элементы.ТаблицаПокупокЦена.СписокВыбора =  СписокЦенНоменклатуры(СтрокаТаблицы);

Если написать Элементы.ТаблицаПокупокЦена.СписокВыбора.Добавить(СписокЦенНоменклатуры(СтрокаТаблицы));
Тогда все получиться, но вывод происходит в оду строку через " ; "и выбрать значение из списка в режиме предприятия не получится
по данному коду результат выводиться (в одну строку) вот так: 23.5;25.4;65.8;и т. д. в зависимости от количества значений
Такой вариант не устраивает т.к. в результате выбора из списка будет 0

список должен выглядеть вот так  23.5
                                                 25.4
                                                 65.8
В таком варианте можно выбрать.  Но как это сделать пока до меня не дошло

Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2857
  • РЕПУТАЦИЯ: 546
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
Самому подумать не судьба?
Ты передай этот список на сервер и там заполни!!!
       
 &НаКлиенте
Процедура ТаблицаПокупокЦенаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
     Строка = Элементы.ТаблицаПокупок.ТекущиеДанные;
     СтрокаТаблицы = Строка.Номенклатура;
     СписокЦенНоменклатуры(СтрокаТаблицы,Элементы.ТаблицаПокупокЦена.СписокВыбора);
КонецПроцедуры

  &НаСервере
  Процедура СписокЦенНоменклатуры(СтрокаТаблицы,Список)
             
    Запрос = Новый Запрос;
    Запрос.Текст =  "ВЫБРАТЬ
                    |   ЦеныНоменклатуры.Номенклатура,
                    |   ЦеныНоменклатуры.Цена КАК Цена
                    |ИЗ
                    |   РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
                    |ГДЕ
                    |   ЦеныНоменклатуры.Номенклатура = &СтрокаТаблицы";

    Запрос.УстановитьПараметр("СтрокаТаблицы",СтрокаТаблицы);
   
    Результат = Запрос.Выполнить();
    Итог = Результат.Выбрать();
   
    Пока Итог.Следующий() Цикл
          Список.Добавить(Итог.Цена);           
    КонецЦикла;
   
  КонецПроцедуры
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Оффлайн Public_enemy

  • **
  • Сообщений: 52
  • РЕПУТАЦИЯ: 6
  • КПД: 12%
  • Регистрация: 2011-10-13
  • Сайт: www.alliancesystems.ru
  • Профессия: Программист 1С
Опять таже ошибка "Поле объекта недоступно для записи"


&НаКлиенте
Процедура ТаблицаПокупокЦенаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
     Строка = Элементы.ТаблицаПокупок.ТекущиеДанные;
     СтрокаТаблицы = Строка.Номенклатура;
     Элементы.ТаблицаПокупокЦена.СписокВыбора.Добавить(СписокЦенНоменклатуры(СтрокаТаблицы));
КонецПроцедуры

  &НаСервере
 Функция  СписокЦенНоменклатуры(СтрокаТаблицы)
             
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                    |   ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
                    |   ЦеныНоменклатуры.Цена КАК Цена
                    |ИЗ
                    |   РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
                    |ГДЕ
                    |   ЦеныНоменклатуры.Номенклатура = &СтрокаТаблицы";

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


В данном примере возвращаются все значения имеющиеся в регистре вот результат
но значения записаны в одну строку,
а должно быть вот так

Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2857
  • РЕПУТАЦИЯ: 546
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
А так тоже ошибка?  
 &НаКлиенте
Процедура ТаблицаПокупокЦенаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
     Строка = Элементы.ТаблицаПокупок.ТекущиеДанные;
     СтрокаТаблицы = Строка.Номенклатура;
     Список = СписокЦенНоменклатуры(СтрокаТаблицы);
Для каждого х Из Список Цикл
Элемент.СписокВыбора.Добавить(х);
КонецЦикла;
КонецПроцедуры

  &НаСервере
  Функция  СписокЦенНоменклатуры(СтрокаТаблицы)
             
    Запрос = Новый Запрос;
    Запрос.Текст =  "ВЫБРАТЬ
                    |   ЦеныНоменклатуры.Номенклатура,
                    |   ЦеныНоменклатуры.Цена КАК Цена
                    |ИЗ
                    |   РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
                    |ГДЕ
                    |   ЦеныНоменклатуры.Номенклатура = &СтрокаТаблицы";

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

Оффлайн Public_enemy

  • **
  • Сообщений: 52
  • РЕПУТАЦИЯ: 6
  • КПД: 12%
  • Регистрация: 2011-10-13
  • Сайт: www.alliancesystems.ru
  • Профессия: Программист 1С
Да этого я и сам дошол. Все получается прекрасно. Список отображается как надо. Но вылезла другая проблема:
при повторном вызове функции выдает ошибку   
{Документ.Покупки.Форма.ФормаДокумента.Форма(168)}: Ошибка при вызове метода контекста (СписокЦенНоменклатуры)
     Список = СписокЦенНоменклатуры(СтрокаТаблицы, Список);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'valList':
   форма: Элемент
   имя: {http://v8.1c.ru/8.2/managed-application/logform}valList
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'value':
   форма: Элемент
   имя: {http://v8.1c.ru/8.1/data/core}value
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ЭлементСпискаЗначений'


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

Оффлайн Public_enemy

  • **
  • Сообщений: 52
  • РЕПУТАЦИЯ: 6
  • КПД: 12%
  • Регистрация: 2011-10-13
  • Сайт: www.alliancesystems.ru
  • Профессия: Программист 1С
Так. С этой проблемой вопрос решен. Ошибка заключалась в том, что при повторном вызове функции  СписокЦенНоменклатуры(СтрокаТаблицы) передовался не только параметр СтрокаТаблицы, но и сохраненные параметры переменной Список. Как то так на сколько я смог понять.
Лечится достаточно просто:перед отправкой на сервер список выбора надо очищать
&НаКлиенте
Процедура ТаблицаПокупокЦенаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
     Строка = Элементы.ТаблицаПокупок.ТекущиеДанные;
     СтрокаТаблицы = Строка.Номенклатура;
     Элемент.СписокВыбора.Очистить(); ///Это и есть решение проблеммы
     Список = СписокЦенНоменклатуры(СтрокаТаблицы);
     
 Для Каждого Значения ИЗ Список   Цикл
     Элемент.СписокВыбора.Добавить(Значения);   
       
 КонецЦикла;
 КонецПроцедуры


Дело осталось за малым это обработка выбора


Оффлайн Public_enemy

  • **
  • Сообщений: 52
  • РЕПУТАЦИЯ: 6
  • КПД: 12%
  • Регистрация: 2011-10-13
  • Сайт: www.alliancesystems.ru
  • Профессия: Программист 1С
Да, еще можно использовать метод ВыбратьИзСписка(Здесь список который вы создали на сервере);, при использовании данного метода не потребуется очищать список выбора  при отправке на сервер

Оффлайн Public_enemy

  • **
  • Сообщений: 52
  • РЕПУТАЦИЯ: 6
  • КПД: 12%
  • Регистрация: 2011-10-13
  • Сайт: www.alliancesystems.ru
  • Профессия: Программист 1С
Продолжаем тему.
После нового года чет голова туго соображает.  Выбранное значение из списка выбора не сохраняется при выборе (в графе цена получается 0)

&НаКлиенте
Процедура
ТаблицаПокупокЦенаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
   
     Строка = Элементы.ТаблицаПокупок.ТекущиеДанные;
     Строка.Цена = ВыбранноеЗначение;
     
 КонецПроцедуры

не получается присвоить выбранное значение.
Подскажите, может я чет не так делаю


Теги:
 

Создать com соединение [com соединение]

Автор MuI_I_IkaРаздел Алгоритмы

Ответов: 0
Просмотров: 484
Последний ответ 30 Май 2017, 16:52
от MuI_I_Ika
Как создать нескольких документов "расчет при увольнении" на основании кадрового документа "увольнение" как Отпуска

Автор cozuРаздел Пользователям "1С - Предприятие 8"

Ответов: 3
Просмотров: 3186
Последний ответ 21 Мар 2015, 20:24
от дфтын
Программно открыть отчет скд и отчет подключенный как внешний отчет

Автор 1ckaРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 3939
Последний ответ 02 Фев 2015, 10:06
от 1cka
Создать базу с новым списком баз или как скрыть базу

Автор GendelfРаздел Пользователям "1С - Предприятие 8"

Ответов: 11
Просмотров: 6917
Последний ответ 04 Дек 2012, 13:47
от Gendelf
Как в Native API 8.2 в методе класса создать экземпляр другого класса?

Автор qesrf3we4rРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 0
Просмотров: 2660
Последний ответ 01 Апр 2011, 11:03
от qesrf3we4r

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
176 Сообщений
ilyay ilyay
69 Сообщений
oleg-x
48 Сообщений
alex0402
44 Сообщений
AIFrame
41 Сообщений
andron81_81
38 Сообщений
MuI_I_Ika MuI_I_Ika
33 Сообщений
Golickoff Golickoff
31 Сообщений
BuhRust
30 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 317
  • Точка Скрытых: 0
  • Точка Пользователей: 13
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal