Имя: Пароль:
1C
1С v8
Конвертация данных. Программное создание элемента справочника
0 Никулин Леонид
 
22.05.13
18:25
Здравствуйте!

Такой вопрос.
Конфигурация "Конвертация данных". Создаю правила. Есть у меня документ (ТребовениеНакладная) с ТЧ (Материалы). В ней есть ПКС для реквизита табличной части (НоменклатурнаяГруппа). И при переносе документов часто бывает, что моя НоменклатурнаяГруппа не заполнена.
Такие моменты нужно отловить и при переносе заполнить НоменклатурнуюГруппу программно созданным элементом с наименованием (к примеру) "Не заполнено в УПП"
1 Mitriy
 
22.05.13
18:31
в обработчике события ПослеЗагрузки ПКО документа анализируй табчасть и подставляй-создавай, что хочешь...
2 Никулин Леонид
 
22.05.13
18:31
В самом ПКО для НоменклатурныхГрупп в событии "Перед выгрузкой пишу":
Если Не Источник.ЭтоГруппа Тогда
   Сообщить(Источник);
   Если Не ЗначениеЗаполнено(Источник.Код) Тогда
       Сообщить("попал");
   КонецЕсли;
КонецЕсли;

но не попадаю в условие ("попал" не пробегает)
3 Никулин Леонид
 
22.05.13
18:33
ПКО спр"НоменклатурныхГрупп" или док"ТребованиеНакладная"?
4 Mitriy
 
22.05.13
18:34
см. (1), там у тебя будет параметр Объект - это уже созданный, но еще не записанный документ, который ты и можешь дозаполнить...
5 Никулин Леонид
 
22.05.13
18:34
(1) а можно кусочек кода?
6 Mitriy
 
22.05.13
18:34
ТребованиеНакладная
7 Mitriy
 
22.05.13
18:35
в форме ПКО есть кнопка "Информация по обработчикам"... рекомендую...
8 Никулин Леонид
 
22.05.13
18:37
а как там создать новый элемент справочника?
9 zladenuw
 
22.05.13
18:39
за тебя все делает универсальныйобменданными. а ты создаешь только правила. что откуда и куда.
10 Никулин Леонид
 
22.05.13
18:39
нашел место... ща попробую...
11 zladenuw
 
22.05.13
18:41
есть свойство объектнайден.
ОбъектНайден - Булево. Если значение параметра равно Ложь, то объект не идентифицирован, то есть не найден в информационной базе

и сделай то тебе рекомендуют в (7)
12 Волчара2010
 
22.05.13
18:42
(0) создай в бд предопределенный элемент справочника, в модуле объекта перед записью проверяй свойство ОбменДанными и заполняй предопределенным значением.
13 Никулин Леонид
 
22.05.13
18:45
(12) нельзя. Заказчик будет ругаться
14 Никулин Леонид
 
22.05.13
18:46
Если пользоваться ОбъектНайден, то наверное лучше в ПКО спр "НоменклатурныеГруппы" после загрузки
15 Mitriy
 
22.05.13
18:48
ахренеть...
16 Волчара2010
 
22.05.13
18:49
(13) заказчик будет проверять код?
17 Mitriy
 
22.05.13
18:50
(16) не учи плохому, он и сам научится... на фига делать фигню, если гораздо быстрее можно сделать хорошо?
18 Никулин Леонид
 
22.05.13
18:51
нет, но явно увидит предопределенный элемент. Нет. Этого делать не стоит.
19 zladenuw
 
22.05.13
18:52
после загрузки.
если пустая группа тогда
Объект.НоменклатурнаяГруппа = ПустаяНоменклатурнаяГруппаУПП
20 Волчара2010
 
22.05.13
18:54
(19) а почему решение в (12) - это плохо? Обоснуй!
21 zladenuw
 
22.05.13
18:55
лТЧПриемник = Объект.Товары;
Для каждого СтрокаТовары из лТЧПриемник цикл
    Если СтрокаТовары.НоменклатурнаяГруппа.Пустая() Тогда
        СтрокаТовары.НоменклатурнаяГруппа =Справочники.НоменклатурнаяГруппа.НайтипоНаименованию("Не заполнено в УПП");
        КонецЕсли;
КонецЦикла;

(20) а я тут при чем. не я спрашивал :)
22 Волчара2010
 
22.05.13
18:55
+(20) это вопрос к (17)
23 Mitriy
 
22.05.13
18:56
(20) щас... больше мне заняться нечем...
24 Никулин Леонид
 
22.05.13
18:58
щас попробую как в (21)...
25 Волчара2010
 
22.05.13
18:58
(23)  раз обосновать не можешь, то не гони понапраслину!
26 zladenuw
 
22.05.13
18:59
а вообще лучше в ПКО после загрузки если не объектнайден
подсовуй ему объект твоей группы. кароче миллион вариантов.
27 zladenuw
 
22.05.13
18:59
(26) в номенклатурные группе
28 Mitriy
 
22.05.13
19:01
(25) слушай, ты меня разыгрываешь, или на самом деле не видишь разницу?
29 Никулин Леонид
 
22.05.13
19:05
В ПКО "ТребованиеНакладная" в событии "После загрузки" пишу:

лТЧПриемник = Объект.Материалы;
Для каждого СтрокаТовары из лТЧПриемник цикл
    Если СтрокаТовары.НоменклатурнаяГруппа.Пустая() Тогда
        СтрокаТовары.НоменклатурнаяГруппа = Справочники.НоменклатурнаяГруппа.НайтипоНаименованию("Не заполнено в УПП");
    КонецЕсли;
КонецЦикла;


Почему-то не видит мою "номенклГруппу" (поле объекта не обнаружено)...
30 Волчара2010
 
22.05.13
19:07
(28) ну и в чем неоспоримые достоинства?
31 Mitriy
 
22.05.13
19:07
Справочники.НоменклатурнЫЕГруппЫ...
32 Mitriy
 
22.05.13
19:08
только поиск номенклатурной группы я хотя бы за цикл вынес...
33 Никулин Леонид
 
22.05.13
19:11
В ПКС у меня именно "НоменклатурнАЯГруппА".
А так пишу отрабатывает без ошибок. Пробегает "попал"


лТЧПриемник = Объект.Материалы;
Для каждого СтрокаТовары из лТЧПриемник цикл
    Если СтрокаТовары.НоменклатурнаяГруппа.Пустая() Тогда
        //СтрокаТовары.НоменклатурнаяГруппа = Справочники.НоменклатурнаяГруппа.НайтипоНаименованию("Не заполнено в УПП");
        Сообщить("попал");
    КонецЕсли;
КонецЦикла;
34 Волчара2010
 
22.05.13
19:11
(29) а если я потом переименую "не заполнено в УПП" во "франч УДАК". Где концы искать будешь?
35 Никулин Леонид
 
22.05.13
19:26
Теперь так пишу:

НовЭлемент = Справочники.НоменклатурныеГруппы.СоздатьЭлемент();
НовЭлемент.Наименование = "_Не заполнено в УПП";
НовЭлемент.Записать();

лТЧПриемник = Объект.Материалы;
Для каждого СтрокаТовары из лТЧПриемник цикл
    Если СтрокаТовары.НоменклатурнаяГруппа.Пустая() Тогда
        //СтрокаТовары.НоменклатурнаяГруппа = Справочники.НоменклатурнаяГруппа.НайтипоНаименованию("_Не заполнено в УПП");        
        //Сообщить("попал");
        СтрокаТовары.НоменклатурнаяГруппа = НовЭлемент;
        Сообщить(СтрокаТовары.НоменклатурнаяГруппа);
         
    КонецЕсли;
КонецЦикла;



че-то опять нифига
36 Никулин Леонид
 
22.05.13
19:39
Взлетело!!

Вот так написал:


лТЧПриемник = Объект.Материалы;
Для каждого СтрокаТовары из лТЧПриемник цикл
    Если СтрокаТовары.НоменклатурнаяГруппа.Пустая() Тогда
        СтрокаТовары.НоменклатурнаяГруппа = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("_Не заполнено в УПП");        
        Сообщить(Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("_Не заполнено в УПП"));
    КонецЕсли;
КонецЦикла;
37 Никулин Леонид
 
22.05.13
19:47
А че никто не кобзонит?
38 Aprobator
 
22.05.13
20:00
(37) боятся что чела с такой фамилией не перекобзонить :-)
39 Cujoko
 
22.05.13
20:01
А мог бы в обработчике (пишу по памяти) "Перед выгрузкой" ПКС "НоменклатурнаяГруппа" написать что-нибудь вроде:

Если Не ЗначениеЗаполнено(Значение) Тогда
Значение = "охтыжёжик";
КонецЕсли;

А в обработчике "Перед выгрузкой" ПКС "Наименование" ПКО "НоменклатурныеГруппы":

Если Источник = "охтыжёжик" Тогда
Значение = "_Не заполнено в УПП";
КонецЕсли;

Ну что-то в таком виде.
40 Никулин Леонид
 
22.05.13
20:18
(37) Спасибо большое. Теперь можно идти домой:)
41 Никулин Леонид
 
22.05.13
20:20
(39) Спасибо за активность. Ухожу.
42 Никулин Леонид
 
22.05.13
20:21
(40) не то написал. Конечно же спасибо за (38)
43 Никулин Леонид
 
22.05.13
22:41
(39) Кстати, я так пробовал. Че-то у меня не завелось.

Если Не ЗначениеЗаполнено(Значение) Тогда
Значение = "охтыжёжик";
КонецЕсли;

Надо создавать программно:

НовЭлемент = Справочники.НоменклатурныеГруппы.СоздатьЭлемент();
НовЭлемент.Наименование = "_Не заполнено в УПП";
НовЭлемент.Записать();

Только если это делать в ПКО, то будет создано столько элементов, сколько будет пройдено инераций. Если нужен только один элемент, то надо добавлять условие...
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс