Данные для реквизита на форме

1. user2084638 11.05.24 21:18 Сейчас в теме
Есть документ в котором врач заполняет данные. Есть различные типы услуг. Необходимо чтобы при выборе врача выбирались только соответствующие его должности услуги. Я расписал под каждую должность услуги в регистре сведений и пробовал при помощи запроса вывести данные, но потом узнал что это глупость, так как документ не создан, его нет в базе. Как я могу в реквизит "Услуга" на создаваемой форме передать определенные услуги врача?
По теме из базы знаний
Найденные решения
24. FUXEARA 13.05.24 17:23 Сейчас в теме

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


&НаКлиенте
Процедура УслугаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;    
   
        ОписаниеЗакрытия     = Новый ОписаниеОповещения("ОбработатьВыбор",ЭтотОбъект); 
        ФормаВыбора = ОткрытьФорму("Справочник.Услуги.ФормаВыбора",,ЭтаФорма,,,,ОписаниеЗакрытия,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
  
    ЭлементыОтбора = ФормаВыбора.Список.КомпоновщикНастроек.ФиксированныеНастройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

    ЭлементыОтбора.ЛевоеЗначение   = Новый ПолеКомпоновкиДанных("Ссылка"); 
    ЭлементыОтбора.ВидСравнения    = ВидСравненияКомпоновкиДанных.ВСписке;
    ЭлементыОтбора.ПравоеЗначение = ТвойСписок;  
            
            
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьВыбор(Результат,Параметры) Экспорт
    
     Объект.Услуга = Результат;
     
 КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. FUXEARA 11.05.24 22:22 Сейчас в теме
(1)запрос не глупость, а не корректный. Надо не справочник соединять , а регистр сведений должности по врачам, с регистром сведений услуги по должностям. В запрос срез последних рег сведений должности врача передавать параметр ФИО врача на дату документа и на эту же дату левым соединением получать срез последних по регистру услуг и соединять их по должности. Создать реквизит услуга с типом справочник услуг и в событии поля формы, кажется начало выбора(могу ошибиться, надо по экспериментировать), если вариант с выпадающим списком не подходит, в форме выбора этого справочника, установить отбор по этому списку что получен из запроса. Тут два варианта или подправить произвольный запрос формы выбора или установить сам отбор списка в присозданиинасервере.
3. FUXEARA 11.05.24 22:58 Сейчас в теме
Распишу если правильно понял документ твой.
Есть поле врач и есть поле услуга, если тебе надо, чтоб при выборе ФИО врача , в поле выбора услуги, открывался справочник только с услугами этого врача, то в событиях поля услуга, при начале выбора, создаёшь запрос, выбрать из рег сведений должности по врачам срез последних, параметром отбора будут дата документа и ФИО врача , соединяет левым соединением с услугами, также срез последних на дату документа. Первая часть сделана. Потом результат запроса переводишь или в список значений или в массив значений , все зависит от варианта , который ты выберешь в форме выбора справочника услуг. Поскольку после того как отработает событие при начале выбора, откроется форма выбора этого справочника. Там или допиливаешь произвольный запрос и отбираешь по услугам в (&массиве) который ты передашь из документа на форму выбора, через параметры(тут надо почитать материал как передать параметр в произвольный запрос динамического списка) или при создании на сервере динамическийсписок.отбор и тип сравнения в списке, в интернете полно материала, как при открытии наложить отбор в динамическом списке формы выбора. Все задача решена.
5. user2084638 12.05.24 21:13 Сейчас в теме
Я получил список значений который необходим запросом. И не могу понять как этот список перенести на реквизит "Услуги". Этот реквизит у меня с типом справочник СправочникСсылка.Услуги. Где этот динамический список должен быть?
6. FUXEARA 12.05.24 22:21 Сейчас в теме
(5)вот когда кликаешь в поле услуга, у тебя открывается справочник услуги, это и есть динамический список, который надо отфильтровать. Тебе твой список, надо передать в параметры, вот тебе надо тоже самое сделать
https://forum.infostart.ru/forum9/topic313097/
Используй открытьформу выбора и параметры передаются в виде структуры. А в самой форме выбора в при создании на сервере получаешь из параметров этот список, я кстати не помню, можно ли список туда передать, но попробуй, по идее должно, если нет, передай массив, а в при создании на сервере создашь список. Данные в этой процедуре, получишь параметры.... В отладчике напиши параметры и увидишь содержание и лепи свой отбор или передавай массив в виде параметра в произвольный запрос и подправь сам запрос к динамическому списку
7. user2084638 13.05.24 14:30 Сейчас в теме
(6)Хорошо, смотрите, когда я выбираю событие при НачалоВыбора, в нем я не могу создать запрос. Сам список я с нужными значениями с помощью запроса с параметром Врач я получаю при изменении Врача.
Как этот список который я получил передать в параметры? Я окончательно запутался.
Прикрепленные файлы:
8. FUXEARA 13.05.24 14:37 Сейчас в теме
(7) а зачем его делать при изменении врача, там это не нужно, поскольку выбор услуги может и не произойти? Сделай функцию на сервере и туда вложи этот запрос и запроси этот список из начало выбора и функция тебе его вернёт, а дальше передавай в форму выбора. Потом когда сделаешь, я подскажу что исправить в запросе, чтоб сейчас не путать тебя) используй функцию на серверебезконтекста, а не на сервере и передай врача так список услуг =ЗапросСпискаУслуг(объект.врач)

&НаСервереБезКонтекста
Функция ЗапросСпискаУслуг(ВыбВрач)
....
....
Запрос.УстановитьПараметр("Врач",ВыбВрач)
9. user2084638 13.05.24 15:20 Сейчас в теме
(8)Вот так?
Прикрепленные файлы:
10. FUXEARA 13.05.24 15:36 Сейчас в теме
(9) в функциях надо всегда писать Возврат Список; и что возвращаешь!
13. user2084638 13.05.24 15:48 Сейчас в теме
(10)Исправил
Прикрепленные файлы:
4. FUXEARA 12.05.24 08:57 Сейчас в теме
Есть ещё третий вариант, точнее это один из двух ранее предложенных, но чуть измененный , надо тестить. Передать в произвольный запрос формы выбора ,должность полученную по ФИО, должность можно через получить последнее. Потом открыть программно форму выбора справочника услуги и передать туда через параметры должность и в произвольном запросе правым соединением справочника с регистром услуг, срез последних, отобрать услуги по должности.
11. FUXEARA 13.05.24 15:42 Сейчас в теме
(9) параметры не так передаются
Параметры = новый Структура;
Параметры.Вставить("СписокУслуг",СписокУслуг)
На счёт формы выбора, я ее имел ввиду не также , а этот способ как пример.
12. FUXEARA 13.05.24 15:43 Сейчас в теме
(11) держи
&НаКлиенте
Процедура МастерНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
    СтандартнаяОбработка = Ложь;	
	
	Если Объект.Филиал.Пустая() или Объект.КатегорияУслуги.Пустая() Тогда 
		ПоказатьПредупреждение(,"Поля ""Филиал"" и ""Категория услуги"" должны быть заполнены",,"Важное!!!");
		Возврат;
	Иначе
	    ПараметрыДанных      = Новый Структура("ДатаВизита,ВремяВизита,ФилиалСотрудника,КатегорияУслуги",ДатаВизита,ВремяВизита,Объект.Филиал,Объект.КатегорияУслуги);
	    ОписаниеЗакрытия     = Новый ОписаниеОповещения("ОбработатьВыбор",ЭтотОбъект); 
	    ФормаВыбора = ОткрытьФорму("Справочник.Сотрудники.ФормаВыбора",ПараметрыДанных,ЭтаФорма,,,,ОписаниеЗакрытия,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	КонецЕсли;	
	
			
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьВыбор(Результат,Параметры) Экспорт
	
	 Объект.Мастер = Результат;
	 
 КонецПроцедуры
Показать
14. user2084638 13.05.24 16:03 Сейчас в теме
(12)
Прикрепленные файлы:
15. FUXEARA 13.05.24 16:10 Сейчас в теме
(12) попробуй может пройдет, если будет ошибка то скорее всего где ссылка и всписке, там надо по эксперемнитировать, может содержит вместо всписке. я тебе сделал без параметров и сразу с отбором
&НаКлиенте
Процедура ВрачНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)    
       СтандартнаяОбработка = Ложь;                
        ОписаниеЗакрытия     = Новый ОписаниеОповещения("ОбработатьВыбор",ЭтотОбъект); 
        ФормаВыбора = ОткрытьФорму("Справочник.Услуги.ФормаВыбора",,ЭтаФорма,,,,ОписаниеЗакрытия,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

   	ЭлементыОтбора = ФормаВыбора.Список.КомпоновщикНастроек.ФиксированныеНастройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементыОтбора.ЛевоеЗначение   = Новый ПолеКомпоновкиДанных("Ссылка"); 
	ЭлементыОтбора.ВидСравнения    = ВидСравненияКомпоновкиДанных.ВСписке; Важно, должен быть именно список значений , хотя может и массив твой прокатит
	ЭлементыОтбора.ПравоеЗначение = ТвойСписок;  
            
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьВыбор(Результат,Параметры) Экспорт
    
     Объект.Врач= Результат;
     
 КонецПроцедуры
Показать
16. user2084638 13.05.24 16:17 Сейчас в теме
17. FUXEARA 13.05.24 16:18 Сейчас в теме
(16)ты массив перевел в список значений?
18. FUXEARA 13.05.24 16:25 Сейчас в теме
(16) в функции переделай
СписокЗначений = Новый СписокЗначений;
	Выборка = Результат.Выбрать();
	Пока Выборка.Следующий Цикл
	    СписокЗначений.Добавить(Выборка.Услуга.Ссылка,Строка(Выборка.Услуга)); 
	КонецЦикла;
	Возврат СписокЗначений;
19. user2084638 13.05.24 16:32 Сейчас в теме
(18)Поменял, пробовал с вашей программой и тоже не работает(
Прикрепленные файлы:
20. FUXEARA 13.05.24 16:34 Сейчас в теме
21. user2084638 13.05.24 16:51 Сейчас в теме
(20)
Прикрепленные файлы:
22. FUXEARA 13.05.24 16:55 Сейчас в теме
(21) выборка.следующий()

Ну, ты поглядывай на синтаксис, я тебе пишу в спешке и параллельно своим занимаюсь. Проверяй на ошибки!
23. FUXEARA 13.05.24 17:10 Сейчас в теме
(21) ещё увидел косяк. Объект.услуга , а не объект.врач = результат. В описании оповещения. Глянул , что сделал. Там мой вариант кода, надо было не к врачу а к услуге. То что у тебя врачначаловыбора, перекинь в услугуначаловыбора.
24. FUXEARA 13.05.24 17:23 Сейчас в теме

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


&НаКлиенте
Процедура УслугаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;    
   
        ОписаниеЗакрытия     = Новый ОписаниеОповещения("ОбработатьВыбор",ЭтотОбъект); 
        ФормаВыбора = ОткрытьФорму("Справочник.Услуги.ФормаВыбора",,ЭтаФорма,,,,ОписаниеЗакрытия,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
  
    ЭлементыОтбора = ФормаВыбора.Список.КомпоновщикНастроек.ФиксированныеНастройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

    ЭлементыОтбора.ЛевоеЗначение   = Новый ПолеКомпоновкиДанных("Ссылка"); 
    ЭлементыОтбора.ВидСравнения    = ВидСравненияКомпоновкиДанных.ВСписке;
    ЭлементыОтбора.ПравоеЗначение = ТвойСписок;  
            
            
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьВыбор(Результат,Параметры) Экспорт
    
     Объект.Услуга = Результат;
     
 КонецПроцедуры
Показать
25. user2084638 13.05.24 17:27 Сейчас в теме
(24)Это победа, вы лучший. Благодарю что помогли с этим. Мне осталось только понять как это можно сделать через открыть форму. Проверял, что список приходит верный, видимо в обозначении параметра ошибка. Еще раз благодарю. Это круто. Вы мощь.
26. FUXEARA 13.05.24 17:29 Сейчас в теме
(25) так я не понял, справочник открылся с отбором или нет? Что ещё там тебе понять надо?
27. user2084638 13.05.24 17:32 Сейчас в теме
(26)При нажатии в документе на поле услуга, появляется список из всех выбранных ранее, и при нажатии показать все, появляется справочник с отбором)
28. FUXEARA 13.05.24 17:37 Сейчас в теме
(27)алилуя))) ну, эту историю ранее открытых можно убрать и сделать только на кнопку открытия. Выпадающий список тоже можно создать, при очень сильном желании. Но я говорил, там надо запрос подправить. В запрос надо передавать , помимо врача и дату документа и отбирать срез последних по дате тоже. Вот если надо будет что то исправить в старом документе, нажмёшь услугу и у тебя о берутся услуги по срезу на текущую дату, а надо на дату документа!!!
Оставьте свое сообщение

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