Имя: Пароль:
1C
1С v8
Форма списка справочника
,
0 Riko669
 
16.01.17
13:59
День добрый! Подскажите пожалуйста, что не так? У меня есть справочник с формой списка, на этой форме есть поле надписи "Задолжность", мне нужно чтобы при выборе пациента (одним щелчком по пациенту) в этом поле надписи выводилась его задолжность. Подскажите кто-нибудь, что я не так делаю?

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

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

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

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

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

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

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

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

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

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

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

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

Пока Выборка.Следующий() Цикл
Пациент = Выборка.Пациент;
КонецЦикла;
Возврат Пациент;
КонецФункции
1 ВРедная
 
16.01.17
14:06
Зачем попытка - исключение на ровном месте?
В чем заключается проблема?
2 Riko669
 
16.01.17
14:08
Попытку уже убрала только что)
проблема заключается в том, что не выводится задолжность в поле надписи. Прошлась отладчиком, ошибок никаких не выдает
3 Остап Сулейманович
 
16.01.17
14:16
(0) Вангую.
Вот это вот : РегистрНакопления.ОплатыПриемов есть регистр оборотов, а не остатков.
4 Riko669
 
16.01.17
14:21
РегистрНакопления.ОплатыПриемов - остатки.
Нужно чтобы был обороты, я правильно поняла?
5 shamannk
 
16.01.17
14:23
(4) В консоли вначале глянте че он вам выдает.
6 Остап Сулейманович
 
16.01.17
14:26
(4) Нет. Если остатки - тогда все нормально. За одним исключением. Движения туда должны писаться как приход так и расход.
7 Riko669
 
16.01.17
14:28
(6) Да, пишется расход и приход
8 Riko669
 
16.01.17
14:30
(5) Вот сейчас я точно запаролась на счет консоли. Не совсем вас поняла в данный момент, т.к. с консолью я не сталкивалась ни разу. В 1с полтора месяца. Такие дела о_О
9 shamannk
 
16.01.17
14:37
(8) Есть такая обработка "Консоль запросов" которая позволяет выполнить запрос в режиме предприятия и сразу посмотреть результат.
10 1dvd
 
16.01.17
14:40
Мне кажется, что функция ПациентВПриеме не работает так как надо
11 Riko669
 
16.01.17
14:42
(9) Хорошо, поняла, попробую покопаться с этим. (10) Думаете дело в последней функции "ПациентВПриеме"?
12 1dvd
 
16.01.17
14:43
(11) У тебя в Элементы.Наименование что?
13 Riko669
 
16.01.17
14:47
(12) Эм..вот за это извиняюсь, чуть ранее не совсем корректно написала вот эту часть "Запрос.УстановитьПараметр("Ссылка", Элементы.Наименование);" в других местах поменяла, а здесь не увидела и пропустила. Так что в целом Элементы.Наименование - это ничего
14 1dvd
 
16.01.17
14:48
(13) тебе надо в запрос передать ссылку на документ ПриемСтоматолога
15 Riko669
 
16.01.17
14:49
(14) Хорошо, сделаю
16 1dvd
 
16.01.17
14:51
(15) Дико извиняюсь, конечно, но, разве это не форма списка справочника пациентов?
17 Riko669
 
16.01.17
14:52
(16) Да, все верно. Я в первом сообщении указала, что это справочник с формой списка
18 1dvd
 
16.01.17
14:58
(16) Зачем тогда искать пациента через док стоматолога, если он вот он?
19 Riko669
 
16.01.17
15:00
(18) Как тогда к нему обратиться? Все равно тот же запрос, только не к этому документу или как-то иначе?
20 1dvd
 
16.01.17
15:13
(19) блин, давно не работал с управляемыми формами, но там что-то типа Элементы.Список.ТекущиеДанные.Ссылка вернёт ссылку на элемент справочника
21 Riko669
 
16.01.17
15:20
(20) Почитаю по больше на эту тему, спасибо
22 Riko669
 
17.01.17
11:50
День добрый. Я все по этой же теме, в общем внесла некоторые изменения, прохожусь отладчиком и вылетает постоянно именно на строке "Если Элементы.Список.ТекущиеДанные.Задолжность = Неопределено Тогда" (Процедура СписокПриАктивизацииСтроки(Элемент)).

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

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

А при открытии "Локальные переменные" указывает "Переменная" (Элемент), "Значение" (ТаблицаФормы), Тип(ТаблицаФормы).
23 ВРедная
 
17.01.17
13:03
Что значит "вылетает" и "останавливает"?
24 famnam
 
17.01.17
13:06
В процедура ПриАктивацииСтроки серверный вызов запрещен. Делайте через ПодключитьОбработчикОжидания
25 Riko669
 
18.01.17
11:03
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
    
    ТекПациент = Элементы.Список.ТекущаяСтрока;
        Если ТекПациент = Неопределено Тогда
            Возврат;
        КонецЕсли;
    
    СуммаЗадолженности = ПолучитьСуммуЗадолженностиПациента(ТекПациент);
    
    Если СуммаЗадолженности = 0 Тогда
        Элементы.Задолженность.ЦветТекстаЗаголовка = WebЦвета.Синий;
        Элементы.Задолженность.Заголовок  = "У пациента нет задолженности";
    ИначеЕсли СуммаЗадолженности > 0 Тогда
        Элементы.Задолженность.ЦветТекстаЗаголовка = WebЦвета.Красный;
        Элементы.Задолженность.Заголовок  = "Задолженность пациента составляет: "+СуммаЗадолженности;
    ИначеЕсли СуммаЗадолженности < 0 Тогда
        Элементы.Задолженность.ЦветТекстаЗаголовка = WebЦвета.Синий;
        Элементы.Задолженность.Заголовок  = "Задолженность перед пациентом составляет: "+СуммаЗадолженности*(-1);
    КонецЕсли;
    

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

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

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

Если добавляю "Константы.ОсновнаяВалюта.Получить();" Вылетает ошибка "Переменная не определена (Константы)"
26 ВРедная
 
18.01.17
15:04
(25) на клиенте констант нет. Получи ее на сервере и храни в переменной формы. Потом на клиенте получай и показывай.
27 Riko669
 
19.01.17
09:45
(26) Хорошо, поняла. Спасибо
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн