Имя: Пароль:
1C
1С v8
Запись в регистр сведений
0 Ilqarupup
 
19.02.17
19:14
Добрый день! Такой вопрос, есть регистр сведений непериодический независимый "ТранзакцииСФ" с измерениями :

Контрагент
ЗаказПокупателя

и ресурсом
ОписаниеОшибки (строка 0)

теперь хочу записывать туда данные, использую метод "СоздатьМенеджерЗаписи".

МенеджерЗаписи=РегистрыСведений.ТранзакцииСФ.СоздатьМенеджерЗаписи();
     МенеджерЗаписи.Контрагент=Контрагент;
     МенеджерЗаписи.ЗаказПокупателя=ЗаказПокупателя;
     МенеджерЗаписи.ОписаниеОшибки=описаниеошибки;

МенеджерЗаписи.Записать();

Теперь такая проблема, у меня могут быть случаи, когда записывается ТОЛЬКО Контрагент, а в других случаях могу и вместе с заказом записывать. Только в регистр эти случаи попадают по отдельности. 1 строка с пустым заказом, другая заполненная. Есть вариант после записи  с заказом покупателя удалять записи только с контрагентом. Но есть ли другие варианты решения вопроса? Вариант только с измерением Контрагент не предлагайте, возможны случаи когда на одного контрагента будут несколько заказов покупателя.
1 Lexey_
 
19.02.17
19:19
(0) ну меняй существующую запись вместо создания новой
2 Ilqarupup
 
19.02.17
19:20
может как то в отбор список значений можно передавать, и в список включить и пустое значение и сам заказ?
3 Ilqarupup
 
19.02.17
19:21
через СоздатьНаборЗаписей попробовать?
4 Amra
 
19.02.17
19:22
(2) А не проще не добавлять запись без заполненного заказа?
5 Ilqarupup
 
19.02.17
19:23
(4) нет, такой случай возможен
6 Ilqarupup
 
19.02.17
19:50
через набор записей сделал, работает правда немного мудрено

НаборЗаписей=РегистрыСведений.ТранзакцииСФ.СоздатьНаборЗаписей();
     НаборЗаписей.Отбор.контрагент.Установить(Контрагент);
     Если ЗначениеЗаполнено(ЗаказПокупателя) тогда
        
         НаборЗаписей1=РегистрыСведений.ТранзакцииСФ.СоздатьНаборЗаписей();
     НаборЗаписей1.Отбор.контрагент.Установить(Контрагент);
     НаборЗаписей1.Отбор.ЗаказПокупателя.Установить(Неопределено);
       НаборЗаписей1.Очистить();
        НаборЗаписей1.Записать();
        
        НаборЗаписей.Отбор.ЗаказПокупателя.Установить(ЗаказПокупателя);
    иначе
        НаборЗаписей.Прочитать();
        Если НаборЗаписей.Количество()>0 тогда   //записи уже есть
            Возврат;    
        КонецЕсли;
        
     КонецЕсли;
    
     НаборЗаписей.Очистить();
     Запись=НаборЗаписей.Добавить();
     Запись.Контрагент=Контрагент;
     Запись.ЗаказПокупателя=ЗаказПокупателя;
     Запись.ОписаниеОшибки=описаниеошибки;
     НаборЗаписей.Записать();
7 Lexey_
 
19.02.17
20:00
(6) что за дичь? Меняй существующий набор, а не создавай новый
8 Ilqarupup
 
19.02.17
20:03
(7) обычно первым создается запись с пустым контрагентом, потом контрагент + заказ, поэтому если заказ покупатель есть я должен удалить строки с пустым заказом

Если ЗначениеЗаполнено(ЗаказПокупателя) тогда
        
         НаборЗаписей1=РегистрыСведений.ТранзакцииСФ.СоздатьНаборЗаписей();
     НаборЗаписей1.Отбор.контрагент.Установить(Контрагент);
     НаборЗаписей1.Отбор.ЗаказПокупателя.Установить(Неопределено);
       НаборЗаписей1.Очистить();
        НаборЗаписей1.Записать();
        
        НаборЗаписей.Отбор.ЗаказПокупателя.Установить(ЗаказПокупателя);
    иначе
9 Ilqarupup
 
19.02.17
20:04
если не делать этого я получу 2 строки , одну с пустым заказом, другую заполненную. Или я не так понимаю отборы.