Имя: Пароль:
1C
1С v8
Замена записей в регистре сведений
0 Boudybuilder
 
07.09.13
22:18
Всем привет!
Уже научен обращаться сюда тока в последнюю очередь , но что то я туплю сегодня , так как не особо умею обращаться с записями регистра сведений.
Речь идет о непереодическом р.с. "НоменклатураКонтрагентов".
В УТ он есть в типовой.
Кто не знает описываю:
Измерения:
-Контрагент
-Номенклатура
-ХарактеристикиНоменклатуры
Ресурсы:
- КодНоменклатурыКонтрагента
и остальные для меня не важные.

Задача такова что мне надо в одном наборе записей отредактировать имеющиеся и добавить отсутсвующие.

Что то я сформулировать вопрос нормально не могу. Прастыте!

Из прайса ексель получаю таблицу , переношу ее в табличное поле "РегСвНаборЗаписей" там редактирую , а потом бы все это записать в регистр с замещением , но прикол в том что записи надо искать по коду и контрагенту (где одно ресурс а другое измерение), а в МенеджерЗаписей отбирает тока по измерениям вроде.
1 Euguln
 
07.09.13
22:24
Читай набор записей, выгружай в таблицу, таблицу редактируй, загружай обратно и записывай.
2 grayshadow
 
07.09.13
22:29
>табличное поле "РегСвНаборЗаписей"
:)))
каким образом должно происходить замещение? по КодНоменклатурыКонтрагента ? не взлетит
3 Boudybuilder
 
07.09.13
22:30
(1)  Это наверное проходит если я хочу только отредактировать имеющиеся записи.
А если надо и добавить запись?
4 Boudybuilder
 
07.09.13
22:31
(3) Тогда КодНоменклатурыКонтрагента  в Измерения? а редактировать типовую ой как не хочется.
5 Boudybuilder
 
07.09.13
22:34
А что если перед записью из НабораЗаписей получить еще один НаборЗаписей2 отобранный по Контрагент и КодНоменклатурыКонтрагента и удалить из регистра.
6 grayshadow
 
07.09.13
22:35
можно пример, что надо удалить, что изменить и что добавить
7 Euguln
 
07.09.13
22:49
(3) Никто не мешает в таблицу добавлять записи.
8 Boudybuilder
 
07.09.13
22:59
(2) Именно!
9 grayshadow
 
07.09.13
23:09
но при этом никто не гарантирует что записи получатся уникальные по измерениям:) принципиальный вопрос - как установить отбор перед записью набора...
10 Boudybuilder
 
08.09.13
00:20
Так как записей редактируется всегда не много то решил в цикл забить запрос и делать таким образом. Теперь перед записью все записи по даному контрагенту и коду удаляются.


Для каждого Строка Из СписокНоменклатуры Цикл
                Если НЕ Строка.Номенклатура.Пустая() И НЕ Строка.Номенклатура.ЭтоГруппа Тогда
                    
                    
                    // Получим все записи в регистре по даному коду контрагента и контрагенту и удалим их
                    ЗП = Новый Запрос;
                    ЗП.Текст = "ВЫБРАТЬ
                    |    НоменклатураКонтрагентов.Номенклатура,
                    |    НоменклатураКонтрагентов.ХарактеристикаНоменклатуры
                    |ИЗ
                    |    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
                    |ГДЕ
                    |    НоменклатураКонтрагентов.Контрагент = &Контрагент
                    |    И НоменклатураКонтрагентов.КодНоменклатурыКонтрагента = &Код";
                    ЗП.УстановитьПараметр("Контрагент",Контрагент);
                    ЗП.УстановитьПараметр("Код",Строка.КодНоменклатурыКонтрагента);
                    Рез = ЗП.Выполнить();
                    Если Не Рез.Пустой() Тогда
                        Выб = Рез.Выбрать();
                        Пока Выб.Следующий() Цикл
                            ЗаписьДляУдаления                            = РегистрыСведений.НоменклатураКонтрагентов.СоздатьМенеджерЗаписи();
                            ЗаписьДляУдаления.Контрагент                 = Контрагент;
                            ЗаписьДляУдаления.Номенклатура               = Выб.Номенклатура;
                            ЗаписьДляУдаления.ХарактеристикаНоменклатуры = Выб.ХарактеристикаНоменклатуры;
                            ЗаписьДляУдаления.Удалить();
                        КонецЦикла;
                    КонецЕсли;
                    
                    // Создадим новую запись
                    Запись = РегистрыСведений.НоменклатураКонтрагентов.СоздатьМенеджерЗаписи();
                    Запись.Контрагент                 = Контрагент;
                    Запись.Контрагент                          = Контрагент;
                    Запись.Номенклатура                        = Строка.Номенклатура;
                    Запись.ХарактеристикаНоменклатуры          = Строка.ХарактеристикаНоменклатуры;
                    Запись.КодНоменклатурыКонтрагента          = СокрЛП(Строка.КодНоменклатурыКонтрагента);
                    Запись.АртикулНоменклатурыКонтрагента      = СокрЛП(Строка.АртикулНоменклатурыКонтрагента);
                    Запись.НаименованиеНоменклатурыКонтрагента = СокрЛП(Строка.НаименованиеНоменклатурыКонтрагента);
                    Запись.ШтрихКодНоменклатурыКонтрагента     = СокрЛП(Строка.ШтрихКодНоменклатурыКонтрагента);
                    Запись.ЕдиницаНоменклатурыКонтрагента       = Строка.Номенклатура.БазоваяЕдиницаИзмерения;
                    Запись.Записать(Истина);
                    
                КонецЕсли;
            КонецЦикла;
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн