Имя: Пароль:
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) Кстати, я так пробовал. Че-то у меня не завелось.

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

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

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

Только если это делать в ПКО, то будет создано столько элементов, сколько будет пройдено инераций. Если нужен только один элемент, то надо добавлять условие...
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший