Имя: Пароль:
1C
 
Ошибка программного заполнения Email рассылки
,
0 falselight
 
04.06.18
13:37
УТ 11.1. У справочника Партнеры есть Электронная почта, основной адрес а есть email рассылки. В процедуре ПередЗаписью задал код
который записывает поле email рассылки если оно пустое основным
почтовым адресом. Но Если открыть справочник Партнеры, удалить это
поле Email рассылки. И нажать записать то запрос который выбирает
этот Email рассылки, выберет его. Соответсвенно код перезаписи
не сработает. Хотя фактически то этот Email рассылки я же удалил.
Е если смотреть ЭтотОбъект.КонтактнаяИнформация, там тоже нет такой
строки. От куда же происходит выборка?
1 falselight
 
04.06.18
14:49
Никто не понял в чем дело?
2 Cyberhawk
 
04.06.18
14:51
Думаю, дело в *овнокоде
3 falselight
 
04.06.18
14:54
Из справочника удаляю email рассылки. Очищаю поле.
http://joxi.ru/VrwE3ewiO88j32
Нажимаю записать, в ЭтотОбъект.КонтактнаяИнформация
нет такой строки, а запрос выбирает!!!!!! От куда он
её берет если я её удалил? Или как обработать этот момент?

(2) Если Рез.Пустой () проходит, так как выбирает

    Если ЗначениеЗаполнено(ЭтотОбъект.Ссылка) Тогда
        Запрос.Текст = "
            |ВЫБРАТЬ
            |    ПартнерыКонтактнаяИнформация.Ссылка,
            |    ПартнерыКонтактнаяИнформация.Тип,
            |    ПартнерыКонтактнаяИнформация.Вид,
            |    ПартнерыКонтактнаяИнформация.Представление,
            |    ПартнерыКонтактнаяИнформация.ЗначенияПолей
            |ИЗ
            |    Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация
            |ГДЕ
            |    ПартнерыКонтактнаяИнформация.Ссылка = &Партнер
            |    И ПартнерыКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)
            |    И ПартнерыКонтактнаяИнформация.Вид = &ЕмайлРассылки";
            Запрос.УстановитьПараметр("Партнер",       ЭтотОбъект.Ссылка);
            Запрос.УстановитьПараметр("ЕмайлРассылки", Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Email рассылки", 1));
            Рез = Запрос.Выполнить();
            Если Рез.Пустой() Тогда
                НоваяСтрока                  = ЭтотОбъект.КонтактнаяИнформация.Добавить();
                НоваяСтрока.Тип            = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты;
                НоваяСтрока.Вид           = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Email рассылки", 1);
                НоваяСтрока.Представление = ОсновнойEmailПартнера;
            КонецЕсли;
4 Вафель
 
04.06.18
14:55
ты выбираешь из ссылки, а не с изменного объекта
5 falselight
 
04.06.18
15:00
(4) Подскажите пожалуйста как правильно?
Понимаю что не то делаю (((((
6 Вафель
 
04.06.18
15:00
(5) нужно не запросом, а поиском по таблице
7 falselight
 
04.06.18
15:01
(5+) Сейчас вот к примеру в одном тестовом примере
элемента справочника Партнеры, на форме заполнил.
А код показывает что таблица пуста ((((.

(6) то есть такие манипуляции делаются исключительно
перебором таблицы????
8 Вафель
 
04.06.18
15:02
(7) ты понимаешь разницу между ссылкой и объектом?
9 falselight
 
04.06.18
15:02
(6) Перебором по таблице я делал но для копирования
когда нет ссылки у ЭтотОбъект.

    Иначе
        // ЭЛЕМЕНТ СОЗДАЛСЯ КОПИРОВАНИЕМ
        КИЗаполнено = 0;
        Для каждого СтрКИ Из ЭтотОбъект.КонтактнаяИнформация Цикл
            Если СтрКИ.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты И
                 СтрКИ.Вид = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("EmailПартнера",1) Тогда
                Если Не ЗначениеЗаполнено(СтрКИ.Представление) Тогда
                    Сообщить("У партнера не заполнена электронная почта в контактной информации!");
                    Отказ = Истина;
                Иначе
                    КИЗаполнено           = 1;
                    ОсновнойEmailПартнера = СтрКИ.Представление;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
        Если КИЗаполнено = 0 Тогда
            Сообщить("У партнера отсутствует электронная почта в контактной информации!");
            Отказ = Истина;
        КонецЕсли;
    КонецЕсли;
10 falselight
 
04.06.18
15:03
(8) Получается все делать перебором или поиском по таблице?
То есть не используя запрос???
11 falselight
 
04.06.18
15:05
Думал может не в той процедуре что делаю.
12 falselight
 
04.06.18
15:15
//
    ОсновнойEmailПартнера = неопределено;
    КИЗаполнено           = 0;
    Для каждого СтрКИ Из ЭтотОбъект.КонтактнаяИнформация Цикл
        Если СтрКИ.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты И
             СтрКИ.Вид = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("EmailПартнера",1) Тогда
            Если Не ЗначениеЗаполнено(СтрКИ.Представление) Тогда
                Сообщить("У партнера не заполнена электронная почта в контактной информации!");
                Отказ = Истина;
            Иначе
                КИЗаполнено           = 1;
                ОсновнойEmailПартнера = СтрКИ.Представление;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    Если КИЗаполнено = 0 Тогда
        Сообщить("У партнера отсутствует электронная почта в контактной информации!");
        Отказ = Истина;
    КонецЕсли;
    //
    ЗаполненEmailРассылки = 0;
    ВведенEmailРассылки   = 0;
    Для каждого СтрКИ Из ЭтотОбъект.КонтактнаяИнформация Цикл
        Если СтрКИ.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты И
             СтрКИ.Тип = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Email рассылки", 1) Тогда
            Если Не ЗначениеЗаполнено(СтрКИ.Представление) Тогда
                СтрКИ.Представление   = ОсновнойEmailПартнера;
                ЗаполненEmailРассылки = 1;
            КонецЕсли;
            ВведенEmailРассылки = 1;
        КонецЕсли;
    КонецЦикла;
    Если ВведенEmailРассылки = 0 Тогда
        НоваяСтрока                  = ЭтотОбъект.КонтактнаяИнформация.Добавить();
        НоваяСтрока.Тип            = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты;
        НоваяСтрока.Вид           = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Email рассылки", 1);
        НоваяСтрока.Представление = ОсновнойEmailПартнера;
    КонецЕсли;