Имя: Пароль:
1C
1С v8
Не записывает в Регистр сведений
0 john2013
 
12.06.19
12:21
Здравствуйте, подскажите где ошибка, может кто сталкивался.
Имеется независимый, непериодический регистр сведений. Добавил измерение ссылка на документ.
Хочу сделать запись в РС при проведении. Ошибок не выдает, но и записи не появляются.

    
    Если НовыйНаборЗаписей.Количество() = 0 Тогда

        Для Каждого СтрокаТЧ Из ТабельСотрудников Цикл
            НоваяЗаписьНабора = НовыйНаборЗаписей.Добавить();

            НоваяЗаписьНабора.ПериодДействия = Дата;
            НоваяЗаписьНабора.Организация = Организация.Ссылка;
            НоваяЗаписьНабора.Подразделение = Подразделение.Ссылка;
            НоваяЗаписьНабора.Показатель = Показатель.Ссылка;
            НоваяЗаписьНабора.pzСсылкаТабельПремий = ДокСсылка;

            Колво = 0;
            Для  Сч = 1 По 31 Цикл
                Если СтрокаТЧ["Начислить" + Строка(Сч)] = Истина Тогда
                    Колво = Колво + 1;
                КонецЕсли;
            КонецЦикла;
            НоваяЗаписьНабора.Сотрудник = СтрокаТЧ.Сотрудник.Ссылка;
            НоваяЗаписьНабора.Значение = Колво;
        КонецЦикла;
    КонецЕсли;
1 john2013
 
12.06.19
12:23
Перед проверкой
ДокСсылка = Ссылка;
НовыйНаборЗаписей = РегистрыСведений.ЗначенияПоказателейСхемМотивации.СоздатьНаборЗаписей();
Отбор = НовыйНаборЗаписей.Отбор;
Отбор.pzСсылкаТабельПремий.Установить(ДокСсылка, Истина);
2 PuhUfa
 
12.06.19
12:28
А записать то где?
3 john2013
 
12.06.19
12:29
хотел кусок, даю полную

ДокСсылка = Ссылка;
    НовыйНаборЗаписей = РегистрыСведений.ЗначенияПоказателейСхемМотивации.СоздатьНаборЗаписей();
    Отбор = НовыйНаборЗаписей.Отбор;
    Отбор.pzСсылкаТабельПремий.Установить(ДокСсылка, Истина);
        
    Если НовыйНаборЗаписей.Количество() = 0 Тогда

        Для Каждого СтрокаТЧ Из ТабельСотрудников Цикл
            НоваяЗаписьНабора = НовыйНаборЗаписей.Добавить();

            НоваяЗаписьНабора.ПериодДействия = Дата;
            НоваяЗаписьНабора.Организация = Организация.Ссылка;
            НоваяЗаписьНабора.Подразделение = Подразделение.Ссылка;
            НоваяЗаписьНабора.Показатель = Показатель.Ссылка;
            НоваяЗаписьНабора.pzСсылкаТабельПремий = ДокСсылка;

            Колво = 0;
            Для  Сч = 1 По 31 Цикл
                Если СтрокаТЧ["Начислить" + Строка(Сч)] = Истина Тогда
                    Колво = Колво + 1;
                КонецЕсли;
            КонецЦикла;
            НоваяЗаписьНабора.Сотрудник = СтрокаТЧ.Сотрудник.Ссылка;
            НоваяЗаписьНабора.Значение = Колво;
        КонецЦикла;
    КонецЕсли;
    Иначе
    
    НовыйНаборЗаписей.Прочитать();
    НовыйНаборЗаписей.Очистить();
        
    Для Каждого СтрокаТЧ Из ТабельСотрудников Цикл
        Запись = НоваяЗаписьНабора[0];
        Запись.ПериодДействия = Дата;
        Запись.Организация = Организация.Ссылка;
        Запись.Подразделение = Подразделение.Ссылка;
        Запись.Показатель = Показатель.Ссылка;
        Запись.pzСсылкаТабельПремий = Ссылка;

        Колво = 0;
        Для  Сч = 1 По 31 Цикл
            Если СтрокаТЧ["Начислить" + Строка(Сч)] = Истина Тогда
                Колво = Колво + 1;
            КонецЕсли;
        КонецЦикла;
        НоваяЗаписьНабора.Сотрудник = СтрокаТЧ.Сотрудник.Ссылка;
        НоваяЗаписьНабора.Значение = Колво;
    КонецЦикла;
        
    КонецЕсли;
            
        НовыйНаборЗаписей.Записать();
4 PuhUfa
 
12.06.19
12:32
Ужас какой... Ты хоть сам, словами, можешь объяснить, что у тебя делается в той или иной строчке кода?
5 john2013
 
12.06.19
12:37
думаю что да
6 Красный рассвет
 
12.06.19
12:38
Запись.Записать(), а не НовыйНаборЗаписей.Записать() как минимум
7 john2013
 
12.06.19
12:38
при отладке считает и заполняются как надо, но вот запись в регистр не делается.
8 john2013
 
12.06.19
12:39
я до второй секции пока не дошел, потому что при проведении попадет в первую ветку
9 PuhUfa
 
12.06.19
12:41
(7) Запись в базу делается, вот только на момент: НовыйНаборЗаписей.Записать(); НовыйНаборЗаписей - у тебя пустой.
10 Красный рассвет
 
12.06.19
12:43
(8) Тогда - НоваяЗаписьНабора.Записать()
Будь мужиком, запиши запись!
11 john2013
 
12.06.19
12:45
вот и я не могу понять где ошибка. при отладке, Сотрудник, колво все данные есть, а набор получается пустой
12 PuhUfa
 
12.06.19
12:51
(11) ну раз ты сам не хочешь проговорить свой код тогда давай попробуем мы.
Ты создаешь НаборЗаписей - НовыйНаборЗаписей
Ты устанавливаешь для него отбор
Потом ты перебирая ТЧ добавляешь в созданный набор записи (НовыйНаборЗаписей.Количество() в твоем коде всегда = 0)
Потом ты читаешь данные из базы и затираешь все что добавил на этапе выше.
Ты не успокаиваешься и делаешь своему набору еще и Очистить()
Дальше ты опять перебираешь ТЧ и запихиваешь из нее данные в одну единственную структуру НоваяЗаписьНабора[0]
после чего ты спокойно записываешь свой пустой НовыйНаборЗаписей в БД
13 Мимохожий Однако
 
12.06.19
13:03
Отбор по периоду где?
14 john2013
 
12.06.19
13:14
(12) Убрал всех хлам что бы не путаться
ДокСсылка = Ссылка;
НовыйНаборЗаписей = РегистрыСведений.ЗначенияПоказателейСхемМотивации.СоздатьНаборЗаписей();
Отбор = НовыйНаборЗаписей.Отбор;
Отбор.pzСсылкаТабельПремий.Установить(ДокСсылка, Истина);
        
    Для Каждого СтрокаТЧ Из ТабельСотрудников Цикл
        НоваяЗаписьНабора = НовыйНаборЗаписей.Добавить();
        НоваяЗаписьНабора.ПериодДействия = Дата;
        НоваяЗаписьНабора.Организация = Организация.Ссылка;
        НоваяЗаписьНабора.Подразделение = Подразделение.Ссылка;
        НоваяЗаписьНабора.Показатель = Показатель.Ссылка;
        НоваяЗаписьНабора.pzСсылкаТабельПремий = ДокСсылка;
        Колво = 0;
            Для  Сч = 1 По 31 Цикл
                Если СтрокаТЧ["Начислить" + Строка(Сч)] = Истина Тогда
                Колво = Колво + 1;
                КонецЕсли;
            КонецЦикла;
            НоваяЗаписьНабора.Сотрудник = СтрокаТЧ.Сотрудник.Ссылка;
            НоваяЗаписьНабора.Значение = Колво;
    КонецЦикла;
                
    НовыйНаборЗаписей.Записать();
15 Красный рассвет
 
12.06.19
13:14
(13) РС непереодический, независимый.
Необходимо и достаточно записать создаваемую запись соответствующей командой, но ТС этого делать пока не хочет.
16 Красный рассвет
 
12.06.19
13:17
(14) В конце цикла - НоваяЗаписьНабора.Записать();
17 john2013
 
12.06.19
13:22
(16)  Все рано пустой, данные не добавились
18 PuhUfa
 
12.06.19
13:24
(16) откуда у РегистрСведенийЗапись метод Записать()?
(17) а что отладчик то говорит?
19 john2013
 
12.06.19
13:32
(18) НоваяЗаписьНабора = Данные в отладчике отражены согласно заполненному документу

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

   НоваяЗапись.Объект = ПолеВводаНоменклатура;
   НоваяЗапись.Свойство = СтрокаТаблицы.Свойство;
   НоваяЗапись.Значение = СтрокаТаблицы.ЗначениеСвойства;
КонецЦикла;

НаборЗаписей.Записать();
20 PuhUfa
 
12.06.19
13:40
(19) смотри что у тебя в НоваяЗаписьНабора на момент Записать()
21 PuhUfa
 
12.06.19
13:40
+(20) в НовыйНаборЗаписей
22 john2013
 
12.06.19
13:42
в НовыйНаборЗаписей  на момент записи пусто
а вот в цикле данные все ОК
23 john2013
 
12.06.19
13:44
а вот почему пусто, не понимаю, где ошибка
24 PuhUfa
 
12.06.19
13:58
Ну посмотри еще внутри цикла что у тебя получается в НовыйНаборЗаписей.
Еще меня смущает твоя конструкция. Вроде должно быть нормально. но 1С такая 1С
Отбор = НовыйНаборЗаписей.Отбор;
Отбор.pzСсылкаТабельПремий.Установить(ДокСсылка, Истина);
Перепиши на:
НовыйНаборЗаписей.Отбор.pzСсылкаТабельПремий.Установить(ДокСсылка)
25 lEvGl
 
гуру
12.06.19
14:19
(19) должно работать, единственное ПолеВводаНоменклатура сомнительный тип
26 john2013
 
12.06.19
14:32
(24) поменял, не помогает. После записи в НовыйНаборЗаписей остается только ссылка на документ, а значения полей пустые
27 Мимохожий Однако
 
12.06.19
15:57
Попробуй метод СоздатьМенеджерЗаписи()
28 PuhUfa
 
12.06.19
16:13
(26) Ты нам чего то не договариваешь -)
После цикла поставь точку останова и посмотри отладчиком, что в НовыйНаборЗаписей который в строке НовыйНаборЗаписей.Добавить() и что в НовыйНаборЗаписей который в строке НовыйНаборЗаписей.Записать()
Кроме как, что это разные наборы других предположений больше нет.

>>После записи в НовыйНаборЗаписей остается только ссылка на документ, а значения полей пустые
Так у тебя НовыйНаборЗаписей все же совсем пустой или в нем строки с заполненным только "pzСсылкаТабельПремий"?
29 john2013
 
12.06.19
18:27
(28) в записи только ссылка на документ, а пооя организация, сотрудник и т.д. пустые
30 john2013
 
13.06.19
09:07
Запись прошла, ее не было видно в форме списка, просмотрел запросом, все ОК
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn