День добрый! Подскажите пожалуйста, что не так? У меня есть справочник с формой списка, на этой форме есть поле надписи "Задолжность", мне нужно чтобы при выборе пациента (одним щелчком по пациенту) в этом поле надписи выводилась его задолжность. Подскажите кто-нибудь, что я не так делаю?

```1c
    &НаКлиенте
    Процедура СписокПриАктивизацииСтроки(Элемент)

    Если Элементы.Список.ТекущиеДанные.Задолжность = Неопределено Тогда
    ЗаполнитьРеквизитЗадолженностьПациента();
    КонецЕсли;

    КонецПроцедуры

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

    Запрос.УстановитьПараметр("Пациент", ПациентВПриеме(Элементы.Список.ТекущиеДанные.Задолжность));

    Результат = Запрос.Выполнить();

    Выборка = Результат.Выбрать();
    Сумма = 0;
    Пока Выборка.Следующий() Цикл
    Сумма = Сумма + Выборка.СуммаКонечныйОстаток;
    КонецЦикла;
    Если Сумма = 0 Тогда Элементы.ЗадолженностьПациента.ЦветТекста = WebЦвета.Синий;
    Элементы.Список.ТекущиеДанные.Задолжность = "У пациента нет задолженности";
    ИначеЕсли Сумма > 0 Тогда Элементы.ЗадолженностьПациента.ЦветТекста = WebЦвета.Красный;
    Элементы.Список.ТекущиеДанные.Задолжность = "Задолженность пациента составляет: "+Сумма+" "+Константы.ОсновнаяВалюта.Получить();
    ИначеЕсли Сумма < 0 Тогда Элементы.ЗадолженностьПациента.ЦветТекста = WebЦвета.Синий;
    Элементы.Список.ТекущиеДанные.Задолжность = "Задолженность перед пациентом составляет: "+Сумма*-1+" "+Константы.ОсновнаяВалюта.Получить();
    КонецЕсли;
    Исключение;
    КонецПопытки;
    КонецЕсли;

    КонецПроцедуры

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

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

    Результат = Запрос.Выполнить();

    Выборка = Результат.Выбрать();

    Пока Выборка.Следующий() Цикл
    Пациент = Выборка.Пациент;
    КонецЦикла;
    Возврат Пациент;
    КонецФункции
```
---
Вот так должно быть то, что хотели сделать:

```1c
    &НаКлиенте
    Процедура СписокПриАктивизацииСтроки(Элемент)

    ТекПациент = Элементы.Список.ТекущаяСтрока;
    Если ТекПациент = Неопределено Тогда
    Возврат;
    КонецЕсли;

    СуммаЗадолженности = ПолучитьСуммуЗадолженностиПациента(ТекПациент);

    Если СуммаЗадолженности = 0 Тогда
    Элементы.Задолженность.ЦветТекстаЗаголовка = WebЦвета.Синий;
    Элементы.Задолженность.Заголовок = "У пациента нет задолженности";
    ИначеЕсли СуммаЗадолженности > 0 Тогда
    Элементы.Задолженность.ЦветТекстаЗаголовка = WebЦвета.Красный;
    Элементы.Задолженность.Заголовок = "Задолженность пациента составляет: "+СуммаЗадолженности;
    ИначеЕсли СуммаЗадолженности < 0 Тогда
    Элементы.Задолженность.ЦветТекстаЗаголовка = WebЦвета.Синий;
    Элементы.Задолженность.Заголовок = "Задолженность перед пациентом составляет: "+СуммаЗадолженности*(-1);
    КонецЕсли;

    КонецПроцедуры

    &НаСервере
    Функция ПолучитьСуммуЗадолженностиПациента(СсылкаНаПациента)

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

    Результат = Запрос.Выполнить();
    Если Результат.Пустой() Тогда
    Возврат 0;
    КонецЕсли;

    Выборка = Результат.Выбрать();
    Выборка.Следующий();

    Возврат Выборка.СуммаОстаток;

    КонецФункции
```
---
как-то сумбурно, но в общем примерно так и надо делать. Попытку надо убрать (она не нужна там вообще в принципе) и отладить.
---
Хорошо, попытку уберу сейчас
---
День добрый. Я все по этой же теме, в общем внесла некоторые изменения, прохожусь отладчиком и вылетает постоянно именно на строке "Если Элементы.Список.ТекущиеДанные.Задолжность = Неопределено Тогда" (Процедура СписокПриАктивизацииСтроки(Элемент)).

Ошибку не выдает, но останавливает именно здесь.

Открываю "Стек вызовов" пишет (Справочник.Пациенты.Форма.ФормаСписка.Форма.СписокПриАктивизацииСтроки(Элемент = ТаблицаФормы) 34 Тонкий клиент:Администратор (4), ghgh:1562)

А при открытии "Локальные переменные" указывает "Переменная" (Элемент), "Значение" (ТаблицаФормы), Тип(ТаблицаФормы).
---
Ошибку не выдает, но останавливает именно здесь.
Снимите/уберите точку остановки )))))
---
Сняла))
---
РегистрНакопления.ОплатыПриемов.ОстаткиИОбороты а где дата, на которую выбирается задолженность?
---
а вот кстати, да, про дату я и не вспомнила
---
мне совсем не понятно, зачем получать отдельно Пациента в запросе? Он ведь есть в ТЧ?
Поле Задолженность это не отдельное поле, а колонка динамического списка?
Тогда зачем ее получать обработчиком ПриАктивизацииСтроки? Проще сразу в динамическом списке получать.
Оформление цветом и надписью. Это все делается УО того же динамического списка.

Я пока вижу попытку сделать на УФ то, что делали на ОФ. Это не оптимально в принципе.
---
Возможно вы правы, но с 1с я только полтора месяца и мне еще сложно с некоторыми вещами.
---
Очень плохо что вы учитесь сразу на продуктовой базе, вот честно если, мне даже жалко эту стоматологию и того человека, что будет заниматься поддержкой базы после вас
---
Я и сама это понимаю, стараюсь делать все возможное чтобы все было более понятно и корректно.
---
Спасибо большое еще раз за помощь! Все работает. Очень благодарна)
---
А в чем конкретно ошибка ? Отладчиком пробовала поройтись ?
---
да пробовала, в том и дело, что ошибки вообще не выдает никакой, но поле надписи не заполняется
---
Я думаю еще не хватает вызвать функцию ОповеститьОбИзменении() - можно почитать о ней в синтаксис-помощнике
---
Хорошо, учту, прочту, добавлю. Какие еще изменения, скажем так, нужно внести? Или пока достаточно того, что предложили выше?
---
Можно вместо "Пока Цикл КонецЦикла" в данном случае использовать "Если Тогда КонецЕсли" и вот это: Если Сумма = 0 Тогда Элементы.ЗадолженностьПациента.ЦветТекста = WebЦвета.Синий;
Элементы.Список.ТекущиеДанные.Задолжность = "У пациента нет задолженности";
ИначеЕсли Сумма > 0 Тогда Элементы.ЗадолженностьПациента.ЦветТекста = WebЦвета.Красный;
Элементы.Список.ТекущиеДанные.Задолжность = "Задолженность пациента составляет: "+Сумма+" "+Константы.ОсновнаяВалюта.Получить();
ИначеЕсли Сумма < 0 Тогда Элементы.ЗадолженностьПациента.ЦветТекста = WebЦвета.Синий;
Элементы.Список.ТекущиеДанные.Задолжность = "Задолженность перед пациентом составляет: "+Сумма*-1+" "+Константы.ОсновнаяВалюта.Получить();
обрабатывать на клиенте. Т.е. с сервера возвращаете только Сумму.
---
Попробую тоже, хорошо
---
и валюту -:)))
---
Мм, да.
Я думала ее добавить, сначала добавила, а потом чет запаролась и удалила ее нафиг))
---
Хочу уточнить, эту часть, которую вы отметили, ее сделать на клиенте процедурой, правильно или нет?
---
а чем её ещё можно сделать? Функцией? В данном случае - без разницы.
---
Ладно, хорошо.
---
Добавила обратно валюту
---
Изменила последний запрос

```1c
    &НаСервере
    Функция ПациентВПриеме(Прием)

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

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

    Результат = Запрос.Выполнить();

    Выборка = Результат.Выбрать();

    Пока Выборка.Следующий() Цикл
    Пациент = Выборка.Наименование;
    КонецЦикла;
    Возврат Пациент;
    КонецФункции
```

Но все равно результата никакого, не отображается)
---
Если честно, какая-то бредовая функция, надо как-то так:

```1c
    &НаКлиенте
    Процедура ПриАктивацииСтроки()

    ТекСтрока = Элементы.Список.ТекущаяСтрока;
    Если ТекСтрока = Неопределено Тогда
    Возврат;
    КонецЕсли;

    ПациентВПриеме(ТекСтрока.Ссылка);

    КонецПроцедуры

    &НаСервере
    Функция ПациентВПриеме(СсылкаНаОбъект)

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |Пациенты.Наименование
    |ИЗ
    |Справочник.Пациенты КАК Пациенты
    |ГДЕ
    |Пациенты.Ссылка = &Ссылка";

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

    Результат = Запрос.Выполнить();
    Если Результат.Пустой() Тогда
    Возврат ";
    КонецЕсли;

    Выборка = Результат.Выбрать();
    Выборка.Следующий();

    Возврат Выборка.Наименование;

    КонецФункции
```
---
Жалуется на отсутствие ссылки
{Справочник.Пациенты.Форма.ФормаСписка.Форма(44)}: Поле объекта не обнаружено (Ссылка)
 ПациентВПриеме(ТекСтрока.Ссылка);
---
Вот так должно быть то, что хотели сделать:

```1c
    &НаКлиенте
    Процедура СписокПриАктивизацииСтроки(Элемент)

    ТекПациент = Элементы.Список.ТекущаяСтрока;
    Если ТекПациент = Неопределено Тогда
    Возврат;
    КонецЕсли;

    СуммаЗадолженности = ПолучитьСуммуЗадолженностиПациента(ТекПациент);

    Если СуммаЗадолженности = 0 Тогда
    Элементы.Задолженность.ЦветТекстаЗаголовка = WebЦвета.Синий;
    Элементы.Задолженность.Заголовок = "У пациента нет задолженности";
    ИначеЕсли СуммаЗадолженности > 0 Тогда
    Элементы.Задолженность.ЦветТекстаЗаголовка = WebЦвета.Красный;
    Элементы.Задолженность.Заголовок = "Задолженность пациента составляет: "+СуммаЗадолженности;
    ИначеЕсли СуммаЗадолженности < 0 Тогда
    Элементы.Задолженность.ЦветТекстаЗаголовка = WebЦвета.Синий;
    Элементы.Задолженность.Заголовок = "Задолженность перед пациентом составляет: "+СуммаЗадолженности*(-1);
    КонецЕсли;

    КонецПроцедуры

    &НаСервере
    Функция ПолучитьСуммуЗадолженностиПациента(СсылкаНаПациента)

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

    Результат = Запрос.Выполнить();
    Если Результат.Пустой() Тогда
    Возврат 0;
    КонецЕсли;

    Выборка = Результат.Выбрать();
    Выборка.Следующий();

    Возврат Выборка.СуммаОстаток;

    КонецФункции
```