Имя: Пароль:
1C
1С v8
Запись в регистр сведений программно
0 НатГолубева777
 
23.03.20
13:41
При отладчике "Если Выборка.Ссылка=НайденнаяСсылка Тогда" При истине попадает в "НоваяЗаписьПрайс.Номенклатура = Выборка.Ссылка;".  Посмотрите ПОЖАЛУЙСТА что не так при записи регистра накопления.
Процедура КнопкаВыполнитьНажатие(Элемент)
Путь= Константы.ПутьДоФайлов.Получить()+"\";
    Док=ПолучитьCOMОбъект(Путь+"GS.xls");
    
    Номенклатура=Док.Sheets(1).Cells(2,8).Value;
    счСтроки=2;
    
    
           Пока СокрЛП(Номенклатура) <> "" Цикл
            Номенклатура=Док.Sheets(1).Cells(СчСтроки,8).Value;
            ШК=Док.Sheets(1).Cells(СчСтроки,2).Value ;
            Сообщить(Строка(Номенклатура)+"-"+Строка(ШК));
            счСтроки=счСтроки+1;
            СтрокаНаименования = Номенклатура;
            Ном = Справочники.Номенклатура;
            НайденнаяСсылка = Ном.НайтиПоНаименованию(СтрокаНаименования);
            Если НайденнаяСсылка = Ном.ПустаяСсылка() Тогда
              Сообщить("еще нет");
            КонецЕсли;
                    Запрос = Новый Запрос;
                    Запрос.Текст=
                    "ВЫБРАТЬ
                    |    Прайс.Номенклатура.Ссылка КАК Ссылка2
                    |ИЗ
                    |    РегистрСведений.Прайс КАК Прайс
                    |ГДЕ
                    |    Прайс.Номенклатура.Ссылка В ИЕРАРХИИ(&Ссылка2)";
                    Запрос.УстановитьПараметр("Ссылка2", НайденнаяСсылка);
                    Результат = Запрос.Выполнить();
                    ВыборкаДетальныеЗаписи=Результат.Выбрать();
                             Если Результат.Пустой() Тогда
                             Запрос = Новый Запрос;
                             Запрос.Текст=
                                      "ВЫБРАТЬ
                                      |    Номенклатура.Ссылка КАК Ссылка,
                                      |    Номенклатура.Наименование КАК Наименование
                                      |ИЗ
                                      |    Справочник.Номенклатура КАК Номенклатура";
                        //Запрос.УстановитьПараметр("Ссылка3", Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура));
                        Результат = Запрос.Выполнить();
                        Выборка=Результат.Выбрать();
                        Пока Выборка.Следующий() Цикл
                            //Прайс.Отбор.Номенклатура.Установить(Номенклатура);
                            Если Выборка.Ссылка=НайденнаяСсылка Тогда
                                 Сообщить("есть");
                                 Прайс = РегистрыСведений.Прайс.СоздатьНаборЗаписей();
                                 НоваяЗаписьПрайс = Прайс.Добавить();
                                 НоваяЗаписьПрайс.Номенклатура = Выборка.Ссылка;
                                 Прайс.Записать()
                            КонецЕсли;    
                        КонецЦикла;
                    КонецЕсли;
                
            
        КонецЦикла;

    
    Док.Application.Quit();    
КонецПроцедуры
1 mikecool
 
23.03.20
13:42
наверное, все не так
2 mikecool
 
23.03.20
13:42
смотря что тебе нужно получить
3 НатГолубева777
 
23.03.20
13:45
Надо чтобы отразилось в регистре накоплении Прайс.  
НоваяЗаписьПрайс.Номенклатура = Выборка.Ссылка;-в отладчике нормально все как должно.   Но в пользовательском регистре они неотобразились.
4 НатГолубева777
 
23.03.20
13:45
регистр сведений не накоплений
5 Случайный прохожий
 
23.03.20
13:46
Добавить одну запись? Используй СоздатьМенеджерЗаписи()
6 НатГолубева777
 
23.03.20
13:46
Если Выборка.Ссылка=НайденнаяСсылка Тогда
                                 Сообщить("есть");
                                 Прайс = РегистрыСведений.Прайс.СоздатьНаборЗаписей();
                                 НоваяЗаписьПрайс = Прайс.Добавить();
                                 НоваяЗаписьПрайс.Номенклатура = Выборка.Ссылка;
                                 Прайс.Записать()
   КонецЕсли;    

????????
7 hhhh
 
23.03.20
13:47
(6) отбора нет в регистре. А если пишем без отбора, то регистр полностью очищается. У вас должна быть одна строчка в регистре.
8 НатГолубева777
 
23.03.20
13:48
одна да попадает но не то что надо
9 butterbean
 
23.03.20
13:49
(5) не понимаю людей, которые пользуются для программной записи менеджером вместо набора. Даже в СП написано, что менеджер "...Предназначен для интерактивной работы с записью регистра сведений.... "
10 Случайный прохожий
 
23.03.20
13:50
(9) А как иначе? У него получается набор записей без отбора
11 butterbean
 
23.03.20
13:50
(10) надо отбор значит установить
12 Случайный прохожий
 
23.03.20
13:52
(11) Он привел всего одно измерение, по которому нельзя установить отбор. В текущем контексте постановки эта задача через набор записей не решается.
13 НатГолубева777
 
23.03.20
14:02
Если Выборка.Ссылка=НайденнаяСсылка Тогда
                                 Сообщить("есть");
                                 МенеджерЗаписиПрайс=РегистрыСведений.Прайс;
                                 МенеджерЗаписи=МенеджерЗаписиПрайс.СоздатьМенеджерЗаписи();
                                 МенеджерЗаписи.Номенклатура=Выборка.Ссылка;
                                 МенеджерЗаписи.Записать();
                                
                            КонецЕсли;


Исправила на Менеджер записи... Час добавляет почему то 1 строку регистра добавляет не то что надо а потом идет нормальная запись.   Почему так?
14 НатГолубева777
 
23.03.20
14:17
Час нормально добавляет
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.