Имя: Пароль:
1C
 
Как найти источник ошибки платформенной проверки заполнения реквизита?
0 mikecool
 
24.09.19
12:01
Ловлю сообщение "Значение поля "Организация" не заполнено или заполнено неверно" при записи банковского счета в БП для Казахстана.
в счетах нет поля организация, есть договор контрагента, который не заполнен.
отладчиком прошелся по подпискам - пока ничего не нашел
в ЖР ни слова, есть откаты по справочнику Идентификаторы объектов расширений и больше ничего.
Как отловить мест возникновения платформенной проверки?
зы: БС записываю для незаписанного контрагента, передав ссылку нового
1 aleks_default
 
24.09.19
12:18
ну о тексту ошибки глобальный поиск задай. Ошибка явно не платформенная
2 palsergeich
 
24.09.19
12:20
(0) в форме и в модуле объекта в продедуре проверка заполнения поставь точку останова, посмотри параметр массивРеквизитов и по стеку размотай
3 Креатив
 
24.09.19
12:21
(0)Подозрение падает на Владельца. Посмотри подчинённость справочников.
4 mikecool
 
24.09.19
12:21
(1) искал, и по началу строки и по окончанию - не нашел
(2) у БС модуль объекта пустой
5 palsergeich
 
24.09.19
12:24
(2) а на форме?
6 aleks_default
 
24.09.19
12:24
(3)+вот кстати согласен
7 aleks_default
 
24.09.19
12:24
именно так и ругается когда владелец не заполнен
8 mikecool
 
24.09.19
12:30
(7) когда не заполнен Владелец, и сообщать должен о владельце - или я чего то не понимаю?
(5) а вот на форме не удосужился посмотреть
9 mikecool
 
24.09.19
12:31
+8 только форму я не открываю, БС создается программно
10 aleks_default
 
24.09.19
12:32
(8)Нет. 100% это Владелец. Был похожий случай со штатным расписанием.
11 palsergeich
 
24.09.19
12:32
(8) В диагностике он выводит синоним, а по стандарту владельцу обязательно надо давать осмысленный синоним, так что вполне возможно что дело в этом
12 Вафель
 
24.09.19
12:32
сделай замер при записи и ищи по замеру
13 mikecool
 
24.09.19
12:32
(10) а ведь ты прав... синоним стандартного реквизита - Организация
это как так??? когда Владелец составной тип ))))
14 palsergeich
 
24.09.19
12:33
(13) они ещё с элементом играют, по стандарту разработки владельцу надо давать осмысленный синоним
15 palsergeich
 
24.09.19
12:34
(14) иначе АПК ругаться будет и разраба бьёт током в кресло
16 mikecool
 
24.09.19
12:34
тогда получается нельзя подсунуть ссылку нового?
делаю так:
СсылкаКонтрагент = Справочники.Контрагенты.ПолучитьСсылку();
Контрагент = Справочники.Контрагенты.СоздатьЭлемент();
Контрагент.УстановитьСсылкуНового(СсылкаКонтрагент);
...
БанковскийСчет = Справочники.БанковскиеСчета.СоздатьЭлемент();
БанковскийСчет.Владелец = Контрагент.ПолучитьСсылкуНового();
где то у меня ошибка?
17 mikecool
 
24.09.19
12:35
(14) ясно, далек я немного от этого )
18 aleks_default
 
24.09.19
12:36
Контрагент.ПолучитьСсылкуНового()
19 palsergeich
 
24.09.19
12:36
(17) если ты сделаешь обменданными.загрузка = истина при записи то эта проверка выполняться не будет, но и владелец будет пустой, что тоже неправильно
20 palsergeich
 
24.09.19
12:37
(19) но обойти в лоб, да, можно
21 aleks_default
 
24.09.19
12:38
В транзакции записывай
22 mikecool
 
24.09.19
12:40
(21) создание контрагента и БС идет как раз в общей транзакции
23 mikecool
 
24.09.19
12:41
(18) я в (16) так и пишу
24 mikecool
 
24.09.19
12:41
(19) этого мне не надо , как раз )
25 Вафель
 
24.09.19
12:41

БанковскийСчет.Владелец = СсылкаКонтрагент;
26 aleks_default
 
24.09.19
12:42
(23)Так тут и ошибка. Владелец должен быть записан в базе. А метод получает ссылку незаписанного объекта
27 mikecool
 
24.09.19
12:46
(25) ага, попробую
28 Вафель
 
24.09.19
12:48
ну и без обмена данных такое не запишешь конечно
29 mikecool
 
24.09.19
12:50
+27 не помогло, щас попробую старый вариант + ОбменДанными
30 Вафель
 
24.09.19
12:51
(29) так этого и не достаточно
31 mikecool
 
24.09.19
12:53
в общем работает так:
СсылкаКонтрагент = Справочники.Контрагенты.ПолучитьСсылку();
Контрагент = Справочники.Контрагенты.СоздатьЭлемент();
Контрагент.УстановитьСсылкуНового(СсылкаКонтрагент);
...
БанковскийСчет = Справочники.БанковскиеСчета.СоздатьЭлемент();
БанковскийСчет.Владелец = Контрагент.ПолучитьСсылкуНового();
...
БанковскийСчет.ОбменДанными.Загрузка = Истина;
БанковскийСчет.Записать();
все создается синхронно
32 dezss
 
24.09.19
12:57
А можно узнать смысл записи БС без записи контрагента?
33 aleks_default
 
24.09.19
12:58
(32)Контрагент.Ссылка чем то не устраивает наверное
34 Mankubus
 
24.09.19
13:00
(32) например если в контрагенте нужно заполнить основной банковский счет, а в банковском счете владелец = контрагент
35 mikecool
 
24.09.19
13:01
(33) сейчас еще проверю и с Контрагент.Ссылка
(32) я не пишу их отдельно, чтобы не перезаписывать контрагента дважды указываю его ссылку
36 Вафель
 
24.09.19
13:02
контрагента нужно записать до.
и брать ссылку на банковский счет, а не наоборот
37 Вафель
 
24.09.19
13:02
(33) будет пустая ссылка
38 mikecool
 
24.09.19
13:03
(37) да, получаю пустую ссылку
(36) предлагаешь дважды записывать контрагента?
39 aleks_default
 
24.09.19
13:05
(37)Так он же пишет что в транзакции все, значит после записи ссылка уже не пустая
40 Вафель
 
24.09.19
13:06
(38) а где запись контрагент?
41 palsergeich
 
24.09.19
13:09
Ты можешь контрагенту установить ссылку нового, эту ссылку поместить во владельца банковского счёта, этого будет достаточно, и не надо будет делать лишнюю щапись
42 mikecool
 
24.09.19
13:10
(40) вот здесь ))
СсылкаКонтрагент = Справочники.Контрагенты.ПолучитьСсылку();
Контрагент = Справочники.Контрагенты.СоздатьЭлемент();
Контрагент.УстановитьСсылкуНового(СсылкаКонтрагент);
...
Контрагент.ОсновнойБанковскийСчет = СоздатьБанковскийСчетКонтрагентаПоДаннымWS(Контрагент);
Контрагент.Записать();

а это уже ф-я СоздатьБанковскийСчетКонтрагентаПоДаннымWS
БанковскийСчет = Справочники.БанковскиеСчета.СоздатьЭлемент();
БанковскийСчет.Владелец = Контрагент.ПолучитьСсылкуНового();
...
БанковскийСчет.ОбменДанными.Загрузка = Истина;
БанковскийСчет.Записать();
Возврат БанковскийСчет.Ссылка;
43 Вафель
 
24.09.19
13:11
(42) а нужно наоборот
44 mikecool
 
24.09.19
13:11
(41) единственный прикол в том, что система ее считает пустой
или это потому, что в одной транзакции
45 Вафель
 
24.09.19
13:11

БанковскийСчет = Справочники.БанковскиеСчета.СоздатьЭлемент();
БанковскийСчет.Владелец = ПолучитьКонтрагента();
...
БанковскийСчет.ОбменДанными.Загрузка = Истина;
БанковскийСчет.Записать();
46 Вафель
 
24.09.19
13:12
(44) он не пустой, а не верный скорее всего
47 mikecool
 
24.09.19
13:12
(43) Толик, кому нужно? )) я ухожу от второй записи контрагента
48 mikecool
 
24.09.19
13:13
+47 у меня и контрагент и БС - новые
49 Вафель
 
24.09.19
13:13
(47) где ты увидел 2 записи?
50 Вафель
 
24.09.19
13:13
(47) тебе нужно - у тебя же не работает
51 mikecool
 
24.09.19
13:14
(49) а что возвращает ПолучитьКонтрагента(), если он еще не записан в базу?
52 Вафель
 
24.09.19
13:14

БанковскийСчет = Справочники.Контрагенты.СоздатьЭлемент();
БанковскийСчет .УстановитьСсылкуНового(СсылкаБС);
БанковскийСчет.Владелец = ПолучитьКонтрагента(БанковскийСчет );
...
БанковскийСчет.ОбменДанными.Загрузка = Истина;
БанковскийСчет.Записать();
53 Вафель
 
24.09.19
13:14
(51) записан конечно же
54 mikecool
 
24.09.19
13:14
(52) у тебя то же самое, только с боку
55 mikecool
 
24.09.19
13:15
(53) а как он записан, если он, как и БС, только загружается?
56 Вафель
 
24.09.19
13:15
(54) порядок записи другой
57 aleks_default
 
24.09.19
13:15
Я ж говорю проблема  в том  что контрагента сначала записывают а потом получают у него ссылку нового
58 Вафель
 
24.09.19
13:15
(55) я на обед, может к тому времени поймешь что я имел ввиду
59 Вафель
 
24.09.19
13:15
(57) не в этом
60 mikecool
 
24.09.19
13:16
(58) приятного
61 mikecool
 
24.09.19
13:16
(57) контрагента не надо записывать, ибо:
Позволяет для нового (созданного и еще не записанного) объекта получить ранее установленное методом УстановитьСсылкуНового значение ссылки.
62 mikecool
 
24.09.19
13:18
(56) твой порядок подразумевает:
1) создать новый БС
2) создать контрагента, записать контрагента
3) присвоить владельца БС, записать БС
4) присвоить основной счет в контрагента, записать контрагента
я правильно понял?
63 aleks_default
 
24.09.19
13:23
Ну не в этом так не в этом. *Обижено ушел на обед
64 mikecool
 
24.09.19
13:27
(63) не кушай с обидой - в прок не пойдет )))
65 dezss
 
24.09.19
15:22
(62) Нет, он имеет ввиду, что сперва создается БС(не записывается) потом контрагент, в его реквизит осн. БС, пишешь СсылкуНового БС, потом записываешь контрагента, потом у БС ставишь Владельцем этого уже записанного контрагента и записываешь уже БС.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан