7.7 Вычисляемая колонка в табчасти формы документа

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем nata0303, 20 мар 2013.

  1. TopicStarter Overlay
    nata0303
    Offline

    nata0303

    Регистрация:
    20 мар 2013
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Добрый день! Есть такая проблема: в табличной части документа есть вычисляемая колонка Цены товаров на текущую дату. Вычислять нужно при открытии или вводе новой строки. На форме очень много реквизитов. Сейчас вычисление выполняется чуть ли не при каждом "жесте". Как сделать, чтобы эти цены рассчитывались только в описанных случаях?
  2. Vlan
    Offline

    Vlan Гость Гость

    Посмотреть свойства каждого реквизита и убрать лишние сылки на процедуру/функцию пересчета колонки.
  3. TopicStarter Overlay
    nata0303
    Offline

    nata0303

    Регистрация:
    20 мар 2013
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    "Много реквизитов" - это про то, что действий с формой очень много производится. А ссылка на процедуру есть только у нужной колонки.
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Вызов производите на самой форме похоже. В качестве отображения введите переменную. Присваивайте (вычисляйте) ей нужное значение только при изменении нужных вам реквизитов (вызов расчета в поле формула)
  5. TopicStarter Overlay
    nata0303
    Offline

    nata0303

    Регистрация:
    20 мар 2013
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Видимо я чего-то недопонимаю. Я сделала так: в табличной части в диалоге добавила колонку. У нее в свойствах на закладке "Дополнительно" указываю процедуру: РасчетТекущейЦены(). Рассчитываю на то, что для каждой строки (то бишь для каждого товара) в этой колонке будет стоять его сегодняшняя цена. "Трогаю" например реквизит "НомерМашиныДоставки" или "СрокОтгрузки", которым, по идее до моей цены дела нет, - и у меня запускается моя процедура расчета. Можно конечно в процедуре перечислить эти невлияющие на мои цены реквизиты, НО! Их там .....! Да и некрасиво как-то.... А если добавится что-нибудь - вспомню я потом, что его тоже надо прописать в этой процедуре? Для документов в 2-3 строки это некритично, а когда в счете 99 строк - после каждого клика сидишь - ждешь....
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Извиняюсь, я думал просто реквизит формы, а не ТЧ. А добавить реквизит в ТЧ и вычислять его?
  7. TopicStarter Overlay
    nata0303
    Offline

    nata0303

    Регистрация:
    20 мар 2013
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Реквизит-то в принципе этот документу даром не нужен, цена нужна только сегодня. Завтра она, возможно, будет другая. Ну и шеф сказал: ищи способ без реквизита. Если не найду, конечно буду уговаривать. А пока еще надеюсь.....
  8. Vlan
    Offline

    Vlan Гость Гость

    А если убрать процедуру из колонки и использовать для вычисления цены только предопределенные процедуры ПриОткрытии() и ПриОкончанииРедактированияСтроки()?
  9. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    ПриОкончанииРедактированияСтроки не получится. Там же ТЧ. Получается будет нужна виртуальная ТЗ в которой хранится результат вычисления для отображения. А это полный изврат.

    А что у вас за процедура расчета. М.б. можно ее оптимизировать. Рассчитывать данные которые вы берете 1 раз, а потом просто вычислять, основываясь на измененных реквизитах?
  10. TopicStarter Overlay
    nata0303
    Offline

    nata0303

    Регистрация:
    20 мар 2013
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Цена отбирается из спр.Цены, подчиненного товару по заданному типу цены. Вот пришел в голову такой вариант: При открытии выгружать весь спр.Цены в тз, а потом уже работать с ней: отбирать по владельцу и типу цены, с тз., если не ошибаюсь все летать должно........... Только вот цены там периодические. Как они выгрузятся в тз?...
  11. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Если запросом, то на дату окончания периода в запросе. Все я думаю и не нужно. Я бы
    1) Рассчитывал цены при открытии (те что в ТЧ)
    2) При добавлении строки документа соответственно добавлял бы цену в ТЗ

    Так более оптимизировано чем "лопатить" весь справочник
  12. Vlan
    Offline

    Vlan Гость Гость

    А не проще в начале процедуры РасчетТекущейЦены() проверить, изменился ли "важный" параметр строки, и - при отрицательном ответе - сделать Возврат?
  13. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    А если их 2 десятка и как сказано в посте №5 они могут меняться.... НайтиЗначение не занимает много времени
  14. Vlan
    Offline

    Vlan Гость Гость

    Я сам люблю таблицы значений, но, как мне кажется, это не тот случай. Интересно было бы посмотреть на РасчетТекущейЦены(), что в ней такого затратного по времени?
  15. TopicStarter Overlay
    nata0303
    Offline

    nata0303

    Регистрация:
    20 мар 2013
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Кажется, придумала: Ввожу в модуле переменную. Меняю ее при вводе новой строки и при открытии. И просто проверяю ее при запуске процедуры расчета. :rolleyes:
  16. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Не получится - переменная одна, а строк может быть много.
    Как вариант использовать ТЗ или СЗ, но тут нужно продумать механизм синхронизации ее с ТЧ документа.
  17. TopicStarter Overlay
    nata0303
    Offline

    nata0303

    Регистрация:
    20 мар 2013
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Меня устроит полный пересчет всей колонки в ТЧ ТОЛЬКО в двух указанных случаях: при открытии и при вводе нового товара. Задумалась как отследить ввод нового товара. В момент вызова ПриВводеСтроки() товар еще неизвестен. По-моему, у ПриОкончанииРедактирования есть возможность определять новая это строка или "старая".
  18. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    все же покажите процедуру расчета. Интересно почему долго считается
  19. TopicStarter Overlay
    nata0303
    Offline

    nata0303

    Регистрация:
    20 мар 2013
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    [/code]
    Код:
    ЦеныТовара=СоздатьОбъект("Справочник.Цены");
    
    ЦеныТовара.ИспользоватьВладельца(Товар);
    ЦеныТовара.ПорядокРеквизита("ОтШтук");
    ЦеныТовара.ИспользоватьДату(ТекущаяДата());
    ЦеныТовара.ВыбратьЭлементы();
    НужнаяЦена=0;
    Пока ЦеныТовара.ПолучитьЭлемент()=1 Цикл
    
    Если ЦеныТовара.КатегорияЦены.Наименование="Закупочная" Тогда
    Продолжить;
    КонецЕсли;  
    
    Если ЦеныТовара.ПометкаУдаления() = 1 Тогда
    Продолжить;
    КонецЕсли;
    
    Если ЦеныТовара.Цена+ЦеныТовара.ОтШтук=0 Тогда
    Продолжить;
    КонецЕсли;
    
    ТекСклад = ПредполагаемыйСклад;
    Если ТекСклад.ЭтоГруппа()=1 Тогда
    Если ЦеныТовара.Склад<>ТекСклад Тогда
    Продолжить;
    КонецЕсли;
    Иначе
    Если ЦеныТовара.Склад<>ТекСклад.Родитель Тогда
    Продолжить;
    КонецЕсли;
    КонецЕсли;  
    
    Если ЦеныТовара.ОтШтук<=Количество тогда
    НужнаяЦена=ЦеныТовара.Цена;		
    Иначе
    Прервать;
    КонецЕсли;
    КонецЦикла;  
    Возврат НужнаяЦена;
    
  20. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код можно оптимизировать, но не на много. Я бы все же выгружал цены в ТЗ

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