Имя: Пароль:
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) Отработало :)

Спасибо всем за участие! Другие алгоритмы наверно тоже рабочие, но для меня пока слишком сложные...
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn