8.х Активизировать строку

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем sae74, 16 май 2012.

  1. TopicStarter Overlay
    sae74
    Offline

    sae74

    Регистрация:
    5 июл 2011
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Из внешней обработки для заполнения табличных частей документа нужно активизировать по порядку все строки.


    Так я получаю все строки в документе.
    Код:
    Процедура Инициализировать(Объект, ИмяТабличнойЧасти, ТабличноеПолеОбъекта) Экспорт
    Для каждого Строчки из Объект.Товары Цикл
    сообщить(Строчки.Номенклатура);
    КонецЦикла;
    
    КонецПроцедуры
    

    А как ее программно активизировать, что бы заполнились все данные как при ручном выборе строки в документе?
  2. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    надо программно заполнить что ли?
  3. TopicStarter Overlay
    sae74
    Offline

    sae74

    Регистрация:
    5 июл 2011
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Нет, документ заполнен, мне нужно изменить реквизит табличной части, например "ВидНДС", и нужно что бы пересчитались данные в строке.
  4. TopicStarter Overlay
    sae74
    Offline

    sae74

    Регистрация:
    5 июл 2011
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    В этом документе нужно активировать каждую строку

    [​IMG]
  5. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    а зачем активизировать каждую строку? в цикле перебираете все строки, заменяете один реквизит, пересчитываете все что с ним связано. Или я не так вас понимаю?
  6. TopicStarter Overlay
    sae74
    Offline

    sae74

    Регистрация:
    5 июл 2011
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    ну вот я и спрашиваю: как программно сделать так, что бы в цикле перебрать все строки и все значения подставились "по умолчанию". Как будто я вручную выбираю позицию товара.
  7. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    если вы меняете реквизит Номенклатура, то срабатывает процедура ПриИзмененииНоменклатуры(). программное делаете то же самое - сначала меняете реквизит Номенклатура, затем вызываете процедуру ПриИзмененииНоменклатуры().
  8. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    цикл у вас уже есть в первом посте, а вот процедуру ищите в коде, название примерно такое должно быть ВидНДСПриИзменении() что-то в этом духе... и как сказал vartanet вызывайте ее после изменения реквизита
  9. TopicStarter Overlay
    sae74
    Offline

    sae74

    Регистрация:
    5 июл 2011
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Я взял процедуру "ПриИзминенииНоменклатуры()" то что в самом документе и ее переделал под свои нужды вызываю в своей обработке.
    А как вызвать из внешней обработки заполнения табличных частей процедуру "ПриИзминенииНоменклатуры()", какая уже прописана в самом документе?
  10. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Нужно получить объект (форму), а потом уже использовать эту процедуру.
  11. TopicStarter Overlay
    sae74
    Offline

    sae74

    Регистрация:
    5 июл 2011
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    А как ее получить?
    В форме документа есть процедура:

    Код:
    Процедура ОборудованиеНоменклатураПриИзменении(Элемент)
    СтрокаТабличнойЧасти = ЭлементыФормы.Оборудование.ТекущиеДанные;
    // Выполнить общие действия для всех документов при изменении номенклатуры.
    ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    // Заполняем реквизиты табличной части.
    ОбработкаТабличныхЧастей.ЗаполнитьСтавкуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект,"Приобретение");
    СтруктураШапкиДокумента = Новый Структура("Контрагент, ТипЦен, ДоговорКонтрагента, ДатаДокумента, ВалютаДокумента, УчитыватьНДС, СуммаВключаетНДС",
    Контрагент, ТипЦен, ДоговорКонтрагента, Дата,ВалютаДокумента, УчитыватьНДС,СуммаВключаетНДС);
    ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуЦенуПокупкиТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект, СтруктураШапкиДокумента, мВалютаРегламентированногоУчета);
    // Рассчитываем реквизиты табличной части.
    ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    ЗаполнитьСчетаУчетаВСтрокеТабЧасти(СтрокаТабличнойЧасти, "Оборудование", ОтражатьВБухгалтерскомУчете, ОтражатьВБухгалтерскомУчете)
    КонецПроцедуры // ОборудованиеНоменклатураПриИзменении()
    
    В своей обработке заполнения табличных частей я сделал так:


    Код:
    Процедура Инициализировать(Объект, ИмяТабличнойЧасти, ТабличноеПолеОбъекта) Экспорт
    Для каждого Строчки из Объект.Товары Цикл
    СтрокаТабличнойЧасти = Строчки;
    // Выполнить общие действия для всех документов при изменении номенклатуры.
    ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(СтрокаТабличнойЧасти, Объект);
    // Заполняем реквизиты табличной части.
    ОбработкаТабличныхЧастей.ЗаполнитьСтавкуНДСТабЧасти(СтрокаТабличнойЧасти, Объект,"Приобретение");
    СтруктураШапкиДокумента = Новый Структура("Контрагент, ТипЦен, ДоговорКонтрагента, ДатаДокумента, ВалютаДокумента, УчитыватьНДС, СуммаВключаетНДС",
    Объект.Контрагент, Объект.ТипЦен, Объект.ДоговорКонтрагента, Объект.Дата,Объект.ВалютаДокумента, Объект.УчитыватьНДС,Объект.СуммаВключаетНДС);
    ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуЦенуПокупкиТабЧасти(СтрокаТабличнойЧасти, Объект, СтруктураШапкиДокумента, Объект.ВалютаДокумента);
    // Рассчитываем реквизиты табличной части.
    ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, Объект);
    ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, Объект);
    КонецЦикла;
    
    КонецПроцедуры
    

    А как вызвать из своей обработки, процедуру "ОборудованиеНоменклатураПриИзменении(Элемент)"?
  12. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Процедура ОборудованиеНоменклатураПриИзменении() должна быть Экспортной
  13. TopicStarter Overlay
    sae74
    Offline

    sae74

    Регистрация:
    5 июл 2011
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Та про "экспортную" я знаю. Думал может есть возможность "виртуально" перевыбрать строку в документе.
    Как будто вручную заполняешь документ и все заполняется по умолчанию.
  14. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Нет, такого не предусмотрено:)
    Можно перекинуть код процедуры из документа, где у вас заполняется.

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