Имя: Пароль:
1C
1С v8
v8: документ "ОказаниеУслуги"
0 titan1993
 
23.05.13
19:25
есть документ "ОказаниеУслуги" в нем табличная часть справочника услуги, в справочнике услуги есть такой реквизит как СрокиВыполнения. Проблема неописуема. Догадайтесь пожалуйста сами что мне надо :) УП платформа 8.2. Дак вот когда в табличной части я добавляю услугу, у меня подставляется значение сроки выполнения из справочника услуги. я это сделал так: добавил реквизит прям в форме назвал срокиВыполнения = Объект.Услуги.НаименованиеУслуги.СрокиВыполнения. Уже не в табличной части есть реквизит ДатаВыполнения. Как сделать так что бы в режиме реального времени в этот объект подставлялось значение "ДатаВыполнения = дата + (СрокиВыполнения*86400)" хотелось бы чтобы он суммировал все значения по колонке СрокиВыполнения и записал все это !в режиме реального времени в поле ДатаВыполнения. Как то так :( спасите пожалуйста.
1 titan1993
 
23.05.13
19:32
когда документ проведен все понятно, можно сделать так:
Процедура Команда1(Команда)
    Срок = Объект.Услуги.Итог("СрокиВыполнения") * 86400;
    ДатаВыполнения = ДатаЗаказа + срок;
КонецПроцедуры

но вот как это сделать когда документ еще не проведен?
2 Тоненький Клиент
 
23.05.13
19:34
1993 - это год рождения?
3 Dionis Sergeevich
 
23.05.13
19:34
читай из формы.
4 titan1993
 
23.05.13
19:34
да
5 titan1993
 
23.05.13
19:34
но какое это имеет значение? :)
6 zak555
 
23.05.13
19:34
ужас
7 Михаил Козлов
 
23.05.13
19:34
(1) Дата у документа все равно уже есть. Предусмотреть изменение реквизита ТЧ при смене даты.
8 titan1993
 
23.05.13
19:37
(7) нет это не то чего я хочу
9 PR
 
23.05.13
19:38
(0) Вообще за такое тут банят и заставляют правила читать
10 titan1993
 
23.05.13
19:38
я хотел бы что бы по нажатии на кнопку датаВыполненияЗаказа менялась
11 titan1993
 
23.05.13
19:39
извиняюсь, я просто не знаю как описать суть проблемы
12 titan1993
 
23.05.13
19:41
подскажите пожалуйста как мне это сделать?

    Срок = Объект.Услуги.Итог("СрокиВыполнения") * 86400;
    ДатаВыполнения = ДатаЗаказа + срок;

но в режиме реального времени?
13 PR
 
23.05.13
19:44
(11) Описанное в (0) крайне примитивно, не нужно важно топорщиться от того, какая охренеть сложная и непонятная задача прозвучала в (0).
Для ее реализации неплохо чуть почитать документации по 1С, да может даже и не по 1С для начала.

Если по сути, то коротко так:
СрокиВыполнения = 0;
Для Каждого СтрокаТЧ Из Услуги Цикл
   СрокиВыполнения = СрокиВыполнения + Услуги.СрокиВыполнения;
КонецЦикла;
ДатаВыполнения = Дата + СрокиВыполнения * 86400;
14 PR
 
23.05.13
19:45
+(13) Ну, кстати, да, есть же метод ТЧ Итог, в чем собственно проблема-то вообще?
15 titan1993
 
23.05.13
19:49
(14) Вам легко сказать что проблемы нет, а мне сложно. (13) спасибо вам
16 PR
 
23.05.13
19:51
(15) Вообще-то в (13) написан сложный алгоритм без использования итога.
чем (12)-то не устраивает?
17 PR
 
23.05.13
19:52
+(16) А, понял.
ДатаВыполнения = ДатаЗаказа + Услуги.Итог("СрокиВыполнения") * 86400;
18 titan1993
 
23.05.13
19:54
(12) не устраивает тем, что он работает только когда документ проведен
19 titan1993
 
23.05.13
20:02
Процедура Команда1(Команда)
   СтрокаТЧ= Элементы.Услуги.ТекущиеДанные;
   СрокиВыполнения = 0;
Для Каждого СтрокаТЧ Из Элементы.Услуги Цикл
   СрокиВыполнения = СрокиВыполнения + Элементы.УслугиСрокиВыполнения;
КонецЦикла;
ДатаВыполнения = Элементы.ДатаЗаказа + СрокиВыполнения * 86400;

КонецПроцедуры

не работает по причине :{Документ.ОказаниеУслуги.Форма.ФормаДокумента.Форма(33)}: Итератор для значения не определен
Для Каждого СтрокаТЧ Из Элементы.Услуги Цикл
20 hhhh
 
23.05.13
20:11
(9) ну тогда, как в (1)

Процедура Команда1(Команда)
    Срок = Объект.Услуги.Итог("СрокиВыполнения") * 86400;
    ДатаВыполнения = ДатаЗаказа + срок;
КонецПроцедуры
21 PR
 
23.05.13
20:11
Мда. Почитал бы ты документацию для начала. Ну или ветку хоть может.
22 titan1993
 
23.05.13
20:15
Извиняюсь за неграмотность, я просто хочу научиться программировать в этой платформе, Читаю книжки и все такое, но  данных примеров чего то подобного я не видел нигде, от того и прошу помощи.
23 PR
 
23.05.13
20:16
(22) В типовых таких примеров просто дохренища.
Ты нафига "Элементы." пишешь?
24 titan1993
 
23.05.13
20:21
если не пишу говорит мол: "переменная услуги не определена"
25 titan1993
 
23.05.13
20:32
Да я знаю что я извращаюсь над 1с, но я не знаю как это сделать :(
26 Aprobator
 
23.05.13
21:39
(0) нельзя в данном сручае реквизит СрокиВыполнения брать из справочника. Надо делать отдельно реквизит ТЧ документа. Прописать процедуру его заполнения ПриИзмененииНоменклатруы, а сам реквизит справочника менять уже из ПриЗаписи документа.
27 titan1993
 
23.05.13
22:17
Спасибо всем, я нашел решение. Кому интересно вот собственно и решение:
&НаКлиентеНаСервереБезКонтекста
Функция ОбновитьСрокВыполнения(ЭтаФорма)
                   
   МассивУслуг = Новый Массив;
   Для Каждого СтрокаТЧ Из ЭтаФорма.Объект.Услуги Цикл
       МассивУслуг.Добавить(СтрокаТЧ.НаименованиеУслуги);
   КонецЦикла;
   
   ЭтаФорма.ОбщийСрокВыполнения = ПосчитатьОбщийСрокВыполнения(МассивУслуг);
   ЭтаФорма.Объект.ДатаВыполнения = ЭтаФорма.Объект.Дата + ЭтаФорма.ОбщийСрокВыполнения * 86400;
   
КонецФункции

&НаСервереБезКонтекста
Функция ПосчитатьОбщийСрокВыполнения(МассивУслуг)
   Результат = 0;
   
   Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    СУММА(Услуга.СрокиВыполнения) КАК СрокиВыполнения
       |ИЗ
       |    Справочник.Услуга КАК Услуга
       |ГДЕ
       |    Услуга.Ссылка В(&Ссылки)";
   Запрос.УстановитьПараметр("Ссылки", МассивУслуг);
   Выборка = Запрос.Выполнить().Выбрать();
   Если Выборка.Следующий() Тогда
       Результат = Выборка.СрокиВыполнения;
   КонецЕсли;
   
   Возврат Результат;
   
КонецФункции
28 zippygrill
 
23.05.13
23:10
Клево написано в (27)
29 Aprobator
 
24.05.13
11:55
(28) +100500 не то слово. Яркий пример того, как не надо программировать.