|
Заполнение табличной части | ☑ | ||
---|---|---|---|---|
0
gaur777
17.08.17
✎
11:31
|
Добрый день!
Подскажите пожалуйста, как составить условие заполнения. У меня есть 25 полей для заполнения Поля заполняются из отправленного запроса на веб-сервис На данный момент возвращает 7 строк Но есть такая проблема. В некоторых строках есть поля, которые не заполнены и поэтому программа выводит ошибку (Поле объекта не обнаружено (...) таких 6 полей. Вот как мне составить правильно условие: если поле не заполнено, оно тупо его обходит и не заполняет я понимаю что задача простая, я просто не понимаю как это правильно написать. |
|||
1
Альбатрос
17.08.17
✎
11:32
|
Попытка/Исключение/конецПопытки
|
|||
2
Рэйв
17.08.17
✎
11:34
|
Если ЗначениеЗаполнено(Поле) Тогда
.... КонецЕсли; |
|||
3
gaur777
17.08.17
✎
11:37
|
(2) Ну я вот так делаю
Что не так? Если ЗначениеЗаполнено(стр) Тогда стр.UUIDУпаковки = ДеталиСтроки.packingList.packingForm.UUID; стр.ДолжностьВетВрача = СтрокаВСД.confirmedBy.post; стр.ДатаТТН = СтрокаВСД.waybillDate; стр.НомерТТН = СтрокаВСД.waybillNumber; стр.ОбследованиеПартии = ДеталиСтроки.cargoInspected; стр.ПроведениеЭкспертизыПродукции = ДеталиСтроки.cargoExpertized; Иначе КонецЕсли; |
|||
4
Рэйв
17.08.17
✎
11:38
|
(3)У тебя стр - это что? И она точно у тебя ВСЯ должна быть пустая или только какое то ее поле?
|
|||
5
Альбатрос
17.08.17
✎
11:39
|
(3) Не так то, что нет каких-то полей
|
|||
6
Рэйв
17.08.17
✎
11:40
|
И вообще дай полный текст ошибки.а то не понятно на какую сторону ругается
|
|||
7
gaur777
17.08.17
✎
11:40
|
(4) Вот вся процедура.
стр = Остатки.Добавить() Остатки - табличная часть Процедура ОбработкаОтвета(ОтветСписок) Для Каждого СтрокаВСД из ОтветСписок.vetDocument Цикл стр = Остатки.Добавить(); ЗаполнитьЗначенияСвойств(стр, СтрокаВСД); ДеталиСтроки = СтрокаВСД.batch; СписокСвойств = ДеталиСтроки.Свойства(); стр.ДатаВыпуска = ПолучитьДатуИзОтвета(ДеталиСтроки.DateOfProduction.firstdate); Если СписокСвойств.Получить("expirydate") <> Неопределено Тогда стр.ГоденДо = ПолучитьДатуИзОтвета(ДеталиСтроки.expirydate.firstdate); КонецЕсли; стр.GUIDЦели = СтрокаВСД.purpose.guid; стр.UuidВСД = СтрокаВСД.uuid; стр.Статус = СтрокаВСД.status; стр.UUIDСтраныПроисхождения = ДеталиСтроки.countryofOrigin.UUID; стр.ВетВрач = СтрокаВСД.confirmedBy.fio; стр.ВидПродукции = Справочники.ОписаниеПродукцииВетис.НайтиПоРеквизиту("GUID",Строка(ДеталиСтроки.subProduct.guid)); стр.ДатаВСД = СтрокаВСД.issueDate; стр.unitGuid = ДеталиСтроки.unit.guid; стр.ЕдиницаИзмерения = ПолучитьОписаниеЕдиницыИзмеренияПоGUID(стр.unitGuid); стр.КоличествоУпаковок = Число(ДеталиСтроки.packingAmount); стр.Местность = СтрокаВСД.locationProsperity; стр.Наименование = ДеталиСтроки.productItem.name; стр.НекачественныйГруз = ДеталиСтроки.lowGradeCargo; стр.ОбъемПродукции = ДеталиСтроки.volume; стр.Продукция = Справочники.ОписаниеПродукцииВетис.НайтиПоРеквизиту("GUID",Строка(ДеталиСтроки.product.guid)); стр.СкоропортящаясяПродукция = ДеталиСтроки.perishable; стр.СпособХранения = СтрокаВСД.transportStorageType; стр.ТипВСД = СтрокаВСД.Type; стр.ТипПродукции = Справочники.ОписаниеПродукцииВетис.НайтиПоРеквизиту("КодВЕТИС",Число(ДеталиСтроки.productType)); стр.ТипТранспорта = СтрокаВСД.transportInfo.transportNumber.vehicleNumber; стр.Транспорт = СтрокаВСД.transportInfo.transportType; стр.ФормаВСД = СтрокаВСД.form; стр.UUIDПлощадкиОтправителя = СтрокаВСД.consignor.enterprise.UUID; стр.UUIDПлощадкиПолучателя = СтрокаВСД.consignee.enterprise.UUID; стр.UUIDХСОтправителя = СтрокаВСД.consignor.businessEntity.UUID; стр.UUIDХСПолучателя = СтрокаВСД.consignee.businessEntity.UUID; Если ЗначениеЗаполнено(стр) Тогда стр.UUIDУпаковки = ДеталиСтроки.packingList.packingForm.UUID; стр.ДолжностьВетВрача = СтрокаВСД.confirmedBy.post; стр.ДатаТТН = СтрокаВСД.waybillDate; стр.НомерТТН = СтрокаВСД.waybillNumber; стр.ОбследованиеПартии = ДеталиСтроки.cargoInspected; стр.ПроведениеЭкспертизыПродукции = ДеталиСтроки.cargoExpertized; Иначе КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
8
gaur777
17.08.17
✎
11:42
|
(6) и так на каждую из 6 полей ругается, которые у меня в условие {ВнешняяОбработка.ПросмотрСкладскогоЖурналаВетис.Форма.Форма.Форма(122)}: Поле объекта не обнаружено (packingList)
стр.UUIDУпаковки = ДеталиСтроки.packingList.packingForm.UUID; |
|||
9
Рэйв
17.08.17
✎
11:42
|
(7)Ну и зачем ты проверяешь стр? Оно полубому у тебя не пустое, потому что ты в самом начале делаешь
стр = Остатки.Добавить(); |
|||
10
Рэйв
17.08.17
✎
11:44
|
(8)Проблема в том, что у ДеталиСтроки нет поля packingList.
и стр тут совсем не причем. |
|||
11
gaur777
17.08.17
✎
11:45
|
(10) так я же объясняю приходит 10 строчек с 25 полями
в 3 строках из 10 этих полей нет (т.к. исходящая продукция), а в других 7 они есть и они должны заполняться. вот как-то так стр.UUIDУпаковки = ДеталиСтроки.packingList.packingForm.UUID; стр.ДолжностьВетВрача = СтрокаВСД.confirmedBy.post; стр.ДатаТТН = СтрокаВСД.waybillDate; стр.НомерТТН = СтрокаВСД.waybillNumber; стр.ОбследованиеПартии = ДеталиСтроки.cargoInspected; стр.ПроведениеЭкспертизыПродукции = ДеталиСтроки.cargoExpertized; |
|||
12
gaur777
17.08.17
✎
11:48
|
(10) щас скину скрины, всё станет понятно!
|
|||
13
Рэйв
17.08.17
✎
11:48
|
(11)Если нечем проверить наличие полей типа .Свойство у структуры, то делай обращение к этим полям как в(1)
|
|||
14
ok_sys
17.08.17
✎
11:49
|
Если ЗначениеЗаполнено(стр) Тогда
а должно быть Если ЗначениеЗаполнено(СтрокаВСД.***) Тогда разве нет? |
|||
15
dezss
17.08.17
✎
11:54
|
Если СтрокаВСД.Свойствро("Имя_свойства") Тогда
стр.свойствро = СтрокаВСД.Имя_свойства; КонецЕсли; И так делай на каждое свойство, которого может не быть. |
|||
16
Рэйв
17.08.17
✎
11:59
|
(15)Не факт что это структура и у СтрокаВСД есть метод .Свойство()
|
|||
17
dezss
17.08.17
✎
12:01
|
(16) не факт, но надо проверить.
Использовать Попытка/Исключение, ИМХО, надо только при записи в базу, работе с ТО и т.п., в остальных надо стараться избегать. А то потом "В этой транзакции уже происходили ошибки" можно словить, а разбираться в этом бывает довольно геморно) |
|||
18
gaur777
17.08.17
✎
12:15
|
Вот для примера
первый скрин исходящая продукция http://pastenow.ru/793c1a279fe235ff32d0459832f66a30 второй входящая продукция http://pastenow.ru/fac998dd98d9672fee3b326f26fc7185 |
|||
19
gaur777
17.08.17
✎
12:33
|
Так в итоге, какой выход из ситуации, я так и не понял
|
|||
20
Рэйв
17.08.17
✎
12:42
|
(19)Оберни строчку в попытку и не мучайся.При ошибке оно попадет в исключение и пойдет дальше, ничего не делая.
|
|||
21
gaur777
17.08.17
✎
13:35
|
(20) так и что? оно не заполняет эти строчки тогда вообще
мне необходимо чтоб оно где-то заполняло, а где их нет, там проходило дальше |
|||
22
Рэйв
17.08.17
✎
13:37
|
(21)Ты не понял все заполняй нормально, а
критичную строку: //--- Попытка стр.UUIDУпаковки=ДеталиСтроки.packingList.packingForm.UUID; Исключение КонецПопытки; |
|||
23
breezee
17.08.17
✎
13:38
|
Типо такого стр.UUIDУпаковки = ?(ЗначениеЗаполнено(ДеталиСтроки.packingList.packingForm.UUID), ДеталиСтроки.packingList.packingForm.UUID, 0);
|
|||
24
gaur777
17.08.17
✎
13:45
|
(22) Вот делаю так! Всё равно не заполняет эти поля во всех строчках!
Процедура ОбработкаОтвета(ОтветСписок) Для Каждого СтрокаВСД из ОтветСписок.vetDocument Цикл стр = Остатки.Добавить(); ЗаполнитьЗначенияСвойств(стр, СтрокаВСД); ДеталиСтроки = СтрокаВСД.batch; СписокСвойств = ДеталиСтроки.Свойства(); стр.ДатаВыпуска = ПолучитьДатуИзОтвета(ДеталиСтроки.DateOfProduction.firstdate); Если СписокСвойств.Получить("expirydate") <> Неопределено Тогда стр.ГоденДо = ПолучитьДатуИзОтвета(ДеталиСтроки.expirydate.firstdate); КонецЕсли; стр.GUIDЦели = СтрокаВСД.purpose.guid; стр.UuidВСД = СтрокаВСД.uuid; стр.Статус = СтрокаВСД.status; стр.UUIDСтраныПроисхождения = ДеталиСтроки.countryofOrigin.UUID; стр.ВетВрач = СтрокаВСД.confirmedBy.fio; стр.ВидПродукции = Справочники.ОписаниеПродукцииВетис.НайтиПоРеквизиту("GUID",Строка(ДеталиСтроки.subProduct.guid)); стр.ДатаВСД = СтрокаВСД.issueDate; стр.unitGuid = ДеталиСтроки.unit.guid; стр.ЕдиницаИзмерения = ПолучитьОписаниеЕдиницыИзмеренияПоGUID(стр.unitGuid); стр.КоличествоУпаковок = Число(ДеталиСтроки.packingAmount); стр.Местность = СтрокаВСД.locationProsperity; стр.Наименование = ДеталиСтроки.productItem.name; стр.НекачественныйГруз = ДеталиСтроки.lowGradeCargo; стр.ОбъемПродукции = ДеталиСтроки.volume; стр.Продукция = Справочники.ОписаниеПродукцииВетис.НайтиПоРеквизиту("GUID",Строка(ДеталиСтроки.product.guid)); стр.СкоропортящаясяПродукция = ДеталиСтроки.perishable; стр.СпособХранения = СтрокаВСД.transportStorageType; стр.ТипВСД = СтрокаВСД.Type; стр.ТипПродукции = Справочники.ОписаниеПродукцииВетис.НайтиПоРеквизиту("КодВЕТИС",Число(ДеталиСтроки.productType)); стр.ТипТранспорта = СтрокаВСД.transportInfo.transportNumber.vehicleNumber; стр.Транспорт = СтрокаВСД.transportInfo.transportType; стр.ФормаВСД = СтрокаВСД.form; стр.UUIDПлощадкиОтправителя = СтрокаВСД.consignor.enterprise.UUID; стр.UUIDПлощадкиПолучателя = СтрокаВСД.consignee.enterprise.UUID; стр.UUIDХСОтправителя = СтрокаВСД.consignor.businessEntity.UUID; стр.UUIDХСПолучателя = СтрокаВСД.consignee.businessEntity.UUID; Попытка стр.UUIDУпаковки = ДеталиСтроки.packingList.packingForm.UUID; стр.ДолжностьВетВрача = СтрокаВСД.confirmedBy.post; стр.ДатаТТН = СтрокаВСД.waybillDate; стр.НомерТТН = СтрокаВСД.waybillNumber; стр.ОбследованиеПартии = ДеталиСтроки.cargoInspected; стр.ПроведениеЭкспертизыПродукции = ДеталиСтроки.cargoExpertized; Исключение КонецПопытки; КонецЦикла; КонецПроцедуры |
|||
25
_Дайвер_
17.08.17
✎
13:47
|
(22) +
|
|||
26
breezee
17.08.17
✎
13:49
|
(24) Запускай отладку и смотри по f10 что у тебя там происходит. Чтобы вычислить выражение(кусок кода) shift + f9. Мне кажется, ты сам не знаешь, что должно быть в результате и что у тебя происходит в коде
|
|||
27
breezee
17.08.17
✎
13:51
|
А еще "Справочники.ОписаниеПродукцииВетис.НайтиПоРеквизиту" 3 раза обращаешься, вынеси в 1 запрос и получай все данные за раз
|
|||
28
gaur777
17.08.17
✎
13:54
|
(26) Это самый простой ответ в этом вопросе. Но я прекрасно понимаю что я хочу. Я ведь даже скрины скинул, выше посмотрите в ветке
(27) Зачем? Это роли никакой не играет в данном вопросе |
|||
29
gaur777
17.08.17
✎
14:02
|
(26) интересное кино
значение в вычислить выражения отображаются но в табличную часть не сохраняет почему? |
|||
30
gaur777
17.08.17
✎
14:07
|
Всё дурью маюсь
Прошу прощения, глупость допустил большую Поля которые не заполняет, указал не тот формат Всем спасибо большое Буду впредь внимательней |
|||
31
gaur777
17.08.17
✎
14:07
|
Точнее не тот тип
|
|||
32
breezee
17.08.17
✎
14:22
|
(28) Зачем? Это роли никакой не играет в данном вопросе
В данном - нет, на каком-нибудь собеседовании через годик-другой сыграет)) |
|||
33
gaur777
17.08.17
✎
14:26
|
(32) хах я вас понял
сейчас исправлю |
|||
34
dezss
17.08.17
✎
14:28
|
(27) вообще да, но на практике, это обращение будет же кэшировано...
|
|||
35
gaur777
22.08.17
✎
14:26
|
Добрый день всем!!! Помогите пожалуйста. задача такая:
У меня имеется внешняя обработка. 1 действие - по нажатию кнопки отправляю запрос на сервис. 2 действие - по нажатию 2 кнопки получаю ответ с over количеством записей на форме есть поле ввода (ДокументКонтрагента) имеет тип ДокументСсылка.ДокументКонтрагента Нажимая на него я выбираю нужную мне строку документа с нужными мне значениями реквизита ("НомерМашины" и "ДатаОтправки") Теперь нужно описать условие Если реквизит НомерМашины (из документа) = реквизиту НомерТТН (из внешней обработки) и ДатаОтправки = ДатеТТН (тогда заполняется табличная часть этой строкой) Тоесть нужно отбирать только ту запись запроса, которая соответствует выбранному документу контрагента. Вот скриншот формы внешней обработки - где я получаю ответ: http://pastenow.ru/4a67d3a046821c452c933089a7c5b657 |
|||
36
azernot
22.08.17
✎
15:01
|
Какой тип у "ответа с over количеством записей"?
|
|||
37
lexasan
22.08.17
✎
15:57
|
(35) "1 действие - по нажатию кнопки отправляю запрос на сервис. " - отправляй данные с фильтром для получения только нужного ответа, мы же не знаем как сервис устроен.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |