|   |   | 
| 
 | Автоматическое подставление даты в табличную часть документа | ☑ | ||
|---|---|---|---|---|
| 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) Дополнительно измените структуру регистра. Измерение ФИОклиента переименуйте в Клиент и измените тип на Справочник.Клиенты     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |