8.х [РЕШЕНО] При создании на основании не заполняются добавленные реквизиты

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

  1. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    440
    Симпатии:
    2
    Баллы:
    29
    Уважаемые эксперты,
    КА-2.2.2.199
    В табличной части Товары документа ЗаказКлиента создал новые реквизиты (СрокГарантии, СрокДействияЛицензии, тип - Дата).
    Как сделать, чтобы значения этих реквизитов переносились в ТЧ Товары документа РеализацияТоваровУслуг при создании РТУ на основании Заказа?
    Если руками в ОбработкеЗаполнения добавляю эти реквизиты:
    Код:
            Запрос.Текст = "ВЫБРАТЬ
                           |    ЗаказКлиента.Товары.(
                           |        СрокГарантииНач КАК НачалоГарантии,
                           |        СрокГарантииКон КАК КонецГарантии,
                           |        СрокДействияЛицензии КАК СрокЛицензии,
                           |        КоличествоПользователей КАК Пользователи
                           |    )
                           |ИЗ
                           |    Документ.ЗаказКлиента КАК ЗаказКлиента
                           |ГДЕ
                           |    ЗаказКлиента.Ссылка = &Заказ";
                       
               Запрос.УстановитьПараметр("Заказ",Заказ);
               Выборка = Запрос.Выполнить().Выбрать();
            Пока Выборка.Следующий() Цикл
                ВыборкаТовары = Выборка.Товары.Выбрать();
                Пока ВыборкаТовары.Следующий() Цикл
                    Объект.Товары.СрокГарантииНач = ВыборкаТовары.СрокГарантииНач;
                    Объект.Товары.СрокГарантииКон = ВыборкаТовары.СрокГарантииКон;
                    Объект.Товары.СрокДействияЛицензии = ВыборкаТовары.СрокДействияЛицензии;
                    Объект.Товары.КоличествоПользователей = ВыборкаТовары.КоличествоПользователей;
                КонецЦикла;
            КонецЦикла;
            
    то страшно ругается: Поле объекта не обнаружено.
    В чем моя ошибка?
    Спасибо!
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.828
    Симпатии:
    1.024
    Баллы:
    204
    В ТЧ добавлять строки нужно или искать существующие.
    nickvv нравится это.
  3. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    440
    Симпатии:
    2
    Баллы:
    29
    а можно подробнее?
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.828
    Симпатии:
    1.024
    Баллы:
    204
    Код:
    Пока ВыборкаТовары.Следующий() Цикл
    НСтр = Объект.Товары.Добавить();
    НСтр.СрокГарантииНач = ВыборкаТовары.СрокГарантииНач;
    ....
    
    nickvv нравится это.
  5. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    440
    Симпатии:
    2
    Баллы:
    29
    у меня строка уже создается стандартным заполнением на основании, т. е. в уже созданную строку надо добавить эти новые реквизиты.
    Или прописывать полностью заполнение строки руками? И, соответственно, запросом вытягивать полностью строку ТЧ? Но тогда сначала надо будет очистить ТЧ от стандартной обработки заполнения? Как-то, наверное, не очень...
    Как выбрать нужную уже созданную строку ТЧ?
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.828
    Симпатии:
    1.024
    Баллы:
    204
    В синтаксис-помощнике есть описание методов для ТЧ, в том числе и Найти()/НайтиСтроки()
    nickvv нравится это.
  7. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    440
    Симпатии:
    2
    Баллы:
    29
    Сделал вот так в ОбработкеЗаполнения модуля документа РеализацияТоваровУслуг:
    Код:
        Если ТипЗнч(ДанныеЗаполнения.ДокументОснование) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
            Заказ = ЭтотОбъект.ЗаказКлиента;
            Запрос = Новый Запрос();
            Запрос.Текст = "ВЫБРАТЬ
                           |    ЗаказКлиента.Товары.(
                           |        СрокГарантииНач КАК НачалоГарантии,
                           |        СрокГарантииКон КАК КонецГарантии,
                           |        СрокДействияЛицензии КАК СрокЛицензии,
                           |        КоличествоПользователей КАК Пользователи,
                           |        Характеристика
                           |    )
                           |ИЗ
                           |    Документ.ЗаказКлиента КАК ЗаказКлиента
                           |ГДЕ
                           |    ЗаказКлиента.Ссылка = &Заказ";
                      
               Запрос.УстановитьПараметр("Заказ",Заказ);
               Выборка = Запрос.Выполнить().Выбрать();
            Пока Выборка.Следующий() Цикл
                ВыборкаТовары = Выборка.Товары.Выбрать();
                Пока ВыборкаТовары.Следующий() Цикл
                    НайденнаяСтрока = ЭтотОбъект.Товары.Найти(ВыборкаТовары.Характеристика, "Характеристика");
                    НайденнаяСтрока.СрокГарантииНач = ВыборкаТовары.НачалоГарантии;
                    НайденнаяСтрока.СрокГарантииКон = ВыборкаТовары.КонецГарантии;
                    НайденнаяСтрока.СрокДействияЛицензии = ВыборкаТовары.СрокЛицензии;
                    НайденнаяСтрока.КоличествоПользователей = ВыборкаТовары.Пользователи;
                КонецЦикла;
            КонецЦикла;
        КонецЕсли;
    
    Всё работает.
    Спасибо!
    Последнее редактирование: 14 мар 2017