Помогите пожалуйста, настраиваю правила обмена, но работают некорректно.

1. user973528 29.08.18 14:21 Сейчас в теме
Прошу помощи, в базе источнике отсутствуют у документов "ЗаказКлиента" договоры контрагентов , нужно чтобы при загрузке в базу приемник эти самые договора создавались сами с заданным наименованием . Как это можно сделать? Написал код но не отрабатывает, в чем ошибка?
Прикрепленные файлы:
Вознаграждение за ответ
Показать полностью
Найденные решения
34. plevakin 29.08.18 16:18 Сейчас в теме
(28) Мы договор создаем ПРИ ЗАГРУЗКЕ. Источника никакого нет. Мы про него ничего не знаем. Есть только файл выгрузки. В котором написано: "давайте создадим договор".

Конечно бездумно договор создавать не правильно. Ибо, сколько раз нажмем кнопку загрузить, столько договоров и создастся.

Поэтому правильнее сначала поискать, если нашли, то подсунуть ссылку, а если не нашли то создавать.

....

Посмотрел изначально задачу. Там же уже переносится договор в договорконтрагента. Зачем велосипед городить после загрузки? Если не переносился / не создавался нужно смотреть почему.
user973528; +1 Ответить
21. plevakin 29.08.18 16:02 Сейчас в теме +0.04 $m
(15) Значит написали не в ПКО - после загрузки.

На изначальной картинке все не верно. там ПКС, а надо ПКО. и закладок в нем будет не три, а восемь. Ваша - последняя.

Плюс, откройте для себя кнопку Информация по обработчикам, там все переменные расписаны, и примеры хорошие.

И еще. Добавьте что-ли Сообщить("записан " ) после записи. Плюс посмотрите в журнале регистрации или консоли запросов проверьте, точно записан, или просто в справочнике не видно.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. alex-l19041 8 29.08.18 15:24 Сейчас в теме +0.05 $m
(1) создавать договор можно в ПКО "После загрузки" (и не забудьте заполнить все необходимые реквизиты и записать )
5. user973528 29.08.18 15:25 Сейчас в теме
(4)
(1) создавать договор можно в ПКО "После загрузки" (и не забудьте записать )
Вот там теперь и борюсь, создаваться опять не хочет и там
7. alex-l19041 8 29.08.18 15:27 Сейчас в теме
(5) какую ошибку при создании договора ?
12. user973528 29.08.18 15:41 Сейчас в теме
(7) Обмен проходит, но в приемнике договора так и не создаются
2. config 187 29.08.18 15:11 Сейчас в теме
Эм... А заполнить и записать Договор?
3. user973528 29.08.18 15:12 Сейчас в теме
(2)
Эм... А заполнить и записать Договор?

Если Не Источник.Договор Тогда 
	А = СправочникСсылка.ДоговорыКонтрагентов.Создать();
	А.Наименование = "Счет Фактура";
	А.Записать();
КонецЕсли


Теперь так, всё-равно не хочет
6. config 187 29.08.18 15:26 Сейчас в теме
А у договора есть еще реквизиты кроме наименования?
Может у него есть Владелец, Организация, Вид, Валюта и др?
alex-l19041; +1 Ответить
8. user973528 29.08.18 15:27 Сейчас в теме
(6)
Может у него есть Владелец, Организация, Вид, Валюта и др?

Есть,Организация и Контрагент
10. config 187 29.08.18 15:31 Сейчас в теме
(8)
Есть,Организация и Контрагент

Надо заполнить.
Созданный договор нужно присвоить реквизиту

Источник.Договор = А.Ссылка;
11. user973528 29.08.18 15:36 Сейчас в теме
(6) Думаете может не создаваться из-за незаполненных реквизитов?
9. user973528 29.08.18 15:30 Сейчас в теме
Если Не Источник.Договор Тогда 
	А = Справочники.ДоговорыКонтрагентов.Создать();
	А.Наименование = "Счет Фактура";
	А.Организация  = Источник.Организация;
	А.Контрагент   = Источник.Контрагент;
	А.Записать();
КонецЕсли


Написал теперь так, пытаюсь снова загрузить

Ошибка типа Булево не определно
13. alex-l19041 8 29.08.18 15:47 Сейчас в теме
(9)
в ПКО "После загрузки"
- надо работать не с Источник, а Объект
14. user973528 29.08.18 15:49 Сейчас в теме
(13)
Объект


Источник.Договор тоже менять на Объект.Договор?
16. config 187 29.08.18 15:54 Сейчас в теме
15. user973528 29.08.18 15:53 Сейчас в теме
(13) Переменная не определена (Объект)
17. alex-l19041 8 29.08.18 15:54 Сейчас в теме
(15)вот пример

Объект.ДатаОплаты = Объект.Дата ;

Если Объект.Проведен Тогда
	
	Попытка
		Объект.Записать(РежимЗаписиДокумента.Проведение)
	Исключение
		Объект.Проведен = Ложь;
		 Сообщить(ОписаниеОшибки());
		 
         КонецПопытки
	
	КонецЕсли
Показать
18. user973528 29.08.18 15:55 Сейчас в теме
(17)
Объект.ДатаОплаты = Объект.Дата ;

Если Объект.Проведен Тогда

Попытка
Объект.Записать(РежимЗаписиДокумента.Проведение)
Исключение
Объект.Проведен = Ложь;
Сообщить(ОписаниеОшибки());

КонецПопыт


На все объекты ошибки ссылает
21. plevakin 29.08.18 16:02 Сейчас в теме +0.04 $m
(15) Значит написали не в ПКО - после загрузки.

На изначальной картинке все не верно. там ПКС, а надо ПКО. и закладок в нем будет не три, а восемь. Ваша - последняя.

Плюс, откройте для себя кнопку Информация по обработчикам, там все переменные расписаны, и примеры хорошие.

И еще. Добавьте что-ли Сообщить("записан " ) после записи. Плюс посмотрите в журнале регистрации или консоли запросов проверьте, точно записан, или просто в справочнике не видно.
24. user973528 29.08.18 16:09 Сейчас в теме
(21) Ошибку теперь выдаёт "Поле объекта не обнаружено (Договор)"
58. user973528 29.08.18 17:44 Сейчас в теме
(21) Еще такой вопрос, а если справочник "Номенклатурные группы" не с чем сопоставить, потому что он в источнике отсутствует, а реквизит в приемнике заполнить нужно. Как быть?
19. user973528 29.08.18 15:56 Сейчас в теме
Если Источник.Договор = Неопределено  Тогда 
	А = Справочники.ДоговорыКонтрагентов.Создать();
	А.Наименование = "Счет Фактура";
	А.Номер        = "120";
	А.Организация  = Объект.Организация;
	А.Контрагент   = Объект.Контрагент;
	А.ВидДоговора  = Перечисления.ВидыДоговоровКонтрагента.СПокупателем;
	А.Записать();
КонецЕсли
Показать


В ПКО документа "ЗаказКлиента" при Выгрузке

Когда ставлю Если Объект.Договор то выходит ошибка ("Переменная объект неопределенно")
20. alex-l19041 8 29.08.18 16:00 Сейчас в теме
(19)в ПКО "После загрузки" !!!
22. alex-l19041 8 29.08.18 16:03 Сейчас в теме
(19)
Если Источник.Договор = Неопределено Тогда
- эти лишнее.

после записи нового договора

Объект.Договор = НовыйДоговор.Ссылка
23. user973528 29.08.18 16:06 Сейчас в теме
(22)

Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1274)}: Ошибка в обработчике события ПослеЗагрузкиОбъекта
ИмяПКО = СчетНаОплатуПокупателю00001
ТипОбъекта = Счет покупателю
Объект = Счет покупателю КА00-001105 от 27.08.2018 10:54:28
Обработчик = ПослеЗагрузкиОбъекта
ОписаниеОшибки = Поле объекта не обнаружено (Договор)
ПозицияМодуля = (1)
КодСообщения = 21
26. alex-l19041 8 29.08.18 16:09 Сейчас в теме
(23) Код ? (который сейчас выдает ошибку)
28. user973528 29.08.18 16:12 Сейчас в теме
(22)Объект.Договор = НовыйДоговор.Ссылка что вот эта строчка даёт?

И почему убрать проверку на заполнение?
Как тогда проверить есть ли в источнике договор или нет
31. alex-l19041 8 29.08.18 16:14 Сейчас в теме
(28) в базе источнике отсутствуют у документов "ЗаказКлиента" договоры контрагентов .... Зачем проверка?
32. user973528 29.08.18 16:15 Сейчас в теме
(31)
договоры


В некоторых документах бывает есть
36. alex-l19041 8 29.08.18 16:19 Сейчас в теме
(32)Если НЕ ЗначениеЗаполнено(Объект.ДоговорКонтрагента) Тогда
//создаем новый договор
34. plevakin 29.08.18 16:18 Сейчас в теме
(28) Мы договор создаем ПРИ ЗАГРУЗКЕ. Источника никакого нет. Мы про него ничего не знаем. Есть только файл выгрузки. В котором написано: "давайте создадим договор".

Конечно бездумно договор создавать не правильно. Ибо, сколько раз нажмем кнопку загрузить, столько договоров и создастся.

Поэтому правильнее сначала поискать, если нашли, то подсунуть ссылку, а если не нашли то создавать.

....

Посмотрел изначально задачу. Там же уже переносится договор в договорконтрагента. Зачем велосипед городить после загрузки? Если не переносился / не создавался нужно смотреть почему.
user973528; +1 Ответить
35. user973528 29.08.18 16:19 Сейчас в теме
(34)

Поэтому правильнее сначала поискать, если нашли, то подсунуть ссылку, а если не нашли то создавать.


Они переносятся, если в источнике они есть, но нужно их создать если в источнике нет договоров
39. plevakin 29.08.18 16:22 Сейчас в теме
(35) Понятно. А что если в источнике нет, а например грузим второй раз. Такое бывает. Поэтому вначале все равно надо поискать. Проще запросом. "Выбрать Т.Ссылка из справочник.ДОговорыКонтрагентов Т ГДЕ Т.Организация = &Орг И Т.Владелец = &Контр И Т.Наименование = &НаименованиеКотороеМыДаемНовымДоговорам .

И если запрос пустой тогда создавать, если не пустой, то подставлять найденное значение.
alex-l19041; +1 Ответить
41. user973528 29.08.18 16:32 Сейчас в теме
(39) вот сами данные документа
Прикрепленные файлы:
67. tusv 211 31.08.18 18:26 Сейчас в теме
(34) Не нравится Ваше решение. Создавать при загрузке ни чего не надо. Все гораздо проще. Есть ПКО Договоры с заполненным соответствием Источника и Приемника. Давайте его использовать в ПКС и полностью передадим его в структуру
Например в ПКС При выгрузке Пишем
Значение = Новый Структура("Наименование,Владелец,Организация,ВидДоговора,Дата"
   ,<Сформированное наименование договора>
   ,Источник.Контрагент,
   ,Источник.Организация
   ,Перечисления.ВидыДоговоров.СПокупателем
   ,<Нужная дата>);

Система все сделает сама
25. plevakin 29.08.18 16:09 Сейчас в теме
Так в приемнике он не Договор, а ДоговорКонтрагента.

Правильно


Объект.ДоговорКонтрагента = НовыйДоговор.Ссылка
alex-l19041; +1 Ответить
27. user973528 29.08.18 16:10 Сейчас в теме
(25)
НовыйДоговор


Так и писать НовыйДоговор.Ссылка?
30. alex-l19041 8 29.08.18 16:12 Сейчас в теме
(27) как назвали переменную в которой новый договор, так и пишите... "НовыйДоговор" - просто пример
29. plevakin 29.08.18 16:12 Сейчас в теме
Если

А = Справочники.ДоговорыКонтрагентов.Создать();
А.Наименование = "Счет Фактура";
А.Номер = "120";
А.Организация = Объект.Организация;
А.Контрагент = Объект.Контрагент;
А.ВидДоговора = Перечисления.ВидыДоговоровКонтрагента.СПокупателем;
А.Записать();

То

Объект.ДоговорКонтрагента = А.Ссылка
33. user973528 29.08.18 16:18 Сейчас в теме
Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1274)}: Ошибка в обработчике события ПослеЗагрузкиОбъекта
ИмяПКО = СчетНаОплатуПокупателю00001
ТипОбъекта = Счет покупателю
Объект = Счет покупателю КА00-001105 от 27.08.2018 10:54:28
Обработчик = ПослеЗагрузкиОбъекта
ОписаниеОшибки = Метод объекта не обнаружен (Создать)
ПозицияМодуля = (1)
КодСообщения = 21
37. plevakin 29.08.18 16:19 Сейчас в теме
Напишите ваше сообщение
(33) Ну, СоздатьЭлемент() же, коллега :)
38. alex-l19041 8 29.08.18 16:21 Сейчас в теме
(33) код создания и заполнения нового договора лучше протестировать перед тем как писать в правилах обмена
40. user973528 29.08.18 16:29 Сейчас в теме
Поле объекта не обнаружено (Контрагент)
Прикрепленные файлы:
42. plevakin 29.08.18 16:34 Сейчас в теме
(40)

скорее всего

А.Владелец = Объект.Контрагент
43. user973528 29.08.18 16:35 Сейчас в теме
(42)

Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1274)}: Ошибка в обработчике события ПослеЗагрузкиОбъекта
ИмяПКО = СчетНаОплатуПокупателю00001
ТипОбъекта = Счет покупателю
Объект = Счет покупателю КА00-001105 от 27.08.2018 10:54:28
Обработчик = ПослеЗагрузкиОбъекта
ОписаниеОшибки = Ошибка при вызове метода контекста (Записать): Значение поля "Контрагент" не заполнено или заполнено неверно
ПозицияМодуля = (8)
КодСообщения = 21
46. plevakin 29.08.18 16:40 Сейчас в теме
(43) Как советовали в (38), сделайте обработку с реквизитом СчетНаОплатуПокупателя. и попробуйте в ней создать программно Договор для Контрагента из этого счета. После этого, этот код можно будет вставить в обработчик послезагрузки.
47. user973528 29.08.18 16:45 Сейчас в теме
(46)
Как советовали в (38), сделайте обработку с реквизитом СчетНаОплатуПокупателя. и попробуйте в ней создать программно Договор для Контрагента из этого счета. После этого, этот код можно будет вставить в обработчик послезагрузки.


Хорошо, еще такой вопрос. Как можно в правилах сделать так чтобы новая номенклатура не загружалась и падала в папку с кодом который известен?
48. plevakin 29.08.18 16:48 Сейчас в теме
(47) Не понял. "Не загружалась" и "Падала в папку" для меня взаимоисключающие вещи.

Чтобы падала в папку просто.
В том же ПКО ПослеЗагрузки
Объект.Родитель = Справочники.Номенклатура.НайтиПоКоду("0001");

Чтобы не загружалась, В ПКО ПередВыгрузкой поставить Отказ = истина;
50. user973528 29.08.18 16:53 Сейчас в теме
(48) А если из документа нужно чтобы номенклатура сохранялась в папке по коду, то тогда нужно
Объект.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("0001");?
52. plevakin 29.08.18 16:58 Сейчас в теме
(50) Если только из одного документа, то проще создать копию ПКО Номенклатура
и в нем прописать в ПКО ПослеЗагрузки
Объект.Родитель = Справочники.Номенклатура.НайтиПоКоду("0001");

и в этом документе у номенклатуры указать это правило.
53. user973528 29.08.18 16:59 Сейчас в теме
(52)
Если только из одного документа, то проще создать копию ПКО Номенклатура
и в нем прописать в ПКО ПослеЗагрузки
Объект.Родитель = Справочники.Номенклатура.НайтиПоКоду("0001");

и в этом документе у номенклатуры указать это правило.


Создаётся так же через "Синхронизацию объектов?"
54. user973528 29.08.18 17:03 Сейчас в теме
(52) Всё, разобрался, спасибо большое
51. user973528 29.08.18 16:57 Сейчас в теме
(48) Или как добраться до родителя номенклатуры в документе?
56. user973528 29.08.18 17:35 Сейчас в теме
(48) У меня получается при загрузке номенклатуры она автоматически определяется в другую группу, а мне нужно в группу по коду.
В конце кода "Записать" нужно?
44. user973528 29.08.18 16:37 Сейчас в теме
(42) Теперь код проходит, но ничего не создаётся
45. user973528 29.08.18 16:40 Сейчас в теме
(42) Создались в общем справочники, но в реквизит документа его не подтягивает
49. plevakin 29.08.18 16:50 Сейчас в теме
(45) Возможно он грузится, но т.к. договор заполнен не полностью, валюта пустая и еще куча всего, то на форме Приемник может такие договоры не показывать. Нужно это проверить сразу после загрузки данных в консоли запросов или еще чем-нибудь.
59. user973528 30.08.18 12:32 Сейчас в теме
(49) При загрузке второй раз стал создавать второй договор, как можно сделать чтобы он проверял?
60. user973528 30.08.18 13:20 Сейчас в теме
(49) Почему то тип Договора не подтягивает
А.ВидДоговора = "Перечисления.ВидыДоговоровКонтрагентов.СПокупателем";
Выдаёт ошибку
61. plevakin 30.08.18 13:36 Сейчас в теме
(60) Я же предупреждал, что второй раз создаст второй договор, и даже текст запроса привел для поиска существующего.

Ошибку какую? Почему "Перечисления.ВидыДоговоровКонтрагентов.СПокупателем" в кавычках?
62. user973528 30.08.18 14:12 Сейчас в теме
(61) Сработало когда убрал ковычки, как можно сделать чтобы ндс высчитывало из суммы?
63. user973528 30.08.18 14:14 Сейчас в теме
(61) А то выходит так что сумму документ переносит, но высчитывает сверху ещё ндс опять
64. plevakin 30.08.18 14:21 Сейчас в теме
(63) Не понял как надо. Мы же вроде ставку БезНДС делали. в сумму положили НДС. Что теперь не правильно? НДС в приемнике ноль? Сумма совпадает?
65. user973528 30.08.18 14:25 Сейчас в теме
(64) Ставку оказывается БЕЗНДС не нужно, нужно ставить ставку 18% и чтобы из суммы она высчитывалась
А получается что я загружаю данные из источника, в приемник документы подгружаются с суммой но в добавок приплюсовываются сверху еще раз НДС и сумма общая увеличивается
66. plevakin 30.08.18 14:42 Сейчас в теме
(65) Так нужно убрать все что мы делали и все. Вернуть ставку НДС на родину и к Сумме больше не прибавлять НДС.

Плюс еще посмотрите есть ли в приемнике реквизит СуммаВключаетНДС. Возможно, достаточно его поставить в истину.
55. VladimirElohov 130 29.08.18 17:27 Сейчас в теме
(45)
авочники, но в реквизит документа его не подтягивает

Самый простой, на мой взгляд, способ - функцию создания/поиска договора прописать в ПКС - Перед выгрузкой через код типа:
Выражение = "НайтиСоздатьДоговор()";

Данный код будет выполняться на стороне базы-приемника.
plevakin; +1 Ответить
57. user973528 29.08.18 17:41 Сейчас в теме
Спасибо, хоть понимание появилось как это всё выполняется
chess762; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот