Имя: Пароль:
1C
1С v8
Возможен ли запрос данных? (Документооборот)
,
0 СэдКС
 
07.05.12
15:00
Плоховато со знанием встроенного языка 1с, поэтому вопрос из далека:

В Документообороте есть формы бизнес-процесса и задачи. http://fotoifolder.ru/view_foto/ra6mb0t5ulz3/ Требуется из табличной части одной формы (бизнес-процесс) взять данные для другой формы (задача). В табличной части в строке вбирается исполнитель, напротив ставится срок исполнения задачи. Задача поступает каждому исполнителю. В этой задаче есть срок, который и нужно как-то вытащить из таб.части бизнес-процесса. Пробую использовать в запросе конструкцию ВЫБОР КОГДА, но пока не получается. Может нужно воспользоваться регистром сведений?
1 Amra
 
07.05.12
15:08
Без фото не взлетит
2 СэдКС
 
08.05.12
05:35
(1) Какого фото?
3 skunk
 
08.05.12
05:38
личного ... в личной карточке ...традиция тут такая
4 rphosts
 
08.05.12
06:07
(3) угу, как миниум от пояса и выше
5 rphosts
 
08.05.12
06:08
хинт, пока данные не сохранены в ИБ достать их запросом не получится т.к. в источнике данных для запроса их ещё нет.
6 rphosts
 
08.05.12
06:16
+(5) но запрос это не единственный вариант обмена данными между формами.
7 СэдКС
 
08.05.12
06:56
(3)(4) :) :)
(6) значит нужно поместить данные в регистр? Или о каком варианте вы говорите? (самый простой)
8 rphosts
 
08.05.12
07:00
(7)
1. нет фотки.
2. РС что-бы из формы в форму - не самый лучший вариант...
9 СэдКС
 
08.05.12
07:10
(8) на работе нет фоток. девочка как девочка :)
по запросу в гугле "сохранение данных в 1с" выходят только статьи о сохранении и выгрузке базы. не могу найти ваши варианты
10 rphosts
 
08.05.12
07:32
я не совсем вашу задачу понял, вам сколько данных нужно передать :
1. 1-2-3
2.список
11 СэдКС
 
08.05.12
07:58
Передать данные по сроку. Срок ставится каждому исполнителю, а может и исполнителю роли (в котором 2 испол. например). То есть получается берутся еще данные по полю Исполнитель, чтобы к нему привязать срок.
12 rphosts
 
08.05.12
08:13
максимальное количество исполнителей какое?
13 СэдКС
 
08.05.12
08:28
Нет установленного максимального значения, сколько пользователь поставит в список, столько и будет. Но больше 10 еще не ставили
14 vmv
 
08.05.12
09:00
я вообще не понял сути вопроса - какой-то бред: табличная часть, бп. получение значения колонки даты  из тч задач архипроблема.

да еще и фото нет - пичалька, хватит спать!
15 СэдКС
 
08.05.12
09:10
(14) я тоже, если честно, не очень пока понимаю, что здесь и к чему. А ваш вариант получения данных?
после праздника поставлю фото.
16 vmv
 
08.05.12
09:44
(15)

самое простое использовать и в первой форме и во второй
методы, которые есть вы можете найти в модуле формы бп

&НаСервере
Функция ПоместитьИсполнителейВоВременноеХранилище()

   Возврат ПоместитьВоВременноеХранилище(Объект.Исполнители.Выгрузить(), УникальныйИдентификатор);
   
КонецФункции

&НаСервере
Процедура ЗагрузитьИсполнителейИзВременногоХранилища(АдресВременногоХранилища)

   Объект.Исполнители.Загрузить(ПолучитьИзВременногоХранилища(АдресВременногоХранилища));
   
КонецПроцедуры


во 2-ю форму надо передать адрес временного хранилища и в серверном методе модуля этой формы осуществить работу с датами.

но идти по логике разработчиков документооборота, скуривших мещок травы при разработке, не оптимально)

чтобы не терзать сервак по такое ерунде,

проще передавать во 2-ю форму в качестве параметра или владельца 1-ю форму

или в 1-й форме формировать структуру, где ключ ссылка на Исполнитель из табличной части "Исполнители", а значение "Дата" из Объект.Исполнители.ЗадачаИсполнителя.ДатаИсполненияСтруктураи

структура уходит о 2-ю форму без передачи в нее того самого мешка травы
17 rphosts
 
10.05.12
05:44
(13): Нет установленного максимального значения
не совсем верно, ограничение сверху - количество зарегеных в системе сотрудников.
Ну раз > 1-2-3, тогда лучший способ временное хранилище как тут писали... не самое красивое решение но гарантированно работоспособное для тех объектов которые не сохранены в ИБ.
Если олбъект сохранён и насколько понимаю в тот момент который вы описываете происходит генерация множества заданий количество которых заведомо не известно (должно быть равно размеру списка исполнителей), причём в каждом  задании свой срок исполнения - тогда это совсем другая история!

ЗЫ фотки до сих пор нет!!!
18 СэдКС
 
10.05.12
09:14
(17) нет, объекты не сохраняются в ИБ. Код с временным хранилищем, который написал пользователь Vmv в (15) сейчас есть в модуле бизнес-процесса (1я форма). В нем Объект.Исполнители - это и есть таблица, в которой находятся поля Исполнитель и Срок исполнения. Если на данный момент уже есть сохранение табличной части во времен. хранилище, то нужно в модуле задачи (2я форма) вызвать в сервер.процедуре

Объект.Исполнители.Загрузить(ПолучитьИзВременногоХранилища(УникальныйИдентификатор));

и дальше у меня ступор
19 rphosts
 
10.05.12
12:05
(18)передавать нужно не УникальныйИдентификатор, а АдресВременногоХранилища, который возвращается при сохранении данных.

на сервере из Объект.Исполнители.Загрузить(ПолучитьИзВременногоХранилища(.....
вполне можно сделать структуру которая будет возвращена на клиента.
20 СэдКС
 
11.05.12
06:59
&НаСервере
Процедура ЗагрузитьИзВременногоХранилища(АдресВременногоХранилища)
Объект.Исполнители.Загрузить(ПолучитьИзВременногоХранилища(АдресВременногоХранилища));
Результат = Новый Массив;
Для Каждого Строка Из Объект.Исполнители Цикл
Запись = Новый Структура;
Запись.Вставить("Исполнитель", Строка.Исполнитель);
Запись.Вставить("Срок", Строка.Срок);
Результат.Добавить(Запись);
КонецЦикла;
КонецПроцедуры

Допустим будет эта структура(в модуле БП), если о такой структуре шла речь. А как данные из структуры вытаскивать на клиенте(в модуле задачи)?
21 vmv
 
11.05.12
09:07
20.

по временному хранилищу в отладчике

АдресВХ = ПоместитьВоВременноеХранилище(Объект.Исполнители.Выгрузить(), УникальныйИдентификатор);

посмотри значение переменной АдресВХ, подумай, учти, запомни

по структуре

Для Каждлого ЭлементСтруктуры Из СтруктураЗначений Цикл
ЗначениеСтруткруры = ЭлементСтруктуры.Значение;
КлючСтруткруры = ЭлементСтруктуры.Ключ;
....
или
ЗаполнитьЗначенияСвойств(СтрокаТабличнойЧастиВДругойФорме, СтруктураЗначений)
22 bvg
 
11.05.12
09:27
(0) какая версия документооборота? Вообще если функциональная опция "ИспользоватьДатуИВремяВСрокахЗадач" включена, то срок в задаче заполняется при старте бизнес-процесса ... зачем еще между формами что то передавать?
23 СэдКС
 
11.05.12
11:03
(22) да, такая опция есть. Но дело в том, что срок для каждого исполнителя устанавливается в одинаковом количестве дней, потому что в форме бизнес-процесса одно поле для срока (какое число поставишь, такой и будет срок у каждого исполнитля). А нам требуется устанавливать разные сроки для исполнителей.
24 bvg
 
11.05.12
11:21
(23) Для этого есть комплексный бизнес-процесс как вариант
25 bvg
 
11.05.12
11:31
Но если все таки у вас планы поизвращаться, то проще будет создать реквизит табличной части исполнители ... вывести его на форму , и в модуле бизнес процесса в процедуре СогласоватьПередСозданиемЗадач, в цикле создания задач данные этого реквизита подставлять в срок задачи
26 СэдКС
 
11.05.12
12:29
Я только сегодня скачала конфигурацию, где есть комплексный бп (у нас версия старее), но мне он не понравился. Там очень много лишнего. Насчет подставления реквизита я изначально пробовала, но у меня не получилось. Подставляю вместо СрокИсполнения - Исполнители.Срок и программа не обнаруживает поле Срок. Ведь с списке Исполнители несколько строк, как программа должна узнать, какой именно срок взять для определенного исполнителя? С помощью отладки и Вычисления выражения значение срока выходит только при наборе Исполнители[1].Срок (это например для первой строки).
Наверно мне нужен мешок травы от разработчиков
27 СэдКС
 
11.05.12
14:33
Вот же я лошара! Надо было вместо Исполнители.Срок написать Строка.Срок. Теперь всё работает, и не надо было никаких временных хранилищ и прочей ерунды. Спасибо пользователь Bvg, вы мне жизнь спасли
28 Fragster
 
гуру
11.05.12
14:40
(6) а потом из-за циклических ссылок память начнет утекать, причем по неопытности бороться с этим не получится, а сваливать всё на 1ску будут...
29 СэдКС
 
11.05.12
18:20
Чуть-чуть еще доработать надо, потому что в процедурах ИзменитьРеквизитыНевыполненныхЗадач и ПередЗаписью выходят ошибки.
Например в процедуре ИзменитьРеквизитыНевыполненныхЗадач есть такой кусочек кода:

Если ЗначениеЗаполнено(Строка.Срок) Тогда
Если ПолучитьФункциональнуюОпцию("ИспользоватьГрафикиРаботы") Тогда
ЗадачаОбъект.СрокИсполнения = ГрафикиРаботы.ПолучитьДатуОкончанияПериода(ГрафикРаботы, ЗадачаОбъект.Дата, Строка.Срок);
Иначе
ЗадачаОбъект.СрокИсполнения = ЗадачаОбъект.Дата + Строка.Срок*24*3600;
КонецЕсли;    
ЗадачаОбъект.СрокИсполнения = КонецДня(ЗадачаОбъект.СрокИсполнения);
КонецЕсли;
КонецЕсли;

И выходит ошибка:  
{БизнесПроцесс.Согласование.МодульОбъекта(147,52)}: Переменная не определена (Срок)

а с пом. отладки пишет:
Строка.Срок {(1)}: Значение не является значением объектного типа (Срок)    

Для Процедуры СогласоватьПередСозданиемЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, СтандартнаяОбработка) Строка.Срок идет без ошибок. Значение высчитывает правильно. Проблема только при изменении срока в запущенной задаче.
Подскажите, почему переменная не определяется!
30 rphosts
 
11.05.12
19:45
В отладчике (в табло) посмотрите что вообще такое Строка в этом месте кода и чем но наполнено. Может достаточно доп условия на тот случай когда Строка = Неопределено.
31 СэдКС
 
14.05.12
05:53
Строка никаких значений не дает, она тоже в значении "переменная не определена".
32 rphosts
 
14.05.12
06:02
ТекущаяСтрока, ТекущиеДанные, коллекция Элементы и т.п. и содержимое всего этого. Не видя конф. сложно дать точный ответ
33 СэдКС
 
14.05.12
09:01
Нужно было добавить строчку "Для Каждого Строка Из Исполнители Цикл" и ошибка уходит. Лена молодец)
34 vmv
 
14.05.12
09:06
(33) две недели искать косяк, ога молодец)

срочно замуж
35 rphosts
 
14.05.12
09:54
(34) она на флруме неделю, откуда инф. про 2?