Имя: Пароль:
1C
 
как УТ 10.3 Программно обновить табличное поле
0 Eeelena
 
30.12.14
09:38
мне необходимо в документе ЧекККМ при установке скидки округлять сумму, само значение изменяется, но в табличном поле значение не обновляется. В чем может быть причина? Пробовала писать  

ЭтаФорма.ЭлементыФормы.Товары.ОбновитьСтроки();
ЭтаФорма.Обновить();
1 Dmitriy_76
 
30.12.14
09:39
может вызвать метод привыводестроки
2 Eeelena
 
30.12.14
09:40
(1) это как?
3 vicof
 
30.12.14
09:41
"само значение изменяется, но в табличном поле значение не обновляется"
что бы это значило?
4 Dmitriy_76
 
30.12.14
09:41
ну.. твоя колонка вычисляемая не ?
5 Eeelena
 
30.12.14
09:43
(3) когда откладчиком по коду смотришь значение присваевается строке этой табличной части, но на самой форме не меняется
6 vicof
 
30.12.14
09:44
(5) А дальше оно обратно не меняется?
7 Eeelena
 
30.12.14
09:47
(6) возможно меняется, но я не знаю где
8 vicof
 
30.12.14
09:49
F11 спасет мать русской демократии
9 Eeelena
 
30.12.14
09:50
(8) я смотрела, но не нашла
10 vicof
 
30.12.14
10:09
(9) Копай, и когда-нибудь ты станешь настоящей одинэсницей
11 palladyi
 
30.12.14
10:22
(9) Посмотри, может у тебя есть еще один обработчик событий, срабатывающий в этот момент. А вообще, ставь точку останова в момент округления, выводи значение суммы в табло и жми F11 до тех пор, пока сумма не изменится.
12 Eeelena
 
30.12.14
11:09
(11) спасибо, попробую
13 Eeelena
 
30.12.14
11:22
(11) все время значение суммы равно округленному значению при отладке, но при открытии формы все равно не округленное значение выходит(
14 Eeelena
 
30.12.14
11:23
то есть не при открытии, а после установки скидки
15 palladyi
 
30.12.14
11:25
(13) не округленное, но с учетом скидки?
16 Eeelena
 
30.12.14
11:27
(15) да
17 palladyi
 
30.12.14
11:28
(16) выложи код установки скидки и округления, плиз
18 Eeelena
 
30.12.14
11:31
(17)

// Процедура - обработчик события "ПриИзменении" поля процента скидки-наценки
// в строке табличной части "Товары".
//
Процедура ТоварыПроцентСкидкиНаценкиПриИзменении(Элемент)

    СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
    ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    
    СтрокаТабличнойЧасти.Сумма=Окр(СтрокаТабличнойЧасти.Сумма,0);
    
    ЭтаФорма.ЭлементыФормы.Товары.ОбновитьСтроки();
    ЭтаФорма.Обновить();
    
    
    
КонецПроцедуры
19 Eeelena
 
30.12.14
11:31
(17)

ИмяТабличнойЧасти = ОбщегоНазначения.ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку(СтрокаТабличнойЧасти);

    МетаданныеДокумента = ДокументОбъект.Метаданные();

    Сумма = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Количество;
    СуммаСкидки = 0;

    Если (СпособРасчета = Неопределено)
     Или (СпособРасчета = Перечисления.СпособРасчетаСуммыДокумента.СУчетомВсехСкидок)
     Или (СпособРасчета = Перечисления.СпособРасчетаСуммыДокумента.БезУчетаРучнойСкидки) Тогда
        Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ПроцентАвтоматическихСкидок", МетаданныеДокумента,
                                             ИмяТабличнойЧасти) Тогда
            СуммаСкидки = Сумма * СтрокаТабличнойЧасти.ПроцентАвтоматическихСкидок / 100;
        КонецЕсли;

        Если (СпособРасчета <> Перечисления.СпособРасчетаСуммыДокумента.БезУчетаРучнойСкидки)Тогда
            Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ПроцентСкидкиНаценки", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
                СуммаСкидки = СуммаСкидки + (Сумма * СтрокаТабличнойЧасти.ПроцентСкидкиНаценки / 100);
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;

    СтрокаТабличнойЧасти.Сумма = Сумма - СуммаСкидки;
20 Eeelena
 
30.12.14
11:32
(17) второй кусок кода это процедура РассчитатьСуммуТабЧасти, я и в ней делала округление, но тоже не сработало
21 palladyi
 
30.12.14
11:35
(18) УФ или обычные формы?
22 Eeelena
 
30.12.14
11:37
(21) обычные УТ 10.3
23 palladyi
 
30.12.14
11:45
хм... обновлять там ничего не надо, само должно встать...
24 palladyi
 
30.12.14
11:45
попробуй убрать обновление строк и формы, может у тебя при выводе строки пересчитывается
25 Eeelena
 
30.12.14
11:46
(23) (24) убрала, ни чего не изменилось
26 Eeelena
 
30.12.14
11:47
(23) не устанавливается, я уже всю голову сломала от чего так(
27 Рэйв
 
30.12.14
11:47
.СоздатьКолонки()?
Не?
28 Eeelena
 
30.12.14
11:48
(24) при выводе строки смотрела ничего такого

// Процедура - обработчик события "ПриВыводеСтроки" табличной части "Товары".
//
Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

    РаботаСДиалогами.ПоказатьКодАртикул(мКолонкиТовары, ОформлениеСтроки.Ячейки, ДанныеСтроки.Номенклатура);
    РаботаСДиалогами.ПоказатьСуммуБезСкидок(мКолонкиТовары, ОформлениеСтроки.Ячейки, ДанныеСтроки.Цена, ДанныеСтроки.Количество);

    Если ДанныеСтроки.Номенклатура.Услуга Тогда
        ОформлениеСтроки.Ячейки.ЕдиницаИзмерения.ОтметкаНезаполненного = Ложь;
    КонецЕсли;

КонецПроцедуры
29 palladyi
 
30.12.14
11:48
(26) причем не только себе)
30 palladyi
 
30.12.14
11:48
(27) зачем?
31 Eeelena
 
30.12.14
11:48
(27) это как?
32 Рэйв
 
30.12.14
11:50
(30)Ну вдруг!:-)
Вообщето при создании данные обновлятся должны по идее
33 palladyi
 
30.12.14
11:51
(32) у меня СП такого метода не знает)
34 Eeelena
 
30.12.14
11:52
(32) вот и мне кажется, что должны, но не обновляются((((((
35 palladyi
 
30.12.14
11:53
(28) поставь тут точку останова на условии и после обновления смотри на суммы, если они округлены - магия и нужно чистить кеш, а если нет - значит что-то еще отрабатывает
36 Рэйв
 
30.12.14
11:53
(33)Какойто неполноценный у тебя СП:-))
https://yadi.sk/i/JWdPSbq0dhnx7
37 palladyi
 
30.12.14
11:55
(36) да, чет подозрительно)))
38 yavasya
 
30.12.14
11:58
сделай запрос к реквизитам ТЧ , думаю ты не присваиваешь им значение при назначение скидки
39 Eeelena
 
30.12.14
11:59
(35) чистка кеша не помогла

что ж еще там может быть(
40 Рэйв
 
30.12.14
12:00
(39)Чудес не бывает.
Скорее всего ты и правда не записываешь ничего в таб часть.
41 Eeelena
 
30.12.14
12:01
(40) СтрокаТабличнойЧасти.Сумма=Окр(СтрокаТабличнойЧасти.Сумма,0);
42 yavasya
 
30.12.14
12:01
а как он может назначать неокругленные значения, когда у тебя тип суммы число с точностью 2 ?
43 Рэйв
 
30.12.14
12:05
(41)А копейки точно есть?
44 Eeelena
 
30.12.14
12:06
(42) не поняла? он округленное должен назначить
45 Eeelena
 
30.12.14
12:06
(43) получается если было например 152,09 при округлении получается просто 159
46 palladyi
 
30.12.14
12:07
(42) она округляет до целых
47 Eeelena
 
30.12.14
12:07
(43) может я как то неправильно округляю?
48 Eeelena
 
30.12.14
12:08
(46) я прошлась отладчиком по процедуре привыводестроки, он обратно ставит сумму неокругленную, но в какой момент не понятно
49 yavasya
 
30.12.14
12:09
да ты после обработки своей сохрани, закрой и открой документ, у тебя реквизиты не записываются ТЧ после обработки
50 Eeelena
 
30.12.14
12:13
(49) так мне нужно чтоб сразу сохранялось
51 yavasya
 
30.12.14
12:15
а обычным циклом обойти нельзя
типа:
для каждого строка из объект.товары цикл

строка.сумма =

конецЦикла;
52 Eeelena
 
30.12.14
12:15
(46) сделала следующим образом, добавила в процедуру при выводе строки, процедуру ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);

и все заработало
53 palladyi
 
30.12.14
12:27
(52) поздравляю)
54 mehfk
 
30.12.14
12:45
(52) Садись, два.

Весь цимес здесь
// Функция выполняет пересчет автоматических скидок в документе.
//
// Возвращаемое значение:
//  Булево - Истина, если автоматические скидки были рассчитаны.
//
Функция ПересчитатьАвтоматическиеСкидки() Экспорт

    Если РассчитыватьАвтоматическиеСкидки() Тогда
        Если Оплата.Количество() = 1 Тогда
            ВидОплатыДляСкидок = Оплата[0].ВидОплаты;
        Иначе
            ВидОплатыДляСкидок = Справочники.ВидыОплатЧекаККМ.ПустаяСсылка();
        КонецЕсли;

        СтруктураПараметров = Новый Структура;
        СтруктураПараметров.Вставить("ВидРеализации"                 , Перечисления.ВидыСкидок.Розничная);
        СтруктураПараметров.Вставить("СуммаДокумента"                , Ценообразование.ПолучитьСуммуДокументаБезСкидки(Товары));
        СтруктураПараметров.Вставить("Карта"                         , ДисконтнаяКарта);
        СтруктураПараметров.Вставить("ВидОплаты"                     , ВидОплатыДляСкидок);
        СтруктураПараметров.Вставить("ВалютаРегламентированногоУчета", мВалютаРегламентированногоУчета);
        СтруктураПараметров.Вставить("УчетнаяПолитика"               , ПолучитьЗначениеУчетнойПолитики());

        ОбработкаТабличныхЧастей.РассчитатьСкидкиПриПродаже(ЭтотОбъект, Товары, СтруктураПараметров, мМинимальныеЦены, мСписокФильтров);

        Возврат Истина;
    Иначе
        Возврат Ложь;
    КонецЕсли;

КонецФункции // ПересчитатьАвтоматическиеСкидки()
55 Eeelena
 
30.12.14
13:12
(54) где это?
56 mehfk
 
30.12.14
13:21
Глобальный поиск по конфигурации рулит.
57 Eeelena
 
31.12.14
09:23
(56) Спасибо большое)