[РЕШЕНО] Заполнение цены в табличной части документа РТУ по документу поступления этого товара

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем nickvv, 5 фев 2015.

  1. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте, уважаемые эксперты.
    Прошу вашего совета.
    1С:Предприятие 8.3 (8.3.5.1248), УПП-1.3.58.3 Обычное приложение
    В табличную часть документа РТУ добавлены реквизиты "ДокументПоступления" и "НомерМХ1" (документ передачи на ответ. хранение. добавлен в ПТУ и ОприходованиеТоваров).
    Надо, чтобы при выборе документа поступления в ТЧ РТУ поле "НомерМХ1" заполнялся соответствующим значением из ТЧ ПТУ, а цена в РТУ подставлялась из соответствующего поступления.
    Обработчик события НачалоВыбора выводит список подходящих для выбора документов.
    Всё нормально. Нужный документ выбирается.
    А вот как из этого подтянутого документа вытянуть нужную строку ТЧ и вытащить реквизиты, чтобы подставить в ТЧ РТУ?
    Какими методами пользоваться? В том же Синтакс-Помощнике что искать?
    Спасибо
  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    ПриИзменении()
    Тут у Вас уже будте выбранный вами документ - делаете запрос, получаете ценц и устанвливаете
    nickvv нравится это.
  3. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    а попутно вопрос чайника: чтобы до реквизитов ТЧ добраться сам документ надо получить? или по ссылке можно?
  4. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    ссылки достаточно
    nickvv нравится это.
  5. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    сделал вот так:
    Код:
    Процедура ТоварыДокументПередачиНаОтветственноеХранениеПриИзменении(Элемент)
      
        СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
        ТекТовар = СтрокаТабличнойЧасти.Номенклатура;
        ДокументПоступления = СтрокаТабличнойЧасти.ДокументПередачиНаОтветственноеХранение;
        Стр = ДокументПоступления.Товары.Найти(ТекТовар,);
        ПартияSAP = Стр.ПартияSAP;
        НомерМХ1 = Стр.НомерМХ_1;
        ДатаМХ1 = Стр.ДатаМХ_1;
        Цена = Стр.ЦенаПоставки;
      
    КонецПроцедуры
    
    почему-то Стр - всегда Неопределено. Соответственно - и нужные мне реквизиты не заполняются.
    ТекТовар и ДокументПоступления - верные значения показываются.
    Как же вытащить строку табличной части из ДокументаПоступления?
    Спасибо
  6. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    Ну у Вас ДокументПередачиНаОтветственноеХранение в какйо моент в ТЧ появляется сразу или когда?
    nickvv нравится это.
  7. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    Обработчик события НачалоВыбора:
    Код:
    Процедура ДокументПередачиНаОтветственноеХранениеНачалоВыбора(Элемент, СтандартнаяОбработка)
      
        СтандартнаяОбработка = Ложь;
      
        СписокТипов = Новый СписокЗначений;
        СписокТипов.Добавить(Метаданные.Документы["ПоступлениеТоваровУслуг"].Имя, Метаданные.Документы["ПоступлениеТоваровУслуг"].Представление());
        СписокТипов.Добавить(Метаданные.Документы["ОприходованиеТоваров"].Имя, Метаданные.Документы["ОприходованиеТоваров"].Представление());
          
        //СписокТипов.СортироватьПоПредставлению();
          
        Если ЗначениеЗаполнено(Элемент.Значение) Тогда
      
            ИмяНачальногоТипа = Элемент.Значение.Метаданные().Имя;
            НачальноеЗначение = СписокТипов.НайтиПоЗначению(ИмяНачальногоТипа);
          
        Иначе
          
            НачальноеЗначение = Неопределено;
          
        КонецЕсли;
          
        ВыбранныйЭлемент = ВыбратьИзСписка(СписокТипов, Элемент, НачальноеЗначение);
    
        Если ВыбранныйЭлемент = Неопределено Тогда
            Возврат; // пользователь отказался от выбора
        КонецЕсли;
    
        ТипДокументаПередачи = ВыбранныйЭлемент.Значение;
    
    
        // В качестве владельца формы выбора устанавливаем данный элемент,
        // чтобы выбранное значение было присвоено стандартно.
        ФормаВыбора = Документы[ТипДокументаПередачи].ПолучитьФормуВыбора(,Элемент,);
      
        ЭлементОтбора = ФормаВыбора.Отбор.Найти("ПоступленияПоНомеклатуре");       //это критерий отбора
        Если ЭлементОтбора <> Неопределено Тогда
            СписокТоваров = Новый СписокЗначений;
            Для Каждого Стр Из Товары Цикл
                СписокТоваров.Добавить(Стр.Номенклатура);
            КонецЦикла;  
            ЭлементОтбора.ВидСравнения = ВидСравнения.ВСписке;
            ЭлементОтбора.Использование = Истина;
            ЭлементОтбора.Значение = СписокТоваров;
        КонецЕсли;
      
        Если ТипДокументаПередачи = "ОприходованиеТоваров" Тогда
            ЭлементОтбора = ФормаВыбора.Отбор.Найти("ВидОперации");
            Если ЭлементОтбора <> Неопределено Тогда
                ЭлементОтбора.ВидСравнения = ВидСравнения.Равно;
                ЭлементОтбора.Использование = Истина;
                ЭлементОтбора.Значение = Перечисления.ВидыОперацийОприходованиеТоваров.ВводНачальныхОстатков;
            КонецЕсли;  
        КонецЕсли;
    
        ФормаВыбора.Открыть();
      
    КонецПроцедуры
    
  8. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    Попробуйте

    Элемент.Значение
    вот тут
    ДокументПоступления = СтрокаТабличнойЧасти.ДокументПередачиНаОтветственноеХранение;

    ДокументПоступления = Элемент.Значение;

    У Вас же после выбора в элементе то что то есть?
    nickvv нравится это.
  9. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    Да. Ссылка на выбранный документ ПТУ или Оприходование
  10. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    У вас в этой процедуре ТоварыДокументПередачиНаОтветственноеХранениеПриИзменении(Элемент)
    Элемент.Значение что возвращает?
  11. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    Поменял.
    Не помогло:
    {Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента.Форма(5210)}: Значение не является значением объектного типа (ПартияSAP)
    ПартияSAP = Стр.ПартияSAP;
    --- Объединение сообщений, 5 фев 2015 ---
    ДокументПоступления - возвращает правильную ссылку на документ.
    Элемент.Значение - та же самая ссылка (правильная)
  12. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    Ну а в Стр = ДокументПоступления.Товары.Найти(ТекТовар,);
    У Вас в отладчике и ДокументПоступления и ТекТовар определеный
    А почему Вы Найти(ТекТовар,); а колонку не указываете вроде же
    Найти(ТекТовар,"Имя колонки где искать"); например
    Найти(ТекТовар,"Товар");
    nickvv нравится это.
  13. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    Пробовал и с указанием колонки:
    Стр = ДокументПоступления.Товары.Найти(ТекТовар, "Номенклатура");
    Тот же результат. Этот же параметр не обязательный
  14. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    я же правильно понял чт сейчас у вас затык
    Стр = ДокументПоступления.Товары.Найти(ТекТовар,);

    стр= неопределено?

    Хотя и ДокументПоступления - есть и ТекТовар
    nickvv нравится это.
  15. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    Да. Совершенно верно.
    Заработало после того, как вытащил табличную часть (вместо Стр = ДокументПоступления.Товары.Найти(ТекТовар,):
    Код:
        ТекCтруктураПоиска = Новый Структура("Номенклатура", ТекТовар);
        ТекКопияТЧ = ДокументПоступления.Товары.Выгрузить();
     
        СтрокиПоиска = ТекКопияТЧ.НайтиСтроки(ТекCтруктураПоиска);
        Если СтрокиПоиска.Количество() > 0 Тогда
            Стр = СтрокиПоиска[0];
        КонецЕсли;
    
    После этого Стр стала выводиться, всё заработало.
    Спасибо.

Поделиться этой страницей