|
Заполнение реквизита. тип строка | ☑ | ||
---|---|---|---|---|
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х курсов как говорится "догадайся сам".... там многое не говорится =((
Работает как надо!! Спасибо огромное !!! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |