Александр Денисюк, спасибо за ответ.
По первому вопросу опытным путем удалось выяснить, что действительно меняется контактная информация о контрагенте (телефон-адрес), но только, когда меняется его наименование. Если наименование не меняется, то и контактная информация не меняется.
Проследив выполнение выяснил, что происходит следующее:
Сначала внутри функции ПолучитьКонтрагента идет обращение к функции ПолучениеКонтрагентаПоКоду.
Здесь попытка Результат = XMLЗначение(Тип("СправочникСсылка.Контрагенты"), Код); срабатывает, для генерируемых системой ИД, например для розничного покупателя. А для пользовательских ИД, пришедших с сайта здесь отдается исключение.
А дальше идет запрос объекта, но он почему-то осуществляется не только по Идентификатору, но и по Наименованию. Причем, условия связаны через И. В результате, возникает 2 случая:
- Наименование изменилось. Результат - Неопределено, и далее в функции ПолучитьКонтрагента создается новый объект со старым Идентификатором. В результате кажется, что данные "обновляются". Но по факту старый объект не найден из-за смены наименования, и вместо обновления старого создается новый со старым Ид. (Возможно это и есть обновление, не знаю, как система такое обрабатывает). Видел Ваш комментарий, что наименование добавлено в запрос, чтобы контрагенты не затирались, но они все равно затираются при последующем создании объекта с тем же Ид.
- Наименование не изменилось. Результат - старый объект, и далее в функции ПолучитьКонтрагента его контактная информация почему-то не обновляется.
Могу ошибаться, но думаю, 1) ограничение по наименованию возможно стоит убрать, 2) контрагент не обновляется при положительном результате запроса
Код |
---|
Функция ПолучениеКонтрагентаПоКоду(Код, НаименованиеКонтрагента) Экспорт
Попытка
Результат = XMLЗначение(Тип("СправочникСсылка.Контрагенты"), Код);
Исключение
Результат = Неопределено;
КонецПопытки;
Если Результат <> Неопределено тогда
Результат = ?(СокрЛП(Результат.ВерсияДанных) = "", Неопределено, Результат);
КонецЕсли;
Если Результат = Неопределено тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Справочник.Ссылка
|ИЗ
| Справочник.Контрагенты КАК Справочник
|ГДЕ
| Справочник.Б_Идентификатор = &Идентификатор
| И Справочник.Наименование = &Наименование";
Запрос.УстановитьПараметр("Идентификатор" , Код);
Запрос.УстановитьПараметр("Наименование" , НаименованиеКонтрагента);
тзнВрем = запрос.Выполнить().Выгрузить();
Если тзнВрем.Количество() > 0 тогда
Результат = тзнВрем[0].Ссылка;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
|