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