Имя: Пароль:
1C
1С v8
Заполнение реквизита. тип строка
0 bamond
 
09.08.13
15:12
День добрый.
Имеется множество реквизитов у документа с типом строка , заполняются по ходу согласования документа.
Необходимо создать еще один реквизит тип строка ( например ) для хранения истории согласования.
Подскажите пожалуйста каким образом взять из всех реквизитов данные и засунуть их в ОДИН реквизит ИСТОРИЯ и что бы в итоге не получилась каша... а история каждого согласующего начиналась с новой строчки.
Спасибо большое!
1 Aprobator
 
09.08.13
15:15
даешь все в строку!!!
2 bborisko
 
09.08.13
15:16
Массив структур в хранилище значений?
3 Maxus43
 
09.08.13
15:16
лучше РС какойнить для этого
4 1Сергей
 
09.08.13
15:17
(3) +1
5 bamond
 
09.08.13
15:19
(3) можно подробнее пожалуйста... или где прочитать можно про это
Я еще не достаточно хорошо знаю 1с =)
6 Maxus43
 
09.08.13
15:21
добавляешь независимый, периодический Регистр сведений. При проведении/записи или как у вас согласовываются доки там - пишешь в этот РС,
Измерения = Документ.
Ресурс = Статус.

Период - Текущаядата() например
7 bamond
 
09.08.13
16:21
(6) Спасибо.... буду разбираться как это делается =)
8 bamond
 
15.08.13
10:23
В продолжении темы... есть вот такой вот код

Процедура ЗаписьИстории(Документ,Исполнитель,СтатусСогласования,ДатаСогласования,Комментарий);
    
    ЗаписатьИсторию = РегистрыСведений.ИсторияСогласованияЗаявокНаПлатеж.СоздатьНаборЗаписей();
    НовоеСобытие = ЗаписатьИсторию.Добавить();
    НовоеСобытие.Документ = Документ;
    НовоеСобытие.Исполнитель = Исполнитель;
    НовоеСобытие.СтатусСогласования = СтатусСогласования;
    НовоеСобытие.Дата = ДатаСогласования;
    НовоеСобытие.Комментарий = Комментарий;
    ЗаписатьИсторию.Записать();
    
КонецПроцедуры



и Вот такой вот код ПРИ ВЫПОЛНЕНИИ ЗАДАЧИ :


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




Подскажите пожалуйста как правильно параметры передать можно ? или вообще как в данном случае лучше сделать =) очень не хочется писать код в каждую процедуру "при выполнении задачи" =)) Что то не соображу как тут поступить...

пробовал вот так...

//ЗаписьИстории(Исполнитель) = документ.РуководительПроекта;
        //ЗаписьИстории(Комментарий) = Задача.РезультатВыполнения;


Но это бред... говорит что мало фактических параметров
9 Maxus43
 
15.08.13
10:49
ИсторияСогласованияЗаявокНаПлатеж

структуру регистра напиши
10 bamond
 
15.08.13
10:54
Непериодический - не понятно какой период ставить =)
Независимый

Измерения: - документ

Ресурсы: -  
Исполнитель
Дата
Комментарий
СтатусСогласования
11 Maxus43
 
15.08.13
11:09
Периодический надо, ставь секунду например.
   ЗаписатьИсторию = РегистрыСведений.ИсторияСогласованияЗаявокНаПлатеж.СоздатьНаборЗаписей();
после этого Отбор по периоду ставь и измерениям, т.е. на документ ещё.
Период пиши ТекущаяДата(), т.е.
НовоеСобытие.Период = ТекущаяДата();

При выполнении задачи не надо писать в документ ничего, а пиши в регистр сразу
12 zladenuw
 
15.08.13
11:12
(11) а зачем периодичность ? если есть измерение документ ?
13 bamond
 
15.08.13
11:14
(11)  Ну это я понимаю.... можно и писать собстно и в документ и регистр... это уже дело техники =) это потом оптимизирую...


Главный вопрос... А как писать то =))))))
14 Maxus43
 
15.08.13
11:15
(12) ну это ж история согласований, а не последний статус
15 zladenuw
 
15.08.13
11:17
(14) а да. ступил :)
16 zladenuw
 
15.08.13
11:17
(13) что как. на документ выводить табличное поле. заполняешь его. при записи  документа. загружаешь этот набор в рс и записуеш и все
17 zladenuw
 
15.08.13
11:19
НаборЗаписей = РегистрыСведений.ОпросКлиентов.СоздатьНаборЗаписей();

        НаборЗаписей.Отбор.Период.Установить(Дата);
        НаборЗаписей.Отбор.ДокОснование.Установить(Ссылка);

        НовЗапись = НаборЗаписей.Добавить();
        // Свойства
        НовЗапись.Период = Дата;
        НовЗапись.ДокОснование = Ссылка;

        // Измерения
        НовЗапись.ПовторныйЗвонок = Ложь;
        НовЗапись.Доработка = Ложь;
        НовЗапись.Выполнено = "";

        // Ресурсы
        НовЗапись.НедостатковНет = Ложь;
        НовЗапись.КачествоРемонта = 0;
        НовЗапись.Обслуживание = 0;
        НовЗапись.Цена = 0;
        НовЗапись.Сроки = 0;
        НовЗапись.АсортиментУслуг = 0;
        НовЗапись.ПрочиеНедостатки = Ложь;
        НовЗапись.МнениеКлиентов = "";
    

        НаборЗаписей.Записать(Истина);
типа так
18 bamond
 
15.08.13
11:22
(17)

Ну вот тут впринципе тоже самое написано

Процедура ЗаписьИстории(Документ,Исполнитель,СтатусСогласования,ДатаСогласования,Комментарий);
    
    ЗаписатьИсторию = РегистрыСведений.ИсторияСогласованияЗаявокНаПлатеж.СоздатьНаборЗаписей();
    НовоеСобытие = ЗаписатьИсторию.Добавить();
    НовоеСобытие.Документ = Документ;
    НовоеСобытие.Исполнитель = Исполнитель;
    НовоеСобытие.СтатусСогласования = СтатусСогласования;
    НовоеСобытие.Дата = ДатаСогласования;
    НовоеСобытие.Комментарий = Комментарий;
    ЗаписатьИсторию.Записать();
    
КонецПроцедуры



Вопрос то в том как мне передать из "Процедуры при выполнении задачи" Значения В "Процедуру ЗаписьИстории" ... что бы не писать Один и тот же код в каждое из 12ти действий....
или я может что то не понимаю из Ваших подсказок и ответ уже дали =(
19 Maxus43
 
15.08.13
11:25
сори камрады, завал на работе, пойду от вас
20 zladenuw
 
15.08.13
11:33
(18) из каких 12 действий ?
21 bamond
 
15.08.13
11:36
(20)

НУ я имею ввиду что есть Бизнес процесс из 12ти этапов... и на каждом этапе кто то согласовывает и пишет комментарий и т.д.

И что бы код из процедуры "ЗаписьИстории" Не писать на каждом этапе бизнес процесса... хочется как то оптимизировать и может передать параметры в отдельную процедуру.. или как то еще... Но вот не понимаю как...

(8)   <- Вот тут оба кода написано... из одно из этапов бизнес процесса + из процедуры "ЗаписьИстории" Которая и должна писать в регистр сведений
22 zladenuw
 
15.08.13
11:46
подписка на событие есть у бизнес процеса.
23 zladenuw
 
15.08.13
11:46
(22) при записи будет вызываться твоя процедура
24 bamond
 
15.08.13
11:58
(22)  
Данная процедура стоит вообще отдельным особняком.. как она может вызываться автоматически?


Процедура ЗаписьИстории(Документ,Исполнитель,СтатусСогласования,ДатаСогласования,Комментарий);
    
    ЗаписатьИсторию = РегистрыСведений.ИсторияСогласованияЗаявокНаПлатеж.СоздатьНаборЗаписей();
    НовоеСобытие = ЗаписатьИсторию.Добавить();
    НовоеСобытие.Документ = Документ;
    НовоеСобытие.Исполнитель = Исполнитель;
    НовоеСобытие.СтатусСогласования = СтатусСогласования;
    НовоеСобытие.Дата = ДатаСогласования;
    НовоеСобытие.Комментарий = Комментарий;
    ЗаписатьИсторию.Записать();
    
КонецПроцедуры



Автоматически При выполнении бизнес процесса вызывается

Процедура СогласованиеПриВыполнении(ТочкаМаршрутаБизнесПроцесса, Задача, Отказ)

тра та та

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


Но из процедуры ПРИ ВЫПОЛНЕНИИ на процедуру ЗаписьИстории нет никаких посылов... и опять возвращаясь к вопросу как их сделать =)

Как сделать что бы при выполнении задачи бизнес процессу , в процедуру "ЗАПИСЬИСТОРИИ" передавались необходимые параметры... такие как комментарий согласующего... дата согласования и так далее.... =((
25 zladenuw
 
15.08.13
12:23
(24) у тебя же есть ссылка на документ в задаче или нет ? тут надо думать как реализовать твою задачу. а тут этого не кто не сделать. подсказать да. но делать тебе самому
26 bamond
 
15.08.13
13:33
(25)
Сделал... и вроде запись появилась...
Код такой:

Процедура ЗаписьИстории(Документ,Исполнитель,СтатусСогласования,ДатаСогласования,Комментарий);
    
    ЗаписатьИсторию = РегистрыСведений.ИсторияСогласованияЗаявокНаПлатеж.СоздатьНаборЗаписей();
    НовоеСобытие = ЗаписатьИсторию.Добавить();
    НовоеСобытие.Период = ТекущаяДата();
    НовоеСобытие.Документ = Документ;
    НовоеСобытие.Исполнитель = Исполнитель;
    НовоеСобытие.СтатусСогласования = СтатусСогласования;
    НовоеСобытие.Дата = ДатаСогласования;
    НовоеСобытие.Комментарий = Комментарий;
    ЗаписатьИсторию.Записать();
    
КонецПроцедуры

__________________________________________________


Процедура ЗадачаПриВыполнении(ТочкаМаршрутаБизнесПроцесса, Задача, Отказ)

код код код

ЗаписьИстории(Ссылка1,документ.РуководительПроекта,документ.СогласованоРукПроект,Задача.ДатаИсполнения,Задача.РезультатВыполнения);


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

________________________________________________


Но почему то все записи делаются только в одну срочку в регистре сведений...
Т.Е. если согласовывается первый документ , создается запись в регистре сведений...
Если начинаешь согласовывать второй , то запись в регистре сведений затирается на ту которая будет создана последним согласованным документом ... почему так ?=(
По идее он должен делать много записей со ссылкой на какой либо документ...
27 Maxus43
 
15.08.13
15:57
(26) потому что после строки
    ЗаписатьИсторию = РегистрыСведений.ИсторияСогласованияЗаявокНаПлатеж.СоздатьНаборЗаписей();

надо ставить отбор, в твоём случае на Период и измерение Документ
28 Maxus43
 
15.08.13
16:00
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
ТекДата = ТекущаяДата();    
НаборЗаписей.Отбор.Валюта.Установить(ТекущаяВалюта);
НаборЗаписей.Отбор.Период.Установить(ТекДата);
    
НовЗапись = НаборЗаписей.Добавить();

НовЗапись.Валюта     = ТекущаяВалюта;
НовЗапись.Период     = ТекДата;
НовЗапись.Курс         = ТекущийКурс;
НовЗапись.Кратность = ТекущаяКратность;

НаборЗаписей.Записать(Истина);
29 bamond
 
15.08.13
16:22
(28)  ДА спасибо большое, записать получилось.... все нормально =) Теперь другой вопрос... как прочитать =)))

Вот мой код для записи:

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



А вот как пытаюсь прочитать:

Процедура ФормаСпискаИстории()
    
    //Реквизит1.Отбор.Документ.Значение = Объект.Ссылка;
        
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗаявкаНаПлатеж.Ссылка,
        |    ИсторияСогласованияЗаявокНаПлатеж.Период,
        |    ИсторияСогласованияЗаявокНаПлатеж.Документ,
        |    ИсторияСогласованияЗаявокНаПлатеж.Исполнитель,
        |    ИсторияСогласованияЗаявокНаПлатеж.Дата,
        |    ИсторияСогласованияЗаявокНаПлатеж.Комментарий,
        |    ИсторияСогласованияЗаявокНаПлатеж.СтатусСогласования
        |ИЗ
        |    РегистрСведений.ИсторияСогласованияЗаявокНаПлатеж КАК ИсторияСогласованияЗаявокНаПлатеж
        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаПлатеж КАК ЗаявкаНаПлатеж
        |        ПО ИсторияСогласованияЗаявокНаПлатеж.Документ = ЗаявкаНаПлатеж.Ссылка";

    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    
        
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Объект.История = (ВыборкаДетальныеЗаписи.СтатусСогласования)  + "  " + (ВыборкаДетальныеЗаписи.Комментарий);
    КонецЦикла;

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



Смысл в том что есть реквизит ИСТОРИЯ тип СТРОКА ... пытаемся в него записать всё что происходило на согласовании... но само собой код более новыми значениями перезаписывает старые....
Думал форму регистрсведений.формасписка подцепить и там уже фильтровать просто отбором... но не получилось...
Как вообще это правильно делать ?
30 Maxus43
 
15.08.13
16:23
Объект.История = Объект.История + (ВыборкаДетальныеЗаписи.СтатусСогласования)  + "  " + (ВыборкаДетальныеЗаписи.Комментарий);
31 bamond
 
15.08.13
16:27
(30)  При таком варианте каша получается =(( Всё в одну строчку пишет.... ужас... как же это делается то правильно...

Необходим результат такой

ДАТА  ФИО  СОГЛАСОВАН   КОмментарий

ДАТА  ФИО  СОГЛАСОВАН   КОмментарий

ДАТА  ФИО  СОГЛАСОВАН   КОмментарий
32 Maxus43
 
15.08.13
16:33
(31) ну а реквизит то многострочный куда выводишь? вобще историю лучше в отчет выводи, а не в реквизит какой-то.
в документе кнопку сделай - история, а там отчет вызывай по этому регистру
33 Maxus43
 
15.08.13
16:36
По начальному образованию - лучше сходить на курсы, по базовым объектам. Там быстро основные принципы доходят, и множество вопросов сразу отпадёт
34 bamond
 
15.08.13
16:46
(33)  Был я на курсах... там по оооочень базовым объектам... подобные вопросы не отпадают... =)


(32)  Реквизит строка , многострочный ... выводится в документе на форме

http://s2.ipicture.ru/uploads/20130815/Ag3fUJ5Y.jpg

////

Спасибо большое... совсем про отчет забыл =) Сейчас подумаем в его сторону =))!! Спасибо!
35 Maxus43
 
15.08.13
16:49
про многострочный-
"А" + Символы.ПС + "Б"

будут в разных строках А и Б
36 bamond
 
15.08.13
17:04
(35)  КРУТО ! Спасибо! Вот про Символы.ПС после 3х курсов как говорится "догадайся сам".... там многое не говорится =((

Работает как надо!!

Спасибо огромное !!!