Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
nastena_r_v
47 / 47 / 1
Регистрация: 03.05.2012
Сообщений: 266
1

Добавление данных из справочника в регистр сведений

10.05.2016, 20:23. Просмотров 2488. Ответов 63
Метки нет (Все метки)

Здравствуйте всем, вопрос конечно я думаю для профи - легкий, но для новичка (для меня) - не понятен.*
Конфигурация УПП. Есть справочник Должности и регистр сведений ДолжностныеКомпетенцииРабтоников. В справочнике в табличное поле добавляются данные о компетенциях,эти данные записываются в регистр сведений, если допустим уже созданную строку изменить, то в регистре она соответственно тоже изменится, а не добавится новая. Регистр был не периодический, сделала периодичным в пределах дня. Вопрос: как сделать, чтоб при изменении строки с данными компетенции в справочнике, в регистр сведений добавлялась новая строка, а не изменялась предыдущая.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2016, 20:23
Ответы с готовыми решениями:

Табличная часть справочника и регистр сведений
Здравствуйте. Пытаюсь при закрытии элемента справочника записать значения из...

Регистр сведений «Списанные материалы из эксплуатации». Почему регистр сведений, а не регистр накопления?
Существует Регистр сведений «Списанные материалы из эксплуатации». Регистр...

Регистр сведений. Добавление записи
Есть независимый, непериодический регистр сведений. Добавляю запись...

Регистр сведений. Ошибка получения данных
Подскажите в чем ошибка? Код из общего модуля Функция...

Вывод в табличную часть справочника данных из регистра сведений
Здравствуйте! Есть справочник и РС. Надо в табличную часть справочника вывести...

63
nastena_r_v
47 / 47 / 1
Регистрация: 03.05.2012
Сообщений: 266
12.05.2016, 20:08  [ТС] 21
GreenkA, Я изменяла Должностные компетенции, Вы правы. Этот регистр используется только в этом справочнике и в документе Аттестация сотрудников, но это не критично. Ну можно я думаю и сделать компетенции ресурсом.
0
nastena_r_v
47 / 47 / 1
Регистрация: 03.05.2012
Сообщений: 266
12.05.2016, 20:11  [ТС] 22
Действие - перечисления.ВидыДействияСНачислением, Периодичность - строка
0
Миниатюры
Добавление данных из справочника в регистр сведений  
GreenkA
Модератор
Эксперт 1С
2313 / 1795 / 513
Регистрация: 25.06.2009
Сообщений: 6,595
12.05.2016, 20:12 23
Лучший ответ Сообщение было отмечено nastena_r_v как решение

Решение

nastena_r_v, так какая структура регистр теперь? может и не надо ничего изменять.
Короче пример кода. Только измените запрос под ваш регистр. Добавьте в ТабличноеПоле1 колонку МеткаИзменения, тип Булево, в свойствах уберите видимость:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Процедура ПриОткрытии()
//тут весь ваш другой код
//..
    ЗаполнитьТаблицуКомпетенций();
КонецПроцедуры // ПриОткрытии()
 
Процедура ЗаполнитьТаблицуКомпетенций()
    ТабличноеПоле1.Очистить();
//в запросе выберите все нужные поля
    Запрос = Новый Запрос("ВЫБРАТЬ
                          | ДолжностныеКомпетенцииРаботниковСрезПоследних.Должность,
                          | ДолжностныеКомпетенцииРаботниковСрезПоследних.Компетенция,
                          | ДолжностныеКомпетенцииРаботниковСрезПоследних.Период
                          |ИЗ
                          | РегистрСведений.ДолжностныеКомпетенцииРаботников.СрезПоследних(, Должность = &Должность) КАК ДолжностныеКомпетенцииРаботниковСрезПоследних");
    Запрос.УстановитьПараметр("Должность", Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        ЗаполнитьЗначенияСвойств(ТабличноеПоле1.Добавить(), Выборка);       
    КонецЦикла;
                          
КонецПроцедуры
 
//при изменении ТабличноеПоле1 - меняем метку строки
Процедура ТабличноеПоле1ПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
    ТекущаяСтрока = ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные;
    Если ТекущаяСтрока <> Неопределено Тогда
        ТекущаяСтрока.МеткаИзменения = Истина;
    КонецЕсли;
КонецПроцедуры
 
Процедура ПриЗаписи(Отказ)
    ИзмененныеСтрокиТаблицы = ТабличноеПоле1.НайтиСтроки(Новый Структура("МеткаИзменения",Истина));
    Для к = 0 по ИзмененныеСтрокиТаблицы.Количество() - 1 Цикл
        НоваяЗапись = РегистрыСведений.ДолжностныеКомпетенцииРаботников.СоздатьМенеджерЗаписи();
        НоваяЗапись.Компетенция = ИзмененныеСтрокиТаблицы[к].Компетенция;
        НоваяЗапись.Должность = Ссылка;
        НоваяЗапись.Период = ТекущаяДата();
        НоваяЗапись.Записать();
    КонецЦикла;
КонецПроцедуры
Добавлено через 51 секунду
nastena_r_v, перенесите все реквизиты в ресурсы хотя бы. Реквизиты носят только информационный характер.
1
nastena_r_v
47 / 47 / 1
Регистрация: 03.05.2012
Сообщений: 266
12.05.2016, 20:35  [ТС] 24
GreenkA, спасибо большое. Но все-таки для чего эта метка, я не понимаю.

Добавлено через 10 минут
GreenkA, и в процедуре при записи в цикл не попадает, и соответственно данные в регистр не записываются
0
GreenkA
Модератор
Эксперт 1С
2313 / 1795 / 513
Регистрация: 25.06.2009
Сообщений: 6,595
12.05.2016, 20:36 25
Лучший ответ Сообщение было отмечено nastena_r_v как решение

Решение

nastena_r_v, ну у вас будет таблица заполняться данными из регистра и без метки будут каждый раз перезаписываться все строки таблицы, даже если их не меняли. А вам надо только новые строки записывать в регистр и измененные
1
nastena_r_v
47 / 47 / 1
Регистрация: 03.05.2012
Сообщений: 266
12.05.2016, 20:42  [ТС] 26
GreenkA, все-равно в цикл не попадает.
С массивами не очень разбираюсь
0
GreenkA
Модератор
Эксперт 1С
2313 / 1795 / 513
Регистрация: 25.06.2009
Сообщений: 6,595
12.05.2016, 21:13 27
nastena_r_v, а вы меняли таблицу? Связали событие ПриОкончанииРедактирования() ТабличноеПоле1 с кодом процедуры выставления Метки в Истину?
1
nastena_r_v
47 / 47 / 1
Регистрация: 03.05.2012
Сообщений: 266
13.05.2016, 08:58  [ТС] 28
GreenkA, да да, разобралась уже в чем проблема была. Спасибо большое. Буду дальше модифицировать код

Добавлено через 11 часов 28 минут
GreenkA, подскажите, на счет ресурса по компетенции. Стоит это изменять? Надо измерение компетенции делать ресурсом, и если да, то почему?
0
GreenkA
Модератор
Эксперт 1С
2313 / 1795 / 513
Регистрация: 25.06.2009
Сообщений: 6,595
13.05.2016, 09:44 29
nastena_r_v, а почему вы делали регистр периодическим? Для того, чтобы был доступен СрезПоследних? СрезПоследних дает последние записи(со значениями ресурсов) на дату по каждому набору измерений, т.е. при отсутствии ресурсов нет смысла в СрезеПоследних.
1
nastena_r_v
47 / 47 / 1
Регистрация: 03.05.2012
Сообщений: 266
13.05.2016, 10:53  [ТС] 30
GreenkA, да, для этого. Но я не меняла компетенции на ресурс, и последнее значение берется.
и еще, что дает галка основной отбор по периоду в регистре?
0
GreenkA
Модератор
Эксперт 1С
2313 / 1795 / 513
Регистрация: 25.06.2009
Сообщений: 6,595
13.05.2016, 13:23 31
Цитата Сообщение от nastena_r_v Посмотреть сообщение
и еще, что дает галка основной отбор по периоду в регистре?
Основной отбор у регистра сведений

Цитата Сообщение от nastena_r_v Посмотреть сообщение
Но я не меняла компетенции на ресурс, и последнее значение берется.
Последнее значение чего? Компетенции по Должности? Одна запись только?
1
nastena_r_v
47 / 47 / 1
Регистрация: 03.05.2012
Сообщений: 266
15.05.2016, 08:13  [ТС] 32
GreenkA, да, компетенции по должности. Ну если я одну добавила или изменила, то да.
0
GreenkA
Модератор
Эксперт 1С
2313 / 1795 / 513
Регистрация: 25.06.2009
Сообщений: 6,595
15.05.2016, 08:44 33
nastena_r_v, все-равно не понимаю, зачем регистр без ресурсов делать периодическим...
1
nastena_r_v
47 / 47 / 1
Регистрация: 03.05.2012
Сообщений: 266
15.05.2016, 12:37  [ТС] 34
GreenkA, Ладно, с этим разберусь. Подскажите еще пожалуйста. В процедуру при открытии добавляю код:
1C
1
2
3
4
СтрокаТП = ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные;
    Если СтрокаТП.Действие = Перечисления.ВидыДействияСНачислением.Прекратить Тогда
        СтрокаТП.Очистить();
    КонецЕсли;
При отладке, говорит, что СтрокаТП.Действие - Значение не является значением объектного типа. Почему?
Хочу сделать: что при открытии, если у строки колонка дествие - прекратить, то ее не отображать.
0
GreenkA
Модератор
Эксперт 1С
2313 / 1795 / 513
Регистрация: 25.06.2009
Сообщений: 6,595
15.05.2016, 12:39 35
nastena_r_v, проверяйте на СтрокаТП <> Неопределено.
ТекущиеДанные - определено для текущей активной строки. При открытии у вас не будет активной строки, стало быть ТекущиеДанные = Неопределено.
1
nastena_r_v
47 / 47 / 1
Регистрация: 03.05.2012
Сообщений: 266
15.05.2016, 20:23  [ТС] 36
GreenkA, то есть поставить условие после присваивания к строкеТП текущих данных, типа Если строкаТП <> неопределено, тогда выполнять дальше? Или я не правильно Вас поняла?
0
GreenkA
Модератор
Эксперт 1С
2313 / 1795 / 513
Регистрация: 25.06.2009
Сообщений: 6,595
15.05.2016, 20:39 37
nastena_r_v, правильно.
1
nastena_r_v
47 / 47 / 1
Регистрация: 03.05.2012
Сообщений: 266
20.05.2016, 21:55  [ТС] 38
GreenkA, Здравствуйте, еще раз. У меня по этой же теме к Вам пару вопросов.
1) На мой пост #36, Вы ответили, что это правильно, но почему-то в условие программа даже не заходит, когда на самом деле в поле действие присутствует перечисление Прекратить, и даже не в одной строке. Получилось так:
1C
1
2
3
4
5
Если СтрокаТП <> Неопределено Тогда
        Если СтрокаТП.Действие = Перечисления.ВидыДействияСНачислением.Прекратить Тогда
            СтрокаТП.Очистить();
        КонецЕсли;
    КонецЕсли;
И он не срабатывает, подскажите, может както по другому можно сделать, чтоб если при открытии в полях Действие есть перечисление - прекратить, оно не отображалось.

И второй вопрос
2) как Вы заметили, я добавила еще поле. Действие. Его тип - Перечисления.ВидыДействияСНачислением. Т.е. для компетенции можно выбрать: начать, изменить, прекратить, и т.д.
Если я в уже имеющейся строке в табличном поле справочника изменю поле действие, то оно изменит эту же строку и в регистре, а не добавит новую, как делает это с компетенциями. Почему?
Добавила в выборку это поле, и в процедуру при записи добавила строку:
1C
1
    НоваяЗапись.Действие = ИзмененныеСтрокиТаблицы[к].Действие;
Все-равно не хочет добавлять новое
0
GreenkA
Модератор
Эксперт 1С
2313 / 1795 / 513
Регистрация: 25.06.2009
Сообщений: 6,595
20.05.2016, 22:19 39
Цитата Сообщение от nastena_r_v Посмотреть сообщение
И он не срабатывает, подскажите, может както по другому можно сделать, чтоб если при открытии в полях Действие есть перечисление - прекратить, оно не отображалось.
при открытии вы же заполняете данными из регистра табличное поле? Почему бы там, в запросе не сделать отбор по действию...

Цитата Сообщение от nastena_r_v Посмотреть сообщение
то оно изменит эту же строку и в регистре, а не добавит новую, как делает это с компетенциями. Почему?
покажите код заполнения табличного поля из регистра и записи в регистр.
0
nastena_r_v
47 / 47 / 1
Регистрация: 03.05.2012
Сообщений: 266
20.05.2016, 22:19  [ТС] 40
Здравствуйте, подскажите, как можно реализовать обработку по заполнению выбранных пользователем должностей, табличного поля компетенции справочника "должности", компетенциями?
Объясню понятнее. В справочнике "должности" есть табличное поле с компетенциями, которые есть у данной должности. Надо, отобрать нужные должности, и заполнить их выбранными компетенциями, со справочника - компетенции. Подскажите, как можно сделать? Я пока что не представляю. За ранее Всем спасибо.
П.С. простите за прямоту, но можно без сарказма и ехидничества. Я только учусь...
0
20.05.2016, 22:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2016, 22:19

Регистр сведений. Регистр накоплений
Здравствуйте! Нужна помощь в создании (и настройки работы) регистра сведений и...

Регистр сведений
Здравствуйте все!!! Подскажите вот что. Я создал три регистра:...

Регистр сведений
Нужна помощь в оптимизации запроса... есть запрос: Запрос = Новый Запрос;...


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

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

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