|
v7: Получить параметр из обработки. | ☑ | ||
---|---|---|---|---|
0
Пенза58
06.11.13
✎
13:58
|
Из документа открываю обработку и надо получить из нее параметр.
|
|||
1
Wobland
06.11.13
✎
13:58
|
что планируешь делать?
|
|||
2
Пенза58
06.11.13
✎
14:01
|
(1) просто передаю параметр он там обрабатывается и надо получить результат.
|
|||
3
Guk
06.11.13
✎
14:03
|
(2) обратно в параметр и передай...
|
|||
4
Aprobator
06.11.13
✎
14:08
|
(0) в типовых примера куча. Ну взять к примеру туже обработку РедактированиеКонтактнойИнформации.
|
|||
5
dk
06.11.13
✎
14:08
|
тока тогда открытьмодально надо запускать
|
|||
6
Aprobator
06.11.13
✎
14:09
|
(5) да ладно.
|
|||
7
dk
06.11.13
✎
14:11
|
(6) если там не в приоткрытии все отрабатывает и закрывает конечно
|
|||
8
Aprobator
06.11.13
✎
14:18
|
(7) если при открытии обработки правильно указан элемент владелец, то значение из обработки будет передано непосредственно в него. Например:
|
|||
9
Aprobator
06.11.13
✎
14:19
|
|
|||
10
oslokot
06.11.13
✎
14:20
|
(9) речь о клюшках )
|
|||
11
Cthulhu
06.11.13
✎
14:20
|
ежели модально ея открываешь - то через параметр.
ежели не модально - то сложнее но тоже можно: 1) вызваЮЩая процедура: 1.1) +(невидимый) реквизит "строка неогр.длины многострочный" на морду; 1.2) процедура, которая: 1.2.1) отрубает обработку ожидания (Форма.ОбработкаОжидания("",0); 1.2.2) из реквизита п.1.1 получает (с помощью (ЗначениеИзСтрокиВнутр()) и как надо обрабатывает всё, что вернула открытая обработка 1.3) При открытии формы (немодальном) - передать в параметре свой (открываЮЩей формы) контекст 2) вызваЕМая обработка, при закрытии и по факту необходимости вернуть значение, инициировав действия в отрываЮЩей эту обработку форме: 2.1) Через контекст открываЮЩей формы, дёрнутый из параметра при открытии - иницииорвать в открываЮЩей форме выполнение процедуры п.1.2 обработкой ожинания в 1 секунду - типа "КонтВызываЮЩейФормыИзПараметра.Форма.ОбработкаОжидания("ТаСамаяПроцедураСмПункт1точка2",1);" 2.2) Через тот же контекст открываЮЩей формы, дёрнутый из параметра при открытии - установить в реквизит п.1.1 значение, равное внутреннему представлению объекта (обычно - СЗ), содержащено всьо, что надо вернуть - типа "КонтВызываЮЩейФормыИзПараметра.ТотСамыйРеквизитСмПункт1точка1=ЗначениеВСтрокуВнутр(ОбъектВКоторомВсёШоНадоВернутьОткываЮЩейФормы);" |
|||
12
dk
06.11.13
✎
14:20
|
(8) не смущает что тема про 7.7 ? )
|
|||
13
Aprobator
06.11.13
✎
14:21
|
(10) а, млин ))))
|
|||
14
Aprobator
06.11.13
✎
14:21
|
+(13) уже фиг знает сколько времени их не использую )
|
|||
15
Cthulhu
06.11.13
✎
14:23
|
(11)+: опционально (и как правило! мавр сделал своё дело типа):
2.3) Форма.Закрыть(0); |
|||
16
Cthulhu
06.11.13
✎
14:23
|
(14): нам всем тут охрененть как интересно знать о твоих личных привязанностях...
|
|||
17
1dvd
06.11.13
✎
14:26
|
(11) к чему такие сложности?
|
|||
18
Aprobator
06.11.13
✎
14:27
|
(16) так же как и мне - твое мнение о моих привязанностях. Тебя местные тролли покусали что ли?
|
|||
19
Пенза58
06.11.13
✎
14:27
|
Проще глобальую переменную добавить.
|
|||
20
Cthulhu
06.11.13
✎
14:32
|
(17): потому что через переменную не получится. даже через переменную модуля. не веришь - проверь.
и это - вполне себе не сложно и один раз применив уже на автомате и бысто употребимо. |
|||
21
Cthulhu
06.11.13
✎
14:34
|
(19) для каждого взаимодействия строго говоря любой пары обработок - корячить глобальник - некрасиво.
использовать только сами обработки - правильнее. |
|||
22
Cthulhu
06.11.13
✎
14:35
|
(18): а при условии, что я тут по теме излагаю мнения, а ты топыришь пальцы - угадай, кому из нас с тобой логичнее было бы сдриснуть из этого разговора в пешее эротическое?.. да, ты угадал - тебе.
|
|||
23
Пенза58
06.11.13
✎
14:37
|
(21) Да это понятно, но такая обработка одна будет.
|
|||
24
oslokot
06.11.13
✎
14:39
|
(23) дык а модально тебе подойдет иль нет?
|
|||
25
Aprobator
06.11.13
✎
14:39
|
(22) хамло ты обыкновенное и это безусловно.
|
|||
26
Пенза58
06.11.13
✎
14:43
|
(24) модально - нет, там чистый код, без форм
|
|||
27
Cthulhu
06.11.13
✎
14:43
|
(25): ошибаешься, я - гораздо хуже.
|
|||
28
Aprobator
06.11.13
✎
14:48
|
(26) хм - и что экспортную функцию в обработку, которая возвращает результат работы обработки не впихнуть?
|
|||
29
oslokot
06.11.13
✎
14:50
|
(26) то есть ты хочешь извне документа обработать некий код и вернуть результат обратно?
|
|||
30
Aprobator
06.11.13
✎
15:18
|
(27) судя по фигне, предложенной тобой в (11), полностью с тобой согласен.
|
|||
31
Cthulhu
06.11.13
✎
15:55
|
(30): судя по тупости, не позволяющей тебя осознать прочитанное при рвущем пукан желании потяффкать - тебя можно разве что пожалеть.
|
|||
32
Aprobator
06.11.13
✎
15:58
|
(31) себя пожалей. Чудо. А вонять вообще на мусорку топай, где тебе самое и место.
|
|||
33
Aprobator
06.11.13
✎
16:09
|
экспортная функция в данном контексте и все дела.
|
|||
34
Guk
06.11.13
✎
16:41
|
почитал, интересно тут у вас. короче, правильный ответ в (3).
при открытии формы обработки передается переменная в качестве параметра открытой формы. в самой обработке этот параметр доступен как Форма.Параметр. в него же и записывается результат работы обработки. после закрытия обработки результат доступен в документе в переменной, которую передавали при открытии формы обработки... |
|||
35
Aprobator
06.11.13
✎
16:46
|
(34) см (26). Ответ из (3) не катит.
|
|||
36
Aprobator
06.11.13
✎
16:47
|
+(35) поскольку формы тупо нет.
|
|||
37
Guk
06.11.13
✎
16:49
|
(36) пришли пожалуйста пример обработки для 7.7 без формы. интересно посмотреть...
|
|||
38
oslokot
06.11.13
✎
16:49
|
(36) да не, все правильно в (34)
Просто в при открытии делаем Форма.Закрыть() чтоб не маячила |
|||
39
Guk
06.11.13
✎
16:51
|
(38) достаточно в ПриОткрытии сделать СтатусВозврата (0)...
|
|||
40
oslokot
06.11.13
✎
16:51
|
(39) ну да, или так...
|
|||
41
Aprobator
06.11.13
✎
16:52
|
(37) не помню уже ) А под рукой нет. Кроме того, насколько мне помнится при использовании ОткрытьФормуМодально() там можно вернуть в результат работы этого метода все. Только вот в самой обработке надо для этого что то прописать. Типа Закрыть(ВозвращаемыйРезультат). Но, точно утверждать не берусь. Давненько это было )
|
|||
42
Aprobator
06.11.13
✎
16:54
|
+(41) а вообще, походу ты прав. Неужели 7 ку еще используете?
|
|||
43
Guk
06.11.13
✎
16:55
|
(41) понятно, мы говорим о разных вещах. ты говоришь о визуализации для пользователя, а я про форму в конфигураторе. просто я считал, что для действий описанных в (0) не надо уточнять, что визуально форма естественно не открывается...
|
|||
44
Guk
06.11.13
✎
16:55
|
(42) 2 года не пользую...
|
|||
45
Aprobator
06.11.13
✎
16:59
|
(44) фига се. Я в свое время с 7 ки специально во франь свалил, чтобы 8 ку освоить. С тех пор так редко редко, что то по мелочи перепадало. Если в руки то взять - вспомню конечно. Но, потихоньку все стирается.
|
|||
46
Cthulhu
06.11.13
✎
17:39
|
(39): не-а. при статусвозврата(0) в параметре в место вызова останется ровно то, что передавали в форму. такая вот инструментальная тонкость. не веришь - проверь. ;)
|
|||
47
Torquader
07.11.13
✎
00:18
|
(46) Параметр корректно работает только при ОткрытьФормуМодально, в противном случае, система создаёт копию параметра.
Да и вообще, если в параметр передавать список или таблицу значений, то её содержимое прекрасно меняется вне зависимости от того, как вызывали форму. Только при вызове нужно сначала скопировать таблицу в локальную переменную, чтобы не затереть основную. |
|||
48
1dvd
07.11.13
✎
07:43
|
(34) Просто, при закрытии обработки в основной форме никакое событие не срабатывает.
|
|||
49
Andreyyy
07.11.13
✎
08:28
|
(0) Передать параметры через ОткрытьПодбор("Твоя обработка", Параметры)
В обработке передать результат через Форма.ВыполнитьВыбор(Результат) Получить результат через ОбработкаПодбора(Результат) |
|||
50
Guk
07.11.13
✎
09:02
|
(49) в данном случае откроется форма обработки, а автору этого не надо...
|
|||
51
1dvd
07.11.13
✎
09:08
|
(50) тогда я вообще не пониманю нафига всё это. Чем модальный режим не угодил?
|
|||
52
Guk
07.11.13
✎
09:09
|
(51) см. (26). автор не хочет модально ;)...
|
|||
53
Пенза58
07.11.13
✎
12:15
|
(49) Это не подбор.
|
|||
54
Пенза58
07.11.13
✎
12:20
|
(33)
Сейчас передаю значение через глобальную переменную: гэлДокРасписанияПриЗаполнении=ДокРасп.ТекущийДокумент(); Как правильно было написать? Вот код обработки: перем ВызванИзДокумента; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Функция КодПрепода(Препод) КодТекПрепод="ххх"; Если ПустоеЗначение(Препод)=0 тогда Если ПустоеЗначение(Препод.Работник)=0 тогда КодТекПрепод=Препод.Работник.Код; КонецЕсли; КонецЕсли; Возврат КодТекПрепод; КонецФункции //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Функция КодМеста(Место) КодТекМеста="ххх"; Если ПустоеЗначение(Место)=0 тогда КодТекМеста=Место.Код; КонецЕсли; Возврат КодТекМеста; КонецФункции //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Функция ЭлементВСкобки(ТекЭлемент) Возврат "["+СокрЛп(Строка(ТекЭлемент))+"];" КонецФункции //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Функция ПолучитьИНдекс(индКодПрепода,индДень, индЧас) Возврат ЭлементВСкобки(индКодПрепода)+ЭлементВСкобки(индДень)+ЭлементВСкобки(индЧас); КонецФункции //******************************************* Процедура Сформировать() НачТекГода=НачГода(ОснДокПротокол.ДатаНач); НачТек=ОснДокПротокол.ДатаНач; ///////////////////////////////////////////////////////////////////////////////////////////////// тзРаботникЧасов=СоздатьОбъект("ТаблицаЗначений"); тзРаботникЧасов.НоваяКолонка("Работник"); тзРаботникЧасов.НоваяКолонка("ОтработаноЧасов"); ///////////////////////////////////////////////////////////////////////////////////////////////// тзРаспЗанДень=СоздатьОбъект("ТаблицаЗначений"); тзРасписаниеЗанятий=СоздатьОбъект("ТаблицаЗначений"); тзРасписаниеЗанятий.НоваяКолонка("Дата"); тзРасписаниеЗанятий.НоваяКолонка("Класс"); тзРасписаниеЗанятий.НоваяКолонка("Смена"); тзРасписаниеЗанятий.НоваяКолонка("КолЗанятий"); ///////////////////////////////////////////////////////////////////////////////////////////////// ДокРасп=СоздатьОбъект("Документ.Расписание"); ДокПрот=СоздатьОбъект("Документ.Протокол"); ТзРасп=СоздатьОбъект("ТаблицаЗначений"); ///////////////////////////////////////////////////////////////////////////////////////////////// спИндексов=СоздатьОбъект("СписокЗначений"); спИндексовМест=СоздатьОбъект("СписокЗначений"); ДокРас=СоздатьОбъект("Документ.Расписание"); ДокРас.ВыбратьДокументы(,); Пока ДокРас.ПолучитьДокумент()=1 цикл Если ((ДокРас.Проведен()=1) и (ДокРас.КПротоколу.ТекущийДокумент()<>ОснДокПротокол.ТекущийДокумент())) тогда ДокРас.ВыбратьСтроки(); Пока ДокРас.ПолучитьСтроку()=1 Цикл Для НомЧаса=1 по 16 Цикл СтрЧаса="Час"+?(НомЧаса<10,"0","")+СокрЛП(Строка(НомЧаса)); Если ПустоеЗначение(ДокРас.ПолучитьАтрибут(СтрЧаса))=0 тогда КодТекПрепод=КодПрепода(ДокРас.Преподаватель); КодТекМеста=КодМеста(ДокРас.МестоПроведения); Индекс=ПолучитьИНдекс(КодТекПрепод,ДокРас.ДатаДень, НомЧаса); ИндексМеста=ПолучитьИНдекс(КодТекМеста,ДокРас.ДатаДень, НомЧаса); спИндексов.ДобавитьЗначение(Индекс); спИндексовМест.ДобавитьЗначение(ИндексМеста); Если ДокРас.ДатаДень>=НачТекГода Тогда тзРаботникЧасов.НоваяСтрока(); тзРаботникЧасов.Работник=ДокРас.Преподаватель.Работник.ТекущийЭлемент(); тзРаботникЧасов.ОтработаноЧасов=ДокРас.Часов; КонецЕсли; Если ДокРас.ДатаДень>=НачТек Тогда тзРасписаниеЗанятий.НоваяСтрока(); тзРасписаниеЗанятий.Дата=ДокРас.ДатаДень; тзРасписаниеЗанятий.Класс=ДокРас.МестоПроведения; тзРасписаниеЗанятий.Смена=ДокРас.Смена; тзРасписаниеЗанятий.КолЗанятий=0; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; КонецЕсли; КонецЦикла; ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// спМеста=СоздатьОбъект("СписокЗначений"); спСтрМест=СоздатьОбъект("СписокЗначений"); спОснКлассов=СоздатьОбъект("СписокЗначений"); спрКлассов=СоздатьОбъект("Справочник.МестаОбучения"); спрКлассов.ВыбратьЭлементы(); Пока спрКлассов.ПолучитьЭлемент()=1 Цикл Если спрКлассов.ОсновнойКласс=1 Тогда спОснКлассов.ДобавитьЗначение(спрКлассов.ТекущийЭлемент()); КонецЕсли; КонецЦикла; КолОснКлассов=спОснКлассов.РазмерСписка(); ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// тзРасписаниеЗанятий.Свернуть("Дата,Класс,Смена","КолЗанятий"); спЕстьПустойКласс=СоздатьОбъект("СписокЗначений"); тзРасписаниеЗанятий.Выгрузить(тзРаспЗанДень,); тзРаспЗанДень.Свернуть("Дата","КолЗанятий"); тзРаспЗанДень.ВыбратьСтроки(); Пока тзРаспЗанДень.ПолучитьСтроку()=1 Цикл спЕстьПустойКласс.УдалитьВсе(); тзРасписаниеЗанятий.ВыбратьСтроки(); Пока тзРасписаниеЗанятий.ПолучитьСтроку()=1 Цикл Если тзРасписаниеЗанятий.Дата=тзРаспЗанДень.Дата Тогда Если тзРасписаниеЗанятий.Класс.ОсновнойКласс=1 ТОгда Если спЕстьПустойКласс.НайтиЗначение(тзРасписаниеЗанятий.Класс)=0 Тогда спЕстьПустойКласс.ДобавитьЗначение(тзРасписаниеЗанятий.Класс); КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; РазмСпис=спЕстьПустойКласс.РазмерСписка(); тзРасписаниеЗанятий.ВыбратьСтроки(); Пока тзРасписаниеЗанятий.ПолучитьСтроку()=1 Цикл Если тзРасписаниеЗанятий.Дата=тзРаспЗанДень.Дата Тогда Если РазмСпис>=КолОснКлассов Тогда //Все классы заполнены тзРасписаниеЗанятий.КолЗанятий=0.01; Иначе тзРасписаниеЗанятий.КолЗанятий=0; КонецЕсли; КонецЕСли; КонецЦикла; КонецЦикла; тзРасписаниеЗанятий.ВыбратьСтроки(); Пока тзРасписаниеЗанятий.ПолучитьСтроку()=1 Цикл Если Найти(тзРасписаниеЗанятий.Смена,"Днев")<>0 ТОгда тзРасписаниеЗанятий.КолЗанятий=тзРасписаниеЗанятий.КолЗанятий+1; КонецЕсли; Если Найти(тзРасписаниеЗанятий.Смена,"Вече")<>0 ТОгда тзРасписаниеЗанятий.КолЗанятий=тзРасписаниеЗанятий.КолЗанятий+1; КонецЕсли; КонецЦикла; тзРасписаниеЗанятий.Выгрузить(тзРаспЗанДень,); тзРаспЗанДень.Свернуть("Дата","КолЗанятий"); ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// тзРаботникЧасов.Свернуть("Работник","ОтработаноЧасов"); тзПрепДисц=СоздатьОбъект("ТаблицаЗначений"); тзПрепДисц.НоваяКолонка("Дисциплина"); тзПрепДисц.НоваяКолонка("Препод0"); тзПрепДисц.НоваяКолонка("Препод1"); тзПрепДисц.НоваяКолонка("Препод2"); тзПрепДисц.НоваяКолонка("Препод3"); тзПрепДисц.НоваяКолонка("Препод4"); тзПрепДисц.НоваяКолонка("Препод5"); тзПрепДисц.НоваяКолонка("Препод6"); тзПрепДисц.НоваяКолонка("Препод7"); тзПрепДисц.НоваяКолонка("Препод8"); тзПрепДисц.НоваяКолонка("Препод9"); ТЗпреподПриоритет=СоздатьОбъект("ТаблицаЗначений"); ТЗпреподПриоритет.НоваяКолонка("Препод"); ТЗпреподПриоритет.НоваяКолонка("Приоритет"); СпрПрепод=СоздатьОбъект("Справочник.ПреподРаздела"); СпрРазд=СоздатьОбъект("Справочник.РазделДисциплины"); СпрРазд.ВыбратьЭлементы(); Пока СпрРазд.ПолучитьЭлемент()=1 Цикл тзПрепДисц.НоваяСтрока(); тзПрепДисц.Дисциплина=СпрРазд.ТекущийЭлемент(); ТЗпреподПриоритет.УдалитьСтроки(); СпрПрепод.ИспользоватьВладельца(СпрРазд.ВидРаздела); СпрПрепод.ВыбратьЭлементы(); Пока СпрПрепод.ПолучитьЭлемент()=1 Цикл ТЗпреподПриоритет.НоваяСтрока(); ТЗпреподПриоритет.Препод=СпрПрепод.ТекущийЭлемент(); тзРаботникЧасов.ВыбратьСтроки(); НомСтрРаботЧасов=0; тзРаботникЧасов.НайтиЗначение(СпрПрепод.Работник.ТекущийЭлемент(),НомСтрРаботЧасов,"Работник"); Если НомСтрРаботЧасов=0 Тогда ТекПриоритет=СпрПрепод.Приоритет Иначе ТекПриоритет=тзРаботникЧасов.ПолучитьЗначение(НомСтрРаботЧасов,"ОтработаноЧасов"); КонецЕсли; ТЗпреподПриоритет.Приоритет=ТекПриоритет; КонецЦикла; ТЗпреподПриоритет.Сортировать("Приоритет"); НомПрепод=0; ТЗпреподПриоритет.ВыбратьСтроки(); Пока ТЗпреподПриоритет.ПолучитьСтроку()=1 Цикл тзПрепДисц.УстановитьЗначение(тзПрепДисц.КоличествоСтрок(),"Препод" +СокрЛп(Строка(НомПрепод)),ТЗпреподПриоритет.Препод.ТекущийЭлемент()); НомПрепод=НомПрепод+1; Если НомПрепод>9 тогда Прервать; КонецЕсли; КонецЦикла; КонецЦикла; ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// ТЗДниЗанятий=СоздатьОбъект("ТаблицаЗначений"); ТЗДатаЗанятий=СоздатьОбъект("ТаблицаЗначений"); ТЗПротМесто=СоздатьОбъект("ТаблицаЗначений"); ТЗДниЗанятий.НоваяКолонка("ИндПротДень"); ТЗДниЗанятий.НоваяКолонка("СтарДень"); ТЗДниЗанятий.НоваяКолонка("НачПрот"); ТЗДниЗанятий.НоваяКолонка("День"); ТЗДниЗанятий.НоваяКолонка("ДокПрото"); ТЗДниЗанятий.НоваяКолонка("Класс"); ТЗДниЗанятий.НоваяКолонка("Смена"); ТЗДниЗанятий.НоваяКолонка("КолЗанятий"); ТЗДниЗанятий.НоваяКолонка("КолЧасов"); ТЗДниЗанятий.НоваяКолонка("БылЭкзамен"); ТЗДниЗанятий.НоваяКолонка("БылДлинныйДень"); Если ПустоеЗначение(ОснДокПротокол.Расписание)=1 Тогда ДокРасп.Новый(); Иначе ДокРасп.НайтиДокумент(ОснДокПротокол.Расписание); ДокРасп.СделатьНеПроведенным(); КонецЕСли; гэлРассчетЗначений(ОснДокПротокол.ТекущийДокумент()); ДокРасп.КПротоколу=ОснДокПротокол.ТекущийДокумент(); ДокРасп.ДатаДок=ОснДокПротокол.ДатаДОк; ДокРасп.НомерДок=ОснДокПротокол.НомерДок; ДокРасп.УдалитьСтроки(); ЕстьОшибка=0; гэлТЗКурс.ВыбратьСтроки(); Пока гэлТЗКурс.ПолучитьСтроку()=1 Цикл ДокРасп.НоваяСтрока(); ДокРасп.Раздел=гэлТЗКурс.Раздел; ДокРасп.Дисциплина=гэлТЗКурс.Дисциплина; ДокРасп.ДатаДень=гэлТЗКурс.Дата; ДокРасп.Часов=гэлТЗКурс.Часов; ДокРасп.ВидОбучения=гэлТЗКурс.ВидОбучения; ДокРасп.МестоПроведения=гэлТЗКурс.МестоПроведения; ДокРасп.День=гэлТЗКурс.День; ДокРасп.Часы=гэлТЗКурс.Часы; ТЗДниЗанятий.НоваяСтрока(); ТЗДниЗанятий.День=гэлТЗКурс.Дата; ТЗДниЗанятий.ДокПрото=ОснДокПротокол.ТекущийДокумент(); ТЗДниЗанятий.Класс=""; ТЗДниЗанятий.Смена=""; ТЗДниЗанятий.СтарДень=гэлТЗКурс.Дата; ТЗДниЗанятий.НачПрот=НачТек; ТЗДниЗанятий.КолЗанятий=0; ТЗДниЗанятий.КолЧасов=гэлТЗКурс.Часов; ТЗДниЗанятий.ИндПротДень= ЭлементВСкобки(ОснДокПротокол.ТекущийДокумент().НомерДок) +ЭлементВСкобки(ОснДокПротокол.ТекущийДокумент().ДатаДок) +ЭлементВСкобки(гэлТЗКурс.Дата); ТЗДниЗанятий.БылЭкзамен=?(гэлТЗКурс.ВидОбучения=Перечисление.ВидОбучения.Экзамен,1,0); ТЗДниЗанятий.БылДлинныйДень=0; КонецЦикла; УдалосьЗаписать=0; Попытка ДокРасп.Записать(); гэлДокРасписанияПриЗаполнении=ДокРасп.ТекущийДокумент(); УдалосьЗаписать=1; Исключение Сообщить("Не удалось запистаь расписание:"+ОписаниеОшибки()); Возврат; КонецПопытки; ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// ТЗДниЗанятий.Свернуть("НачПрот,СтарДень,День,ДокПрото,Класс,Смена,КолЗанятий,ИндПротДень","КолЧасов,БылЭкзамен,БылДлинныйДень"); ТЗДниЗанятий.ВыбратьСтроки(); Пока ТЗДниЗанятий.ПолучитьСтроку()=1 Цикл Если ТЗДниЗанятий.КолЧасов>8 Тогда ТЗДниЗанятий.КолЗанятий=2; ТЗДниЗанятий.БылДлинныйДень=1; Иначе ТЗДниЗанятий.КолЗанятий=1; ТЗДниЗанятий.БылДлинныйДень=0; Конецесли; КонецЦикла; ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// выполнять=1; Пока выполнять=1 Цикл ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// ТЗДниЗанятий.Сортировать("День,НачПрот-"); ТЗДниЗанятий.Выгрузить(ТЗДатаЗанятий,,,); ТЗДатаЗанятий.Сортировать("День+"); деньМин=ТЗДатаЗанятий.ПолучитьЗначение(1,"День"); ТЗДатаЗанятий.Сортировать("День-"); деньМакс=ТЗДатаЗанятий.ПолучитьЗначение(1,"День"); деньМакс=деньМакс+365; ТекДень=деньМин; Пока ТекДень<=деньМакс Цикл ТЗДатаЗанятий.НоваяСтрока(); ТЗДатаЗанятий.День=ТекДень; ТЗДатаЗанятий.КолЗанятий=0; ТЗДатаЗанятий.БылДлинныйДень=0; ТЗДатаЗанятий.БылЭкзамен=0; ТекДень=ТекДень+1; КонецЦикла; ТЗДатаЗанятий.Свернуть("День","КолЗанятий,БылЭкзамен,БылДлинныйДень"); ТЗДатаЗанятий.НоваяКолонка("ЭтоСуббота"); ТЗДатаЗанятий.НоваяКолонка("ЭтоВоскресенье"); ТЗДатаЗанятий.ВыбратьСтроки(); Пока ТЗДатаЗанятий.ПолучитьСтроку()=1 Цикл Если НомерДняНедели(ТЗДатаЗанятий.День)=6 ТОгда ТЗДатаЗанятий.ЭтоСуббота=1; КонецЕсли; Если НомерДняНедели(ТЗДатаЗанятий.День)=7 ТОгда ТЗДатаЗанятий.ЭтоВоскресенье=1; КонецЕсли; КонецЦикла; ТЗДатаЗанятий.Сортировать("День"); ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// БылиДни=0; ТЗДниЗанятий.ВыбратьСтроки(); Пока ТЗДниЗанятий.ПолучитьСтроку()=1 Цикл тзРаспЗанДень.ВыбратьСтроки(); НомСтрДня=0; тзРаспЗанДень.НайтиЗначение(ТЗДниЗанятий.День,НомСтрДня,"Дата"); Если НомСтрДня>0 Тогда ТекКолДней=ТЗДатаЗанятий.ПолучитьЗначение(НомСтрДня,"КолЗанятий"); Иначе ТекКолДней=0; КонецЕсли; ТекКолЗанятийДня=ТЗДниЗанятий.КолЗанятий; Если (ТекКолДней+ТекКолЗанятийДня)>КолОснКлассов*2 тогда ТекПрото=ТЗДниЗанятий.ДокПрото.ТекущийДокумент(); ТекДень=ТЗДниЗанятий.День; БылиДни=1; НомСтрТЗДней=ТЗДниЗанятий.НомерСТроки; Сообщить("Обрабатывается день:"+ТекДень+"("+НомСтрТЗДней+")"+"х"+ТЗДниЗанятий.ДокПрото+"ххх"); прервать; КонецЕсли; КонецЦикла; Выполнять=БылиДни; Если Выполнять=1 Тогда ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// ТЗДатаЗанятий.Сортировать("День"); ТекКодПроток=СокрЛП(ТЗДниЗанятий.ДокПрото.НомерДок); РазмерРазрыва=0; ОченьБолшойРазрывИспользуемСубботы=0; ///////////////////////////////////////////////////////////////////////////////////////////////// БылНайденРазрыв=0; ТЗДатаЗанятий.ВыбратьСтроки(); Пока ТЗДатаЗанятий.ПолучитьСтроку()=1 Цикл Если ((ТЗДатаЗанятий.ЭтоСуббота=1) или (ТЗДатаЗанятий.ЭтоВоскресенье=1)) ТОгда Продолжить; КонецЕсли; РазмерРазрыва=ТЗДатаЗанятий.День-ТекДень; деньМин1=ТекДень; деньМакс1=ТЗДатаЗанятий.День; счТекДень1=деньМин1; Пока счТекДень1<=деньМакс1 Цикл Если ((НомерДняНедели(счТекДень1)=7) или (НомерДняНедели(счТекДень1)=6)) Тогда РазмерРазрыва=РазмерРазрыва-1; КонецЕсли; счТекДень1=счТекДень1+1; КонецЦикла; Если РазмерРазрыва>3 ТОгда ОченьБолшойРазрывИспользуемСубботы=1; Сообщить("ОченьБолшойРазрывИспользуемСубботы"); Прервать; КонецЕсли; тзРаспЗанДень.ВыбратьСтроки(); НомСтрДня=0; тзРаспЗанДень.НайтиЗначение(ТЗДатаЗанятий.День,НомСтрДня,"Дата"); Если НомСтрДня>0 Тогда ТекКолДней=ТЗДатаЗанятий.ПолучитьЗначение(НомСтрДня,"КолЗанятий"); Иначе ТекКолДней=0; КонецЕсли; Если ((ТЗДатаЗанятий.День>ТекДень) и (ТекКолДней+ТекКолЗанятийДня<=КолОснКлассов*2)) тогда ТекРазрыв=ТЗДатаЗанятий.День-ТекДень; Сообщить("Найден день"+ТЗДатаЗанятий.День); БылНайденРазрыв=1; Прервать; КонецЕсли; КонецЦикла; ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// РазмерРазрыва=0; ОченьБолшойРазрывИспользуемВоскресенья=0; Если ОченьБолшойРазрывИспользуемСубботы=1 Тогда БылНайденРазрыв=0; ТЗДатаЗанятий.ВыбратьСтроки(); Пока ТЗДатаЗанятий.ПолучитьСтроку()=1 Цикл Если ТЗДатаЗанятий.ЭтоВоскресенье=1 ТОгда Продолжить; КонецЕсли; РазмерРазрыва= ТЗДатаЗанятий.День-ТекДень; деньМин1=ТекДень; деньМакс1=ТЗДатаЗанятий.День; счТекДень1=деньМин1; Пока счТекДень1<=деньМакс1 Цикл Если ((НомерДняНедели(счТекДень1)=7)) Тогда РазмерРазрыва=РазмерРазрыва-1; КонецЕсли; счТекДень1=счТекДень1+1; КонецЦикла; Если РазмерРазрыва>3 ТОгда Сообщить("ОченьБолшойРазрывИспользуемВоскресенья"); ОченьБолшойРазрывИспользуемВоскресенья=1; Прервать; КонецЕсли; тзРаспЗанДень.ВыбратьСтроки(); НомСтрДня=0; тзРаспЗанДень.НайтиЗначение(ТЗДатаЗанятий.День,НомСтрДня,"Дата"); Если НомСтрДня>0 Тогда ТекКолДней=ТЗДатаЗанятий.ПолучитьЗначение(НомСтрДня,"КолЗанятий"); Иначе ТекКолДней=0; КонецЕсли; Если ((ТЗДатаЗанятий.День>ТекДень) и (ТекКолДней+ТекКолЗанятийДня<=КолОснКлассов*2)) тогда ТекРазрыв=ТЗДатаЗанятий.День-ТекДень; Сообщить("Найден день"+ТЗДатаЗанятий.День); &nb |
|||
55
Пенза58
07.11.13
✎
12:23
|
Весь код не залез продолжение:
Пока ТЗДниЗанятий.ПолучитьСтроку()=1 Цикл спМеста.УдалитьВсе(); спСтрМест.УдалитьВсе(); КоличествоДвухСмен=0; КоличествоДвухЭкзаменов=0; спЕстьПустойКласс.УдалитьВсе(); тзРасписаниеЗанятий.ВыбратьСтроки(); Пока тзРасписаниеЗанятий.ПолучитьСтроку()=1 Цикл Если ТЗДниЗанятий.День=тзРасписаниеЗанятий.Дата Тогда Если Найти(тзРасписаниеЗанятий.Смена,"Днев")<>0 ТОгда ИндКласса=СокрЛп(Строка(тзРасписаниеЗанятий.Класс.Код))+"Дневная"; спМеста.ДобавитьЗначение(ИндКласса,); //Сообщить("-*-"+ТЗДниЗанятий.День+" "+ИндКласса); КонецЕсли; Если Найти(тзРасписаниеЗанятий.Смена,"Вече")<>0 ТОгда ИндКласса=СокрЛп(Строка(тзРасписаниеЗанятий.Класс.Код))+"Вечерняя"; спМеста.ДобавитьЗначение(ИндКласса,); // Сообщить("*-*"+ТЗДниЗанятий.День+" "+ИндКласса); КонецЕсли; Если тзРасписаниеЗанятий.Класс.ОсновнойКласс=1 ТОгда Если спЕстьПустойКласс.НайтиЗначение(тзРасписаниеЗанятий.Класс)=0 Тогда спЕстьПустойКласс.ДобавитьЗначение(тзРасписаниеЗанятий.Класс); КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; Если ТЗДниЗанятий.БылДлинныйДень>0 Тогда времтекласс=""; Для НомерКласса=1 По КолОснКлассов Цикл времтекласс=спОснКлассов.ПолучитьЗначение(НомерКласса).ТекущийЭлемент(); Если спЕстьПустойКласс.НайтиЗначение(тзРасписаниеЗанятий.Класс.ТекущийЭлемент())=0 Тогда Прервать; КонецЕсли; времтекласс=""; КонецЦикла; ИндКласса=СокрЛп(Строка(времтекласс.Код))+"Дневная"; спМеста.ДобавитьЗначение(ИндКласса,); ИндКласса=СокрЛп(Строка(времтекласс.Код))+"Вечерняя"; спМеста.ДобавитьЗначение(ИндКласса,); // Сообщить("ххх3ххх"+" "+времтекласс.ТекущийЭлемент()+" "+"Дневная/Вечерняя"); ТЗДниЗанятий.Класс=времтекласс.ТекущийЭлемент(); ТЗДниЗанятий.Смена="Дневная/Вечерняя"; ИНаче ///////////////////////////////////////////////////////////////////////////////////////////////// // Для НосСтрМеста=1 по спСтрМест.РазмерСписка() Цикл ТекДокПро=ТЗДниЗанятий.ДокПрото; ТЗПротМесто.ВыбратьСтроки(); НомСтрМеста=0; ТЗПротМесто.НайтиЗначение(ТекДокПро.ТекущийДокумент(),НомСтрМеста,"ДокПрото"); // Сообщить("йййййййййй"+ТЗПротМесто.ПолучитьЗначение(НомСтрМеста,"Класс")); Если ПустоеЗначение(ТЗПротМесто.ПолучитьЗначение(НомСтрМеста,"Класс"))=0 Тогда ИндКласса=СокрЛп(Строка(ТЗПротМесто.ПолучитьЗначение(НомСтрМеста,"Класс").Код)) +СокрЛп(Строка(+ТЗПротМесто.ПолучитьЗначение(НомСтрМеста,"Смена"))); Если спМеста.НайтиЗначение(ИндКласса)=0 ТОгда спМеста.ДобавитьЗначение(ИндКласса,); ВзятьИзОсновнонго=1; Иначе ВзятьИзОсновнонго=2; КонецЕСли; Иначе ВзятьИзОсновнонго=0; КонецЕсли; // КонецЦикла; ///////////////////////////////////////////////////////////////////////////////////////////////// ТЗДниЗанятийДокПрото=ТЗДниЗанятий.ДокПрото; Если ВзятьИзОсновнонго=1 Тогда ТЗПротМесто.ВыбратьСтроки(); НомСтрМеста=0; ТЗПротМесто.НайтиЗначение(ТЗДниЗанятийДокПрото,НомСтрМеста,"ДокПрото"); Если ПустоеЗначение(ТЗПротМесто.ПолучитьЗначение(НомСтрМеста,"Класс"))=0 Тогда ТЗДниЗанятий.Класс=ТЗПротМесто.ПолучитьЗначение(НомСтрМеста,"Класс").ТекущийЭлемент(); ТЗДниЗанятий.Смена=ТЗПротМесто.ПолучитьЗначение(НомСтрМеста,"Смена"); // Сообщить("ххх1ххх"+ " "+ТЗПротМесто.ПолучитьЗначение(НомСтрМеста,"Класс").ТекущийЭлемент()+" "+ТЗПротМесто.ПолучитьЗначение(НомСтрМеста,"Смена")); //продолжить; КонецЕсли; Иначе Найден=0; ТекСмена="Дневная"; Пока ТекСмена<>"" Цикл Для НомКласса=1 по КолОснКлассов Цикл ТекКласс=спОснКлассов.ПолучитьЗначение(НомКласса).ТекущийЭлемент(); ИндКласса=СокрЛп(Строка(ТекКласс.Код))+СокрЛп(Строка(ТекСмена)); Если спМеста.НайтиЗначение(ИндКласса)=0 Тогда спМеста.ДобавитьЗначение(ИндКласса); ТЗДниЗанятий.Класс=ТекКласс.ТекущийЭлемент(); ТЗДниЗанятий.Смена=ТекСмена; Если ВзятьИзОсновнонго=2 Тогда //Сообщить("ххх2ххх"+ " "+ТекКласс.ТекущийЭлемент()+" "+ТекСмена); Иначе ТЗПротМесто.ВыбратьСтроки(); НомСтрМеста=0; ТЗПротМесто.НайтиЗначение(ТЗДниЗанятийДокПрото,НомСтрМеста,"ДокПрото"); //Сообщить("ххх0ххх"+ " "+ТекКласс.ТекущийЭлемент()+" "+ТекСмена); ТЗПротМесто.УстановитьЗначение(НомСтрМеста,"Смена",ТекСмена); ТЗПротМесто.УстановитьЗначение(НомСтрМеста,"Класс",ТекКласс.ТекущийЭлемент()); КонецЕсли; Найден=1; прервать; КонецЕсли; КонецЦикла; Если Найден=1 Тогда прервать; КонецЕсли; ТекСмена=?(ТекСмена="Вечерняя","","Вечерняя"); Если Найден=1 Тогда прервать; КонецЕсли; КонецЦикла; КонецЕСли; /////////////////////////////////////////////////////////////////////// КонецЕсли; /////////////////////////////////////////////////////////////////////// КонецЦикла; КонецЕСли; КонецЦикла; //*********************************************************************************************** //*********************************************************************************************** //*********************************************************************************************** ДокРасп.ВыгрузитьТабличнуюЧасть(ТзРасп,); ЕстьОшибка=0; ТзРасп.Сортировать("ДатаДень+"); ТзРасп.ВыбратьСтроки(); Пока ТзРасп.ПолучитьСтроку()=1 Цикл ИндПротДень= ЭлементВСкобки(ОснДокПротокол.ТекущийДокумент().НомерДок)+ ЭлементВСкобки(ОснДокПротокол.ТекущийДокумент().ДатаДок)+ ЭлементВСкобки(ТзРасп.ДатаДень); ТЗДниЗанятий.ВыбратьСтроки(); НомСтрМеста=0; ТЗДниЗанятий.НайтиЗначение(ИндПротДень,НомСтрМеста,"ИндПротДень"); ТзРасп.ДатаДень=ТЗДниЗанятий.ПолучитьЗначение(НомСтрМеста,"День"); ТекКласс=ТЗДниЗанятий.ПолучитьЗначение(НомСтрМеста,"Класс").ТекущийЭлемент(); ТекСмена=ТЗДниЗанятий.ПолучитьЗначение(НомСтрМеста,"Смена"); ТзРасп.МестоПроведения=ТекКласс.ТекущийЭлемент(); ТзРасп.Смена=ТекСмена; КонецЦикла; ТзРасп.Сортировать("ДатаДень+"); НомерДня=""; Если Найти(ТекСмена,"Дневная")<>0 Тогда НомерЧаса=1; Иначе НомерЧаса=9; КонецЕсли; ТзРасп.ВыбратьСтроки(); Пока ТзРасп.ПолучитьСтроку()=1 Цикл ТекСмена=СокрЛП(ТзРасп.Смена); Если НомерДня<>ТзРасп.ДатаДень Тогда Если Найти(ТекСмена,"Дневная")<>0 Тогда НомерЧаса=1; Иначе НомерЧаса=9; КонецЕсли; НомерДня=ТзРасп.ДатаДень; КонецЕсли; ТекЧасы=ТзРасп.Часов; Если ((НомерЧаса<0) или (НомерЧаса>16) или ((НомерЧаса+ТекЧасы-1)>16) или ((НомерЧаса+ТекЧасы-1)<0)) Тогда сообщить("В документет "+ОснДокПротокол.ТекущийДокумент()+" курс "+ОснДокПротокол.Курс+" в день " +ТзРасп.ДатаДень+" часы за пределами диапазона, начало урочас час №"+НомерЧаса+" оконочание урока час №"+Строка(НомерЧаса+ТекЧасы-1)); ЕстьОшибка=1; продолжить; КонецЕсли; ТзРасп.ВремяНачала=гэлНачалоЧаса[НомерЧаса]; ТзРасп.ВремяОкночения=гэлКонецЧаса[НомерЧаса+ТекЧасы-1]; Для НомЧаса=1 по 16 Цикл СтрЧаса="Час"+?(НомЧаса<10,"0","")+СокрЛП(Строка(НомЧаса)); ТзРасп.УстановитьЗначение(ТзРасп.НомерСтроки,СтрЧаса,0); КонецЦикла; Для НомЧаса=НомерЧаса по НомерЧаса+ТекЧасы-1 Цикл СтрЧаса="Час"+?(НомЧаса<10,"0","")+СокрЛП(Строка(НомЧаса)); ТзРасп.УстановитьЗначение(ТзРасп.НомерСтроки,СтрЧаса,1); КонецЦикла; тзПрепДисц.ВыбратьСтроки(); НомСтрПрепДисц=0; тзПрепДисц.НайтиЗначение(ТзРасп.Дисциплина.Раздел,НомСтрПрепДисц,"Дисциплина"); Если НомСтрПрепДисц<>0 Тогда Для НомПрепода=0 по 9 Цикл ТекПреподДисц=тзПрепДисц.ПолучитьЗначение(НомСтрПрепДисц,"Препод"+СокрЛп(Строка(НомПрепода))); Если ПустоеЗначение(ТекПреподДисц)=1 Тогда ЕстьОшибка=1; Прервать; КонецЕсли; ПодходитПоДатам=1; Если ПустоеЗначение(ТекПреподДисц.Работник.ДатаПриема)=0 Тогда Если ТекПреподДисц.Работник.ДатаПриема>ТзРасп.ДатаДень Тогда ПодходитПоДатам=0; КонецЕсли; КонецЕсли; Если ПустоеЗначение(ТекПреподДисц.Работник.ДатаУвольнения)=0 Тогда Если ТекПреподДисц.Работник.ДатаУвольнения<ТзРасп.ДатаДень Тогда ПодходитПоДатам=0; КонецЕсли; КонецЕсли; Если ПодходитПоДатам=0 Тогда ЭтотПреподПодъодит=0; Иначе ЭтотПреподПодъодит=1; Для НомЧаса=НомерЧаса по НомерЧаса+ТекЧасы-1 Цикл КодТекПрепод=КодПрепода(ТекПреподДисц); Индекс=ПолучитьИНдекс(КодТекПрепод,ТзРасп.ДатаДень, НомЧаса); Если спИндексов.НайтиЗначение(Индекс)<>0 Тогда ЭтотПреподПодъодит=0; КонецЕсли; КонецЦикла; КонецЕсли; Если ЭтотПреподПодъодит=1 Тогда ТзРасп.Преподаватель= ТекПреподДисц.ТекущийЭлемент(); тзРаботникЧасов.НоваяСтрока(); тзРаботникЧасов.Работник=ТзРасп.Преподаватель.Работник.ТекущийЭлемент(); тзРаботникЧасов.ОтработаноЧасов=ТзРасп.Часов; прервать; Иначе Если НомПрепода=9 Тогда ЕстьОшибка=1; Прервать; КонецЕсли; КонецЕсли; КонецЦикла; Иначе ЕстьОшибка=1; КонецЕсли; НомерЧаса=НомерЧаса+ТекЧасы; КонецЦикла; //ТзРасп.ВыбратьСтроку(); ДокРасп.ЗагрузитьТабличнуюЧасть(ТзРасп); УдалосьЗаписать=0; Попытка ДокРасп.Записать(); УдалосьЗаписать=1; Исключение Сообщить("Не удалось запистаь расписание:"+ОписаниеОшибки()); возврат; КонецПопытки; Если ((УдалосьЗаписать=1) и (ЕстьОшибка=0)) Тогда УдалосьПровести=0; Попытка УдалосьПровести=ДокРасп.Провести(,); Исключение Сообщить("Не удалось запистаь расписание:"+ОписаниеОшибки()); Возврат; КонецПопытки; КонецЕсли; ЕСли ВызванИзДокумента=0 ТОгда ДокПрот.НайтиДокумент(ОснДокПротокол); ДокПрот.Расписание=ДокРасп.ТекущийДокумент(); Попытка ДокПрот.Записать(); Исключение Сообщить("Не удалось запистаь протокол:"+ОписаниеОшибки()); Возврат; КонецПопытки; КонецЕсли; КонецПроцедуры Процедура ПриОткрытии() ВызванИзДокумента=0; Если ТипЗначенияСтр(Форма.Параметр)="СписокЗначений" Тогда ОснДокПротокол=Форма.Параметр.ПолучитьЗначение(1); ВызванИзДокумента=1; Сформировать(); СтатусВозврата(0); Возврат; КонецЕсли; КонецПроцедуры |
|||
56
Ёпрст
07.11.13
✎
12:31
|
Смело всё в топку
|
|||
57
Ёпрст
07.11.13
✎
12:32
|
вообще конечно, зачетно выбирать все документы из базы, даже одного вида.. смотреть в тч дока.. лепить какие то тз..
Но ничего , с годами это пофигизм проходит. |
|||
58
1dvd
07.11.13
✎
13:02
|
(56) ты реально всё это прочитал???
|
|||
59
Ёпрст
07.11.13
✎
13:04
|
(58) так, вскользь
|
|||
60
Пенза58
07.11.13
✎
15:48
|
(57) Расскажи про свой вариант.
|
|||
61
Ёпрст
07.11.13
✎
16:03
|
(60) Задачу то целиком озвуь, мне как-то смотреть простынню и вникать в суть не улыбает.
|
|||
62
Пенза58
07.11.13
✎
16:09
|
(61) Общая задача учет расписания преподавателей и классов.
Есть некоторое количество классов и две смены. Создается учебная группа и надо, чтобы её урокам поставились классы, время занятий и преподаватели. В частности "выбирать все документы" аналог регистра сведений. |
|||
63
Ёпрст
07.11.13
✎
16:39
|
Один хрен, твой код в топку.. слишком не оптимально и медленно всё.. теже выборки из ТЗ для поиска по 2-м колонкам.
|
|||
64
Пенза58
07.11.13
✎
16:43
|
(63) 1. Это ты о чем?
2. Как по-другому сделать? |
|||
65
Ёпрст
07.11.13
✎
16:49
|
(64) чтобы ответить на этот вопрос нужно знать структуру хранения данных.
Один хрен, выборки из тз, перебор всех документов за период.. это всё очень медленно. |
|||
66
Ёпрст
07.11.13
✎
16:50
|
ну а преобразование ссылки в строку..это вообще моветон
|
|||
67
Пенза58
07.11.13
✎
16:56
|
(65) > структуру хранения данных
Какую структуру ты предложишь. Вот надо хранить данные о расписании. Есть группа надо знать в какой день, в каком классе, в какой час(можно упростить пускай будет хотя бы смена вечерняя или дневная), какой преподаватель, будет проводить занятия. Как предлагаешь это хранить? > выборки из тз Что с ними не так? Как по другому? > перебор всех документов за период Альтернативой является работа с периодическими реквизитами справочников. Но тут опять же надо перебирать все группы, и искать были у них занятия в интересующем периоде или нет. Предложи свой вариант, как получить дни в которые были занятия и кто вел и в какое время. |
|||
68
Пенза58
07.11.13
✎
16:57
|
(66)
> ну а преобразование ссылки в строку..это вообще моветон Почему? Эти же данные нигде не хранятся постоянно. |
|||
69
Ёпрст
07.11.13
✎
17:15
|
(68) изменили представление элемента - твой алгоритм коту под хвост
|
|||
70
Ёпрст
07.11.13
✎
17:15
|
(67) для начала надо свою озвучить
|
|||
71
Ёпрст
07.11.13
✎
17:16
|
структуру
|
|||
72
Пенза58
07.11.13
✎
17:17
|
(69) > изменили представление элемента
Как это так? |
|||
73
Ёпрст
07.11.13
✎
17:18
|
(72) если основное представление элемента - наименование, то
Строка(ЭлементТвой) = ЭлементТвой.Наименование (или =код, или = основной реквизит справочника, если длина кода и наименования =0) Дык вот, изменили наименование - п..ц котёнку. |
|||
74
Пенза58
07.11.13
✎
17:19
|
||||
75
Пенза58
07.11.13
✎
17:20
|
(73) Где ты у меня такой код нашел?
|
|||
76
Ёпрст
07.11.13
✎
17:21
|
(74) аа... весь учет на одном документе построен ?
:) |
|||
77
Пенза58
07.11.13
✎
17:21
|
(76) Учет расписания - да.
А что не так? |
|||
78
Ёпрст
07.11.13
✎
17:23
|
Возврат "["+СокрЛп(Строка(ТекЭлемент))+"];"
|
|||
79
Ёпрст
07.11.13
✎
17:23
|
(77) ну, по мне, так всё..
|
|||
80
Ёпрст
07.11.13
✎
17:23
|
а где часы с 17 по 24 ? :)))
|
|||
81
Ёпрст
07.11.13
✎
17:24
|
Ну и что есть ВремяОкночения ?
|
|||
82
Пенза58
07.11.13
✎
17:26
|
(78) Туда никогда не передается ссылка в чистом виде.
Ссылка предварительно обрабатывается Функция КодПрепода(Препод) КодТекПрепод="ххх"; Если ПустоеЗначение(Препод)=0 тогда Если ПустоеЗначение(Препод.Работник)=0 тогда КодТекПрепод=Препод.Работник.Код; КонецЕсли; КонецЕсли; Возврат КодТекПрепод; КонецФункции //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Функция КодМеста(Место) КодТекМеста="ххх"; Если ПустоеЗначение(Место)=0 тогда КодТекМеста=Место.Код; КонецЕсли; Возврат КодТекМеста; КонецФункции |
|||
83
Пенза58
07.11.13
✎
17:27
|
(81) ВремяОкончания.
(80) а где часы с 17 по 24 - там вообще не астрономические часы. |
|||
84
Ёпрст
07.11.13
✎
17:29
|
(83) :))))))))
реквизиты Час01-17 какой тип то имеют хоть ? Чего, нельзя было один реквизит Час сделать ? |
|||
85
Ёпрст
07.11.13
✎
17:30
|
ДатаДень нахрена ?
ДатаДок не есть тоже самое ? Нужно новвое расписание - новый документ, не ? Или вы всегда одним документом всё делаете ? |
|||
86
Пенза58
07.11.13
✎
17:31
|
(79) Предложи свой вариант?
Есть задача учета расписания группы, с классами и преподавателями. И есть задача автоматического заполнения расписания, причем если класс занят, то искался другой класс, если в дневную смену все классы заняты, искался, в вечернюю, если все занято день занятий перносился на другую дату. Когда дата и класс определены подобрать преподавателя который будет вести занятия и который в это время свободен. |
|||
87
Пенза58
07.11.13
✎
17:33
|
(85)
> ДатаДень нахрена ? > ДатаДок не есть тоже самое ? Разумеется нет. Это дата занятия, группа учится может неделями. И в тч, могут быть десятки дат, связи с датой документа вообще никакой. |
|||
88
Пенза58
07.11.13
✎
17:33
|
> Нужно новвое расписание - новый документ, не ?
Для каждой группы свой документ и в нем свое расписание. |
|||
89
Ёпрст
07.11.13
✎
17:36
|
Ну ладно, зачем тебе 17 реквизитов Час ?
Это еще посмотри на досуге, хотя на инфопомойке еще была куча поделок на 7.7 http://infostart.ru/public/139090/ |
|||
90
Пенза58
07.11.13
✎
17:36
|
(84)
> реквизиты Час01-17 какой тип то имеют хоть ? Можно сказать булево 1-0 > Чего, нельзя было один реквизит Час сделать ? Как это так? Урок может быть на несколько часов. |
|||
91
Пенза58
07.11.13
✎
17:40
|
Такой документ:
http://s2.ipicture.ru/uploads/20131107/pXSMcTsP.png |
|||
92
Пенза58
07.11.13
✎
17:44
|
(89) Это на 8-ке.
На восьмерке понятно было бы все по-другому. |
|||
93
Пенза58
07.11.13
✎
17:48
|
(89) Я там не увидел про функцию автоматического создания расписания.
Т.е. там человек сидит и сочиняет расписание, здесь же программа автоматически это делает. |
|||
94
Torquader
07.11.13
✎
21:13
|
Всё в одном документе - это очень плохо.
Особенно плохо - делить часы на параметры табличной части. Что такое расписание - это связь "кто кого когда и где", то есть соединение четырёх сущностей: 1) Преподаватель (в справочнике) 2) Группа студентов (в справочнике) 3) Аудитория (в справочнике) 4) Время проведения занятия (число). Также можно рассматривать дату, как пятый параметр, но она есть в шапке документа. Что мешает сделать табличную часть, где задавать все четыре параметра, связанные друг с другом ? Конечно, более правильно будет преподавателя или группу перенести вообще в шапку документа, чтобы в одном документе задавалось расписание для одного преподавателя (или группы). |
|||
95
Пенза58
08.11.13
✎
08:05
|
(94)
> Всё в одном документе - это очень плохо. Почему? И как по-другому? > Особенно плохо - делить часы на параметры табличной части. Почему? И как по-другому? > 4) Время проведения занятия (число). Ты не путай теплое с мягким, Дата занятия это одно, время занятия это другое. Например на одну и ту же дату может быть и физ подготовка и право - эти дисциплины ведут разные преподаватели. > Также можно рассматривать дату, как пятый параметр, но она есть в шапке документа. Т.е. ты предлагаешь на каждый учебный день отдельный документ? И в этом документе будут все группы учащихся? Т.е. когда создается расписание для группы - то открывать и закрывать десятки документов вместо одного? Что-то я сомневаюсь, что это хорошая идея. > чтобы в одном документе задавалось расписание для одного преподавателя (или группы). У меня сейчас 1 группа - 1 документ. Группа может учится и пять дней и три месяца (или даже больше), допустим в среднем дней двадцать. Ты предлагаешь создать двадцать документов вместо одного? |
|||
96
ADirks
08.11.13
✎
09:04
|
(95) Тебе документов жалко что-ли? Можно вообще запилить 1 док - одно занятие.
Ты же ведь не станешь заставлять пользователей эти документы редактировать? |
|||
97
Пенза58
08.11.13
✎
09:26
|
(96) По идее возможно и редактирование
|
|||
98
ADirks
08.11.13
✎
09:58
|
(97) В таких случаях для редактирования делается отдельный интерфейс. Редактировать непосредственно документы - издевательство над людями.
|
|||
99
Пенза58
08.11.13
✎
11:02
|
(98) > В таких случаях для редактирования делается отдельный интерфейс. Редактировать непосредственно документы - издевательство над людями.
Согласен, но можно и так. |
|||
100
Пенза58
08.11.13
✎
16:16
|
100
|
|||
101
Torquader
09.11.13
✎
00:19
|
(95) Одна форма - это точно. Причём листаться форма должна по дням или неделям. А уже как и что записать, лучше смотреть по частоте выборки.
Если идём от преподавателей, то лучше делать один документ на день занятий преподавателя (их там обычно несколько, но немного), чтобы в нём писалось кого и где он будет вести. Где (то есть комнаты) нам важны только тогда, когда мы ищем свободную, а это будет делать обработка (то есть их по барабану - в одном документе или вообще в текстовом файле). Расписание для групп будет составляться сразу на неделю - в этом случае - тоже выбирать всё будет обработка. Нет, конечно, если очень хочется в одном документе (но сначала вспомним, что в документе не более 9999 строк в dbf-версии), то пожалуйста - пять параметров: Дата, час (пара) занятия, преподаватель, группа, кабинет. |
|||
102
andrewalexk
09.11.13
✎
00:27
|
:) столько инФЫ...проблема...
|
|||
103
Desna
09.11.13
✎
01:33
|
форма.параметр
|
|||
104
xenos
09.11.13
✎
03:25
|
(101)
> Одна форма - это точно. Причём листаться форма должна по дням или неделям. А уже как и что записать, лучше смотреть по частоте выборки. Не совсем понял о чем речь. вроде речь о том как хранить данные, а не как их выводить. > Если идём от преподавателей, то лучше делать один документ на день занятий преподавателя (их там обычно несколько, но немного), чтобы в нём писалось кого и где он будет вести. Идем от группы. Надо печатать расписания типа: http://s017.radikal.ru/i435/1311/f9/382dbf9d54ac.jpg > Где (то есть комнаты) нам важны только тогда, когда мы ищем свободную, а это будет делать обработка (то есть их по барабану - в одном документе или вообще в текстовом файле). Еще они важны при печати. > Расписание для групп будет составляться сразу на неделю - в этом случае - тоже выбирать всё будет обработка. Почему на неделю? Почему не на весь период обучения? > Нет, конечно, если очень хочется в одном документе (но сначала вспомним, что в документе не более 9999 строк в dbf-версии), то пожалуйста - пять параметров: Дата, час (пара) занятия, преподаватель, группа, кабинет. Ну пускай самый большой курс на 100 дней, пускай в среднем по 3-4 урока в день. Итого максимум 300-400 строк. |
|||
105
Andreyyy
09.11.13
✎
05:51
|
(50)(53) В ПриОткрытии() СтатусВозврата(0) и дальше все нужные манипуляции, в конце заканчивающиеся Форма.ВыполнитьВыбор(Результат)
|
|||
106
Злопчинский
10.11.13
✎
01:15
|
..или как вариант - при завершении дочерней обработки (которая немодальная) - вызов незакрытой родительской обработки - в ней отработает ПриПовторномОткрытии() - где можно получить Форма.Параметр... если родительская обработка закрыта - откроется и отработает ПриОткрытии() с получением тгже самого Форма.параметр
. пример подробней можно посмотреть здесь http://infostart.ru/public/17037/ |
|||
107
Torquader
10.11.13
✎
01:22
|
(106) Это называется оповещение, только не всегда можно открыть родительскую обработку, так как нужно знать её строку открытия (ИмяОбработки#УникальныйНомер)
|
|||
108
Злопчинский
10.11.13
✎
01:34
|
(107) ну, без пруда не выловишь и рыбку оттудова... ;-)
|
|||
109
Torquader
10.11.13
✎
02:14
|
(108) Везде соломки не подстелишь.
|
|||
110
Cthulhu
11.11.13
✎
00:12
|
(107),(106): через контекст вызвать 1ску-обработку ожидания процедуры модуля вызвавшей формы и закрыться. предварительно засунув куда надо что надо. см.(11).
бег по кругу?.. |
|||
111
Torquader
11.11.13
✎
21:43
|
(110) Она отрабатывает с ожидаем в пол-секунды, если "зверь" шустрый, то "намышковать" успеет несколько раз.
|
|||
112
Cthulhu
13.11.13
✎
15:55
|
(111): во-первых, не успеет. статистиццки.
во-вторых подстраховаться ни полраза не проблема - табло "падажжblтеееее" с авто-закрытием или тупо в лоб предупреждение... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |