Имя: Пароль:
1C
1С v8
Конвертация Контрагенты
,
0 AlexeyAlexey Alexey
 
23.08.13
14:05
У меня в конвертации между ЗУП и КА реализован следующий перенос.

Переносим справочник "Способы отражения в реглментированном учете"
Там в одной из проводок есть элементы справочника "Контрагенты".

На данный момент выгрузка контрагентов происходит так:
- Ищем по ссылке
- Если не находим ищем по связке ИНН, Наименование, ЭтоГруппа
- Далее если не нашел, то создаем элемент. Событие "После загрузки" проверяет, есть ли в справочнике контрагент с таким кодом, и если есть, то генерируется новый код.

Хотелось бы еще следующий момент. Нужно, чтобы если в базе-приемнике уже есть элемент с таким кодом (и не важено ИНН, наименование и прочее), то грузить в базу контрагента НЕ НАДО. Проводка должна быть с пустой ссылкой.

Я сделал изменение в "После загрузки". Был код:

Если Не ОбъектНайден Тогда
    Если Справочники.Контрагенты.НайтиПоКоду(Объект.Код) <> Справочники.Контрагенты.ПустаяСсылка() Тогда
        Объект.УстановитьНовыйКод();
    КонецЕсли;
КонецЕсли;

стал код:

Если Не ОбъектНайден Тогда
    Если Справочники.Контрагенты.НайтиПоКоду(Объект.Код) <> Справочники.Контрагенты.ПустаяСсылка() Тогда
        Отказ = Истина;
    КонецЕсли;
КонецЕсли;

Но в этом случае не только не записывает контрагента, что правильно, но и не записывает главный объект, элемент справочника "Способы отражения зарплаты в регл учете".

Как быть?
1 AlexeyAlexey Alexey
 
23.08.13
14:12
up
2 AlexeyAlexey Alexey
 
23.08.13
14:29
up1
3 dk
 
23.08.13
14:34
Это тебе надо в поля поиска лезть, а не в после загрузки
4 AlexeyAlexey Alexey
 
23.08.13
14:36
Ок, сейчас посмотрю, что там
5 dk
 
23.08.13
14:38
хотя отказа я там не нашел
6 AlexeyAlexey Alexey
 
23.08.13
14:42
Нет, это не то. Мне нужно, если есть такой код в базе, чтобы он в значение затолкал пустую ссылку.
7 Абыр
 
23.08.13
15:52
Вообще странно, что отказ в ПослеЗагрузки у контрагента вызывает отказ и для способа отражения.
А так можно попробовать поэкспериментировать с параметрами в ПослеЗагрузки:
Ссылка - установить пустую ссылку на контрагента
ОбъектНайден - установить в Истина
ОбъектМодифицирован - установить в Ложь
8 Odavid
 
23.08.13
16:41
Перегружай все через DBF, и не возись с этими КД.
Тем более - если типовые правила не подходят.
9 AlexeyAlexey Alexey
 
24.08.13
07:03
(7) Попробую Объект найден поставить в истину
10 Mikhail Volkov
 
24.08.13
08:08
"После загрузки" отказ записи какого объекта: Контрагент или "Способы отражения зарплаты в регл учете"?
Попробуй заменить ОбъектНайден на Не Объект.Ссылка.Пустая()
11 gorakh
 
24.08.13
12:39
(8)"Вы нелюбите .... значит ВЫ не умеете их готовить". КД очень упрощает жизнь при переносе данных + полная интеграция в стандартные конфигурации и механизмы платформы.
12 AlexeyAlexey Alexey
 
26.08.13
05:30
(10) "После загрузки" отказ записи какого объекта: Контрагент или "Способы отражения зарплаты в регл учете"?

Текст отказа написал в правилах контрагентов, а объект не выгрузился весь элемент "Способы отражения зарплаты в регл учете".
13 Cyberhawk
 
26.08.13
05:37
(12) может, в ПКО способов отражения есть проверка на заполненность контрагента и отказ в случае незаполненности?
14 AlexeyAlexey Alexey
 
26.08.13
05:45
(7) Не получилось объект записывется без кода, только наименование, чисто чтобы ссылочка была
(13) Да, как вариант, можно попробывать править не правила контрагентов, а правила способов учета, в этом варианте мне не нравится, что если контрагенты будут еще где-то, то там также придется ставить этот код.
15 AlexeyAlexey Alexey
 
26.08.13
06:08
Вообщем, так:
Не помогает ни Отказ = Истина
ни ОбъектНайден = ИСТИНА
Он все равно пишет ссылку, без реквизитов, даже без кода, но с наименованием.
16 AlexeyAlexey Alexey
 
26.08.13
06:22
Хотел сделать так, чтобы какая-то определнная ссылка ставилась хотя бы. Но ссылки присвоить можно только в полях поиска, а проверить на наличие такого кода можно только в обработчике "ПослеЗагрузки"
17 AlexeyAlexey Alexey
 
26.08.13
07:21
Может у кого есть еще идеи? Если коротко описатьпроблему, то
Нужно оставлять не заполненным значение реквизита справочника в случаях, когда такой код в справочнике уже есть. При этом поиск элемента ведется не по коду, а по наименовнаию и ИНН или по ссылке.
18 AlexeyAlexey Alexey
 
26.08.13
10:29
up
19 AlexeyAlexey Alexey
 
26.08.13
11:27
Помогите, люди добрые...
20 zladenuw
 
26.08.13
11:49
в кд. открой справку

Обработчики "Правила конвертации объектов"
При загрузке

и убери по ссылке(там же не ссылка,а по внутреннему индетификатору). у меня так дубли шли хоть инн и наименование были одинаковые
21 be-may
 
26.08.13
11:57
(17) "Хотелось бы еще следующий момент. Нужно, чтобы если в базе-приемнике уже есть элемент с таким кодом (и не важно ИНН, наименование и прочее), то грузить в базу контрагента НЕ НАДО. "

а что если ....


ПКО "Способы отражения в реглментированном учете"

ПКС Контрагент. Ставишь галочку "получить из входящих данных" , правило конвертации указываешь "твоеправилоДляКонтрагентов". (или можешь создать новое с поиском, как у тебя в (0)).
В алгоритме "перед выгрузкой" ЭТОГО(!) ПКС  примерно такой код

Если ВходящиеДанные = Неопределено Тогда
    Отказ = Истина;
КонецЕсли;

---
т.е. ты уже на этапе выгрузки регистра не выгружаешь контрагента, если он не найден в источнике.

// при загрузке ж уже поздно что либо проверять, а тем более после..
22 Жан Пердежон
 
26.08.13
12:12
Попробуй поиск объекта выполнить в обработчике "Поля поиска" и в нужном месте добавить:

ПрекратитьПоиск = Истина;
ОбъектНайден = Истина;
СсылкаНаОбъект = Справочники.Контрагенты.ПустаяСсылка()
23 Жан Пердежон
 
26.08.13
12:18
(21) ошибка в том, на этапе выгрузки не известно, будет ли найден этот объект в приемнике или нет.
24 be-may
 
26.08.13
12:39
(23) так ведь это же самое можно сказать и про любой другой выгружаемый объект (справочник, документ,..) : "на этапе выгрузки неизвестно, будет ли найден этот объект в приемнике или нет."
25 AlexeyAlexey Alexey
 
26.08.13
12:43
(21) т.е. ты уже на этапе выгрузки регистра не выгружаешь контрагента, если он не найден в источнике.

Мне надо искать в приемнике, а не в источнике
26 AlexeyAlexey Alexey
 
26.08.13
12:45
(22) пробывал, но

ПараметрыОбъекта - либо Неопределено либо Соответствие, в котором хранятся дополнительные параметры, переданные для данного объекта из источника в приемник. Если параметров передано не было, то ПараметрыОбъекта = Неопределено. В данном обработчике соответствие содержит только те параметры, для которых УСТАНОВЛЕН ПРИЗНАК ПОИСКА. а у меня он не стоит, и не надо.
27 be-may
 
26.08.13
12:48
"т.е. ты уже на этапе выгрузки регистра не выгружаешь контрагента, если он не найден в источнике. "

вот эту фразу я неправильно написала. ее не нужно читать.. зарапортовалась, сорри. :(

попробуй просто.
28 be-may
 
26.08.13
12:50
(26) а какой код у тебя в Поля поиска ?
29 Жан Пердежон
 
26.08.13
13:11
(26) это точно к (22)?
30 AlexeyAlexey Alexey
 
30.08.13
05:04
(27) Я не могу на этапе выгрузки проверку сделать (если только COM соединение к приемнику не сделать :))), мысль, но ведь и правда можно сделать ). Если ничего не поможет, я сделаю COM соединение.
31 AlexeyAlexey Alexey
 
30.08.13
05:05
(28) В поле поиска у меня ИНН и Наименование. И так и должно быть, так как основное условие такое, ищем по ссылке, если не находим, то ищем по ИНН и наименованию, если не находим, то создаем. Но при этом создавать с кодом, который уже есть - НЕЛЬЗЯ, пусть будет пустое значение.
32 AlexeyAlexey Alexey
 
30.08.13
05:08
(29) Да. Проблема в том, что во время "Поля поиска" еще не загружены данные для загрузки, и и для проверки элемента доступны только те элементы, которые отмечены галочками "Поиск". Мой реквизит "Код" не отмечен, следовательно в обработчике "поля поиска" я не могу посмотреть значение.
33 AlexeyAlexey Alexey
 
13.09.13
07:05
Итак: воообщем, я витоге решил задачу. Для тех, кто наткнется, пишу свое решение.

Описание проблемы еще раз:
Есть в ЗУП проводка, ее кидают в БП. При этом ссылки, которые в ней также переносятся. Среди ссылок есть ссылка на контрагента. По правилу, контрагента надо искать по ссылке, если не нашли по связке наименование и ИНН.

При этом бухгалтеры выдвинули новое условие: не должен переносится контрагент, если в справочнике уже есть контрагент с таким кодом.

Проблема была в том, что перед выгрузкой проверять не с чем (база применик недоступна). А в момент загрузки, если сделать Отказ = Истина, не переносится ВСЯ проводка (а должна быть просто пустая ссылка), если сбросить ссылку на загружаемый элемент, то загрузка все равно создает ссылку с наименованием, пусть и без кода и прочих реквизитов.

Решение:
1. Сделал еще одно правило по справочнику Контрагенты, которое является точной копией первого правила за исключением того, что в обработчике ПослеЗагрузки указать, что если такой код в приемнике уже есть, то отказ = истина.
2. В первом правиле указал, что если элемент не найден, то элемент не создается.
3. Добавил специальную выгрузку справочника Контрагенты и поместил ее в самый верх очереди. При этом правило как раз новое, а старое правило без создания элементов будет использоваться во всех остальных случаях. Выгрузка справочника выполняется проивзодльным алгоритмом, то есть делаем запрос, в котором собираем всех контрагентов, которые используются в интересующих нас объектах и выгружаем их.
4. Для элементов, имеющих несколько типов (например Субконто, как в нашем случае), нужно в обработчике При выгрузке сделать код, типа если значение ссылка контрагент, то имя правила такое то. Иначе он будет использовать любое.

Все. Как итог мы получаем следующее: сначала загружаются элементы справочника. Если такие коды есть, то элемент не грузится. Потом грузим проводки, у проводок такое правило контрагентов используется, которое не создает, если не находит элементы.
Как итог, задача решена.
34 Cyberhawk
 
13.09.13
09:41
(33) может, на ИС опубликовать?