Имя: Пароль:
1C
1C 7.7
v7: Запись значений в текстовое поле таблицы документа
0 Virtmon
 
14.05.13
09:29
База ТиС.
Дали задание: Если сумма документа достигает 3000, то чтоб автоматом вылазила скидка 3% и все строки соответственно ей пересчитывались. Если 5000 - 5%. Все строки без проблем пересчитываются, но вот поле "Скидка" является текстовым и не доступно для редактирования. При попытке записать туда значение выдается ошибка, мол "попытка присвоить значение недоступной для записи переменной." Можно ли как-то это обойти или придется реквизит делать и в него записывать?
1 Рэйв
 
14.05.13
09:30
А чего бы не сделать это поле нормальным реквизитом таб части и не париться?
2 mikecool
 
14.05.13
09:30
а если сумма уменьшается - скидка автоматом снимается?
3 Рэйв
 
14.05.13
09:31
колонка-текст обычно используется для вывода инфы  "на лету" по данным строки. Тут явно не тот случай. Вполне можно сделать реквизитом
4 Mikeware
 
14.05.13
09:35
(2) и так и будет колебаться вокруг порогового значения...
5 Virtmon
 
14.05.13
09:36
(1) чтоб меньше изменений было
6 Mikeware
 
14.05.13
09:37
(5) программиста позовите...
7 Virtmon
 
14.05.13
09:37
(2)да. Но сумма то считается вся, в сумме учета скидки нет. При удалении строк тоже пересчитывается
8 Virtmon
 
14.05.13
09:37
я он и есть)
9 Ёпрст
 
14.05.13
09:37
(0) реквизит не нужен, рассчитывай скидку от "базового" (выбранного) типа цен в документе и привет.
10 ЧеловекДуши
 
14.05.13
09:38
(8) Ты какого рода программист?
У тебя вопрос на уровне, аникейщика :)
11 ЧеловекДуши
 
14.05.13
09:40
(0)Лучше вообще к делу подходить, как 1С, она цену всегда оставляет без изменения, а пересчитывает сумму.
При этом на самом деле реквизит "Скидка" присутствует в Шапке документа :)
12 Virtmon
 
14.05.13
09:40
(9) рассчитывается все просто, как ее записать в это поле
(10) Паскаль в школе проходил 10 лет назад. Год назад программера уволили, мне сказали: "теперь ты программист". В принципе освоить любой язык не сложно, но опыта мало.
13 Mikeware
 
14.05.13
09:41
(8) ты себе сильно льстишь...
---------
передайте программисту, пусть посмотри механизм расчета скидок, и предназначение колонки "скидка" в ТЧ
14 Virtmon
 
14.05.13
09:42
(11) Реквизит "Скидка" присутствует в шапке, а в табличной части "СуммаСкидки". Ее надо пересчитывать
15 Ёпрст
 
14.05.13
09:42
(14) забудь про этот реквизит как страшный сон
16 Mikeware
 
14.05.13
09:42
(12) Тогда готовь три конверта...
Хотя проще начать с листка бумаги формата А4
17 Virtmon
 
14.05.13
09:43
Механизм рассчета скидок происходить в глобальном модуле, маленькой функцией, там сложного ничего нет
18 Ёпрст
 
14.05.13
09:43
Скидка должна быть для каждой строки своя, если надо - одинаковая для всех.
Хранить её тоже не надо. Она рассчитывается от типа цен в документе и всё.
19 Virtmon
 
14.05.13
09:43
Вопрос в том, можно ли как-то в поле "СуммаСкидки" записывать данные или реквизит делать?
20 Ёпрст
 
14.05.13
09:45
(19) можно.
21 Ёпрст
 
14.05.13
09:45
реквизит делать не надо.
22 Virtmon
 
14.05.13
09:46
Каким образом? мне пишет что я записываю данные в  недоступную для записи переменную
23 Ёпрст
 
14.05.13
09:47
в формулу текстового реквизита повесить функцию, которая покажет значение скидки, в предопределенной процедуре сделать ввод этой скидки, всё.
24 Virtmon
 
14.05.13
09:47
В поле СуммаСкидки данные попадают из функции:
Функция глСтрокаСкидки(Конт, РаздТриад = "'") Экспорт
   Возврат глФрм(Окр(Конт.Цена*Конт.Количество,2,1)-Конт.Сумма,,,РаздТриад);    
КонецФункции // глСтрокаСкидки()

А сохраняются при проведении.
25 Virtmon
 
14.05.13
09:48
Функция возвращает значение для данной строки. А мне надо пересчет провести во всех строках. Для этого приходится прощелкивать все строки.
26 kortun
 
14.05.13
09:48
меняешь скидку в шапке на нужную и вызываешь процедуру
Типа
Скидка = НужнаяСкидка;
глПересчитатьСкидки(Контекст);
27 kortun
 
14.05.13
09:49
+(26) это если типовая ТиС
28 Virtmon
 
14.05.13
09:50
(26) это работает для текущей строки, чтоб таким методом пересчитались все строки приходится перещелкивать все строки. Автоматом как перезаписать "СуммаСкидки" во всех строках
29 kortun
 
14.05.13
09:51
(28) глПересчитатьСкидки(Контекст, 0);
30 kortun
 
14.05.13
09:51
читай описание процедуры
31 kortun
 
14.05.13
09:52
//******************************************************************************
// глПересчитатьСкидки(Конт)
//
// Параметры:
//  Конт - Контекст документа    
//  ТекСтрока - 1 - пересчитать только текущую строку, 0 - пересчитать все строки документа
32 kortun
 
14.05.13
09:53
(28) сумма скидки не перезаписывается, это просто поле для отображения, оно там считается разницей между колонкой сумма и колонками (цена * количество)
33 Virtmon
 
14.05.13
09:54
У меня релиз 939, там только это:
// глСтрокаСкидки(Конт, РаздТриад)
//
//  Конт      - контекст документа,
//    РаздТриад - разделитель триад
//
// Возвращаемое значение:
//  Строковое представление о скидке по текущей строке спецификации документа
//
// Вызывается из формул элементов диалога
//  Формула колонки "Скидка" табличной части документа
//
// Описание:
//  Служит для формирования строкового представления о скидке
//  по текущей строке табличной части документа
//
34 Virtmon
 
14.05.13
09:54
Спс за направление, сейчас посмотрю последний релиз
35 Эльниньо
 
14.05.13
09:55
Если Сумма > 3000 Тогда
   Документ.Скидка.Вылазь();
КонецЕсли;
36 kortun
 
14.05.13
09:55
глПересчитатьСкидки <> глСтрокаСкидки ты не туда смотришь, ищи правильную процедуру
37 Virtmon
 
14.05.13
09:58
Понял, я тупанул жестко)
38 Virtmon
 
14.05.13
10:33
Похоже не тупанул: При изменении скидки пересчитываются все строки, но колонка "Скидка" пересчитывается только у текущей строки.
В "глПересчитатьСкидки" строку "//  ТекСтрока - 1 - пересчитать только текущую строку, 0 - пересчитать все строки документа" я не нашел. Как пересчитать все строки
39 Virtmon
 
14.05.13
10:45
(38) Все строки вместе со скидкой
40 Ganiev
 
14.05.13
12:14
(38) Пробегись по строкам циклом и запусти пересчет скидки для каждой строки!
41 Virtmon
 
14.05.13
13:29
(40) 39 предыдущих постов как бы намекают что это уже было сделано и результата не дало
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.