Имя: Пароль:
1C
1С v8
Соответствие значений табличных частей
0 gaur777
 
22.08.17
14:40
Добрый день всем!!! Помогите пожалуйста. задача такая:
У меня имеется внешняя обработка.
1 действие - по нажатию кнопки отправляю запрос на сервис.
2 действие - по нажатию 2 кнопки получаю ответ с over количеством записей

на форме есть поле ввода (ДокументКонтрагента) имеет тип ДокументСсылка.ДокументКонтрагента
Нажимая на него я выбираю нужную мне строку документа с нужными мне значениями реквизита ("НомерМашины" и "ДатаОтправки")
Теперь нужно описать условие
Если реквизит НомерМашины (из документа) = реквизиту НомерТТН (из внешней обработки) и ДатаОтправки = ДатеТТН (тогда заполняется табличная часть этой строкой)
Тоесть нужно отбирать только ту запись запроса, которая соответствует выбранному документу контрагента.
1 gaur777
 
22.08.17
14:40
Вот скриншот формы внешней обработки - где я получаю ответ:
https://pastenow.ru/4a67d3a046821c452c933089a7c5b657
2 Lexey_
 
22.08.17
14:47
(1) а для чего тут скриншот формы?
3 gaur777
 
22.08.17
14:50
(2) а не нужен?
подумал, мало ли возникнут вопросы
4 Lexey_
 
22.08.17
14:54
(3) вопрос-то какой у тебя?
5 gaur777
 
22.08.17
14:58
Вот со строчек:
Теперь нужно описать условие
Если реквизит НомерМашины (из документа) = реквизиту НомерТТН (из внешней обработки) и ДатаОтправки = ДатеТТН (тогда заполняется табличная часть этой строкой)
Тоесть нужно отбирать только ту запись запроса, которая соответствует выбранному документу контрагента.

Как мне это реализовать программно?
6 Lexey_
 
22.08.17
15:02
(5) Если ИмяРеквизитаДокумент.НомерМашины = ИмяРеквизитаТаблица[ИндексНужнойСтроки].НомерТТН .... Тогда

КонецЕсли;
7 azernot
 
22.08.17
15:05
И сюда продублирую:    

Какой тип у "ответа с over количеством записей"?
Это табличная часть?
Это таблица значений?
Это структура?
Это результат запроса?
Это XDTО?
8 Lexey_
 
22.08.17
15:05
+(6) либо ЭлементыФормы.ИмяРеквизитаТаблица.ТекущиеДанные.НомерТТН
9 gaur777
 
22.08.17
15:07
(6) = ИмяРеквизитаТаблица[ИндексНужнойСтроки]

я вот что-то тут не понял. либо может я неправильно объясняю
до того как я получил ответ (тоесть табличная часть не заполнилась ещё)
я выбираю нужный мне документ (например с номероммашины А001МО и дата 22.08.17), после чего нажимаю получить ответ
И оно из всего списка, который должен заполниться в табличную часть, находит только ту строку где НомерТТН = А001МО и ДатаТТН = 22.08.17
10 gaur777
 
22.08.17
15:08
(7) это результат запроса, который получаю с сервиса
11 Lexey_
 
22.08.17
15:11
(9) ТаблицаЗначений (ValueTable)
НайтиСтроки (FindRows)
Синтаксис:

НайтиСтроки(<ПараметрыОтбора>)
Параметры:

<ПараметрыОтбора> (обязательный)

Тип: Структура.
Задает условия поиска: ключ структуры определяет имя колонки, по которой будет осуществляться поиск, а значение структуры - искомое значение.
Возвращаемое значение:

Тип: Массив.
Массив строк таблицы значений, соответствующих условиям поиска.
Замечание! Массив хранит ссылки на строки таблицы значений, то есть при изменении строки в таблице, значение в массиве тоже будет измененным.
Описание:

Осуществляет поиск строк таблицы значений, отвечающих заданным условиям поиска.
Если в таблице значений добавлены индексы, подбор индекса для поиска осуществляется по точному соответствию состава колонок в индексе и в параметрах поиска, порядок следования колонок значения не имеет.
12 gaur777
 
22.08.17
15:14
(11) вот это ближе к сути
спасибо
сейчас попробую
13 azernot
 
22.08.17
15:14
(10) Допустим твой "ответ" помещён в переменную РезультатЗапроса.

Самое простое - это тупой перебор

НомерМашины = ДокументКонтрагента.НомерМашины;
ДатаОтправки = ДокументКонтрагента.ДатаОтправки;

Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий Цикл

Если НЕ НомерМашины = Выборка.НомерТТН Тогда
Продолжить;
КонецЕсли;
Если НЕ ДатаОтправки = Выборка.ДатаТТН Тогда
Продолжить;
КонецЕсли;

НоваяСтрокаТЧ = МояТЧ.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаТЧ, Выборка);

КонецЦикла;


Если это сработает - тогда уже будем рассматривать методы поиска нужного значения в выборке без прямого обхода или ограничение непоредственно в самом запросе, чтобы результат запроса сразу содержал только нужные данные.

Но что-то подсказывает мне, что тип твоего "ответа с over количеством записей" нифига не "РезультатЗапроса"
14 azernot
 
22.08.17
15:16
*(13) Пока Выборка.Следующий() Цикл
15 gaur777
 
22.08.17
15:20
(14) ответ XDTO
16 azernot
 
22.08.17
15:23
(15) Я так и думал.
Нужно понимать структуру этого XDTO, чтобы чем-то помочь.

Можешь ответить в каком тэге в итоге хранится многострочная часть с нужными тебе данными?
И вообще, в одной ли многострочной части эти данные?
17 gaur777
 
22.08.17
15:26
18 azernot
 
22.08.17
15:29
(17) С таким ответом сразу хочется послать куда подальше.

Я подглядел примерную структуру в твоей предыдущей теме
В итоге,примерно это должно выглядеть так:


НомерМашины = ДокументКонтрагента.НомерМашины;
ДатаОтправки = ДокументКонтрагента.ДатаОтправки;

  Для Каждого СтрокаВСД из ОтветСписок.vetDocument Цикл

Если НЕ НомерМашины = СтрокаВСД.waybillDate Тогда
Продолжить;
КонецЕсли;
Если НЕ ДатаОтправки = СтрокаВСД.waybillNumberТогда
Продолжить;
КонецЕсли;

НоваяСтрокаТЧ = МояТЧ.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаТЧ, СтрокаВСД );
НоваяСтрокаТЧ .GUIDЦели                           = СтрокаВСД.purpose.guid;
        стр.UuidВСД                            = НоваяСтрокаТЧ .uuid;
        стр.Статус                             = НоваяСтрокаТЧ .status;
//и т.п. чего надо

КонецЦикла;

А в ссылке твоей в (17) никто ковыряться не будет. Во всяком случае бесплатно.
19 gaur777
 
22.08.17
15:40
(18) да я просто подумал именно про этот тег вы и имеете виду. по крайней мере в xdto пакетах, это как указывается
20 gaur777
 
22.08.17
15:42
(18) спасибо за помощь, сейчас попробую