Имя: Пароль:
1C
1С v8
Передать реквизит формы обрабоки в параметр запроса
0 applesound
 
15.01.20
11:33
Передать реквизит формы обрабоки в параметр запроса
Добрый день.
Делаю простую обработку заполнения табличной части. Сложность в передаче параметра из формы в запрос Партнер.
На форме обработки вывел реквизит Партнер (ТИП: СправочникСсылка.Партнеры) и команду ЗаполнитьКИ


&НаКлиенте
Процедура ЗаполнитКИ(Команда)
ЗаполнитКИНаСервере();
КонецПроцедуры


&НаСервере
Процедура ЗаполнитКИНаСервере()

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПартнерыКонтактнаяИнформация.Представление КАК Представление,
| ПартнерыКонтактнаяИнформация.Ссылка КАК Ссылка,
| ПартнерыКонтактнаяИнформация.НомерТелефона КАК НомерТелефона,
| ПартнерыКонтактнаяИнформация.НомерТелефонаБезКодов КАК НомерТелефонаБезКодов
|ИЗ
| Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация
|ГДЕ
| НЕ ПартнерыКонтактнаяИнформация.Представление = """"
| И НЕ ПартнерыКонтактнаяИнформация.НомерТелефона = """"
| И НЕ ПартнерыКонтактнаяИнформация.НомерТелефонаБезКодов = """"
| И ПартнерыКонтактнаяИнформация.Представление ПОДОБНО ""[+][7][9]_________""
| И ПартнерыКонтактнаяИнформация.Ссылка = &Партнер
| И ПартнерыКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
| И ПартнерыКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонПартнера)";

Запрос.УстановитьПараметр("Партнер", Партнер);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ПартнерОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
//Здесь займусь обработкой строк
КонецЦикла;
КонецПроцедуры
1 Kigo_Kigo
 
15.01.20
11:37
&НаКлиенте
Процедура ЗаполнитКИ(ЭтаФорма.Партнер)
ЗаполнитКИНаСервере();
КонецПроцедуры


&НаСервере
Процедура ЗаполнитКИНаСервере(Партнер)
2 Kigo_Kigo
 
15.01.20
11:39
*
&НаКлиенте
Процедура ЗаполнитКИ()
ЗаполнитКИНаСервере(ЭтаФорма.Партнер);
КонецПроцедуры
3 applesound
 
15.01.20
11:41
&НаКлиенте
Процедура ЗаполнитКИ(Команда) //Здесь заменить Команда на ЭтаФорма.Партнер ?
ЗаполнитКИНаСервере();
КонецПроцедуры


&НаСервере
Процедура ЗаполнитКИНаСервере() // Здесь добавить Партнер?
4 hhhh
 
15.01.20
11:46
(3) у вас в (0) правильно
5 Kigo_Kigo
 
15.01.20
11:47
(3) &НаКлиенте
Процедура ЗаполнитКИ()
ЗаполнитКИНаСервере(ЭтаФорма.Партнер);// или ЭтаФорма.Партнер.Ссылка
КонецПроцедуры


&НаСервере
Процедура ЗаполнитКИНаСервере(Партнер)
6 applesound
 
15.01.20
13:25
Обработку сделал. Всем спасибо за участие.
Есть методические неточности в исполнении: Поле ЗачениеПолей не должно заполняться текстом, в связи с неопытностью и отсутствием времени немного упростил решение. Если у кого появится желание исправить + 1000 в карму.
Решение:


&НаКлиенте
Процедура ЗаполнитКИ(Команда)
    ЗаполнитКИНаСервере();
КонецПроцедуры


&НаСервере
Процедура ЗаполнитКИНаСервере()
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ПартнерыКонтактнаяИнформация.Представление КАК Представление,
    |    ПартнерыКонтактнаяИнформация.Ссылка КАК Ссылка
    |ИЗ
    |    Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация
    |ГДЕ
    |    НЕ ПартнерыКонтактнаяИнформация.Представление = """"
    |    И ПартнерыКонтактнаяИнформация.НомерТелефонаБезКодов = """"
    |    И ПартнерыКонтактнаяИнформация.Представление ПОДОБНО ""[+][7][9]_________""
    |    И ПартнерыКонтактнаяИнформация.Ссылка = &Партнер
    |    И ПартнерыКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
    |    И ПартнерыКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонПартнера)";
    
    Запрос.УстановитьПараметр("Партнер",Партнер);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл                
        ПартнерОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
        Для каждого Строки Из ПартнерОбъект.КонтактнаяИнформация Цикл
            Если
                Строки.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон И
                Строки.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонПартнера Тогда
                Строки.НомерТелефона = ВыборкаДетальныеЗаписи.Представление;
                Строки.НомерТелефонаБезКодов = Прав(ВыборкаДетальныеЗаписи.Представление, 10);
                Строки.ЗначенияПолей = "<КонтактнаяИнформация xmlns=""http://www.v8.1c.ru/ssl/contactinfo""; xmlns:xs=""http://www.w3.org/2001/XMLSchema""; xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""; Представление="""+Строки.НомерТелефонаБезКодов+"""><Состав xsi:type=""НомерТелефона"" КодСтраны="""" КодГорода="""" Номер="""+Строки.НомерТелефонаБезКодов+""" Добавочный=""""/></КонтактнаяИнформация>";                    
            КонецЕсли;                     
        КонецЦикла;
        ПартнерОбъект.Записать();
        Сообщить("Партнер: " +ПартнерОбъект+" успешно испрвлен");
    КонецЦикла;
КонецПроцедуры
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший