Имя: Пароль:
1C
1C 7.7
v7: Нужно что-то типа Регистра сведений в 7.7
0 Пенза58
 
18.09.13
07:35
7.7 уже совсем плохо помню помогите с регистрами.

Задача нужно вести учет времени преподавателей, чтобы не поставить им занятие на одно время.

В день в расписании может быть 12 часов.

Для учета есть оборотный  регистр с Измерениями: ДатаДень, Преподаватель, НомерЧаса и ресурс Единичка(записывается всегда цифра 1) и есть еще реквизиты данных о занятии.

Нужно:
1. Как-то по-быстрому получить, значение Единичка для измерений, чтобы понять, что занятия есть.
2. Если по измерениям есть значения, то получить значения реквизитов.
3. Дата документа и дата работы преподавателя будут не совпадать, т.е. например документ от 18.09.2013, а преподаватель работал 10.09.2013, если нас интересует что было 10.09.2013 то получи остатки на эту дату мы не получим значения регистра, как сделать так, чтобы обороты относились к другой дате?
1 Пенза58
 
18.09.13
07:36
Пока наваял:

Функция РаспПр(ВыбДень,ВыбПрепод,ВыбНомЧас)
    
    пВыбДень=ВыбДень;
    пВыбПрепод=ВыбПрепод;
    пВыбНомЧас=ВыбНомЧас;
    
        Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |ОбрабатыватьДокументы все;
    |ДатаДеньРег = Регистр.РаспПрепод.ДатаДень;
    |ПреподавательРег = Регистр.РаспПрепод.Преподаватель;
    |НомерЧасаРег = Регистр.РаспПрепод.НомерЧаса;
    |ПротоколРег = Регистр.РаспПрепод.Протокол;
    |РасписаниеРег = Регистр.РаспПрепод.Расписание;
    |ДисциплинаРег = Регистр.РаспПрепод.Дисциплина;
    |ВидОбученияРег = Регистр.РаспПрепод.ВидОбучения;
    |ПреподРазделаРег = Регистр.РаспПрепод.ПреподРаздела;
    |Единичка = Регистр.РаспПрепод.Единичка;
    |Условие(ДатаДеньРег = пВыбДень);
    |Условие(ПреподавательРег = пВыбПрепод);
    |Условие(НомерЧасаРег = пВыбНомЧас);
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Сообщить("Не удалось выполнить запрос к регистру");
        Возврат 0;
    КонецЕсли;
                    
    ТзРезРег=СоздатьОбъект("ТаблицаЗначений");
    Запрос.Выгрузить(ТзРезРег,1,0);          

     Сообщить("Колстр"+ТзРезРег.КоличествоСтрок());
    Если ТзРезРег.КоличествоСтрок()=0 Тогда
        Возврат 1;
    Иначе  
        Если ТзРезРег.Единичка=1 Тогда
            ТзРезРег.ВыбратьСтроку();  
            Возврат 0;                    
        Иначе                            
            Возврат 1;                    
        КонецЕсли;
    КонецЕсли;    
        
    //Запрос.ВыбратСтроку();
КонецФункции
    
Процедура ОбработкаПроведения()
    
    //Здесь следует написать алгоритм проведения документа
    
    ВыбратьСтроки();
    Пока ПолучитьСТроку()=1 Цикл
        Для НомЧаса=1 по 12 Цикл
            СтрЧаса="Час"+?(НомЧаса<10,"0","")+СокрЛП(Строка(НомЧаса));
            
            Если ПустоеЗначение(ПолучитьАтрибут(СтрЧаса))=0 тогда
                ТекПрепод=ПолучитьПустоеЗначение("Справочник.Работники");
                Если ПустоеЗначение(Преподаватель.Работник)=0 тогда
                    ТекПрепод= Преподаватель.Работник;
                КонецЕсли;
                МожноЗаписать=РаспПр(ДатаДень,ТекПрепод,НомЧаса);
                    
                Если МожноЗаписать=0 Тогда
                    Сообщить("МожноЗаписать"+МожноЗаписать);
                    СтатусВозврата(0);
                    возврат;
                КонецЕсли;
                
                
                Регистр.РаспПрепод.ДатаДень = ДатаДень;  
                                                                
                
                Регистр.РаспПрепод.Преподаватель =ТекПрепод;
                Регистр.РаспПрепод.НомерЧаса = НомЧаса;
                Регистр.РаспПрепод.Протокол = КПротоколу.ТекущийДокумент();
                Регистр.РаспПрепод.Расписание = ТекущийДокумент();
                Регистр.РаспПрепод.Дисциплина = Дисциплина;
                Регистр.РаспПрепод.ВидОбучения = ВидОбучения;
                Регистр.РаспПрепод.ПреподРаздела = Преподаватель;  
                Регистр.РаспПрепод.Единичка=1;
                Регистр.РаспПрепод.ДвижениеВыполнить();
            КонецЕСли;
        КонецЦикла;
    КонецЦикла;
КонецПроцедуры

но это как-то не работает.
2 VladZ
 
18.09.13
07:38
(0) ИМХО, 7.7 не подходит для решения таких задач. Используй другие инструменты.
3 mishaPH
 
модератор
18.09.13
07:39
(0) кто мешает сделать это все на справочнике?
4 VladZ
 
18.09.13
07:43
ИМХО, лучше подходит любая база данных.
5 Пенза58
 
18.09.13
07:44
(3) можно, но геморно

И это можно только часы записать, а реквизиты уже не получится.
6 Толич
 
18.09.13
07:48
(5) Я бы тоже на справочнике сделал.
7 КапЛей
 
18.09.13
07:53
справочник с периодикой.
8 Chai Nic
 
18.09.13
07:53
Регистры накопления в семерке убогие
9 Пенза58
 
18.09.13
07:59
(6) (7) Реквизиты вы как туда засунете?

Вот есть условно данные:

Иванов 10.09.2013 1час Математика Группа 1
Иванов 10.09.2013 2час Геометрия Группа 1
Иванов 10.09.2013 3час Геометрия Группа 2


Иванов допустим справочник, дата - дата периодического реквизита, а все остальное т.е.:
1час Математика Группа 1
2час Геометрия Группа 1
3час Геометрия Группа 2

надо зашифровать в строку, потом это доставать и делать поиск по справочникам.
10 МихаилМ
 
18.09.13
07:59
заведите вспомогательный док для движений
не используйте ресурсы. тогда не будет накопительной таблицы
но этим можно пожертвовать.
11 Пенза58
 
18.09.13
08:01
(10) Т.е. данные брать из табличных частей документа?
12 КапЛей
 
18.09.13
08:06
(9) если задача будет описана чуть подробнее чем в (0) и оплачена (пензякам как земелям скидки) готов сделать.
13 VladZ
 
18.09.13
08:07
(8) Там их вообще нет. Есть просто регистры.
14 Пенза58
 
18.09.13
08:13
(12) Сделать я и сам могу, на крайний случай буду данный из ТЧ документов обрабатывать.
15 Ёпрст
 
18.09.13
08:24
16 VladZ
 
18.09.13
08:36
Делал в свое время. Все данные - в справочнике. Само расписание - в базе данных (DBF). Расставить - не проблема. Проблемы начнутся дальше...
17 KUBIK
 
18.09.13
08:42
(0) Поищи конфу типа "1С: Аналит: Стоматология" 7.7  - помню там есть документ "ЗаписьНаПрием" и отчеты, позвояющие видеть кто из врачей когда занят (типа шахматки)
18 Пенза58
 
18.09.13
08:58
(17) Спасибо.
19 Абыр
 
18.09.13
09:18
(0) можно с журналом расчетов попробовать
20 Стрелок
 
18.09.13
09:31
Писал когда то конфу с нуля на 7.7 для частной клиники. Если интересно - могу поискать в архивах. конфа рабочая -  с 2007 года крутится в реальной частной медклинике. Там есть понятие "Запись на приём" для каждого врача.
21 Стрелок
 
18.09.13
09:32
делал кажется даже не на регистрах, а на счетах. но могу ошибаться. давно было
22 Пенза58
 
18.09.13
10:01
(19) Журнал расчетов периодический, надо периоды закрывать, а расписание может вполне и на разные месяца или разные годы попадать.