Форум программистов, компьютерный форум, киберфорум
1С: Типовые и стандартные решения
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.52/23: Рейтинг темы: голосов - 23, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 28.07.2014
Сообщений: 13
1

Прикладные объекты/Регистры сведений/РегистрСведенийНаборЗаписей

28.07.2014, 12:59. Показов 4389. Ответов 23
Метки нет (Все метки)

Всем привет, и сразу к делу: проблема в том что код(см. ниже) отрабатывает не совсем корректно, имею ввиду что выдает ошибку, типа:
"
{Обработка.ЗаполнениеГрафика.МодульОбъекта(16)}: Ошибка при вызове метода контекста (Записать)
Набор.Записать();
по причине:
Запись с такими ключевыми полями существует! : ГрафикиРаботы: 22.07.2014 0:00:00, 2 на 2 (Регистр сведений: Графики работы; Номер строки: 19)
"
В данном примере, я заполняю "график работ", но вот беда, хочу изменить, а он ругается...
Коддддд:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Процедура ЗаполнитьГрафик(ДатаНачала, ДатаОкончания, ВыходныеДни,График) Экспорт 
    НачатьТранзакцию();
        Набор = РегистрыСведений.ГрафикиРаботы.СоздатьНаборЗаписей();
        Набор.Отбор.График.Установить(График);
        Набор.Прочитать();
        ЧислоСекундВСутках = 86400;
        
        Дат = ДатаНачала;  
        Пока Дат <= ДатаОкончания Цикл
            Запись = Набор.Добавить();
            Запись.Дата = Дат;
            Запись.Значение = НайдемЗначение(Дат,ДатаНачала,ВыходныеДни);// либо "1" либо "0"
            Запись.График = График;//пятидневка или шестидневка 
            Дат = Дат + ЧислоСекундВСутках;
        КонецЦикла; 
        Набор.Записать();//<<<<<<<<<<<<<<--------------------точнее здесь ругается
    ЗафиксироватьТранзакцию();
КонецПроцедуры
основа для кода была: http://v8.1c.ru/predpriyatie/t... ms_App.htm <-----------------в самом низу примеры))
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.07.2014, 12:59
Ответы с готовыми решениями:

Регистры Сведений
Доброе время суток подскажите пожалуйста...

Регистры сведений и накопления
Все доброго времени суток. Вот читаю уже несколько раз учебку по регистрам 8.2. свединий и...

Регистры сведений. Запросы
1С 8.2 УТ 10.3 Демо.(Обычное приложение) В конфигурации есть Регистр сведений...

Как Удалять Объекты, На Которые Ссылается Независимый Регистр Сведений
Добрый день! Проблема типичная (давно сталкивался), но только сейчас я о ней всерьез задумался....

23
Модератор
Эксперт 1С
3095 / 2782 / 523
Регистрация: 10.03.2011
Сообщений: 10,707
Записей в блоге: 1
28.07.2014, 13:21 2
Опишите все измерения регистра
0
0 / 0 / 0
Регистрация: 28.07.2014
Сообщений: 13
28.07.2014, 13:33  [ТС] 3
Они у меня описаны, это "Дата" - тип дата и "График" - тип строка, а больше измерений нет)
0
Модератор
Эксперт 1С
3095 / 2782 / 523
Регистрация: 10.03.2011
Сообщений: 10,707
Записей в блоге: 1
28.07.2014, 14:33 4
1C
1
2
3
4
5
6
7
8
9
10
11
12
Процедура ЗаполнитьГрафик(ДатаНачала, ДатаОкончания, ВыходныеДни,График) Экспорт 
      ЧислоСекундВСутках = 86400;
       Дат = ДатаНачала;   
        Пока Дат <= ДатаОкончания Цикл
            Менеджер = РегистрыСведений.ГрафикиРаботы.СоздатьМенеджерЗаписи();
            Менеджер.График = График;
            Менеджер.Дата = Дат;
            Менеджер.Значение = НайдемЗначение(Дат,ДатаНачала,ВыходныеДни);// либо "1" либо "0"
            Менеджер.Записать();
            Дат = Дат + ЧислоСекундВСутках;
        КонецЦикла; 
КонецПроцедуры
1
0 / 0 / 0
Регистрация: 28.07.2014
Сообщений: 13
28.07.2014, 14:37  [ТС] 5
Ах, да забыл написать, нужно через НаборЗаписей, через МенеджерЗаписи мне не нужно(хоть и рабочий код, у Чистова почти так же)
Могу скинуть бд?)
0
Модератор
Эксперт 1С
3095 / 2782 / 523
Регистрация: 10.03.2011
Сообщений: 10,707
Записей в блоге: 1
28.07.2014, 14:48 6
Цитата Сообщение от vaprvarpvarp Посмотреть сообщение
Могу скинуть бд?
Накой мне нужна твоя бд...

Если нужно через набор, тогда убери


Набор.Прочитать();
0
0 / 0 / 0
Регистрация: 28.07.2014
Сообщений: 13
28.07.2014, 14:51  [ТС] 7
Так не получается, удаляются все данные с одинаковыми названиями, а если убрать "Отбор", то вообще все удалиться, а мне нужно исправить отрезок данных)
0
Модератор
Эксперт 1С
3095 / 2782 / 523
Регистрация: 10.03.2011
Сообщений: 10,707
Записей в блоге: 1
28.07.2014, 14:59 8
vaprvarpvarp, ну ё маё...

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Процедура ЗаполнитьГрафик(ДатаНачала, ДатаОкончания, ВыходныеДни,График) Экспорт 
    НачатьТранзакцию();
        Дат = ДатаНачала;
        Набор = РегистрыСведений.ГрафикиРаботы.СоздатьНаборЗаписей();
        Набор.Отбор.График.Установить(График);
        Набор.Отбор.Дата.Установить(Дат);
        ЧислоСекундВСутках = 86400;
        
        Пока Дат <= ДатаОкончания Цикл
            Запись = Набор.Добавить();
            Запись.Дата = Дат;
            Запись.Значение = НайдемЗначение(Дат,ДатаНачала,ВыходныеДни);// либо "1" либо "0"
            Запись.График = График;//пятидневка или шестидневка 
            Дат = Дат + ЧислоСекундВСутках;
        КонецЦикла; 
        Набор.Записать();//<<<<<<<<<<<<<<--------------------точнее здесь ругается
    ЗафиксироватьТранзакцию();
КонецПроцедуры
0
0 / 0 / 0
Регистрация: 28.07.2014
Сообщений: 13
28.07.2014, 15:29  [ТС] 9
неа)
тут только одна дата будет)
а нужен отрезок дат и если даже закинуть отбор в цикл все равно будет ругаться как в самом начале...
0
2952 / 1764 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
28.07.2014, 15:59 10
Набор.Прочитать() после отборов, чтоб менеджер существующей записи с Дат попал в набор и заполнить его перед циклом.
0
0 / 0 / 0
Регистрация: 28.07.2014
Сообщений: 13
28.07.2014, 16:42  [ТС] 11
Менеджер мне не нужен, только НаборЗаписей или я вас не правильно понял?
0
Модератор
Эксперт 1С
3095 / 2782 / 523
Регистрация: 10.03.2011
Сообщений: 10,707
Записей в блоге: 1
28.07.2014, 19:46 12

Не по теме:

duk337, vaprvarpvarp, а вам не кажется что это хрень какая то получается?



Добавлено через 2 минуты
vaprvarpvarp, т.е. тебе нужно 86400 записей в регистр в сутки?
0
0 / 0 / 0
Регистрация: 28.07.2014
Сообщений: 13
29.07.2014, 12:23  [ТС] 13
Нет, может через пример будет понятнее.
Пример:
Пусть у нас есть заполненный РегистрСведений.ГрафикиРаботы, допустим таким образом:
Дата График Значение
21.07.2014 пятидневка 0
22.07.2014 пятидневка 0
23.07.2014 пятидневка 0
24.07.2014 пятидневка 0
25.07.2014 пятидневка 0
26.07.2014 пятидневка 1
27.07.2014 пятидневка 1
То есть, "1" - обозначает выходной, мы хотим сделать, скажем, пятидневку по британскому стилю(типа с вторника рабочий или как там):
Дата График Значение
21.07.2014 пятидневка 1
22.07.2014 пятидневка 0
23.07.2014 пятидневка 0
24.07.2014 пятидневка 0
25.07.2014 пятидневка 0
26.07.2014 пятидневка 0
27.07.2014 пятидневка 1
Вот, через "МенеджерЗаписи" если делать, то происходит замена, как написано в описании:
МенеджерЗаписи.Записать();
В результате выполнения этого кода новая запись будет добавлена в регистр, или, если регистр уже содержит запись с выбранными значениями измерений «Объект» и «Свойство», - существующая запись будет заменена новой.
Но такое же описание есть и у "НабораЗаписей":
НаборЗаписей.Записать();
В результате выполнения этого кода новые записи будут добавлены в регистр, или, если регистр уже содержит записи с указанным значением измерения «Объект» (по которому установлен отбор в наборе записей), - существующие записи будут заменены новыми.
Но вот, не задача если мы идём по коду(по шагам), то как раз, на строку Набор.Записать(); и будет ругаться(см. ошибку в первом сообщении в теме)
Транзакцию можно ли использовать и для чего их лучше использовать?
Dethmontt, это шаг(86400 сек = 1 сутки), можно использовать цикл for, но мне удобно в данной примере использовать цикл while)
0
Модератор
Эксперт 1С
3095 / 2782 / 523
Регистрация: 10.03.2011
Сообщений: 10,707
Записей в блоге: 1
29.07.2014, 13:15 14
vaprvarpvarp, Представь набор как таблицу

После метода прочитать() она заполняется данными из регистра (т.е. допустим в регистре есть запись -
21.07.2014 | пятидневка | 1)

Набор после метода прочитать() содержит одну запись (см. выше какую)

Запись = Набор.Добавить() - добавляет новую запись в набор (новую строку в таблицу)

И если в твоем цикле появляется значение вида:

//Цикл до значения 21.07.2014
Запись = Набор.Добавить();
Запись.Дата = 21.07.2014;
Запись.График = "пятидневка";
Запись.Значение = 1;


Вопрос? Сколько сейчас одинаковых записей в наборе?????????????
0
0 / 0 / 0
Регистрация: 28.07.2014
Сообщений: 13
29.07.2014, 13:59  [ТС] 15
По логике вещей, должна быть одна:
21.07.2014 | пятидневка | 1
Но он выдает ошибку... и при этом не записывает
0
Модератор
Эксперт 1С
3095 / 2782 / 523
Регистрация: 10.03.2011
Сообщений: 10,707
Записей в блоге: 1
29.07.2014, 14:09 16
vaprvarpvarp, и где тут логика?
В таблице есть уже строка со значением 1
Ты добавляешь еще одну строку со значением 1

Сколько строк в таблице со значением 1 ???

Набор это не регистр - это область памяти, с которой ТЫ должен работать, никто за тебя ничего удалять зачищать не будет если ты этого не просишь!!!

Добавлено через 4 минуты
Ок. не веришь мне, проверь сам

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Процедура ЗаполнитьГрафик(ДатаНачала, ДатаОкончания, ВыходныеДни,График) Экспорт 
        Набор = РегистрыСведений.ГрафикиРаботы.СоздатьНаборЗаписей();
        Набор.Отбор.График.Установить(График);
        Набор.Прочитать();
        ЧислоСекундВСутках = 86400;
        
        Дат = ДатаНачала;   
        Пока Дат <= ДатаОкончания Цикл
            Запись = Набор.Добавить();
            Запись.Дата = Дат;
            Запись.Значение = НайдемЗначение(Дат,ДатаНачала,ВыходныеДни);// либо "1" либо "0"
            Запись.График = График;//пятидневка или шестидневка 
            Дат = Дат + ЧислоСекундВСутках;
        КонецЦикла; 
        сч=1;
        Для каждого стрЗапись из Набор Цикл
             Сообщить("Начало строка "+сч+" ---------------------------"); 
             Сообщить("График - "+стрЗапись.График);
             Сообщить("Дата - "+стрЗапись.Дата);
             Сообщить("Значение - "+стрЗапись.Значение);
             Сообщить("Конец строки "+сч+" ------------------------------------");
             сч=сч+1;
        КонецЦикла;
        //Записывать не будем
        //Набор.Записать();//<<<<<<<<<<<<<<--------------------точнее здесь ругается
КонецПроцедуры
0
0 / 0 / 0
Регистрация: 28.07.2014
Сообщений: 13
29.07.2014, 14:14  [ТС] 17
Опустошил регистр, добавил одну запись + решил добавить точно такую же запись ->ошибка, ошибка метод "Записать()"
0
Модератор
Эксперт 1С
3095 / 2782 / 523
Регистрация: 10.03.2011
Сообщений: 10,707
Записей в блоге: 1
29.07.2014, 14:15 18
vaprvarpvarp, ВАУ!!! А ошибка в первом посте тебе об этом не говорила?????????????
Цитата Сообщение от vaprvarpvarp Посмотреть сообщение
Запись с такими ключевыми полями существует! : ГрафикиРаботы: 22.07.2014 0:00:00, 2 на 2 (Регистр сведений: Графики работы; Номер строки: 19)
0
0 / 0 / 0
Регистрация: 28.07.2014
Сообщений: 13
29.07.2014, 14:33  [ТС] 19
Начало строка 1 ---------------------------
График - Пятидневка
Дата - 29.07.2014 0:00:00
Значение - Да
Конец строки 1 ------------------------------------
Начало строка 2 ---------------------------
График - Пятидневка
Дата - 29.07.2014 0:00:00
Значение - Да
Конец строки 2 ------------------------------------
Обработка завершена!

Dethmontt, вы сказали:
Цитата Сообщение от Dethmontt Посмотреть сообщение
Набор это не регистр - это область памяти, с которой ТЫ должен работать, никто за тебя ничего удалять зачищать не будет если ты этого не просишь!!!
а вот http://v8.1c.ru/predpriyatie/t... ms_App.htm говорит, что:
НаборЗаписей.Записать();
В результате выполнения этого кода новые записи будут добавлены в регистр, или, если регистр уже содержит записи с указанным значением измерения «Объект» (по которому установлен отбор в наборе записей), - существующие записи будут заменены новыми.
То есть в наборе есть 2 одинаковых записи и мы их записываем в наш регистр и тут ошибка? ведь так? Тогда вопрос: каким образом это решить через "НаборЗаписей"?
0
Модератор
Эксперт 1С
3095 / 2782 / 523
Регистрация: 10.03.2011
Сообщений: 10,707
Записей в блоге: 1
29.07.2014, 16:45 20
vaprvarpvarp, почему именно через набор записей? Ну не его это задача...

Добавлено через 1 минуту
Получить готовую ТаблицуЗначений и загрузить в набор для записи
Цитата Сообщение от vaprvarpvarp Посмотреть сообщение
Набор это не регистр - это область памяти, с которой ТЫ должен работать, никто за тебя ничего удалять зачищать не будет если ты этого не просишь!!!
РегистрСведенийНаборЗаписей:

Описание:

Предназначен для операций с наборами записей регистра сведений в памяти. Представляет собой коллекцию записей регистра сведений. Позволяет выполнять считывание записей по определенному условию отбора из базы данных, добавлять, удалять и изменять записи в наборе. Также может быть выполнена запись в базе данных по определенному условию. При записи может выполняться замещение всех имеющихся в базе данных записей по данному условию на записи, содержащиеся в наборе.
Максимальное число записей в наборе 999999999
Синтакс-помощник(c)

Добавлено через 1 минуту
Цитата Сообщение от Dethmontt Посмотреть сообщение
Также может быть выполнена запись в базе данных по определенному условию
По отбору (у тебя же нет отбора по дате!!!!)
Цитата Сообщение от Dethmontt Посмотреть сообщение
При записи может выполняться замещение всех имеющихся в базе данных записей по данному условию на записи, содержащиеся в наборе.
!!!!!!!!!!
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.07.2014, 16:45

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Что такое регистры микропроцессора? Перечислите регистры общего назначения
Помогите пожалуйста решить задания по TASM 1) Что такое регистры микропроцессора? Перечислите...

прикладные программы
Где-нибудь можно найти исходники реальных используемых прикладных программ с комментариями или...

Прикладные науки
Всем доброго времени суток! Приступил к изучению программирования в общем и С++ в частности, и...

Прикладные программы по ТОЭ
Просмотрите - ниже пять (пока) программ. _1. Решение систем уравнений по Кирхгофу (кому лень...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.