|
Автоматическое подставление даты в табличную часть документа | ☑ | ||
---|---|---|---|---|
0
Korzh
29.05.23
✎
22:57
|
Добрый день.Подскажите как сделать правильно, только учусь.
Есть документ ПродажаАбонемента с реквизитом ДатаОкончанияАбонемента и документ ЗаписиНаТренировки с реквизитом одноименным в табличной части Клиенты.Нужно осуществить автоматическую подстановку даты окончания абонемента из ПродажаАбонемента в ЗаписиНаТренировки при выборе ФИО клиента в табличной части ЗаписиНаТренировки, а также вывод информации в поле надписи если дата окончания меньше текущей даты.Сделал через Регистр сведений, чтобы подцеплялись актуальные даты абонементов. В отладке выводит ошибку Метод объекта не обнаружен (ДатаОкончанияАбонемента) {Документ.ЗаписиНаТренировки.Форма.ФормаДокумента.Форма(26)}:ДатаОкончанияАбонемента = Объект.ДатаОкончанияАбонемента(); {Документ.ЗаписиНаТренировки.Форма.ФормаДокумента.Форма(4)}:ЗаполнитьТабличнуюЧасть(); И заполняет даты автоматически(а не при выборе клиента) только проведенных документов после создания Регистра Сведений(что собственно логично ), клиента выбрать не могу. [code] &НаКлиенте Процедура КлиентыПриИзменении(Отказ) ЗаполнитьТабличнуюЧасть(); КонецПроцедуры &НаСервере Процедура ЗаполнитьТабличнуюЧасть() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДанныеОбОкончанииАбонимента.ФИОклиента КАК ФИОклиента, | ДанныеОбОкончанииАбонимента.ДатаОкончанияАбонемента КАК ДатаОкончанияАбонемента |ИЗ | РегистрСведений.ДанныеОбОкончанииАбонимента КАК ДанныеОбОкончанииАбонимента"; РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Для каждого Стр из РезультатЗапроса Цикл НоваяСтрока = Объект.ТабличнаяЧасть.Добавить(); НоваяСтрока.ДатаОкончанияАбонемента = Стр.ДатаОкончанияАбонемента; КонецЦикла ; ТекДата = ТекущаяДата(); ДатаОкончанияАбонемента = Объект.ДатаОкончанияАбонемента(); Если ДатаОкончанияАбонемента < ТекДата тогда Инфо = "Нужно приобрести новый абонемент!"; иначе Инфо = "Дата окончания абонемента = " + ДатаОкончанияАбонемента; КонецЕсли; КонецПроцедуры[/code] |
|||
1
Волшебник
29.05.23
✎
22:56
|
Объект.ДатаОкончанияАбонемента()
уберите скобки |
|||
2
Korzh
29.05.23
✎
23:06
|
Ничего не изменилось.Ошибка такая же, заполнение просто дат в табличной части, клиента добавить не могу.
|
|||
3
Волшебник
29.05.23
✎
23:23
|
(2) Не врите
|
|||
4
Korzh
29.05.23
✎
23:50
|
Поле объекта не обнаружено (ДатаОкончанияАбонемента)
{Документ.ЗаписиНаТренировки.Форма.ФормаДокумента.Форма(26)}:ДатаОкончанияАбонемента = Объект.ДатаОкончанияАбонемента; {Документ.ЗаписиНаТренировки.Форма.ФормаДокумента.Форма(4)}:ЗаполнитьТабличнуюЧасть(); Ну вот как-то так.К сожалению, не вру.Где-то косячу с кодом, пока понять не могу где. |
|||
5
Мимохожий Однако
29.05.23
✎
23:52
|
Научись включать отладку. Потом сделай точку останова на строке с ошибкой и долго думай
|
|||
6
Волшебник
30.05.23
✎
08:22
|
(4) Ошибка изменилась. Раньше был "Метод не обнаружен". Значит врёте, к сожалению.
|
|||
7
Korzh
30.05.23
✎
08:47
|
Действие не поменялось само - заполняет только даты, не дает выбрать клиента :)
Подскажите, пожалуйста, как исправить. Написал ДатаОкончанияАбонемента = Объект.Клиенты.ДатаОкончанияАбонемента; Ну ошибка, собственно, такая же - Поле объекта не обнаружено (ДатаОкончанияАбонемента) |
|||
8
banco
30.05.23
✎
08:54
|
(0) Потому что у документа нет ни метода, ни реквизита ДатаОкончанияАбонемента.
Наверное в цикле проверить для каждой строки таб части. |
|||
9
Волшебник
30.05.23
✎
08:56
|
(7) Если это реквизит табличной части, то доставать значение надо из конкретной строки
|
|||
10
Волшебник
30.05.23
✎
08:59
|
Кстати, исправьте опечатку
ДанныеОбОкончанииАбонимента |
|||
11
Korzh
30.05.23
✎
09:16
|
Исправил так, но теперь при попытке добавить клиента начинается бесконечная загрузка и только с перезапуском прекращает.
&НаКлиенте Процедура КлиентыПриИзменении(Элемент) ЗаполнитьТабличнуюЧасть(); СтрокаТЧ = Элементы.Клиенты.ТекущиеДанные; Для каждого СтрокаТЧ из Объект.Клиенты Цикл НоваяСтрока = Объект.Клиенты.Добавить(); НоваяСтрока.ДатаОкончанияАбонемента = СтрокаТЧ.ДатаОкончанияАбонемента; КонецЦикла ; ТекДата = ТекущаяДата(); ДатаОкончанияАбонемента = Объект.Клиенты.ДатаОкончанияАбонемента; Если Объект.ДатаОкончанияАбонемента < ТекДата тогда Инфо = "Нужно приобрести новый абонемент!"; иначе Инфо = "Дата окончания абонемента = " + ДатаОкончанияАбонемента; КонецЕсли; КонецПроцедуры &НаСервере Процедура ЗаполнитьТабличнуюЧасть() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДанныеОбОкончанииАбонемента.ФИОклиента КАК ФИОклиента, | ДанныеОбОкончанииАбонемента.ДатаОкончанияАбонемента КАК ДатаОкончанияАбонемента |ИЗ | РегистрСведений.ДанныеОбОкончанииАбонемента КАК ДанныеОбОкончанииАбонемента"; РезультатЗапроса = Запрос.Выполнить().Выгрузить(); КонецПроцедуры |
|||
12
Волшебник
30.05.23
✎
09:18
|
(11) А регистр сведений Вы тоже переименовали?
Кстати, в запросе нет условия на клиента. Он выбирает все данные, это может быть долго |
|||
13
Волшебник
30.05.23
✎
09:20
|
(11) Кстати, поздравляю, Вы сделали бесконечную рекурсию
У Вас же внутри процедуры КлиентыПриИзменении(Элемент) меняется табличная часть Клиенты и опять вызывается эта процедура |
|||
14
KJlag
30.05.23
✎
09:20
|
Для каждого СтрокаТЧ из Объект.Клиенты Цикл
НоваяСтрока = Объект.Клиенты.Добавить(); НоваяСтрока.ДатаОкончанияАбонемента = СтрокаТЧ.ДатаОкончанияАбонемента; КонецЦикла ; красиво. а зачем? |
|||
15
Мультук
30.05.23
✎
09:22
|
(11)
Вот здесь запрос сам должен догадаться какой абонемент вы имеете в виду ? Или это учебная база, абонемент всегда один, а дальше "и так сойдет" ? Запрос.Текст = "ВЫБРАТЬ | ДанныеОбОкончанииАбонемента.ФИОклиента КАК ФИОклиента, | ДанныеОбОкончанииАбонемента.ДатаОкончанияАбонемента КАК ДатаОкончанияАбонемента |ИЗ | РегистрСведений.ДанныеОбОкончанииАбонемента КАК ДанныеОбОкончанииАбонемента"; |
|||
16
Волшебник
30.05.23
✎
09:22
|
(14) Это генератор программного кода или магическое программирование. Вдруг сработает
|
|||
17
Korzh
30.05.23
✎
09:33
|
Регистр переименовал правильно, спасибо
Как исправить код, подскажите, пожалуйста, не могу додуматься |
|||
18
Волшебник
30.05.23
✎
09:35
|
(17) Сотрите всю процедуру и напишите новую.
Задействуйте событие ПриИзменении для ячейки Клиент в табличной части. В ней напишите одну строку. |
|||
19
Волшебник
30.05.23
✎
09:50
|
(17) Дополнительно измените структуру регистра. Измерение ФИОклиента переименуйте в Клиент и измените тип на Справочник.Клиенты
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |