Форум программистов, компьютерный форум, киберфорум
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
1 / 1 / 0
Регистрация: 06.10.2015
Сообщений: 81
1
1C 8.x

Итог по столбцу табличного поля

11.01.2019, 10:37. Показов 4268. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени, нужна помощь, 1С начал познавать совсем недавно, и не по своей воле) конфа 8.3 УТ вообщем задача стоит не сложная, в документах реализации и заказе клиентов добавить вес товара наценку и вывести итог по этим столбцам. Все в принципе сделал сам, добавил столбцы, получил данные, вывел данные в столбцы. Так вот Вопрос: при выводе итога функцией
1C
1
Сообщить(Товары.Итог("Вес"));
даже если столбец не пустой всегда возвращается 0. Вот код заполнения столбцов
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Процедура ТоварыПриПолученииДанных(Элемент, ОформленияСтрок)
    РаботаСДиалогами.УстановитьКартинкиВСтрокахТЧ(ОформленияСтрок, мКартинкаСерийныеНомера, мКартинкаНаборКомплект);
    
    //--------------------------Вес и наценка на товар----------------------------------------------------------------
    дВес = 0;
    дНац = 0;
    Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл  //Строки нужно обходить в цикле
    //Вывод веса
    
    Если ОформлениеСтроки.ДанныеСтроки.Количество = 0 Тогда
         ОформлениеСтроки.Ячейки.Вес.Значение = ""; 
     Иначе
        ОформлениеСтроки.Ячейки.Вес.Значение = ОформлениеСтроки.ДанныеСтроки.Номенклатура.доп_Вес*ОформлениеСтроки.ДанныеСтроки.Количество;    
    КонецЕсли;
        
    дВес = Число(дВес) + Число(ОформлениеСтроки.ДанныеСтроки.Номенклатура.доп_Вес*ОформлениеСтроки.ДанныеСтроки.Количество);
    
    //Вывод наценки
    зЦена = ПолучитьЦену(ОформлениеСтроки.ДанныеСтроки.Номенклатура,Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Закуп"),ТекущаяДата());
    Если  зЦена=0 Тогда
        зЦена=1;                               
    КонецЕсли;
    Кол = ОформлениеСтроки.ДанныеСтроки.Количество;
    Если  Кол=0 Тогда
        Кол=1;
    КонецЕсли;
    тЦена = ОформлениеСтроки.ДанныеСтроки.Сумма/Кол;
    нЦена = Окр((((тЦена/зЦена)-1)*100),2);
    Если нЦена=-100 Тогда
        ОформлениеСтроки.Ячейки.Наценка.Текст = "";
    Иначе
        ОформлениеСтроки.Ячейки.Наценка.Текст = нЦена;
    КонецЕсли;
    дНац = (Число(дНац) + нЦена);
КонецЦикла;
ЭлементыФормы.ИнфНадписьНац.Заголовок = ("Ср. наденка: ")+(Окр((дНац)/Товары.Количество(),2))+(" %");
ЭлементыФормы.ИнфНадписьВес.Заголовок = ("Общий вес: ")+(дВес)+(" кг");
//----------------------------------------------------------------------------------------------------------------------
Сообщить(Товары.Итог("Цена"));
КонецПроцедуры
P.s. Результат в виде 0 возвращается в обоих случаях когда ячейка хранит "значение" и когда "текст"
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2019, 10:37
Ответы с готовыми решениями:

Автозаполнение Табличного Поля
Доброго времени суток! Подскажите как присвоить табличному полю значение реквизита справочника (1С...

Программное изменение табличного поля
Товарищи, подскажите пожалуйста, возникла такая проблема. В обработке пытаюсь программно создать...

Как изменить данные табличного поля?
1С 8.2. УПП 1.3 Всем доброго времени суток! Каким образом можно изменить данные табличного...

Ввод адреса в ячейку табличного поля
в табличный документ вводится адрес. Если вводить вручную через обработку ввода адреса, то все...

7
47 / 39 / 10
Регистрация: 23.04.2018
Сообщений: 139
11.01.2019, 13:11 2
Лучший ответ Сообщение было отмечено w1ld32 как решение

Решение

Оформление строки - это по сути картинка на экране. Она никак не сохраняется в документе и не участвует в расчетах, она просто показывается пользователю. Более того, если таблица длинная и на экран не помещается, то для нижних строк, которые не видны, эти данные даже не рассчитываются.
При вычислении Товары.Итог("ххх") данные тащатся из объекта, а не с картинки на форме, поэтому итог нулевой.

Чтобы данными можно было пользоваться и сохранять их, заполнять нужно не через оформление строки, а просто обходя табличную часть, примерно так:

1C
1
2
3
4
5
Для каждого СтрокаТовары из Объект.Товары Цикл
 
 // тут заполняется вес и наценка
 
КонецЦикла
Но правильно будет заполнять эти данные не при открытии документа, а при редактировании каждой строки. Например, выбрали номенклатуру - в обработчике "При изменении" определяете вес и подставляете в соответствующую колонку текущей строки.
Поменяли цену, то же самое - определяете наценку в процедуре "При изменении" и записываете ее в соответствующую колонку текущей строки.
Тогда данные у вас сохранятся, итог по товарам будет работать, перечитывать данные каждый раз не нужно.

Однако, для всех старых существующих документов при этом ничего не будет отображаться. Ведь у них данные не заполнены.
Здесь есть варианты.

Можно старые документы не обрабатывать, если бизнес процесс позволяет (пользователям эта информация в старых документах не нужна).
Можно обработать их и установить в таблице нужные данные, после чего записать документы без проведения, для того, чтобы данные в прошлых периодах не поменялись.


Если все же есть желание использовать оформление строки, то для определения общих сумм веса и наценки нужно добавить отдельную процедуру, которая будет пробегать по всей таблице Товары, рассчитывать и складывать нужные цифры и возвращать итог.
1
1 / 1 / 0
Регистрация: 06.10.2015
Сообщений: 81
11.01.2019, 13:18  [ТС] 3
Orsanka, Спасибо, вот как раз этот вопрос возник при открытии старого документа, эта информация там нужна. По сути можно даже и не вносить данные в ячейку только отображать и каждый раз при открытии высчитывать но при
1C
1
Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
такой обработке при открытии старых документов не пересчитвает 1ю строчку, т.е. если в документе 10 товаров посчитает 9.
Сейчас попробую через цикл который вы посоветовали, посмотрю что получиться.
0
47 / 39 / 10
Регистрация: 23.04.2018
Сообщений: 139
11.01.2019, 13:22 4
w1ld32,

В этом и есть смысл оформления строк - оформление устанавливается только для видимых строк.

Если вы хотите использовать его, то общую сумму веса и наценки считайте отдельно, в другой процедуре, именно по данным объекта.
1
1 / 1 / 0
Регистрация: 06.10.2015
Сообщений: 81
11.01.2019, 13:47  [ТС] 5
Orsanka, Спасибо, теперь уловил почему так происходит, возник другой вопрос, почему-то в цикле
Цитата Сообщение от Orsanka Посмотреть сообщение
Для каждого СтрокаТовары из Объект.Товары Цикл
// тут заполняется вес и наценка
КонецЦикла
Получить значение ячейки я могу, а вот изменить не получается, скорее всего я опять делаю, что-то не так)
1C
1
СтрокаТовары.Вес.Текст = Товары.ДанныеСтроки.Номенклатура.доп_Вес*СтрокаТовары.Количество;
1С говорит, что нет такого параметра Текст
0
Эксперт 1С
434 / 305 / 92
Регистрация: 28.05.2014
Сообщений: 1,247
11.01.2019, 14:01 6
w1ld32,
1C
1
СтрокаТовары.Вес = Товары.ДанныеСтроки.Номенклатура.доп_Вес*СтрокаТовары.Количество;
1
47 / 39 / 10
Регистрация: 23.04.2018
Сообщений: 139
11.01.2019, 14:01 7
w1ld32,
В объекте уже нет текста, только данные.
В поле табличной части Вес - хранится цифра веса (если это поле у вас цифровое, конечно, нужно смотреть в структуре документа). Т.е. у вас должно быть так:

1C
1
СтрокаТовары.Вес = Товары.ДанныеСтроки.Номенклатура.доп_Вес*СтрокаТовары.Количество;
Если поле Вес - не цифровое, а текстовое, то код выше все равно будет работать, просто просуммировать текст не получится.
1
1 / 1 / 0
Регистрация: 06.10.2015
Сообщений: 81
11.01.2019, 14:05  [ТС] 8
Все разобрался Orsanka,Phil, еще раз спасибо, теперь правда все в зацикливание уходит, это сейчас попробую сам решить)
0
11.01.2019, 14:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.01.2019, 14:05
Помогаю со студенческими работами здесь

Привязки (обычная форма) табличного поля
Анамнез: Копированием типовой БП2.Документы.СчетНаОплатуПокупателя.ФормаДокумента создана форма...

Привязка ячейки табличного поля к типу реквизита
Помогите пожалуйста! Эсть табличное поле з колонками Реквізит и Значення Необхідно щоб при...

проблема с обращением к свойству колонки из табличного поля
Кво=ЭлементыФормы.тпКомплектацияКомпьютера.Колонки.Количество(); Для к = 3 по Кво-1 цикл ...

Подскажите событие для ячейки табличного поля
Мне нужно, чтобы при двойном клике на ячейке табличного поля выполнялась написанная мной процедура....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru