[РЕШЕНО] Пересчитать ТЧ из обработки

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

  1. TopicStarter Overlay
    SkyNetYar
    Offline

    SkyNetYar Опытный в 1С

    Регистрация:
    11 ноя 2014
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Добрый день! УТ 11.1.10

    Обработка по заполнению ТЧ документа,заполняет ТЧ но не пересчитывает ее автоматически
    upload_2015-12-9_13-49-8.png
    Пробовал вот так :
    Код:
    Для Каждого СтрокаТЗ Из МассивДанных Цикл
            Отбор = Новый Структура;
            Отбор.Вставить("Номенклатура", СтрокаТЗ.Номенклатура);
            мСтрок = ВладелецФормы.Объект.Товары.НайтиСтроки(Отбор);
            Если мСтрок.Количество() > 0 Тогда
                СтрокаТЧ = мСтрок[0];
            Иначе
                СтрокаТЧ = ВладелецФормы.Объект.Товары.Добавить();
            КонецЕсли;
            ЗаполнитьЗначенияСвойств(СтрокаТЧ, СтрокаТЗ);
            КонецЦикла;
    
        ВладелецФормы.Записать();
        ВладелецФормы.Прочитать();
        Закрыть();
    Но что то не канает, подскажите как правильно пожалуйста!?
  2. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Если формы управляемые - то у таблиц есть свой реквизит - Итоги. Вот его тупо добавьте на форму, и ничего считать не нужно.
  3. TopicStarter Overlay
    SkyNetYar
    Offline

    SkyNetYar Опытный в 1С

    Регистрация:
    11 ноя 2014
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Извините не понял, этот код я выполняю во внешней обработке в
    &НаКлиенте
    Процедура Заполнить(Команда)

    Да УФ разумеется.
  4. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Покажите скрин ваших реквизитов, в частности, разверните таблицу значений
  5. TopicStarter Overlay
    SkyNetYar
    Offline

    SkyNetYar Опытный в 1С

    Регистрация:
    11 ноя 2014
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Я так полагаю документа в котором заполняю ТЧ? и Нужны Итоги ТЧ?
    upload_2015-12-9_14-8-51.png

    В модуле этого документа типового используется
    РассчитатьИтоговыеПоказателиПоступления(ЭтаФорма);
    Может мне ее выполнять как то?
  6. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    У вас же есть поля ИтогиСуммаСНДС, чего голову морочить-то :)
  7. TopicStarter Overlay
    SkyNetYar
    Offline

    SkyNetYar Опытный в 1С

    Регистрация:
    11 ноя 2014
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Простите как их из внешней обработки заставить пересчитать?
  8. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Я вам показал как отобразить итоги по таблице.
  9. TopicStarter Overlay
    SkyNetYar
    Offline

    SkyNetYar Опытный в 1С

    Регистрация:
    11 ноя 2014
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Не хватает опыта,делаю так
    Код:
    Поле объекта не обнаружено (ИтогСуммаСНДС)
        ВладелецФормы.СуммаВсего =  ВладелецФормы.Объект.Товары.ИтогСуммаСНДС;
    Если ставлю ВладелецФормы.СуммаВсего = 5 ,то в поле записывается 5

    Почему нельзя просто
    ВладелецФормы.ОбновитьОтображениеДанных();
    Почему не работает?
    Делаю даже так
    Код:
    ВладелецФормы.Элементы.Товары.Обновить();
    ВладелецФормы.ОбновитьОтображениеДанных();
    И все равно тишина..
    У ТЧ есть процедура ПриИзменении, там происходит пересчет итого и там все срабатывает,но она не экспортная..
    Последнее редактирование: 9 дек 2015
  10. Flash-Dance
    Offline

    Flash-Dance Профессионал в 1С

    Регистрация:
    20 май 2012
    Сообщения:
    365
    Симпатии:
    42
    Баллы:
    54
    Судя по скриншоту, вы, не имея достаточного опыта, пытаетесь править типовую? Да еще и самый противный документ "ПоступлениеТоваровУслуг"? Ладно, это уже не мое дело :).

    alexburn хотел сказать, что нужно удерживая левой кнопкой мыши перетащить нужный итоговый реквизит на форму. При этом код вообще писать или править не нужно:
    upload_2015-12-9_14-8-51.png
    alexburn нравится это.
  11. TopicStarter Overlay
    SkyNetYar
    Offline

    SkyNetYar Опытный в 1С

    Регистрация:
    11 ноя 2014
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    При много Уважаемый! Flash-Dance ! Спасибо за разъяснение по поводу пояснения сделанного Вами, возьму на вооружение!
    Но видимо я плохо описываю свои вопросы!
    Еще раз напишу вопрос:
    1.У меня есть внешняя обработка (Импорт из EXCEL) она импортирует данные в типовой документ "Поступление товаров и услуг" номенклатуру.
    2.После того как номенклатура импортировалась и занеслась в документ , сумма внизу "Всего с НДС" остается равна = 0.
    3.Что бы не править типовой документ я в обработке (Импорт из EXEL) пытаюсь либо обновить форму,либо как то заставить пересчитаться ТЧ в документе что бы встала сумма "Всего с НДС"
    4.В обработке (Импорт из EXCEL) есть процедура Заполнить(команда) на клиенте в нее я добавляю:

    Код:
    Для Каждого СтрокаТЗ Из МассивДанных Цикл
    Отбор = Новый Структура;
    Отбор.Вставить("Номенклатура", СтрокаТЗ.Номенклатура);
    мСтрок = ВладелецФормы.Объект.Товары.НайтиСтроки(Отбор);
    Если мСтрок.Количество() > 0 Тогда
    СтрокаТЧ = мСтрок[0];
    Иначе
    СтрокаТЧ = ВладелецФормы.Объект.Товары.Добавить();
    КонецЕсли;
    ЗаполнитьЗначенияСвойств(СтрокаТЧ, СтрокаТЗ);
    КонецЦикла;
    Вот это:
    Код:
    ВладелецФормы.Записать();
    ВладелецФормы.Прочитать();
    Закрыть();
    Или это
    Код:
    ВладелецФормы.Элементы.Товары.Обновить();
    ВладелецФормы.ОбновитьОтображениеДанных();
    Или даже вот так пытался
    Код:
    ВладелецФормы.СуммаВсего = ВладелецФормы.Объект.Товары.ИтогСуммаСНДС;
    Но оно все не срабатывает, в последнем случае если задаю цифру то она подставляется, если как написал то ошибка Поле объекта не обнаружено (ИтогСуммаСНДС)
    -Dead-
  12. Flash-Dance
    Offline

    Flash-Dance Профессионал в 1С

    Регистрация:
    20 май 2012
    Сообщения:
    365
    Симпатии:
    42
    Баллы:
    54
    Заместо
    Код:
    ВладелецФормы.СуммаВсего = ВладелецФормы.Объект.Товары.ИтогСуммаСНДС;
    Попробуйте так:
    Код:
    ВладелецФормы.СуммаВсего = ВладелецФормы.Объект.Товары.Итог("СуммаСНДС")
    Последнее редактирование: 10 дек 2015
  13. TopicStarter Overlay
    SkyNetYar
    Offline

    SkyNetYar Опытный в 1С

    Регистрация:
    11 ноя 2014
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Нет,не пашет, видимо Итог("СуммаСНД") считается в какой то другой момент,никак не пойму почему...
    Если делаю ВладелецФормы.СуммаВсего = 67; то сумма вполне себе нормально встает..
    В самом документе отрыл Процедуру РассчитатьИтоговыеПоказателиПоступления(Форма) выполняется &НаКлиентеНаСервереБезКонтекста
    Там таким макаром считается:
    Код:
    // Расчет итога по табличной части "Товары"
        КоллекцияТовары = Форма.Объект.Товары;
        Форма.СуммаВсего = ?(Форма.Объект.ТребуетсяЗалогЗаТару,
            КоллекцияТовары.Итог("СуммаСНДС"),
            КоллекцияТовары.Итог("СуммаСНДСБезВозвратнойТары"));
        Форма.СуммаНДС = ?(Форма.Объект.ТребуетсяЗалогЗаТару,
            КоллекцияТовары.Итог("СуммаНДС"),
            КоллекцияТовары.Итог("СуммаНДСБезВозвратнойТары"));
        Форма.СуммаРучнойСкидки = ?(Форма.Объект.ТребуетсяЗалогЗаТару,
            КоллекцияТовары.Итог("СуммаРучнойСкидки"),
            КоллекцияТовары.Итог("СуммаРучнойСкидкиБезВозвратнойТары"));
     
        СуммаБезНДС = ?(Форма.Объект.ТребуетсяЗалогЗаТару, КоллекцияТовары.Итог("Сумма"), КоллекцияТовары.Итог("СуммаБезВозвратнойТары"));
    Я следовательно попробовал вот так:
    Код:
    КоллекцияТовары = ВладелецФормы.ЭтаФорма.Объект.Товары;
    ВладелецФормы.ЭтаФорма.СуммаВсего =  КоллекцияТовары.Итог("СуммаСНДС");
    Без ЭтаФорма тоже пробовал
    Ошибок нет,но ничерта о5 не считается! -Arghh-
  14. TopicStarter Overlay
    SkyNetYar
    Offline

    SkyNetYar Опытный в 1С

    Регистрация:
    11 ноя 2014
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Может в цикл выше я указал как то заставить строку ТЧ обновится или пересчитаться, хотя я и пробовал вызывать их ПриИзменении, и все равно тишь да гладь..
  15. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Посмотрите, что происходит при изменении номенклатуры в строке, в типовом коде и сделайте тоже самое при заполнении ТЧ из обработки.
  16. TopicStarter Overlay
    SkyNetYar
    Offline

    SkyNetYar Опытный в 1С

    Регистрация:
    11 ноя 2014
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Там в типовом документе пересчет итого производится только если меняешь цену у товара,срабатывает ПриИзменении этого поля в ТЧ, в этой при изменении есть
    РассчитатьИтоговыеПоказателиПоступления(ЭтаФорма) - которая и пересчитывает Итоги.

    Код:
    &НаКлиентеНаСервереБезКонтекста
    Процедура РассчитатьИтоговыеПоказателиПоступления(Форма)
    // Расчет итога по табличной части "Товары"
        КоллекцияТовары = Форма.Объект.Товары;
        Форма.СуммаВсего = ?(Форма.Объект.ТребуетсяЗалогЗаТару, 
            КоллекцияТовары.Итог("СуммаСНДС"),
            КоллекцияТовары.Итог("СуммаСНДСБезВозвратнойТары"));
        Форма.СуммаНДС = ?(Форма.Объект.ТребуетсяЗалогЗаТару,
            КоллекцияТовары.Итог("СуммаНДС"),
            КоллекцияТовары.Итог("СуммаНДСБезВозвратнойТары"));
        Форма.СуммаРучнойСкидки = ?(Форма.Объект.ТребуетсяЗалогЗаТару, 
            КоллекцияТовары.Итог("СуммаРучнойСкидки"),
            КоллекцияТовары.Итог("СуммаРучнойСкидкиБезВозвратнойТары"));
       
        СуммаБезНДС = ?(Форма.Объект.ТребуетсяЗалогЗаТару, КоллекцияТовары.Итог("Сумма"), КоллекцияТовары.Итог("СуммаБезВозвратнойТары"));
    Пытался так в цикл поместил
    Код:
    КоллекцияТовары = ВладелецФормы.Объект.Товары;
           ВладелецФормы.СуммаВсего = КоллекцияТовары.Итог("СуммаСНДС");
    Но о5 тишина...
  17. Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.023
    Симпатии:
    51
    Баллы:
    54
    А у вас итог по колонке СуммаСНДС чему равен?!
    Может колонка эта вообще пустая?

    Вы пишете
    ВладелецФормы.СуммаВсего = 5000 - работает?
    SkyNetYar нравится это.
  18. TopicStarter Overlay
    SkyNetYar
    Offline

    SkyNetYar Опытный в 1С

    Регистрация:
    11 ноя 2014
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Аааа, вот оно где зарыто было!
    Я не ту колонку теребил все это время оказывается! Посмотреть бы мне сразу что при импорте колонка заполняется Сумма а не Сумма с НДС !
    Сделал вот так
    КоллекцияТовары = ВладелецФормы.Объект.Товары;
    ВладелецФормы.СуммаВсего = КоллекцияТовары.Итог("Сумма");
    Все заработало =)
    Спасибо Вам добрый человек нацелили туда куда надо -Happy-
  19. Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.023
    Симпатии:
    51
    Баллы:
    54
    Фигня, сам через раз так делаю! :)

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