|
Конвертация данных. Как создать единицу измерения | ☑ | ||
---|---|---|---|---|
0
olo_lo1
25.01.13
✎
01:25
|
Переношу данные по справочнику Номенклатура.
Как сделать так, что бы если у номенклатуры не выбрана единица измерения она создавалась автоматом при переносе по владельцу - элементу номенклатуры.. |
|||
1
sanja26
25.01.13
✎
01:52
|
Какая-то определенная что-ли?
ПриЗагрузке можно или послеЗагрузки. Объект.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию Если Единицы измерения подчиненный справочник, а не просто реквизит, то надо каждый раз создавать тут же новую |
|||
2
olo_lo1
25.01.13
✎
08:47
|
да, подчиненный, каждый раз создавать штуки
|
|||
3
ks_83
25.01.13
✎
08:52
|
Можно после окончательной загрузки по всей загруженной номенклатуре пробежаться и насоздавать эти единицы. Так быстрее работать будет.
|
|||
4
olo_lo1
25.01.13
✎
08:53
|
(3) класс, а можно описать как это сделать
|
|||
5
fenixx
25.01.13
✎
08:55
|
в ПКО справочника "Номенклатура" в обработчике "После загрузки" добавь проверку на существования единицы измерения для Объекта. Если не существует - создаешь
|
|||
6
olo_lo1
25.01.13
✎
08:57
|
(5) я в конвертации не силен, напиши пож пример
|
|||
7
fenixx
25.01.13
✎
09:04
|
(6) Извини, дружище, моё дело - стратегия. Тут объяснения полдня занять могут, в зависимости от твоей не сильности в КД. Ищи где правила конвертации объектов (ПКО), где там соответствующий обработчик. Там хелп есть, посмотри примеры из типовых конвертиций. Успехов )
|
|||
8
vitek89
25.01.13
✎
09:07
|
(0) А они разве не создаются? Там же есть такая штука - поля поиска. Если данные не находятся в приемнике по этим полям, то создается новый элемент
|
|||
9
cw014
25.01.13
✎
09:07
|
(6) Никто ничего просто так писать не будет
|
|||
10
Deamonicus
25.01.13
✎
09:12
|
после загрузки добавляешь:
Если НЕ ЗначениеЗаполнено(Объект.ЕдиницаИзмерения) Тогда НовЕд = Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); //тут далее заполняешь реквизиты... НовЕд.Наименование = ..... НовЕд.Владелец = Объект.Ссылка; НовЕд.Записать(); Объект = НовЕд.Ссылка; КонецЕсли; |
|||
11
olo_lo1
25.01.13
✎
11:37
|
(10) спасибо!
|
|||
12
olo_lo1
25.01.13
✎
11:44
|
КД - вообще крутейшая вещь, интересно кто ее разработал...
|
|||
13
olo_lo1
25.01.13
✎
11:44
|
и придумал
|
|||
14
cw014
25.01.13
✎
11:46
|
(12) Ее никто не разработал. Это инопланетная технология, привезенная на с альфы центавра, и внедренная людьми в черном в массы
|
|||
15
olo_lo1
25.01.13
✎
11:59
|
(10) хотел уточнить - а для чего вот эта последняя строчка
Объект = НовЕд.Ссылка; |
|||
16
Redkiy
25.01.13
✎
12:05
|
(15) найдешь обработчик, куда этот код вставить, прочитаешь хэлп по обработчику и все поймешь (надеюсь)
|
|||
17
ДемонМаксвелла
25.01.13
✎
12:06
|
Объект.ЕдиницаИзмерения = НовЕд.Ссылка;
|
|||
18
olo_lo1
25.01.13
✎
13:22
|
Вот что пишет при загрузке ..
Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(4842)}: Ошибка записи объекта ТипОбъекта = Номенклатура Объект = шт ОписаниеОшибки = Метод объекта не обнаружен (Записать) ПозицияМодуля = Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(4835) |
|||
19
hhhh
25.01.13
✎
13:31
|
(18)
Если НЕ Объект.ЭтоГруппа Тогда Если НЕ ЗначениеЗаполнено(Объект.ЕдиницаИзмерения) Тогда НовЕд = Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); //тут далее заполняешь реквизиты... НовЕд.Наименование = ..... НовЕд.Владелец = Объект.Ссылка; НовЕд.Записать(); Объект = НовЕд.Ссылка; КонецЕсли; КонецЕсли; |
|||
20
olo_lo1
25.01.13
✎
13:39
|
(19) теперь вот это
Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1620)}: Ошибка в обработчике события ПослеЗагрузкиОбъекта ИмяПКО = Номенклатура ТипОбъекта = Номенклатура Объект = моя номенклатура1 Обработчик = ПослеЗагрузкиОбъекта ОписаниеОшибки = Ошибка при вызове метода контекста (Записать): Значение поля "Номенклатура" не заполнено или заполнено неверно ПозицияМодуля = (8) КодСообщения = 21 |
|||
21
Naumov
25.01.13
✎
13:48
|
Ребята, а не учили перед созданием подчиненных объектов записывать прежде владельца?
|
|||
22
Naumov
25.01.13
✎
13:52
|
вариантов решения этой задачи несколько:
1) после загрузки номенклатуры записывать подчиненный, как тут предлагают. 2) для этапа выгрузки создать ПКО, которое будет подчиненный объект выгружать. При загрузке все самой загрузится. |
|||
23
olo_lo1
25.01.13
✎
13:57
|
(22) так это же в предопред процедуре ПОСЛЕЗАГРУЗКИОБЪЕКТА прописывается..
|
|||
24
Йохохо
25.01.13
✎
14:03
|
(18)(20) похоже ты упорно пихаешь в Справочник.ЕдиницыИзмерения в ПКО Номенклатура
|
|||
25
olo_lo1
25.01.13
✎
14:04
|
(24) ну да..я не понимаю зачем создавать новый ПКО номенклатура
|
|||
26
Naumov
25.01.13
✎
14:06
|
(23) А описание обработчика почитай, чтобы понять когда он вызывается.
|
|||
27
zladenuw
25.01.13
✎
14:10
|
(23) да и все работает.
Попытка Если НЕ Объект.ЭтоГруппа Тогда // Объект.СтавкаНДС = Перечисления.СтавкиНДС.НДС20; Объект.ВидНоменклатуры= Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Услуга"); Если ОбъектНайден или НЕ ЗначениеЗаполнено(Объект.БазоваяЕдиницаИзмерения) Тогда Объект.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("н/год").Ссылка; Объект.Записать(); КонецЕсли; СпрЕД = Справочники.ЕдиницыИзмерения; НайденЕд = СпрЕд.НайтипоНаименованию("н/год",,,Объект.Ссылка).Ссылка; Если СпрЕД.пустаяСсылка() = НайденЕд Тогда Единица = Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); Единица.Наименование = "н/год"; Единица.Коэффициент = 1; Единица.ЕдиницаПоКлассификатору = Объект.БазоваяЕдиницаИзмерения; Единица.Владелец = Объект.Ссылка; Единица.Записать(); Ед = Единица.Ссылка; Иначе Ед = НайденЕд; КонецЕсли; // // Если ОбъектНайден Тогда Если НЕ ЗначениеЗаполнено(Объект.ЕдиницаДляОтчетов) Тогда Объект.ЕдиницаДляОтчетов = Ед; Объект.ЕдиницаИзмеренияМест = Ед; Объект.ЕдиницаХраненияОстатков = Ед; Объект.Записать(); //Иначе //НеЗамещатьОбъект = Истина; КонецЕсли; иначе Объект.ЕдиницаДляОтчетов = Ед; Объект.ЕдиницаИзмеренияМест = Ед; Объект.ЕдиницаХраненияОстатков = Ед; Объект.Записать(); КонецЕсли; // КонецЕсли; Исключение // //ОписаниеОшибки(); КонецПопытки |
|||
28
olo_lo1
25.01.13
✎
14:17
|
(27) судя по всему либо у тебя 2 ПКО на номенклатуре либо он находит нужную номенклатуру и к ней уже подтягивает ед изм, иначе работать это не должно..
|
|||
29
Йохохо
25.01.13
✎
14:27
|
(25) эм, всё классно, и код рабочий, и вообще
но по (18) и (20) у тебя в ПослеЗагрузкиОбъекта ПКО Номенклатура Объект СправочникОбъект.ЕдиницыИзмерения. я не знаю, как еще пояснить мою догадку, она слишком бредовая |
|||
30
Naumov
25.01.13
✎
21:10
|
(28) Это почему же не должно?
|
|||
31
olo_lo1
25.01.13
✎
21:20
|
(30) так вы сами себе тогда противоречите в (21)
|
|||
32
olo_lo1
25.01.13
✎
21:24
|
После загрузки
Условия возникновения события: Событие выполняется после прочтения и установки атрибутов объекта из файла, но до его записи в информационную базу. Возможна модификация загруженного объекта. Соответственно создаться подчиненный объект по владкльцу как в 27 может только если владелец уже есть в базе. Видимо это работает если он в 22 раза конвертацию делает. |
|||
33
Naumov
26.01.13
✎
02:07
|
(32) в (27) он записывает номенклатуру (в событии после загрузки( делать это не кто не запрещает)), а потом создает подчиненный элемент.
Просто тебе перед применением твоего алгоритма создания элемента нужно просто ставить Объект.Записать() |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |