|
Чтение регистра сведений | ☑ | ||
---|---|---|---|---|
0
Riko669
21.11.16
✎
12:17
|
Добрый день! Есть РС "ПроверкаРабочегоМеста". Непериодический, подчинен регистратору. Измерение: Врач(Справочник.Сотрудники), Кабинет (Спр.Кабинеты), Кресло(Спр.Кресло), Дата приема(Тип Дата, состав дата).
Ресурсы: Время1, Время2 (Тип дата, состав дата и время). Требуется прочитать регистр сведений, но что я делаю не так, помогите пожалуйста? &НаСервере Процедура ПрочитатьЗаписиРегистраСведений() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПроверкаРабочегоМеста.Кресло, | ПроверкаРабочегоМеста.Кабинет, | ПроверкаРабочегоМеста.Время1, | ПроверкаРабочегоМеста.Время2 |ИЗ | РегистрыСведений.ПроверкаРабочегоМеста КАК ПроверкаРабочегоМеста"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл Сообщить(Строка(Выборка.Время1)+" " + Строка(Выборка.Время2)+ " " +Строка(Выборка.Кресло)+ " " +Строка(Выборка.Кабинет)); НаборЗаписей = РегистрыСведений.ПроверкаРабочегоМеста.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Кресло.Значение = Выборка.Кресло; НаборЗаписей.Отбор.Кабинет.Значение = Выборка.Кабинет; НаборЗаписей.Отбор.Время1.Значение = Выборка.Время1; НаборЗаписей.Отбор.Время2.Значение = Выборка.Время2; НаборЗаписей.Прочитать(); Для каждого Запись Из НаборЗаписей Цикл Запись.Кресло = "Кресло занято"; Запись.Кабинет = " "; Запись.Время1 = " "; Запись.Время2 = " "; КонецЦикла; НаборЗаписей.Записать(); КонецЦикла; КонецПроцедуры |
|||
1
saaken
21.11.16
✎
12:21
|
НаборЗаписей.Отбор.Кресло.Установить(Выборка.Кресло)
и т.д. |
|||
2
Рэйв
21.11.16
✎
12:25
|
i Как прочитать (изменить) записи в регистре сведений, подчиненном регистратору?
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор); НаборЗаписей.Прочитать(); Для Каждого Запись Из НаборЗаписей Цикл // Чтение и сообщение данных полей записи. Сообщить(Строка(Запись.Период) + " " + Строка(Запись.ТипЦен) +" "+ Строка(Запись.Номенклатура) + " " + Строка(Запись.Цена) + " " + Строка(Запись.ПроцентСкидкиНаценки)); // Изменение данных полей записи. Запись.ПроцентСкидкиНаценки = 0; КонецЦикла; НаборЗаписей.Записать(); (С) Габец |
|||
3
Riko669
21.11.16
✎
12:30
|
Хорошо, спасибо
|
|||
4
Riko669
21.11.16
✎
12:36
|
Переделала немного, но сообщения все равно не выдает никакого
|
|||
5
piter3
21.11.16
✎
12:37
|
может регистр уже пустой?
|
|||
6
Riko669
21.11.16
✎
12:39
|
Да нет, вроде все норм в этом плане, записи в нем есть
|
|||
7
1sanekmaloi1
21.11.16
✎
12:44
|
Значит по установленному в отбор регистратору записей еще нет.
|
|||
8
Riko669
21.11.16
✎
12:47
|
Можно подробней? Ибо вот документ (регистратор "ПакетРасписаний"). В нем есть записи (ФИО сотрудников и тч их расписания). Заполняем, жмем "Провести и закрыть", запись автоматически появляется в рс "ПроверкаРабочегоМеста"
|
|||
9
Riko669
21.11.16
✎
12:49
|
Сама процедура, если что, находится в модуле формы документа
|
|||
10
Riko669
21.11.16
✎
12:54
|
Мне пока нужно уйти, если кто ответит еще варианты, что можно сделать, то отвечу снова только через час с копейками. Надеюсь на понимание, спасибо)
|
|||
11
Cyberhawk
21.11.16
✎
12:58
|
(10) "еще варианты, что можно сделать" //Добавить фото
|
|||
12
zuza
21.11.16
✎
13:03
|
(10) Приятного аппетита! =)
|
|||
13
Riko669
21.11.16
✎
14:13
|
фото?
ахах, zuza, спасибо :D |
|||
14
Riko669
21.11.16
✎
15:06
|
Cyberhawk, я полагаю такая фотка сойдет))
|
|||
15
Riko669
22.11.16
✎
15:58
|
Для Каждого ТекСтрокаТабПриемов ИЗ ТабПриемов Цикл
Пока Выборка.Следующий() Цикл Сообщить(22); НаборЗаписей = РегистрыСведений.ПроверкаРабочегоМеста.СоздатьНаборЗаписей(); //НаборЗаписей.Отбор.Регистратор.Установить(ПакетРасписаний); ТабПриемовНомерКресла.Установить(Выборка.Кресло); ТабПриемовКабинет.Установить(Выборка.Кабинет); ТабПриемовВремя1.Установить(Выборка.ВремяНачала); ТабПриемовВремя2.Установить(Выборка.ВремяОкончания); НаборЗаписей.Прочитать(); Выдает ошибку: {Документ.ПакетРасписаний.МодульОбъекта(57,3)}: Переменная не определена (ТабПриемовНомерКресла) <<?>>ТабПриемовНомерКресла.Установить(Выборка.Кресло); (Проверка: Сервер) В чем дело? |
|||
16
Riko669
22.11.16
✎
15:59
|
Код расположен в модуле объекта и вызывается через процедуру "ПриЗаписи"
|
|||
17
h-sp
22.11.16
✎
16:07
|
(16) попробуйте определить эту переменную "ТабПриемовНомерКресла". Что-то ее действительно у вас нигде не видно.
|
|||
18
Riko669
22.11.16
✎
16:50
|
Как это сделать?
|
|||
19
Мимохожий Однако
22.11.16
✎
16:58
|
Закомментируй
ТабПриемовНомерКресла.Установить(Выборка.Кресло); |
|||
20
Riko669
22.11.16
✎
16:59
|
Перем тыры-пыты, это имеете ввиду?
|
|||
21
Мимохожий Однако
22.11.16
✎
16:59
|
А запросы в цикле это "супер"
|
|||
22
Riko669
22.11.16
✎
16:59
|
а смыл от того, что я это за комментирую?
|
|||
23
Мимохожий Однако
22.11.16
✎
16:59
|
//ТабПриемовНомерКресла.Установить(Выборка.Кресло);
Вот так |
|||
24
Riko669
22.11.16
✎
17:00
|
я знаю, что коряво, но выбора особо не было
|
|||
25
Мимохожий Однако
22.11.16
✎
17:00
|
(22) Возможно, уйдёт ошибка.
|
|||
26
Мимохожий Однако
22.11.16
✎
17:01
|
(0)В чем цель сия действа?
|
|||
27
Riko669
22.11.16
✎
17:01
|
Допустим эта ошибка уходит, но появляется другая.
вот такая Ошибка при выполнении обработчика - 'ПриЗаписи' по причине: {Документ.ПакетРасписаний.МодульОбъекта(84)}: Ошибка при вызове метода контекста (Записать) НаборЗаписей.Записать(); по причине: Ошибка записи! Не установлен отбор по регистратору (Регистр сведений: Проверка рабочего места) |
|||
28
Riko669
22.11.16
✎
17:01
|
Прочитать регистр сведений, который подчинен регистратору
|
|||
29
Мимохожий Однако
22.11.16
✎
17:02
|
Если у тебя регистр подчинен регистратору, то изменения надо вносить в регистратор. Мне так кааажется
|
|||
30
Мимохожий Однако
22.11.16
✎
17:03
|
А когда регистратор проведёшь, тогда и записи появятся. Структуру регистратора ты не показала.
|
|||
31
Riko669
22.11.16
✎
17:03
|
код находится в модуле объекта регистратора, т.е. самого документа
|
|||
32
Мимохожий Однако
22.11.16
✎
17:04
|
(31) Повторяю. Структуру регистратора ты не показала
|
|||
33
Riko669
22.11.16
✎
17:04
|
Когда регистратор провожу, в рс записи появляются
|
|||
34
Мимохожий Однако
22.11.16
✎
17:06
|
(33) Так должно быть. На то он и регистратор. Мне остальное не понятно.
|
|||
35
Riko669
22.11.16
✎
17:10
|
Измерение: Врач(Справочник.Сотрудники), Кабинет (Спр.Кабинеты), Кресло(Спр.Кресло), Дата приема(Тип Дата, состав дата).
Ресурсы: Время1, Время2 (Тип дата, состав дата и время. Вот и мне не понятно остальное) Сам регистратор документ "ПакетРасписаний" в котором реквизиты: сотрудник, специализация и т.д. И две табличные части: ТабПриемов и ТабВремя. В ТабПриемов входят реквизиты (ДатаПриема, Время1, Время2, Кабинет, НомерКресла) |
|||
36
Мимохожий Однако
22.11.16
✎
17:12
|
(35) Отлично. А теперь скажи, что ты хочешь кроме чтения регистра.
|
|||
37
Мимохожий Однако
22.11.16
✎
17:12
|
т.е. что ты хочешь получить в результате
|
|||
38
Riko669
22.11.16
✎
17:18
|
Хочу еще соединить регистр сведений со справочником (к чему тоже уже прописано в общем то).
В конечном итоге должен получиться механизм привязки одного врача к одному креслу (чтобы исключить возможность назначения двух врачей на одно и тоже кресло). Т.е., при выборе сотрудника в шапке документа у меня автоматически заполняется табличная часть "ТабПриемов", но фишка в том, что когда мы хотим выбрать какое-то другое кресло, пользователю должно выдаваться сообщение, что кресло занято в n-й момент времени, если же кресло свободно, то не выдавать никакого сообщения, вот |
|||
39
Riko669
22.11.16
✎
17:19
|
&НаСервере
Процедура СоединениеРегистраСведенийСоСправочником() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ |Сотрудники.НомерКресла, |ПроверкаРабочегоМеста.Кресло |ПОМЕСТИТЬ ДанныеРегистра |ИЗ |РегистрСведений.ПроверкаРабочегоМеста КАК ПроверкаРабочегоМеста |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники |ПО ПроверкаРабочегоМеста.Кресло = Сотрудники.НомерКресла"; Результат = Запрос.Выполнить(); КонецПроцедуры |
|||
40
Мимохожий Однако
22.11.16
✎
17:25
|
Один врач - одно кресло. А может быть, у одного кресла несколько врачей?
|
|||
41
Мимохожий Однако
22.11.16
✎
17:26
|
Судя по регистру ПроверкаРабочегоМеста работает пара Сотрудник-Кресло.
|
|||
42
Riko669
22.11.16
✎
17:28
|
Мм...на одно кресло может быть только один врач, но те же мед сестры, допустим), они на это же кресло могут сесть, но именно два врача нет.
|
|||
43
Мимохожий Однако
22.11.16
✎
17:31
|
(42) В таком случае Кресло должны быть в ресурсах, а не в измерениях
|
|||
44
Riko669
22.11.16
✎
17:32
|
Хорошо, сейчас изменю.
|
|||
45
Мимохожий Однако
22.11.16
✎
17:32
|
(43) + в этом случае не надо заниматься проверками кресла
|
|||
46
Riko669
22.11.16
✎
17:34
|
Поменяла. Теперь Кресло расположено в ресурсах.
|
|||
47
Riko669
22.11.16
✎
17:34
|
Почему нет? Мы ведь хотим узнать занято это кресло или нет.
|
|||
48
Мимохожий Однако
22.11.16
✎
17:36
|
(47) Для чего надо знать, что оно занято? В каких случаях?
|
|||
49
Riko669
22.11.16
✎
17:41
|
Как пример, у каждого врача свое кресло, но допустим, что у одного врача в кабинете ремонт, кресло сломалось и т.д., и при этом к нему записываются клиенты на определенный период времени, ему же ведь нужно их принять, поэтому ему подбирают другое кресло, а кресло может оказаться занятым другим врачом в этот момент времени, поэтому нужно предложить выбрать другое кресло в другой период времени. Тогда автоматически выходит, что проверяем занято оно или нет.
|
|||
50
Riko669
22.11.16
✎
17:44
|
А если касательно отпуска, больничного, т.е. тех моментов, когда врач вообще отсутствует, то их пока не рассматриваю, т.к. задача сейчас поставлена именно в том плане, что описала выше.
|
|||
51
Мимохожий Однако
22.11.16
✎
17:50
|
Если регистр периодический, то измерение ДатаПриема лишний.
Если Кресло находится в определенном кабинете, то этот кабинет нет смысла использовать в измерениях. Для пары Сотрудник, Кресло можно использовать ресурс Занято (тип Булево). Через срез последних на определенное время (ДатаПриема) можно увидеть занято или нет. Вторая запись при этом будет на ДатаОкончанияПриема. Таким образом я бы оставил регистр в таком виде: Измерения Сотрудник, Кресло. Ресурс Занят. А вот реквизиты Медсестра1, Медсестра2 дадут возможность привязать к этому креслу без жесткой связки. |
|||
52
Riko669
22.11.16
✎
17:55
|
Нет, Регистр непериодический. (Извиняюсь, что сразу не указала).
На счет кабинета...такая ситуация..все мы ведь были в стоматологии и там ведь идет как, кабинет №1 (Кресло 1, 2, 3), кабинет№2 (кресло 1,2,3), т.е. могут повторяться. Есть ли все еще смысл его оставлять? |
|||
53
Мимохожий Однако
22.11.16
✎
17:57
|
(52) Сделай периодическим)) Справочник Кресло можно подчинить справочнику Кабинеты.
|
|||
54
Riko669
22.11.16
✎
17:58
|
"Таким образом я бы оставил регистр в таком виде: Измерения Сотрудник, Кресло." Уточните, пожалуйста, в таком случае Кресло остается в измерениях? Просто ранее Вы ранее указали, что Кресло лучше разместить в ресурсах)
|
|||
55
Мимохожий Однако
22.11.16
✎
18:03
|
(54) Это было предложено до уточнения про медсестер. Если ТЗ менять на ходу, то трудно придти к правильному результату сразу.
|
|||
56
Riko669
22.11.16
✎
18:04
|
А, хорошо, поняла.
|
|||
57
Riko669
22.11.16
✎
18:05
|
В любом случае, попробую сделать по Вашему варианту. Спасибо! Если, что напишу еще)
|
|||
58
Мимохожий Однако
22.11.16
✎
18:06
|
Нарисуй в экселе табличку со всеми вариантами и поймешь. Периодичность регистра позволяет на определенное время получить результат. А измерения отслеживают уникальность записей на определенное время. Остальное кладем в ресурсы. То что не обязательно в каждой записи кладём в реквизиты
|
|||
59
Riko669
22.11.16
✎
18:08
|
Учту, спасибо еще раз за помощь!)
|
|||
60
Riko669
23.11.16
✎
17:06
|
Процедура ПрочитатьЗаписиРегистраСведений() Экспорт
Сообщить(11); МенеджерВТ = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ |ПроверкаРабочегоМеста.Регистратор КАК ПакетРасписаний, |ПроверкаРабочегоМеста.Кабинет, |ПроверкаРабочегоМеста.Кресло, |ПроверкаРабочегоМеста.ВремяНачала, |ПроверкаРабочегоМеста.ВремяОкончания |ПОМЕСТИТЬ ВТ_Расписание |ИЗ |РегистрСведений.ПроверкаРабочегоМеста КАК ПроверкаРабочегоМеста"; РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); Для Каждого ТекСтрокаТабПриемов ИЗ ТабПриемов Цикл Пока Выборка.Следующий() Цикл Сообщить(22); НаборЗаписей = РегистрыСведений.ПроверкаРабочегоМеста.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ПакетРасписаний); НаборЗаписей.Прочитать(); Для каждого Запись Из НаборЗаписей Цикл Сообщить(Строка(Запись.ВремяНачала)+" парап " + Строка(Запись.ВремяОкончания)+ "пара" +Строка(Запись.Кресло)+ " явапав" +Строка(Запись.Кабинет)+"парп "); Запись.Кресло = Справочники.Кресло.ПустаяСсылка(); Запись.Кабинет = Справочники.Кабинет.ПустаяСсылка(); Запись.ВремяНачала =Дата(1,1,1); Запись.ВремяОкончания = Дата(1,1,1); КонецЦикла; НаборЗаписей.Записать(); КонецЦикла; Выборка.Сбросить(); КонецЦикла; КонецПроцедуры Выдает ошибку: {Документ.ПакетРасписаний.МодульОбъекта(59,45)}: Переменная не определена (ПакетРасписаний) НаборЗаписей.Отбор.Регистратор.Установить(<<?>>ПакетРасписаний); (Проверка: Сервер) Как обозначить чтобы он увидел регистратор "ПакетРасписаний"? |
|||
61
Riko669
05.12.16
✎
19:04
|
Что же, долго очень копалась и разбиралась что к чему и что с чем связано. Возможно кому-то пригодится как пример механизма привязки данных регистра сведений и документа. Тема закрыта
&НаСервере Функция ПолучитьДанныеРС(Отказ) Экспорт Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ |ПакетРасписаний.ТабПриемов.( | Кабинет, | НомерКресла, | Время1, | Время2, //|ДатаПриема |), |ПроверкаРабочегоМеста.Регистратор КАК ПакетРасписаний, |ПроверкаРабочегоМеста.Кабинет, |ПроверкаРабочегоМеста.Кресло, |ПроверкаРабочегоМеста.ВремяНачала, |ПроверкаРабочегоМеста.ВремяОкончания |ИЗ |РегистрСведений.ПроверкаРабочегоМеста КАК ПроверкаРабочегоМеста | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПакетРасписаний КАК ПакетРасписаний | ПО ПроверкаРабочегоМеста.Регистратор = ПакетРасписаний.Ссылка |ГДЕ |ПроверкаРабочегоМеста.ВремяНачала <= ПакетРасписаний.ТабПриемов.Время1 |И ПроверкаРабочегоМеста.ВремяОкончания <= ПакетРасписаний.ТабПриемов.Время2 |ИЛИ ПроверкаРабочегоМеста.ВремяНачала >= ПакетРасписаний.ТабПриемов.Время2 |И ПроверкаРабочегоМеста.ВремяОкончания >= ПакетРасписаний.ТабПриемов.Время2 |И ПакетРасписаний.ТабПриемов.Кабинет = ПроверкаРабочегоМеста.Кабинет |И ПакетРасписаний.ТабПриемов.НомерКресла = ПроверкаРабочегоМеста.Кресло"; //|И ПакетРасписаний.ТабПриемов.ДатаПриема = ПроверкаРабочегоМеста.ДатаПриема Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка); РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); Для Каждого ТекСтрокаТабПриемов ИЗ Объект.ТабПриемов Цикл Выборка.Сбросить(); Пока Выборка.Следующий() Цикл ПроверкаРабочегоМеста = РегистрыСведений.ПроверкаРабочегоМеста; НаборЗаписей=ПроверкаРабочегоМеста.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(Выборка.ПакетРасписаний); НаборЗаписей.Прочитать(); Если (Выборка.Кресло=ТекСтрокаТабПриемов.НомерКресла И Выборка.Кабинет=ТекСтрокаТабПриемов.Кабинет) И (Выборка.ВремяНачала>=ТекСтрокаТабПриемов.Время1 И Выборка.ВремяОкончания<=ТекСтрокаТабПриемов.Время2 ИЛИ Выборка.ВремяНачала<=ТекСтрокаТабПриемов.Время2 И Выборка.ВремяОкончания>=ТекСтрокаТабПриемов.Время2) Тогда Отказ = Истина; Сообщить("Кресло №"+Строка(ТекСтрокаТабПриемов.НомерКресла)+" в " +Строка(ТекСтрокаТабПриемов.Кабинет)+", в период с " //+Строка(ТекСтрокаТабПриемов.ДатаПриема) +Строка(Выборка.ВремяНачала)+" по " //+Строка(ТекСтрокаТабПриемов.ДатаПриема) +Строка(Выборка.ВремяОкончания)+" занято. Выберите другое кресло и время"); КонецЕсли; НаборЗаписей.Записать(); КонецЦикла; КонецЦикла; КонецФункции &НаКлиенте Процедура ПередЗаписью(Отказ, СтандартнаяОбработка) ПолучитьДанныеРС(Отказ); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |