|   |   | 
| 
 | Заполнение табличной части | ☑ | ||
|---|---|---|---|---|
| 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 действие - по нажатию кнопки отправляю запрос на сервис. " - отправляй данные с фильтром для получения только нужного ответа, мы же не знаем как сервис устроен.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |