Имя: Пароль:
1C
1C 7.7
v7: Запись элемента справочника
0 andrew231
 
05.06.13
11:00
Добрый день! Не могу разобраться как записать элементы справочника. ниже код и есть комментарий что нужно записать:

СпрТМЦ=СоздатьОбъект("Справочник.ТМЦ");
   ДБ.Первая();
   Пока ДБ.Вконце() = 0 Цикл
       Если СпрТМЦ.НайтиПоРеквизиту("ПДМ_ИДДПрод", ДБ.IDPRODUCT_,1)=1 Тогда
           ТекЭлТК=СпрТМЦ.ТекущийЭлемент();
           Если Лев(ТекЭлТК.ПолноеНаименование(),10)="Из Лоцмана" Тогда
               Если ПустоеЗначение(ТекЭлТК.ПродукцияБУ)=1 Тогда
                   Сообщить("По тех. комплекту: """+ТекЭлТК+""" продукция БУ не существует!");
               Иначе
                   Если СпрТМЦ.НайтиПоРеквизиту("ПДМ_ИДДПрод", ДБ.IDPRODUCT,1)=1 Тогда  
                       ТекЭлП=СпрТМЦ.ТекущийЭлемент();
                       Если Лев(ТекЭлП.ПолноеНаименование(),10)<>"Из Лоцмана" Тогда
                           Сообщить("Строка "+ДБ.НомерЗаписи()+": продукция """+ТекЭлП+""" находится вне группы ""Из Лоцмана""");
                       КонецЕсли;
                       ТекЭлП.ПродукцияБУ=ТекЭлТК.ПродукцияБУ;
                       ТекЭлТК.КвоБУ=1;
                       //как записать элемент ТекЭлП
                       //как записать элемент ТекЭлТК
                   Иначе
                       НовоеТМЦ=глНайтиТМЦ(Число(ДБ.IDPRODUCT), Число(ДБ.ID));
                       Если ПустоеЗначение(НовоеТМЦ.ПродукцияБУ)=1 Тогда
                           НовоеТМЦ.ПродукцияБУ=ТекЭлТК.ПродукцияБУ;    
                       КонецЕсли;
                       Сообщить("Созданна новая номенклатура """+НовоеТМЦ+""" и заполнена графа ""ПродукцияБУ""");
                   КонецЕсли;
               КонецЕсли;    
           КонецЕсли;
       
       КонецЕсли;  
       ПроцентВыполнения=ДБ.НомерЗаписи()*100/ВсегоСтрок;
       Состояние("Обработано "+Окр(ПроцентВыполнения,0,1)+"%");
       Если ДБ.Следующая() = 0 Тогда
           Прервать;
       КонецЕсли;
   КонецЦикла;
1 Ёпрст
 
05.06.13
11:02
(0)

// ТекЭлТК=СпрТМЦ.ТекущийЭлемент();
ТекЭлТК=СпрТМЦ;
2 FlashC
 
05.06.13
11:04
СпрТМЦ.записать()
3 andrew231
 
05.06.13
11:09
(2) ИЗ СпрТМЦ позиционируется на два элемента (ТекЭлП,           ТекЭлТК). какой из них будет записан или будут записаны оба?
4 andrew231
 
05.06.13
11:12
(1) мне не совсем понятно: присвоить текущему элементу ссылку на справочник, а потом записать. а как быть с ТекЭлП? Его тоже нужно записать
5 Ковычки
 
05.06.13
11:17
(1) +
6 Ёпрст
 
05.06.13
11:19
(3)
Записывать ТекущийЭлемент() нельзя, это ссылка на "чтение".
7 andrew231
 
05.06.13
11:22
дело в том что при первом поиске по реквизиту система позиционируется на техкомплекте, при втором поиске - на продукции и если продукция найдена записать в техкомплект.квоБУ=1, а в продукция.продБУ записать Техкомплект.ПродБУ. И эти 2 элемента справочника записать.
8 andrew231
 
05.06.13
11:23
(6) это понятно. прочитайте пожалуйста (7)
9 Ёпрст
 
05.06.13
11:26
(7) заводи 2 переменные с СоздатьОбъект, их и записывай.
10 Ковычки
 
05.06.13
11:26
создай два объекта и не майся
11 andrew231
 
05.06.13
11:26
(6) ага, т.е. ТекЭлТК=СпрТМЦ; потом

ТекЭлТК.Записать() тоже самое с ТекЭлП

???
12 andrew231
 
05.06.13
11:27
(10) а что одним обойтись нельзя?
13 Ёпрст
 
05.06.13
11:30
(12) можно
14 Ковычки
 
05.06.13
11:30
Что бы не думалось

ТекЭлТК=СоздатьОбъект("Справочник.ТМЦ");
ТекЭлП=СоздатьОбъект("Справочник.ТМЦ");

...
Если ТекЭлТК.НайтиПоРеквизиту("ПДМ_ИДДПрод", ДБ.IDPRODUCT_,1)=1 Тогда
//           ТекЭлТК=СпрТМЦ.ТекущийЭлемент();


Если ТекЭлП.НайтиПоРеквизиту("ПДМ_ИДДПрод", ДБ.IDPRODUCT,1)=1 Тогда
//           ТекЭлП=СпрТМЦ.ТекущийЭлемент();
15 andrew231
 
05.06.13
11:34
(13) вот так катить будет?

Если СпрТМЦ.НайтиПоРеквизиту("ПДМ_ИДДПрод", ДБ.IDPRODUCT_,1)=1 Тогда
           ТекЭлТК=СпрТМЦ;
           Если Лев(ТекЭлТК.ПолноеНаименование(),10)="Из Лоцмана" Тогда
               Если ПустоеЗначение(ТекЭлТК.ПродукцияБУ)=1 Тогда
                   Сообщить("По тех. комплекту: """+ТекЭлТК+""" продукция БУ не существует!");
               Иначе
                   Если СпрТМЦ.НайтиПоРеквизиту("ПДМ_ИДДПрод", ДБ.IDPRODUCT,1)=1 Тогда  
                       ТекЭлП=СпрТМЦ;
                       Если Лев(ТекЭлП.ПолноеНаименование(),10)<>"Из Лоцмана" Тогда
                           Сообщить("Строка "+ДБ.НомерЗаписи()+": продукция """+ТекЭлП+""" находится вне группы ""Из Лоцмана""");
                       КонецЕсли;
                       ТекЭлП.ПродукцияБУ=ТекЭлТК.ПродукцияБУ;
                       ТекЭлТК.КвоБУ=1;
// запись
                       ТекЭлП.Записать();
                       ТекЭлТК.Записать();
16 Ковычки
 
05.06.13
11:35
нет
17 andrew231
 
05.06.13
11:35
(14) с двумя в принципе понятно, но зачем использовать 2 ссылки если можно применить только одну. ;) Не так ли?
18 andrew231
 
05.06.13
11:37
(16) почему?
19 andrew231
 
05.06.13
11:37
в чем ошибка?
20 Ковычки
 
05.06.13
11:37
попробуй
21 Ёпрст
 
05.06.13
11:38
(18) подумай.
22 andrew231
 
05.06.13
11:38
ща...
23 andrew231
 
05.06.13
11:49
не записывает :

ТекЭлП.ПродукцияБУ=ТекЭлТК.ПродукцияБУ;
ТекЭлТК.КвоБУ=1;

видимо потому что объект а не элемент. а если так?
ТекЭлП.ТекущийЭлемент().ПродукцияБУ=ТекЭлТК.ПродукцияБУ;
ТекЭлТК.ТекущийЭлемент().КвоБУ=1;


или записать Текущий элемент в отдельную переменную? в чем ошибка?
24 andrew231
 
05.06.13
11:50
ЭлементПродукция=ТекЭлП.ТекущийЭлемент();
ЭлементТехкомплект=ТекЭлТК.ТекущийЭлемент();
2 + 2 = 3.9999999999999999999999999999999...