День добрый! Подскажите пожалуйста, что не так? У меня есть справочник с формой списка, на этой форме есть поле надписи "Задолжность", мне нужно чтобы при выборе пациента (одним щелчком по пациенту) в этом поле надписи выводилась его задолжность. Подскажите кто-нибудь, что я не так делаю?
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
Если Элементы.Список.ТекущиеДанные.Задолжность = Неопределено Тогда
ЗаполнитьРеквизитЗадолженностьПациента();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьРеквизитЗадолженностьПациента()
Если Элементы.Список.ТекущиеДанные.Задолжность = Неопределено Тогда
Попытка
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОплатыПриемовОстаткиИОбороты.СуммаКонечныйОстаток
|ИЗ
| РегистрНакопления.ОплатыПриемов.ОстаткиИОбороты(
| ,
| ,
| ,
| ,
| Прием.Пациент = &Пациент";
Запрос.УстановитьПараметр("Пациент", ПациентВПриеме(Элементы.Список.ТекущиеДанные.Задолжность));
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Сумма = 0;
Пока Выборка.Следующий() Цикл
Сумма = Сумма + Выборка.СуммаКонечныйОстаток;
КонецЦикла;
Если Сумма = 0 Тогда Элементы.ЗадолженностьПациента.ЦветТекста = WebЦвета.Синий;
Элементы.Список.ТекущиеДанные.Задолжность = "У пациента нет задолженности";
ИначеЕсли Сумма > 0 Тогда Элементы.ЗадолженностьПациента.ЦветТекста = WebЦвета.Красный;
Элементы.Список.ТекущиеДанные.Задолжность = "Задолженность пациента составляет: "+Сумма+" "+Константы.ОсновнаяВалюта.Получить();
ИначеЕсли Сумма < 0 Тогда Элементы.ЗадолженностьПациента.ЦветТекста = WebЦвета.Синий;
Элементы.Список.ТекущиеДанные.Задолжность = "Задолженность перед пациентом составляет: "+Сумма*-1+" "+Константы.ОсновнаяВалюта.Получить();
КонецЕсли;
Исключение;
КонецПопытки;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПациентВПриеме(Прием)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПриемСтоматолога.Пациент
|ИЗ
| Документ.ПриемСтоматолога КАК ПриемСтоматолога
|ГДЕ
| ПриемСтоматолога.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Элементы.Наименование);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Пациент = Выборка.Пациент;
КонецЦикла;
Возврат Пациент;
КонецФункции
ПоказатьПо теме из базы знаний
- Непосредственное удаление записей справочника в форме списка
- "Частичное" обновление формы списка
- Фильтрация иерархического справочника по какому-либо условию в форме списка
- Отчет по конфигурации: "Справочники, документы, регистры. Подсчет количества записей и переход в форму списка объекта"
- Управляемая форма списка с данными двух таблиц - иерархического справочника и регистра сведений для мобильной платформы
Найденные решения
(23) Вот так должно быть то, что хотели сделать:
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
ТекПациент = Элементы.Список.ТекущаяСтрока;
Если ТекПациент = Неопределено Тогда
Возврат;
КонецЕсли;
СуммаЗадолженности = ПолучитьСуммуЗадолженностиПациента(ТекПациент);
Если СуммаЗадолженности = 0 Тогда
Элементы.Задолженность.ЦветТекстаЗаголовка = WebЦвета.Синий;
Элементы.Задолженность.Заголовок = "У пациента нет задолженности";
ИначеЕсли СуммаЗадолженности > 0 Тогда
Элементы.Задолженность.ЦветТекстаЗаголовка = WebЦвета.Красный;
Элементы.Задолженность.Заголовок = "Задолженность пациента составляет: "+СуммаЗадолженности;
ИначеЕсли СуммаЗадолженности < 0 Тогда
Элементы.Задолженность.ЦветТекстаЗаголовка = WebЦвета.Синий;
Элементы.Задолженность.Заголовок = "Задолженность перед пациентом составляет: "+СуммаЗадолженности*(-1);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьСуммуЗадолженностиПациента(СсылкаНаПациента)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОплатыПриемовОстатки.СуммаОстаток КАК СуммаОстаток
|ИЗ
| РегистрНакопления.ОплатыПриемов.Остатки(, Прием.Пациент = &СсылкаНаПациента) КАК ОплатыПриемовОстатки";
Запрос.УстановитьПараметр("СсылкаНаПациента", СсылкаНаПациента);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат 0;
КонецЕсли;
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.СуммаОстаток;
КонецФункции
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
День добрый. Я все по этой же теме, в общем внесла некоторые изменения, прохожусь отладчиком и вылетает постоянно именно на строке "Если Элементы.Список.ТекущиеДанные.Задолжность = Неопределено Тогда" (Процедура СписокПриАктивизацииСтроки(Элемент)).
Ошибку не выдает, но останавливает именно здесь.
Открываю "Стек вызовов" пишет (Справочник.Пациенты.Форма.ФормаСписка.Форма.СписокПриАктивизацииСтроки(Элемент = ТаблицаФормы) 34 Тонкий клиент:Администратор (4), ghgh:1562)
А при открытии "Локальные переменные" указывает "Переменная" (Элемент), "Значение" (ТаблицаФормы), Тип(ТаблицаФормы).
Ошибку не выдает, но останавливает именно здесь.
Открываю "Стек вызовов" пишет (Справочник.Пациенты.Форма.ФормаСписка.Форма.СписокПриАктивизацииСтроки(Элемент = ТаблицаФормы) 34 Тонкий клиент:Администратор (4), ghgh:1562)
А при открытии "Локальные переменные" указывает "Переменная" (Элемент), "Значение" (ТаблицаФормы), Тип(ТаблицаФормы).
(1) мне совсем не понятно, зачем получать отдельно Пациента в запросе? Он ведь есть в ТЧ?
Поле Задолженность это не отдельное поле, а колонка динамического списка?
Тогда зачем ее получать обработчиком ПриАктивизацииСтроки? Проще сразу в динамическом списке получать.
Оформление цветом и надписью. Это все делается УО того же динамического списка.
Я пока вижу попытку сделать на УФ то, что делали на ОФ. Это не оптимально в принципе.
Поле Задолженность это не отдельное поле, а колонка динамического списка?
Тогда зачем ее получать обработчиком ПриАктивизацииСтроки? Проще сразу в динамическом списке получать.
Оформление цветом и надписью. Это все делается УО того же динамического списка.
Я пока вижу попытку сделать на УФ то, что делали на ОФ. Это не оптимально в принципе.
(9) Можно вместо "Пока Цикл КонецЦикла" в данном случае использовать "Если Тогда КонецЕсли" и вот это:
обрабатывать на клиенте. Т.е. с сервера возвращаете только Сумму.
Если Сумма = 0 Тогда Элементы.ЗадолженностьПациента.ЦветТекста = WebЦвета.Синий;
Элементы.Список.ТекущиеДанные.Задолжность = "У пациента нет задолженности";
ИначеЕсли Сумма > 0 Тогда Элементы.ЗадолженностьПациента.ЦветТекста = WebЦвета.Красный;
Элементы.Список.ТекущиеДанные.Задолжность = "Задолженность пациента составляет: "+Сумма+" "+Константы.ОсновнаяВалюта.Получить();
ИначеЕсли Сумма < 0 Тогда Элементы.ЗадолженностьПациента.ЦветТекста = WebЦвета.Синий;
Элементы.Список.ТекущиеДанные.Задолжность = "Задолженность перед пациентом составляет: "+Сумма*-1+" "+Константы.ОсновнаяВалюта.Получить();
Элементы.Список.ТекущиеДанные.Задолжность = "У пациента нет задолженности";
ИначеЕсли Сумма > 0 Тогда Элементы.ЗадолженностьПациента.ЦветТекста = WebЦвета.Красный;
Элементы.Список.ТекущиеДанные.Задолжность = "Задолженность пациента составляет: "+Сумма+" "+Константы.ОсновнаяВалюта.Получить();
ИначеЕсли Сумма < 0 Тогда Элементы.ЗадолженностьПациента.ЦветТекста = WebЦвета.Синий;
Элементы.Список.ТекущиеДанные.Задолжность = "Задолженность перед пациентом составляет: "+Сумма*-1+" "+Константы.ОсновнаяВалюта.Получить();
обрабатывать на клиенте. Т.е. с сервера возвращаете только Сумму.
Изменила последний запрос
Но все равно результата никакого, не отображается)
&НаСервере
Функция ПациентВПриеме(Прием)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|Пациенты.Наименование
|ИЗ
|Справочник.Пациенты КАК Пациенты
|ГДЕ
|Пациенты.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Элементы.Список.ТекущиеДанные.Ссылка);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Пациент = Выборка.Наименование;
КонецЦикла;
Возврат Пациент;
КонецФункции
ПоказатьНо все равно результата никакого, не отображается)
(21) Если честно, какая-то бредовая функция, надо как-то так:
&НаКлиенте
Процедура ПриАктивацииСтроки()
ТекСтрока = Элементы.Список.ТекущаяСтрока;
Если ТекСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
ПациентВПриеме(ТекСтрока.Ссылка);
КонецПроцедуры
&НаСервере
Функция ПациентВПриеме(СсылкаНаОбъект)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
|Пациенты.Наименование
|ИЗ
|Справочник.Пациенты КАК Пациенты
|ГДЕ
|Пациенты.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат "";
КонецЕсли;
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.Наименование;
КонецФункции
Показать
(23) Вот так должно быть то, что хотели сделать:
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
ТекПациент = Элементы.Список.ТекущаяСтрока;
Если ТекПациент = Неопределено Тогда
Возврат;
КонецЕсли;
СуммаЗадолженности = ПолучитьСуммуЗадолженностиПациента(ТекПациент);
Если СуммаЗадолженности = 0 Тогда
Элементы.Задолженность.ЦветТекстаЗаголовка = WebЦвета.Синий;
Элементы.Задолженность.Заголовок = "У пациента нет задолженности";
ИначеЕсли СуммаЗадолженности > 0 Тогда
Элементы.Задолженность.ЦветТекстаЗаголовка = WebЦвета.Красный;
Элементы.Задолженность.Заголовок = "Задолженность пациента составляет: "+СуммаЗадолженности;
ИначеЕсли СуммаЗадолженности < 0 Тогда
Элементы.Задолженность.ЦветТекстаЗаголовка = WebЦвета.Синий;
Элементы.Задолженность.Заголовок = "Задолженность перед пациентом составляет: "+СуммаЗадолженности*(-1);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьСуммуЗадолженностиПациента(СсылкаНаПациента)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОплатыПриемовОстатки.СуммаОстаток КАК СуммаОстаток
|ИЗ
| РегистрНакопления.ОплатыПриемов.Остатки(, Прием.Пациент = &СсылкаНаПациента) КАК ОплатыПриемовОстатки";
Запрос.УстановитьПараметр("СсылкаНаПациента", СсылкаНаПациента);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат 0;
КонецЕсли;
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.СуммаОстаток;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот