Имя: Пароль:
1C
1С v8
Создание единицы измерения при конвертации данных
0 ДедUndead
 
16.11.16
14:51
Коллеги, добрый день.

Подскажите, как сделать лучше следующее. КД 2.1.8 Переношу данные в УТ 11.2. В источнике на номенклатуре нет единиц измерения. При переносе элемента номенклатуры в ПКО в обработчике ПослеЗагрузки создаю новый элемент справочника УпаковкиЕдиницыИзмерения. Но есть одно но - элемент номенклатуры - владелец единицы измерения в этот момент еще не записан, поэтому запись единицы измерения падает с ошибкой - не установлено поле Номенклатура. Как лучше создать и записать элемент подчиненного справочника при переносе номенклатуры?
1 Timon1405
 
16.11.16
14:53
а типовые правила это момент не рассматривают?
2 ДедUndead
 
16.11.16
15:12
Исходная - самописанный шлак.
3 DailyLookingOnA Sunse
 
16.11.16
15:19
В самописном шлаке в модуле объектов в обработчике ПриЗаписи нужно поставить

Если ОбменДанными.Загрузка Тогда
   Возврат;
КонецЕсли;
4 ДедUndead
 
16.11.16
15:24
Оттуда данные читаются, пишутся в УТ 11.2. При переносе номенклатуры надо создать единицу измерения - подчиненный номенклатуре справочник.
5 takefive
 
16.11.16
15:24
ПКО без источника слабо нарисовать?
6 ДедUndead
 
16.11.16
15:25
Конечно, я могу это сделать в обработчике в конечной базе. Вопрос - как это сделать при конвертации?
7 ДедUndead
 
16.11.16
15:25
(5) Была такая мысль, не додумал, видимо.
8 takefive
 
16.11.16
15:28
хотя бы поля поиска... Остальное можно заполнить после загрузки
9 ДедUndead
 
16.11.16
15:29
(8) А подробнее можно? Как искать в Упаковках?
10 Йохохо
 
16.11.16
15:33
одноразовый перенос или обмен?
11 ДедUndead
 
16.11.16
15:35
Одноразовый
12 takefive
 
16.11.16
15:35
получить из входящих.В ПКС собираешь в структуру исходящих, в пко только флажки поставить
13 DailyLookingOnA Sunse
 
16.11.16
15:41
Да как костыль, в обработчике ПослеЗагрузки объект номенклатуры можно и записать.
14 ДедUndead
 
16.11.16
15:42
Вот вариант - В ПКС Упаковок я указываю, что получаю свойство владелец из входящих данных. При выгрузке номенклатуры их источника в обработчике послевыгрузки создаю исходящие данные и выгружаю по правилу. при загрузке упаковок проверяю, есть ли запись с таким владельцем, заполняю реквизиты. Вроде все.
15 ДедUndead
 
16.11.16
15:43
(13) пробовал, ошибки при записи, не хочется так делать.
16 takefive
 
16.11.16
15:48
(14) Нет... В ПКО Единицы измерения
17 DailyLookingOnA Sunse
 
16.11.16
15:48
"загрузке упаковок проверяю, есть ли запись с таким владельцем, заполняю реквизиты." - вот это непонятно.
А так всегда хватает ПКО, которое вызывается через ВыгрузитьПоПравилу и в которое передаются входящие данные. Даже если владелец еще не записан, ссылка на него есть либо в виде ГУИДа, либо будет создана по полям поиска.
18 takefive
 
16.11.16
15:50
В ПКС ЕдиницаИзмеренияОстатков ты формируешь исходящую структуру для ПКО ЕдиницыИзмерения
19 ДедUndead
 
16.11.16
15:53
В исходной нет единиц измерения. я что-то не понимаю, видимо.
20 ДедUndead
 
16.11.16
15:54
Я не понимаю, как искать в справочнике УпаковкиЕдиницыИзмерения, по каким полям исходной базы?
21 takefive
 
16.11.16
15:57
как костыль
После загрузки Номенклатура пиши
Объект.Записать();
Создаешь единицы где владелец Объект.Ссылка
Присваиваешь полям объекта единицы и еще раз
Объект.Записать();
22 h-sp
 
16.11.16
15:58
(20) поле Владелец.
23 ДедUndead
 
16.11.16
15:59
(21) Да, делал так уже. Ошибки при записи номенклатуры, хочется написать чистые правила.
24 h-sp
 
16.11.16
16:02
(23) ПолучитьСсылкуНового делай тогда
25 ДедUndead
 
16.11.16
16:02
(24) Делал. Не работает.
26 ДедUndead
 
16.11.16
16:03
(24) Ссылку по GUID, устанавливал - ошибка та же при записи.
27 takefive
 
16.11.16
16:16
Ты сделал ПКО для единиц измерения?
28 ДедUndead
 
16.11.16
16:20
Нет единиц измерения в источнике. В том-то и дело.
29 ДедUndead
 
16.11.16
16:20
Там нет штук, килограммов, метров и т.д.
30 ДедUndead
 
16.11.16
16:20
(27) Нет такого справочника.
31 takefive
 
16.11.16
16:20
без источника
32 takefive
 
16.11.16
16:21
приемник же есть
33 takefive
 
16.11.16
16:22
поля источник ПУСТЫЕ в ПКО и его ПКС
34 takefive
 
16.11.16
16:23
Как минимум должно быть ПКС Владелец
35 gorakh
 
16.11.16
16:25
(27) 1) Использовать обработчик "после загузки"
36 ДедUndead
 
16.11.16
16:25
Сделал так. ПКС Владелец, из входящих данных. Поля пусты.е
37 ДедUndead
 
16.11.16
16:26
Пробую собрать все.
38 takefive
 
16.11.16
16:27
Укажи поля поиска - флажки
39 ДедUndead
 
16.11.16
16:29
В ПКС Владелец?
40 takefive
 
16.11.16
16:30
да. Искать в приемнике нужно по владельцу
41 ДедUndead
 
16.11.16
16:31
Да, сделал. Пытаюсь все запустить...
42 takefive
 
16.11.16
16:32
В пко есть кнопка, которая тебе создаст код структуры входящих. Его вставь в ПКС ед. ПКО номенклатуры
43 takefive
 
16.11.16
16:35
и напиши заполнение этой структуры
44 ДедUndead
 
16.11.16
16:38
не увидел. Что-то совсем затупил - если у ПКО нет источника, соответственно, я не могу создать ПВО. И, соответственно, не смогу выполнить обработчик ПослеЗагрузки и заполнить новую упаковкуединицуизмерения...
45 takefive
 
16.11.16
16:41
ПВО тебе не нужен. Ты же выгружаешь Номенклатуру а не ед...
46 ДедUndead
 
16.11.16
16:42
Да, но как мне тогда заполнить поля новой подчиненной единицы измерения?...  Ведь в исходной такого справочника нет.
47 takefive
 
16.11.16
16:43
Для номенклатуры создай ПКС без источника. Приемник Единица
48 takefive
 
16.11.16
16:44
Укажи правило которое ты только что создал
49 ДедUndead
 
16.11.16
16:46
а, не надо создавать пко без источника. Только ПКС для номенклатуры без источника...
50 ДедUndead
 
16.11.16
16:49
Создал ПКС, источник пустой, приемник Номенклатура.ЕдиницаИзмерения. дальше что?
51 ДедUndead
 
16.11.16
16:49
У меня почти 12 ночи, уже все, видимо..
52 takefive
 
16.11.16
16:49
Перед выгрузкой Сформируй структуру исходящих для твоего правила
53 takefive
 
16.11.16
16:51
ого... Да это все вро де бы. т.е. ты передаешь В ПКО без источника данные. Удачи
54 ДедUndead
 
16.11.16
16:52
а где там эта кнопка?..
55 ДедUndead
 
16.11.16
16:54
В ПКО для Номенклатуры?
56 Михаил Козлов
 
16.11.16
16:54
Делал так (в ПослеЗагрузки в справочнике Номенклатура):
Если Объект.ЭтоНовый() Тогда
  ЗаписатьОбъектВИБ(Объект, Тип("СправочникСсылка.Номенклатура"));

КонецЕсли;// это чтобы ссылка появилась
// собственно ЕХО
Если НЕ Объект.ЭтоГруппа И НЕ Объект.Услуга И (НЕ ЗначениеЗаполнено(Объект.ЕдиницаХраненияОстатков) ИЛИ Объект.ЕдиницаХраненияОстатков.Владелец <> Объект.Ссылка) Тогда
    Если (НЕ ЗначениеЗаполнено(Объект.ЕдиницаХраненияОстатков) ИЛИ Объект.ЕдиницаХраненияОстатков.Владелец <> Объект.Ссылка) И НЕ Объект.ЭтоГруппа Тогда
            ВыборкаЕдиниц = Справочники.ЕдиницыИзмерения.Выбрать(, Объект.Ссылка);
            Если ВыборкаЕдиниц.Следующий() Тогда
                НайденнаяЕдиница = ВыборкаЕдиниц.Ссылка;
            Иначе
                НайденнаяЕдиницаОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
                НайденнаяЕдиницаОбъект.Наименование            = СокрЛП(Объект.БазоваяЕдиницаИзмерения);
                НайденнаяЕдиницаОбъект.ЕдиницаПоКлассификатору = Объект.БазоваяЕдиницаИзмерения;
                НайденнаяЕдиницаОбъект.Коэффициент             = 1;
                НайденнаяЕдиницаОбъект.Владелец                = Объект.Ссылка;
                НайденнаяЕдиницаОбъект.УстановитьНовыйКод();
                
                //НайденнаяЕдиницаОбъект.Записать();
                ЗаписатьОбъектВИБ(НайденнаяЕдиницаОбъект, Тип("СправочникСсылка.ЕдиницыИзмерения"));
                НайденнаяЕдиница = НайденнаяЕдиницаОбъект.Ссылка;
            КонецЕсли;
            
            Объект.ЕдиницаХраненияОстатков = НайденнаяЕдиница;
            Если НЕ ЗначениеЗаполнено(Объект.ЕдиницаДляОтчетов) Тогда
                Объект.ЕдиницаДляОтчетов = НайденнаяЕдиница;
            КонецЕсли;
    ИначеЕсли ЗначениеЗаполнено(Объект.ЕдиницаХраненияОстатков) И НЕ ЗначениеЗаполнено(Объект.ЕдиницаХраненияОстатков.Наименование) Тогда
            НайденнаяЕдиницаОбъект = Объект.ЕдиницаХраненияОстатков.ПолучитьОбъект();
            НайденнаяЕдиницаОбъект.Наименование            = СокрЛП(Объект.БазоваяЕдиницаИзмерения);
            НайденнаяЕдиницаОбъект.ЕдиницаПоКлассификатору = Объект.БазоваяЕдиницаИзмерения;
            ЗаписатьОбъектВИБ(НайденнаяЕдиницаОбъект, Тип("СправочникСсылка.ЕдиницыИзмерения"));        
    КонецЕсли;
КонецЕсли;
57 takefive
 
16.11.16
16:54
на последней закладке. Закладка есть только когда есть флаг получить из входящих. В ПКО для Единицы
58 ДедUndead
 
16.11.16
16:59
Про закладку пока смутно, видимо, завтра продолжу. Не понял, завтра все соберу. Всем спасибо, за код, за советы.
59 ДедUndead
 
16.11.16
16:59
Первый раз работаю  с КД.
60 ДедUndead
 
16.11.16
17:03
Все, дошло про исходящие. Спасибо takefive!!!
61 ДедUndead
 
16.11.16
17:04
Завтра напишу про результат.
62 ДедUndead
 
16.11.16
17:10
А, нет. Есть поле ЕдиницаИзмерения, которое надо заполнить. В исходящих я не смогу это поле заполнить - нет такого типа в исходной базе.
63 takefive
 
16.11.16
18:58
После загрузки заполняй
64 patapum
 
16.11.16
19:43
(0) как вариант, если не думать, для одноразовой загрузки. делаешь правило Номенклатура - Номенклатура и правило Номенклатура - Единица. сначала грузишь по первому. когда грузишь по второму - номенклатура уже есть.
65 ДедUndead
 
17.11.16
10:32
(64) Да, тоже вариант, хотел сделать за один раз. Не исключено, что эта загрузка может меняться потом и проходить несколько раз. Кто знает.
66 ДедUndead
 
17.11.16
12:18
Все получилось, всем спасибо.

Сделал ПКО УпаковкиЕдиницыИзмерения с пустым источником и приемником УпаковкиЕдиницыИзмерения. Указал в ПКО ПКС с приемником Владелец и получением из входящих данных.
Обработчик ПослеЗагрузки этого ПКО

<code>

ЕдиницаШтука = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоКоду("796");
    
Объект.ЕдиницаИзмерения = ЕдиницаШтука;
Объект.КоличествоУпаковок = 1;
Объект.МеждународноеСокращение = ЕдиницаШтука.МеждународноеСокращение;
Объект.НаименованиеПолное = ЕдиницаШтука.НаименованиеПолное;
Объект.Наименование = ЕдиницаШтука.Наименование;
Объект.ТипУпаковки = ЕдиницаШтука.ТипУпаковки;

</code>

В ПКО Номенклатура указал обработчик ПослеВыгрузки

<code>
ИсходящиеДанные = Новый Структура("Владелец");
ИсходящиеДанные.Владелец = Источник.Ссылка;
ВыгрузитьПоПравилу(,,ИсходящиеДанные,,"УпаковкиЕдиницыИзмерения");

</code>

И там же ПослеЗагрузки  

<code>
Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;
    
Если НЕ ЗначениеЗаполнено(Объект.ЕдиницаИзмерения) Тогда
    Единицы = Справочники.УпаковкиЕдиницыИзмерения.Выбрать(, Объект.Ссылка);
    Если Единицы.Следующий() Тогда
        Объект.ЕдиницаИзмерения = Единицы.Ссылка;
        Объект.ЕдиницаДляОтчетов = Единицы.Ссылка;
        Объект.КоэффициентЕдиницыДляОтчетов = 1;
    КонецЕсли;    
КонецЕсли;    


</code>