Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> После обработки регистр сведений оказался только с одной записью          
OksanaYa Подменю пользователя
сообщение 28.12.17, 18:01
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 42
Спасибо сказали: 4 раз
Рейтинг: 0

Доброе время суток! Впервые столкнулась с такой проблемой. Есть обработка, которая загружает заказы из сайта и создает счета по этим заказам. Новых контрагентов обработка создает, а старых находит и если у них нет email, а на сайте он указан, то добавляет. Возникла проблема с email. Был написан такой код.

ЗапросЕМАЙЛ = Новый Запрос;
    ЗапросЕМАЙЛ.Текст =    "ВЫБРАТЬ
    |    КонтактнаяИнформация.Тип,
    |    КонтактнаяИнформация.Вид,
    |    КонтактнаяИнформация.Представление
    |ИЗ
    |    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    |ГДЕ
    |    КонтактнаяИнформация.Объект = &ТекОбъект
    |    И КонтактнаяИнформация.Вид = &ВидЕмайл";
    
    ЗапросЕМАЙЛ.УстановитьПараметр("ТекОбъект", Контрагент);
    ЗапросЕМАЙЛ.УстановитьПараметр("ВидЕмайл", ВидЕмейл);
    
    Результат = ЗапросЕМАЙЛ.Выполнить().Выгрузить();
    
    Если Результат.Количество() > 0 Тогда
    Иначе
        Если ЗначениеЗаполнено(Емайл) Тогда
            НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
            Запись = НаборЗаписей.Добавить();
            Запись.Активность = Истина;
            Запись.Объект = Контрагент;
            Запись.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты;
            Запись.Вид = ВидЕмейл;
            Запись.Представление = СокрЛП(ЕМАЙЛ);
            НаборЗаписей.Записать();
        КонецЕсли;
    КонецЕсли;

После отработки регистр сведений Контактная информация оказался только с одной записью - email контрагента из последнего заказа. В чем ошибка? Помогите понять. Если код закомментировать, то все работает нормально, только не проверяется email.

Платформы пробовали разные. На версии 8.3.9.2170 точно очищает регистр. На каком-то релизе 8.3.10 тот же результат. Конфигурация УТП. Релиз конфигурации в данном вопросе не имеет значения.


 ! 

Правила: 4,5,9
 


Сообщение отредактировал logist - 29.12.17, 6:02

Eril Подменю пользователя
сообщение 29.12.17, 1:53
Сообщение #2

Молчаливый
*
Группа: Пользователи
Сообщений: 1
Спасибо сказали: 0 раз
Рейтинг: 0

OksanaYa @ Вчера, 18:01 * ,
Такая ситуация возникает из-за того, что Вы используете набор записей без отбора (воспринимается системой, как полный набор всех записей), наполняете этот набор одной записью (Ваш новый контрагент) и затем записываете набор (НаборЗаписей.Записать(); ) без параметра. А это для системы равнозначно тому, что вы говорите заменить старый (полный) набор записей на новый набор с Вашей одной записью.
Синтаксис команды записать:
РегистрСведенийНаборЗаписей.<Имя регистра сведений> (InformationRegisterRecordSet.<Имя регистра сведений>)
Записать (Write)
Синтаксис:
Записать(<Замещать>)
Параметры:
<Замещать> (необязательный)
Тип: Булево.
Определяет режим замещения существующей записи в соответствии с текущими установками отбора. Истина - перед записью существующие записи будут удалены. Ложь - записи будут дописаны к уже существующим в информационной базе записям
Значение по умолчанию: Истина

Т.е., чтобы записи не уничтожались при записи нужно сделать любое одно из двух (или, в конкретном частном случае, можно и оба сразу, хотя смысла в этом будет не много smile.gif ):
1. После строки:
НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();

нужно добавить строки отбора:
НаборЗаписей.Отбор.Объект.Установить(Контрагент); 
НаборЗаписей.Отбор.Вид.Установить(ВидЕмайл);

Это ограничит перечень заменяемых строк только нашими контрагентом и видом е-мейла, а остальные записи будут жить спокойно.
2. В строке:
НаборЗаписей.Записать();

указать параметр перезаписи "Ложь" (т.к. в этом Вашем конкретном частном случае, этого контрагента в регистре еще нет, и можно его смело дописывать к сужествующим записям, а не обновлять существующего):
НаборЗаписей.Записать(Ложь);


Сообщение отредактировал Vofka - 29.12.17, 10:30

Vidocq05 Подменю пользователя
сообщение 03.01.18, 14:16
Сообщение #3

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 214
Из: Сумы
Спасибо сказали: 38 раз
Рейтинг: 0

Как вариант, можно вообще не использовать запрос.
 НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
     НаборЗаписей.Отбор.Объект.Установить(Контрагент);
     НаборЗаписей.Отбор.Вид.Установить(ВидЕмайл);
     НаборЗаписей.Прочитать();
     Если НаборЗаписей.Количество() = 0 Тогда
         Запись = НаборЗаписей.Добавить();
         Запись.Активность = Истина;
         Запись.Объект = Контрагент;
         Запись.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты;
         Запись.Вид = ВидЕмейл;
         Запись.Представление = СокрЛП(ЕМАЙЛ);
         НаборЗаписей.Записать();
     КонецЕсли;

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 19:13
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!