![]() |
|
книга Решение расчетных задач не хватает памяти | ☑ | ||
---|---|---|---|---|
0
lesstat
13.05.12
✎
10:08
|
проц Core 2 Duo памяти 2 гига. По книге "Конфигурирование в системе 1с:предприятие 8 решение расчетных задач" создал справочник "график работы" далее по книге его просят заполнить за 2006 и 2007 годы, там кнопка есть для этого, но когда запускаю аполнение выходит ошибка не хватает памяти. пробывал даже за неделю заполнить , все равно такая же ошибка. Кто с этим сталкивался, ведь многие наверное учились по этой книге?
|
|||
1
lesstat
13.05.12
✎
10:08
|
зы движок 1С 8.2 , управляемое приложение отключил
|
|||
2
НовыйАдмин
13.05.12
✎
10:13
|
Скорее всего зацикливание где-то у тебя. Скинь код кнопки, искать книжку долго.
|
|||
3
lesstat
13.05.12
✎
10:22
|
////СамаКнопка
Процедура КоманднаяПанельКалендаряЗаполнитьНажатие(Элемент) Если ЭтоНовый() Тогда Предупреждение("Перед заполнением график необходимо записать!"); Возврат КонецЕсли; ИнтервалПоказа = Новый НастройкаПериода(); ИнтервалПоказа.ДатаНачала = Календарь.Отбор.Дата.ЗначениеС; ИнтервалПоказа.ДатаОкончания = Календарь.Отбор.Дата.ЗначениеПо; ИнтервалПоказа.ВариантНачала = ВариантГраницыИнтервала.КонкретнаяДата; ИнтервалПоказа.ВариантОкончания = ВариантГраницыИнтервала.КонкретнаяДата; //Вызываем диалог длч выбора интервала Если ИнтервалПоказа.Редактировать() Тогда ЗаполнитьКалендарьЗаИнтервал(ИнтервалПоказа); Иначе Возврат; КонецЕсли; КонецПроцедуры /////ОстальныеПроцедуры в этой же форме Процедура ЗаполнитьКалендарьЗаИнтервал(Интервал) Экспорт сДлинаСуток =86400; //в секундах ДатаНачалаИнтервала = Интервал.ПолучитьДатуНачала(); ДатаОкончанияИнтервала = Интервал.ПолучитьДатуОкончания(); ТекущийДень = датаНачалаИнтервала; НаборЗаписейКалендарь = РегистрыСведений.ГрафикРаботы.СоздатьНаборЗаписей(); НаборзаписейКалендарь.Отбор.ГрафикРаботы.Установить(Ссылка); НаборЗаписейКалендарь.Прочитать(); ЗаписейВНаборе = НаборЗаписейКалендарь.Количество()-1; Для инд = 0 по ЗаписейВНаборе Цикл ДеньКалендаря = НаборзаписейКалендарь[инд]; Если ДеньКалендаря.Дата < ДатаНачалаИнтервала Тогда Продолжить ИначеЕсли ДеньКалендаря.Дата = Текущийдень Тогда Если ДеньЯвляетсяРабочим(ТекущийДень) Тогда ДеньКалендаря.значение = 1; Иначе ДеньКалендаря.Значение = 0; КонецЕсли; текущийДень = ТекущийДень+сДлинаСуток; Иначе Пока ТекущийДень < Мин(ДеньКалендаря.Дата,ДатаОкончанияИнтервала) Цикл НовыйДень = НаборЗаписейКалендарь.Добавить(); НовыйДень.ГрафикРаботы = Ссылка; НовыйДень.Дата =ТекущийДень; Если ДеньЯвляетсяРабочим(ТекущийДень) Тогда НовыйДень.Значение = 1; Иначе НовыйДень.Значение = 0; КонецЕсли; ТекущийДень = текущийдень+сДлинаСуток; КонецЦикла; Если ДеньКалендаря.Дата > ДатаОкончанияИнтервала Тогда Прервать ИначеЕсли ДеньЯвляетсярабочим(ТекущийДень) Тогда ДеньКалендаря.Значение = 1; Иначе ДеньКалендаря.Значение = 0; КонецЕсли; ТекущийДень = ТекущийДень+сДлинаСуток; КонецЕсли; КонецЦикла;// по записям набора Пока ТекущийДень < ДатаОкончанияИнтервала Цикл НовыйДень = НаборЗаписейКалендарь.Добавить(); НовыйДень.ГрафикРаботы = Ссылка; Если деньЯвляетсярабочим(ТекущийДень) Тогда НовыйДень.Значение = 1; Иначе НовыйДень.Значение = 0; КонецЕсли; НовыйДень = ТекущийДень+сДлинаСуток; КонецЦикла; КонецПроцедуры /////////////////// Процедура ИзменитьИнтервалПоказаКалендаря(Кнопка) ИнтервалПоказа = новый НастройкаПериода(); ИнтервалПоказа.ДатаНачала = Календарь.Отбор.Дата.ЗначениеС; ИнтервалПоказа.ДатаОкончания =Календарь.Отбор.Дата.ЗначениеПо; ИнтервалПоказа.ВариантНачала = ВариантГраницыИнтервала.КонкретнаяДата; ИнтервалПоказа.ВариантОкончания = ВариантГраницыИнтервала.КонкретнаяДата; Если ИнтервалПоказа.Редактировать() Тогда УстановитьОтборВКалендаре(ИнтервалПоказа.ПолучитьДатуНачала(),ИнтервалПоказа.ПолучитьДатуОкончания()); КонецЕсли; КонецПроцедуры Функция ДеньЯвляетсяРабочим(ПроверяемаяДата) Возврат ?(Найти(ВыходныеДни,Строка(деньнедели(ПроверяемаяДата))) >0,Ложь,Истина); КонецФункции /////////////////// Процедура ДниНеделиПриИзмененииПометки(Элемент) ЭлементСписка = Элемент.ТекущаяСтрока; Если ЭлементСписка.Пометка Тогда Если Найти(ВыходныеДни,ЭлементСписка.Значение) = 0 Тогда ВыходныеДни = ВыходныеДни + ЭлементСписка.Значение; КонецЕсли; Иначе ВыходныеДни = СтрЗаменить(ВыходныеДни,ЭлементСписка.Значение,""); КонецЕсли; КонецПроцедуры ////////////////////// ПРоцедура УстановитьОтборВКалендаре(ДатаНачалаИнтервалаКалендаря,ДатаОкончанияКалендаря) Календарь.Отбор.Дата.ЗначениеС = ДатаНачалаИнтервалаКалендаря; Календарь.Отбор.Дата.ЗначениеПо = ДатаОкончанияКалендаря; Если НЕ ЗначениеЗаполнено(ДатаНачалаИнтервалаКалендаря) и НЕ ЗначениеЗаполнено(ДатаОкончанияКалендаря) Тогда Календарь.Отбор.Дата.Использование = Ложь; Иначе Если НЕ ЗначениеЗаполнено(ДатаНачалаИнтервалаКалендаря) Тогда Календарь.Отбор.Дата.ВидСравнения = ВидСравнения.МеньшеИЛИРавно; ИначеЕсли Не ЗначениеЗаполнено(ДатаОкончанияКалендаря) Тогда Календарь.Отбор.Дата.ВидСравнения = ВидСравнения.БольшеИлиРавно; Иначе Календарь.Отбор.Дата.ВидСравнения = ВидСравнения.ИнтервалВключаяГраницы; КонецЕсли; Календарь.Отбор.Дата.Использование = Истина; КонецЕсли; КонецПроцедуры ///////////////////////// Процедура ПриОткрытии() ТекущийДень = НачалоНедели(ТекущаяДата());// начнем с понедельника сДлинаСуток = 86400; //в секундах Для Сч = 1 по 7 Цикл НазваниеДняНедели = Формат(ТекущийДень,"ДФ=дддд"); ДниНедели.Добавить(Строка(ДеньНедели(ТекущийДень)),Врег(Лев(НазваниеДняНедели,1))+Сред(НазваниеДняНедели,2)); ТекущийДень = ТекущийДень + сДлинаСуток; КонецЦикла; // расставляем пометки для выходных дней графика Для Сч=1 ПО СтрДлина(ВыходныеДни) Цикл ДниНедели.НайтиПоЗначению(Сред(ВыходныеДни,Сч,1)).Пометка = Истина; КонецЦикла; //Выставляем отбор в списке дней календаря(регистр сведений) //отбираем дни нашего графика Календарь.Отбор.ГрафикРаботы.Установить(Ссылка); //отбираем дни текущего месяца УстановитьОтборВКалендаре(НачалоМесяца(ТекущаяДата()),КонецМесяца(ТекущаяДата())); КонецПроцедуры |
|||
4
lesstat
13.05.12
✎
10:27
|
У кого то были такие траблы когда занимались по этой книге?
|
|||
5
НовыйАдмин
13.05.12
✎
10:28
|
Я не понял какая именно процедура, но вот это вроде не правильно
Пока ТекущийДень < ДатаОкончанияИнтервала Цикл НовыйДень = НаборЗаписейКалендарь.Добавить(); НовыйДень.ГрафикРаботы = Ссылка; Если деньЯвляетсярабочим(ТекущийДень) Тогда НовыйДень.Значение = 1; Иначе НовыйДень.Значение = 0; КонецЕсли; НовыйДень = ТекущийДень+сДлинаСуток; КонецЦикла; В конце НовыйДень присваиваешь, а цикл по переменной ТекущийДень |
|||
6
lesstat
13.05.12
✎
10:29
|
спасибо посмотрю, отпишусь
|
|||
7
lesstat
14.05.12
✎
16:35
|
(5) Изменил, всеравно вылетает не хватает памяти
|
|||
8
aleks-id
14.05.12
✎
16:37
|
(7) код в студию
|
|||
9
aleks-id
14.05.12
✎
16:38
|
по идее надо
ТекущийДень = КонецДня(ТекущийДень)+1; |
|||
10
lesstat
14.05.12
✎
17:45
|
Капец, куда смотрел когда с книги код переписывал не знаю, надо было
НаборЗаписейКалендаь.Записать() толко теперь при нажатии заполнитть выходит сообщение (причем за любой период) запись с такими ключевыми полями уже существует ГрафикРаботы(Это регистр сведений) номер строки 2, хотя захожу в этот регистр а он вообще пустой нет там записей вообще |
|||
11
НовыйАдмин
14.05.12
✎
19:13
|
Так поставь в отладчике остановку по ошибке и посмотри что за значения для начала.
|
|||
12
lesstat
14.05.12
✎
19:55
|
все решилось
|
|||
13
НовыйАдмин
14.05.12
✎
20:23
|
В чем был косяк нашел или просто заново написал по книге?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |