Имя: Пароль:
1C
1С v8
Изучаю КД, помогите немного :)
0 fantomrik
 
13.11.15
11:26
Задача:
В  Исходной  базе  в  документе  "Прием  сотрудника"  указывается  должность  сотрудника.  В
Конечной базе информация о должности хранится непосредственно в справочнике "Сотрудники".
Необходимо при переносе данных о приеме на работу обеспечить перенос должности сотрудника.
Так, чтобы значение из документа, было записано в элемент справочника "Сотрудники".
Подсказка. Для  того  чтобы  в  обработчике  ПКС  обратиться  к  текущей  выгружаемой  строке
документа,  необходимо  использовать  параметр  ОбъектКоллекции.  Таким  образом,  чтобы
получить  должность  сотрудника  из  строки  табличной  части,  нужно  использовать  выражение
ОбъектКоллекции.Должность.

Сделал ПКО для документа. В ПКС для должности приемник пустой (в приемнике должно перенестись в справочник), источник СправочникСсылка.ДолжностиСотрудников. И создал в ПКС "Должность" ПередВыгрузкой

ИсходящиеДанные = Новый Структура();
ИсходящиеДанные.Вставить("Код", ОбъектКоллекции.Должность.Код);
ИсходящиеДанные.Вставить("Наименование", ОбъектКоллекции.Должность.Наименование);
ИсходящиеДанные.Вставить("ПометкаУдаления", ОбъектКоллекции.Должность.ПометкаУдаления);

В этом ПКС указал правило ДолжностиСотрудников (которе создал, сопоставил Код, Наименование, ПометкаУдаления) и указал флаги получать из входящих данных.

Падает после загрузки первого документа и первой должности из него с ошибкой


Ошибка записи объекта
    ИмяПКО                 =  
    ТипОбъекта             =  Документ объект: Прием сотрудника
    Свойство               =  ДокументТабличнаяЧастьСтрока.ПриемСотрудника.Сотрудники.
    Значение               =  Сборщик мебели
    ТипЗначения            =  Должности сотрудников
    Объект                 =  Прием сотрудника 000000001 от 01.02.2012 12:00:00
    ОписаниеОшибки         =  Поле объекта не обнаружено
    ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(6362)
    КодСообщения           =  26


Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(6376)}: Ошибка записи объекта
    ИмяПКО                 =  
    ТипОбъекта             =  Документ объект: Прием сотрудника
    Свойство               =  ДокументТабличнаяЧастьСтрока.ПриемСотрудника.Сотрудники.
    Значение               =  Сборщик мебели
    ТипЗначения            =  Должности сотрудников
    Объект                 =  Прием сотрудника 000000001 от 01.02.2012 12:00:00
    ОписаниеОшибки         =  Поле объекта не обнаружено
    ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(6362)
    КодСообщения           =  26

Собственно видимо (я думаю) он после записи должности пытается ее в документ присобачить, а реквизита то нет такого. И почему так работает не понимаю, у меня в ПКС документа же идет для должности Должность->"" ( и описано выгружать в исх данные).
1 mikecool
 
13.11.15
11:27
сделать произвольный запрос и выбрать необходимые данные
2 fantomrik
 
13.11.15
11:33
(1) Не совсем понял. Мне нужно перегружая документы, создать должности, которые попадаются в документах. И можно чуть подробнее, я 2ой день вижу КД в глаза )
3 fantomrik
 
13.11.15
11:35
(0) У меня в принципе все работает по-моему, просто после отработки ПКС для должности, он почему то пытается в документ эту должность подставить... А должен просто выгрузить должность и дальше документы обрабатывать.
4 ViSo76
 
13.11.15
11:58
В обработке V8Exchan82.epf есть возможность делать отладку как при выгрузке так и при загрузке. Используй эту возможность для выявления своих ошибок.
5 gorakh
 
13.11.15
12:21
Читал информацию по обработчикам? При отладке хорошо помогает флаг в конфигураторе "остановка по ошибке"
6 ViSo76
 
13.11.15
12:27
(5) Он вывалится в обработку V8Exchan82.epf либо в код БСП. И что он там будет делать?
7 fantomrik
 
13.11.15
12:54
8 Другая
 
13.11.15
12:54
Нужно создать правило выгрузки для должностей (и правило конвертации объекта с пустым источником и указанным приемником). Далее сформировать таблицу с необходимыми для спр. должностей данными и передать ее в ПКО (помощник по обработчикам поможет в этом).
Документы выгружать без должностей (отключить или удалить это ПКС)

Вроде так
9 Другая
 
13.11.15
12:57
Точно не помню, но обработка, если не указан приемник, пытается найти реквизит по имени источника.
10 fantomrik
 
13.11.15
13:07
(8) Судя по задаче, выгрузить нужно именно те должности, которые есть в документе исходнике. Просто отключив ПКС для должности в документе и создав ПВО для должности - я выгружу все должности. Наверно можно ограничение в запросе выборки прописать, но это доп костыли, хотелось бы решить задачу, как в условии.

"(и правило конвертации объекта с пустым источником и указанным приемником)" не слышал о таком ( Есть где почитать об этом?
11 ViSo76
 
13.11.15
13:08
1. Можно правило конвертации справочника не делать, а перед записи документа создавать элемент справочника в случае его отсутствия.
2. Можно написать конвертацию из документа сразу в справочник сотрудников.

PS: Главное в справочнике чтобы были заполнены все обязательные поля.
12 ViSo76
 
13.11.15
13:10
(11) по пункту 2 дополнение.
2.1. Из документа "Прием  сотрудника" в справочник создать / обновить саму должность.
2.2. Из документа "Прием  сотрудника" в документ в базе приёмника.
13 fantomrik
 
13.11.15
13:13
(12) Не понимаю ( что мне нужно сделать конкретно по 2 пункту?
14 ViSo76
 
13.11.15
13:13
Есть TeamViewer?
15 ViSo76
 
13.11.15
13:16
Мой скайп в профиле. Есть есть TeamViewer помогу
16 Йохохо
 
13.11.15
13:18
забей на всё, и тупо в ПКО Сотрудник запросом получи должность
17 ViSo76
 
13.11.15
13:27
(16) Тогда уж в ПВД запросом получить данные для ПКО Сотрудник.
18 fantomrik
 
13.11.15
13:31
(17) Если получу данные в ПВД документа, отключу вызов ПКС в документе, как вызову ПКС Должности?
19 icrocodile
 
13.11.15
13:31
1. В ПКО ПриемСотрудника в ПКС Сотрудник заполняешь ИсходящиеДанные в обработчике ПередВыгрузкой код:

ИсходящиеДанные = Новый Структура; ИсходящиеДанные.Вставить(«ДолжностьСотрудника»,ОбъектКоллекции.Должность);
Указываешь для этого ПКС ПКО Сотрудники
2. Создаешь в ПКО Сотрудники ПКС ДолжностьСотрудника» с флагом Получить из входящих данных и пустым источником.

Все!
20 Йохохо
 
13.11.15
13:32
(18) в ПВД документа достаточно в ТЧ посмотреть нет?
(19) +
21 fantomrik
 
13.11.15
13:32
(19) а (7) не идентичный вариант это?
22 Йохохо
 
13.11.15
13:33
(21) нет, там ты не попал в Сотрудника
23 ViSo76
 
13.11.15
13:38
(19) И что будет если такой должности нет в справочнике?
В документе будет битая ссылка?
24 Альбатрос
 
13.11.15
13:46
(23) Будет пустая ссылка
25 icrocodile
 
13.11.15
13:51
(23) ну так должности тоже нужно переносить, надо ПКО для справочника Должности
26 ViSo76
 
13.11.15
13:53
Насоветовали умники :)
1. Нужно чтобы был ПВД для сотрудника на основе документа "Прием  сотрудника" запросом.
2. Мутить не нужно со всякими ПКС после этого.
27 icrocodile
 
13.11.15
13:55
(26) согласен, но я так понимаю это домашнее задание из курса по КД, они еще там не дошли до произвольной выборки в ПВД )
28 Альбатрос
 
13.11.15
13:56
(26) а как работает произвольная выгрузка с зарегистрированными ссылками в плане обмена?
29 ViSo76
 
13.11.15
14:07
(28) Примерно так:

оЗапрос = Новый Запрос( "ВЫБРАТЬ
    спрДолжности.Ссылка,
    спрДолжности.Код,
    спрДолжности.Наименование
ИЗ
    Документ.ПриемСотрудника.Изменения КАК тзИзменения

    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриемСотрудника КАК докПрием
        ПО докПрием.Ссылка = тзИзменения.Ссылка

    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДолжностиСотрудника КАК спрДолжности
        ПО спрДолжности.Ссылка = докПрием.Должность
ГДЕ
    тзИзменения.Узел = &Узел" );

оЗапрос.УстановитьПараметр( "Узел", Параметры[ "Узел" ] );

ВыборкаДанных = оЗапрос.Выполнить().Выгрузить();

В ПВД ставишь "Произвольный алгоритм"
В ПКО Сотрудника ставишь галочку "Не запоминать выгруженные объекты"
30 fantomrik
 
13.11.15
14:54
(19) Отработало :)

Спасибо всем за участие! Другие алгоритмы наверно тоже рабочие, но для меня пока слишком сложные...