Доброе время суток! Впервые столкнулась с такой проблемой. Есть обработка, которая загружает заказы из сайта и создает счета по этим заказам. Новых контрагентов обработка создает, а старых находит и если у них нет email, а на сайте он указан, то добавляет. Возникла проблема с email. Был написан такой код.
ЗапросЕМАЙЛ = Новый Запрос;
ЗапросЕМАЙЛ.Текст = "ВЫБРАТЬ
| КонтактнаяИнформация.Тип,
| КонтактнаяИнформация.Вид,
| КонтактнаяИнформация.Представление
|ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
| КонтактнаяИнформация.Объект = &ТекОбъект
| И КонтактнаяИнформация.Вид = &ВидЕмайл";
ЗапросЕМАЙЛ.УстановитьПараметр("ТекОбъект", Контрагент);
ЗапросЕМАЙЛ.УстановитьПараметр("ВидЕмайл", ВидЕмейл);
Результат = ЗапросЕМАЙЛ.Выполнить().Выгрузить();
Если Результат.Количество() > 0 Тогда
Иначе
Если ЗначениеЗаполнено(Емайл) Тогда
НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
Запись = НаборЗаписей.Добавить();
Запись.Активность = Истина;
Запись.Объект = Контрагент;
Запись.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты;
Запись.Вид = ВидЕмейл;
Запись.Представление = СокрЛП(ЕМАЙЛ);
НаборЗаписей.Записать();
КонецЕсли;
КонецЕсли;
! | http://pro1c.org.ua/index.php?act=announce&id=2: 4,5,9 |
OksanaYa @ Вчера, 18:01
,
Такая ситуация возникает из-за того, что Вы используете набор записей без отбора (воспринимается системой, как полный набор всех записей), наполняете этот набор одной записью (Ваш новый контрагент) и затем записываете набор (НаборЗаписей.Записать(); ) без параметра. А это для системы равнозначно тому, что вы говорите заменить старый (полный) набор записей на новый набор с Вашей одной записью.
Синтаксис команды записать:
РегистрСведенийНаборЗаписей.<Имя регистра сведений> (InformationRegisterRecordSet.<Имя регистра сведений>)
Записать (Write)
Синтаксис:
Записать(<Замещать>)
Параметры:
<Замещать> (необязательный)
Тип: Булево.
Определяет режим замещения существующей записи в соответствии с текущими установками отбора. Истина - перед записью существующие записи будут удалены. Ложь - записи будут дописаны к уже существующим в информационной базе записям
Значение по умолчанию: Истина
Т.е., чтобы записи не уничтожались при записи нужно сделать любое одно из двух (или, в конкретном частном случае, можно и оба сразу, хотя смысла в этом будет не много ):
1. После строки:
НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(Контрагент);
НаборЗаписей.Отбор.Вид.Установить(ВидЕмайл);
НаборЗаписей.Записать();
НаборЗаписей.Записать(Ложь);
Как вариант, можно вообще не использовать запрос.
НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(Контрагент);
НаборЗаписей.Отбор.Вид.Установить(ВидЕмайл);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() = 0 Тогда
Запись = НаборЗаписей.Добавить();
Запись.Активность = Истина;
Запись.Объект = Контрагент;
Запись.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты;
Запись.Вид = ВидЕмейл;
Запись.Представление = СокрЛП(ЕМАЙЛ);
НаборЗаписей.Записать();
КонецЕсли;
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua