Имя: Пароль:
1C
 
Добавление данных
0 JijiJie
 
21.06.24
10:53
Недавно начал изучать 1С и вот возникла проблема.
Дано:
Есть документ с табличной частью и ДатойНачала (дата, устанавливаемая пользователем) и справочник. При создании документа табличная часть формируется автоматически - в неё добавляются все данные из справочника. Добавлять новые данные в табличную часть самостоятельно нельзя.
Задача:
Нужно, чтобы при добавлении в справочник нового значения, во все документы, ДатаНачала которых больше даты добавления записи в справочник, в табличную часть добавлялась новая запись - с новой информацией из справочника
Краткий порядок действий:
Добавление записи в справочник -> Поиск документов, у которых ДатаНачала больше -> Добавление строк с новой записью из справочника в табличные части
Проблема:  
Я перепробовал уже много разных вариантов, но ничего не получается. Помогите пожалуйста
1 Волшебник
 
21.06.24
10:55
Ещё раз сформулируйте проблему.

Вот такая формулировка никуда не годится:
"Я перепробовал уже много разных вариантов, но ничего не получается. Помогите пожалуйста"

Это не проблема, а нытьё.
2 Valdis2007
 
21.06.24
11:00
(0) Недавно начал изучать 1С и вот возникла проблема...


звучит не очень...
3 rphosts
 
21.06.24
11:02
(0) Декомпозируйте задачу и укажите что именно не получается и что делали что-бы получилось. Если так сделаете - вам помогут, но делать за вас никто не будет - у каждого своя работа.
4 Мультук
 
гуру
21.06.24
11:03
(0)

>> Поиск документов, у которых ДатаНачала больше

Начнём с простого
Вот "рыба" функции которая будет искать вам нужные документы
Напишите текст запроса



Функция НайтиВсеНужныеДокументы(ДатаНачала)
    Запрос = новый Запрос;
    Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
    Запрос.Текст = "Напишите текст запроса";
    
    тз = Запрос.выполнить().Выгрузить()  

    возврат тз;
КонецФункции
5 maxab72
 
21.06.24
11:04
1. Найти все нужные документы
2. Добавить в них все нужные строки из справочника.
3. Записать документы (обычно начинающие пользователи именно этот пункт забывают).
6 JijiJie
 
21.06.24
11:05
(1) Самое лучшее, что у меня получилось (не уверен правильно ли это вообще или нет)

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


В итоге, когда смотрю отладку, всё вроде как работает, даже перекидывает на метод ПриЗаписи() документа. Но по факту - данные не добавляются.
7 maxab72
 
21.06.24
11:06
"Выборка.Ссылка.ПолучитьОбъект().Записать(РежимЗаписиДокумента.Проведение);"
Вы снова вызываетет ссылку, где нет новых данных, и ее и записываете.
8 Александр111
 
21.06.24
11:09
|    ЖурналПосещаемости.ДатаНачала = &Дата");
= или >=
9 JijiJie
 
21.06.24
11:11
(7) &НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
    
    Запрос = Новый Запрос ("ВЫБРАТЬ
                           |    ЖурналПосещаемости.Ссылка КАК Ссылка
                           |ИЗ
                           |    Документ.ЖурналПосещаемости КАК ЖурналПосещаемости
                           |ГДЕ
                           |    ЖурналПосещаемости.ДатаНачала > &Дата");
    
    Запрос.УстановитьПараметр("Дата", ТекущаяДата());
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
        
        ВыбранныйДокумент = Выборка.Ссылка.ПолучитьОбъект();

        Строка = ВыбранныйДокумент.Успеваемость.Добавить();
        Строка.Ученик = ТекущийОбъект.Ссылка;
        Строка.Оценка = 0;
        Строка.Присутствие = Ложь;
        ВыбранныйДокумент.Записать(РежимЗаписиДокумента.Проведение);
     КонецЦикла;
        
КонецПроцедуры



Если правильно вас понял, то вот что получилось. Не работает. Или я что-то не то сделал
10 maxab72
 
21.06.24
11:14
(9) Что говорит отладчик? Возможно не проходит проверка в ПриЗаписи или ПередЗаписью или ОбработкаПроведения документа.
11 Мультук
 
гуру
21.06.24
11:17
(9)

А у вас ТОЧНО есть документы у которых  ЖурналПосещаемости.ДатаНачала больше чем ТЕКУЩАЯДАТА() ?
12 JijiJie
 
21.06.24
11:21
(9) это всё таки работает.
(11) вчера были, сегодня уже нет) Но проблема всё равно не в этом была. Вчера оно тоже не работало
(10) ОГРОМНОЕ ЧЛОВЕЧЕСКОЕ СПАСИБО


(0) Проблема решена - ответ (7)
13 rphosts
 
21.06.24
11:30
JijiJie, а вы в курсе что у документа Дата - это Дата+Время и условие "=" в запросе - это  совпадение до секунды.