Програмный список выбора

1. user591603_neterpenie 26.04.17 14:56 Сейчас в теме
Друзья, снова небольшой вопрос -

в форме документа есть реквизит "ПериодНачисления", тип - строка, РежимВыбораИзСпика включен, изначально список выбора пустой, заполняется программно -

на событие "НачалоВыбора" присвоена процедура:

Процедура ПериодНачисленияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ТекГод=Формат(Число(ГОД(Объект.Дата)),"ЧГ=0");
	
	Элемент.СписокВыбора.Добавить("Январь "+ТекГод);
	Элемент.СписокВыбора.Добавить("Февраль "+ТекГод);
	Элемент.СписокВыбора.Добавить("Март "+ТекГод);
	Элемент.СписокВыбора.Добавить("Апрель "+ТекГод);
	Элемент.СписокВыбора.Добавить("Май "+ТекГод);
	Элемент.СписокВыбора.Добавить("Июнь "+ТекГод);
	Элемент.СписокВыбора.Добавить("Июль "+ТекГод);
	Элемент.СписокВыбора.Добавить("Август "+ТекГод);
	Элемент.СписокВыбора.Добавить("Сентябрь "+ТекГод);
	Элемент.СписокВыбора.Добавить("Октябрь "+ТекГод);
	Элемент.СписокВыбора.Добавить("Ноябрь "+ТекГод);
	Элемент.СписокВыбора.Добавить("Декабрь "+ТекГод);

КонецПроцедуры
Показать


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

Но, если снова открываешь уже проведенный документ - значение из списка выбора пустое.(

Как с этим бороться?(
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. _Farsh_ 10 26.04.17 15:15 Сейчас в теме
(1) Если реквизит только на форме, то он так и будет сбрасываться ему просто некуда сохранить значения Тебе надо в сам документ добавить новый реквизит, и этот реквизит перетащить на форму.
3. user591603_neterpenie 26.04.17 15:49 Сейчас в теме
(2)
Если реквизит только на форме, то он так и будет сбрасываться ему просто некуда сохранить значения Тебе надо в сам документ добавить новый реквизит, и этот реквизит перетащить на форму.


у меня так и есть, это реквизит док-та, который я добавил на форму документа:

4. _Farsh_ 10 26.04.17 16:36 Сейчас в теме
(3) А процедуру при изменении объекта какая? Может ты в этот реквизит ничего не записываешь???

Элемент.СписокВыбора = ???????

или

Элемент.СписокВыбора.ТекстРедактирования = ?????
5. user591603_neterpenie 26.04.17 16:42 Сейчас в теме
(4)

больше процедур с этим реквизитом нет, только Процедура ПериодНачисленияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка).

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

И При создании формы на сервере никаких значений в принципе нет.

добавил процедуру для формы:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Элементы.ПериодНачисления.РежимВыбораИзСписка=Истина;
	
	ТекГод=Формат(Число(ГОД(Объект.Дата)),"ЧГ=0");
	
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Январь "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Февраль "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Март "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Апрель "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Май "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Июнь "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Июль "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Август "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Сентябрь "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Октябрь "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Ноябрь "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Декабрь "+ТекГод);

КонецПроцедуры
Показать


посмотрим, что будет.)
6. shnurov 26.04.17 16:50 Сейчас в теме
(5) А реквизит то сохраняется, смотрели что находится в реквизите после записи документа. Но вообще идея сохранения периода в тексте не очень, как потом если нужно будет строить отчет данные отбирать и соединять с другими таблицами. В зупе например период регистраци хранят в виде даты, а на форме показывают как у вас в виде строки, но там пачка процедур которая отвечает за изменение даты и отдельная форма выбора периода.
12. user591603_neterpenie 26.04.17 17:09 Сейчас в теме
(6)
А реквизит то сохраняется, смотрели что находится в реквизите после записи документа. Но вообще идея сохранения периода в тексте не очень, как потом если нужно будет строить отчет данные отбирать и соединять с другими таблицами. В зупе например период регистраци хранят в виде даты, а на форме показывают как у вас в виде строки, но там пачка процедур которая отвечает за изменение даты и отдельная форма выбора периода.


мне тоже идея не слишком нравится,но с моим уровней скилзов по 1С это единственный вариант, который я могу пока реализовать.)
15. shnurov 26.04.17 17:17 Сейчас в теме
(12) Ну тогда сделайте отдельную процедуру, заполнения списка причем процедуру, сделайте на #НаКлиенте. Процедуру вызывайте при открытии формы, а не при создании. При изменение даты так же вызывайте эту процедуру, т.к. у вас может год измениться. Ну проверьте что у вас сохраняется в реквезите.
10. _Farsh_ 10 26.04.17 17:00 Сейчас в теме
(5) Ты не правильно описал Список выбора!
Ты заполнил только значение, а представление кто будет описывать. У тебя представление пустое "" вот при следующем открытии он и пустой.

Элемент.СписокВыбора.Добавить( ЗНАЧЕНИЕ , ПРЕДСТАВЛЕНИЕ );


Надо так.

Процедура ПериодНачисленияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    ТекГод=Формат(Число(ГОД(Объект.Дата)),"ЧГ=0");
    
    Элемент.СписокВыбора.Добавить("Январь "+ТекГод, "Январь "+ТекГод);
    Элемент.СписокВыбора.Добавить("Февраль "+ТекГод, "Февраль "+ТекГод);
    Элемент.СписокВыбора.Добавить("Март "+ТекГод, "Март "+ТекГод);
........

КонецПроцедуры
Показать


Но я бы лучше сделал по другому у Реквизита ТИП сделал бы Датой и формат ДФ='MMMM yyyy'
Прикрепленные файлы:
11. shnurov 26.04.17 17:06 Сейчас в теме
(10)Но сохраняются то значения, а не представления. Представление поле необязательное, если его нет то будет при выборе отображать значение.
7. Jen1978 19 26.04.17 16:57 Сейчас в теме
реквизит на форме не будет сохраняться, если нужно его хранить, добавьте его в реквизит ОБЪЕКТА, тогда значение будет хранимое
9. shnurov 26.04.17 17:00 Сейчас в теме
(7)Мне тоже не очень нравится чужой текст читать, но (3) вроде бы отвечает на ваш пост.
8. Jen1978 19 26.04.17 16:58 Сейчас в теме
посмотрел скрин, у вас реквизит не привязан к реквизиту объекта.
заполните поле "Путь к данным"
13. user591603_neterpenie 26.04.17 17:12 Сейчас в теме
14. _Farsh_ 10 26.04.17 17:15 Сейчас в теме
(13) Посмотри 10 комментарий измени ТИП на ДАТУ так будет лучше.
17. shnurov 26.04.17 17:22 Сейчас в теме
(14) 99% проблема не в этом(т.к. сохраняется значение), но для успокоения души можно сделать.
21. user591603_neterpenie 26.04.17 17:32 Сейчас в теме
(14)
Посмотри 10 комментарий измени ТИП на ДАТУ так будет лучше.


попробую

(20)
А тебя не смущает что с начало надо на значок ... нажать а потом у тебя список заполнится?


пока что меня очень много смущает.))))))
16. shnurov 26.04.17 17:19 Сейчас в теме
(13)Объект связан, но что попадает в сам реквизит при сохранении? Консолью запросов можно быстро увидеть.
18. user591603_neterpenie 26.04.17 17:27 Сейчас в теме
(16)

да вроде-бы записывает то, что нужно:

19. shnurov 26.04.17 17:30 Сейчас в теме
(18) И что при открытии формы пусто? Где-то вы намудри с настройками, удалите элемент формы и заново добавьте, ничего не меняйте, а просто откройте уже сохраненный документ, что будет в поле?
26. user591603_neterpenie 26.04.17 18:12 Сейчас в теме
(19)

попробовал вообще с абсолютно новым документом

(25)

- и ничего. По прежнему значение сохраняет, но при открытии документа не показывает.(
27. _Farsh_ 10 26.04.17 18:29 Сейчас в теме
(26) Выгрузил тестовую базу. Там один документ все работает. Может еще код есть где?
Прикрепленные файлы:
1Cv8.dt
user591603_neterpenie; +1 Ответить
28. user591603_neterpenie 27.04.17 10:00 Сейчас в теме
(27)
Выгрузил тестовую базу. Там один документ все работает. Может еще код есть где?


нет нигде кода, хоть убей.(
29. user591603_neterpenie 27.04.17 10:08 Сейчас в теме
(27)

и самое странное.

Я вчера больше ничего не менял, вечером при открытии док-та поле по прежнему было пустым.

а сегодня все показывает:


что за прикол?))
30. user591603_neterpenie 27.04.17 11:10 Сейчас в теме
(27)

и еще один парадокс.

ПериодНачисления есть в нескольких документах:

1. РегистрацияПремий
2.Выдача для распределения.

В обоих реквизит одинакового типа, размера, никаких отличий в свойствах.

При этом, Регистр накопления показывает значение периода начисления,

а Выдача для распределения - не показывает.
20. _Farsh_ 10 26.04.17 17:31 Сейчас в теме
(18) А тебя не смущает что с начало надо на значок ... нажать а потом у тебя список заполнится?
22. _Farsh_ 10 26.04.17 17:34 Сейчас в теме
А можешь полный код модуля выложить, а то с бубном долго будем играться)))
23. user591603_neterpenie 26.04.17 17:39 Сейчас в теме
(22)

вот ))

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Объект.Статус=ПредопределенноеЗначение("Перечисление.СтатусыПланов.НаУтверждении");
	
	Элементы.ПериодНачисления.РежимВыбораИзСписка=Истина;
	
	ТекГод=Формат(Число(ГОД(Объект.Дата)),"ЧГ=0");
	
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Январь "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Февраль "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Март "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Апрель "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Май "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Июнь "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Июль "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Август "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Сентябрь "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Октябрь "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Ноябрь "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Декабрь "+ТекГод);
	
КонецПроцедуры

&НаКлиенте
Процедура ПериодНачисленияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ТекГод=Формат(Число(ГОД(Объект.Дата)),"ЧГ=0");
	
	Элемент.СписокВыбора.Добавить("Январь "+ТекГод);
	Элемент.СписокВыбора.Добавить("Февраль "+ТекГод);
	Элемент.СписокВыбора.Добавить("Март "+ТекГод);
	Элемент.СписокВыбора.Добавить("Апрель "+ТекГод);
	Элемент.СписокВыбора.Добавить("Май "+ТекГод);
	Элемент.СписокВыбора.Добавить("Июнь "+ТекГод);
	Элемент.СписокВыбора.Добавить("Июль "+ТекГод);
	Элемент.СписокВыбора.Добавить("Август "+ТекГод);
	Элемент.СписокВыбора.Добавить("Сентябрь "+ТекГод);
	Элемент.СписокВыбора.Добавить("Октябрь "+ТекГод);
	Элемент.СписокВыбора.Добавить("Ноябрь "+ТекГод);
	Элемент.СписокВыбора.Добавить("Декабрь "+ТекГод);


КонецПроцедуры
Показать


и все.)

настройка реквизита:

24. _Farsh_ 10 26.04.17 17:56 Сейчас в теме
(23)

Все в помойку надо так:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
 Объект.Статус=ПредопределенноеЗначение("Перечисление.СтатусыПланов.НаУтверждении");

	ТекГод=Формат(Число(ГОД(Объект.Дата)),"ЧГ=0");
    
    Элементы.ПериодНачисления.СписокВыбора.Добавить("Январь "+ТекГод);
    Элементы.ПериодНачисления.СписокВыбора.Добавить("Февраль "+ТекГод);
    Элементы.ПериодНачисления.СписокВыбора.Добавить("Март "+ТекГод);
    Элементы.ПериодНачисления.СписокВыбора.Добавить("Апрель "+ТекГод);
    Элементы.ПериодНачисления.СписокВыбора.Добавить("Май "+ТекГод);
    Элементы.ПериодНачисления.СписокВыбора.Добавить("Июнь "+ТекГод);
    Элементы.ПериодНачисления.СписокВыбора.Добавить("Июль "+ТекГод);
    Элементы.ПериодНачисления.СписокВыбора.Добавить("Август "+ТекГод);
    Элементы.ПериодНачисления.СписокВыбора.Добавить("Сентябрь "+ТекГод);
    Элементы.ПериодНачисления.СписокВыбора.Добавить("Октябрь "+ТекГод);
    Элементы.ПериодНачисления.СписокВыбора.Добавить("Ноябрь "+ТекГод);
    Элементы.ПериодНачисления.СписокВыбора.Добавить("Декабрь "+ТекГод);
	
	
	
КонецПроцедуры
Показать


И в свойствах формы Оставить только ПРИ ОТКРЫТИИ
Прикрепленные файлы:
25. user591603_neterpenie 26.04.17 18:05 Сейчас в теме
(24)

пробую примерно так-же сейчас на новом тестовом документе:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	Элементы.ПериодНачисления.РежимВыбораИзСписка=Истина;
	
	ТекГод=Формат(Число(ГОД(Объект.Дата)),"ЧГ=0");
	
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Январь "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Февраль "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Март "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Апрель "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Май "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Июнь "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Июль "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Август "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Сентябрь "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Октябрь "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Ноябрь "+ТекГод);
	Элементы.ПериодНачисления.СписокВыбора.Добавить("Декабрь "+ТекГод);

КонецПроцедуры
Показать


сохраняю-провожу закрываю. В форме списка вроде ок. Но открываю документ - и снова пусто.)))))



какой-то шайтан прямо.)
31. user591603_neterpenie 27.04.17 11:22 Сейчас в теме
уже всю голову себе сломал.(
32. user591603_neterpenie 27.04.17 12:39 Сейчас в теме
И что в итоге - снимаю галочку РежимВыбораИзСписка в палитре свойств реквизита формы, ставлю Отображение кнопки выбора из списка "Да" и в тексте процедуры ПриОткрытии убираю строку Элементы.ПериодНачисления.РежимВыбораИзСписка=Истина.

И, как это ни странно, все работает.))))

Всем спасибо!
sapervodichka; Iva_Irina_Iva; user907457; crash-16; +4 Ответить
33. NikieMSE 13.11.22 16:23 Сейчас в теме
Если значение не входит в список выбора, то при открытии формы в поле ввода оно будет пустым. При создании на сервере тоже нужно вызвать заполнение списка выбора.
parasite12; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот