Имя: Пароль:
1C
1С v8
Периодический независимый регистр сведений - добавление записи
,
0 Uchenica74
 
28.11.13
11:47
Добрый день! Написала обработку добавления записи в регистр сведений (Периодический независимый) и все бы ничего, но никак не могу добиться того что бы НОВАЯ запись добавилась. Подскажите пожалуйста, в чем ошиблась:

        Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
                   |    Регистр.Период,
                   |    Регистр.Работа КАК Работа,
                   |    Регистр.НомерСтрокиШкалы КАК НомерСтрокиШкалы,
                   |    Регистр.Выработка,
                   |    Регистр.Процент
                   |ИЗ
                   |    РегистрСведений.Регистр.СрезПоследних(&Дата, ) КАК                        РегистрСрезПоследних
                   |ГДЕ
                   |    РегистрСрезПоследних.Работа = &Работа
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    Работа УБЫВ,
                   |    НомерСтрокиШкалы УБЫВ"
                   ;
    Запрос.УстановитьПараметр("Работа",Работа);              
    Запрос.УстановитьПараметр("Дата",НачалоДня(Дата));
    Результат = Запрос.Выполнить().Выгрузить();              
    
    Для Каждого стр из Результат цикл
        
        НаборЗаписей = РегистрыСведений.Регистр.СоздатьНаборЗаписей();
        
        НаборЗаписей.Отбор.Работа.Установить(стр.Работа);
        НаборЗаписей.Отбор.НомерСтрокиШкалы.Установить(стр.НомерСтрокиШкалы);
        НаборЗаписей.Отбор.Период.Установить(стр.Период);
                
        НовЗапись = НаборЗаписей.Добавить();
        
        НовЗапись.Работа = стр.Работа;
        НовЗапись.НомерСтрокиШкалы  = стр.НомерСтрокиШкалы;
        НовЗапись.Выработка = стр.Выработка;
        НовЗапись.Процент = 0;
        НовЗапись.Период = Дата;
        
        НаборЗаписей.Записать();
1 Волшебник
 
модератор
28.11.13
11:49
(0) Используй МенеджерЗаписи
2 Maxus43
 
28.11.13
11:49
НовЗапись.Период = стр.Период; тогда уж
3 SUA
 
28.11.13
11:52
фото?
и что будет если регистр еще пустой?
Для Каждого стр из Результат цикл //не выполнится вообще
4 Uchenica74
 
28.11.13
11:54
(2) мне нужно добавить новую запись с новым периодом, например: 01.10.2013 Уборка 80%, а мне нужна новая запись 01.11.2013 Уборка 0%
5 Ярус
 
28.11.13
11:54
после отборов  добавь НаборЗаписей.Прочитать()
6 Uchenica74
 
28.11.13
11:55
(3)если регистр на данный вид работы пустой, тогда не нужна новая запись
7 SUA
 
28.11.13
11:55
(5)бред
(4)Отбор.Период.Установить(Дата)
8 Uchenica74
 
28.11.13
11:59
Эта обработка не добавляет запись,  а изменяет запись соответствующую отбору - не правильное действие. Мне нужны обе записи в регистре.
9 Ярус
 
28.11.13
12:00
(7)читай(8) и свое "бред" засунь себе
10 КонецЦикла
 
28.11.13
12:03
Вот пример "размножения" записей.

ТЗ = РегистрыСведений.Спецификации.СрезПоследних(ВыбДата + 86400, Структура);
            
    ТЗ.Колонки.Добавить("Контрагент");
    ТЗ.Колонки.Добавить("ТипВагона");
    ТЗ.Колонки.Добавить("Действует");
    
    ТЗ.ЗаполнитьЗначения(ВыбДата,    "Период");
    ТЗ.ЗаполнитьЗначения(Истина,    "Действует");
    
    СчТр = 0;
    НачатьТранзакцию();
    
    Выборка = Справочники.Контрагенты.ВыбратьИерархически(ГруппаПоставщиков);
    Пока Выборка.Следующий() = 1 Цикл
        Если Выборка.ПометкаУдаления Тогда
            Продолжить;
        КонецЕсли;
        
        Если Выборка.ЭтоГруппа Тогда
            Продолжить;
        КонецЕсли;    
        
        Сообщить("Обрабатывается контрагент: " + Выборка.Наименование);
        
        ТЗ.ЗаполнитьЗначения(Выборка.Ссылка, "Контрагент");
        
        Для Каждого ТекТипВагона из Перечисления.ТипыВагонов Цикл
            ТЗ.ЗаполнитьЗначения(ТекТипВагона, "ТипВагона");
            
            Набор = РегистрыСведений.СпецификацииКонтрагентов.СоздатьНаборЗаписей();
            
            Набор.Отбор.Период.Установить(ВыбДата);
            Набор.Отбор.Валюта.Установить(Валюта);
            Набор.Отбор.Контрагент.Установить(Выборка.Ссылка);
            Набор.Отбор.ТипВагона.Установить(ТекТипВагона);
            
            Набор.Загрузить(ТЗ);
            Набор.Записать();
            
            СчТр = СчТр + 1;
            
            Если СчТр % 50 = 0 Тогда
                ЗафиксироватьТранзакцию();
                НачатьТранзакцию();
            КонецЕсли;    
            Если СчТр % 500 = 0 Тогда
                ЗафиксироватьТранзакцию();
                Прервать;
            КонецЕсли;    
        КонецЦикла;
    КонецЦикла;    
    
    ЗафиксироватьТранзакцию();
11 КонецЦикла
 
28.11.13
12:03
Тупенько, но работает :)
12 Uchenica74
 
28.11.13
12:03
(5)я добавила НаборЗаписей.Прочитать(), теперь ошибка вылетает  "Запись не верна! Значение поля не соответствует установленному отбору: Уборка: 4 : 01.11.2013 0:00:00 (Регистр сведений: Регистр; Поле: Период)"
13 Maxus43
 
28.11.13
12:04
(4) ты отбор у набора ставишь на другую дату
14 КонецЦикла
 
28.11.13
12:05
(12) Сними отбор

Набор.Прочитать();
                
    ТЗ = Набор.Выгрузить();
    
    Набор.Отбор.Сбросить();
15 Uchenica74
 
28.11.13
12:08
(12) тогда затираются предыдущие записи
16 Uchenica74
 
28.11.13
12:09
Блин...тогда затираются предыдущие записи (14)
17 Uchenica74
 
28.11.13
12:11
(13)Исправила. Все работает. Спасибо!!!
18 Maxus43
 
28.11.13
12:11
(16) НаборЗаписей.Отбор.Период.Установить(Дата), а не стр.период
19 Uchenica74
 
28.11.13
12:14
(18) Да, да я в (17) Вас поблагодарила. Исправила. Все теперь работает.