|
Модуль не записывает данные в периодический независимый регистр сведений | ☑ | ||
---|---|---|---|---|
0
Volhvus
26.07.12
✎
12:26
|
Добрый день Форумчане!
Возникла маленькая проблема при доработки кода. Есть периодический независимый регистр сведений, в нем одно измерение и один ресурс. Пытаюсь в него записать данные из таблицы значений. В отладчике смотрел, набор записей соответствует тому, что нужно записать в регистр сведений, но при завершении выполнения кода изменений в регистре сведений не происходит. Выполняется следующий код: .............. ТаблицаЗначений=Новый ТаблицаЗначений; ТаблицаЗначений.Колонки.Добавить("Проект",,"Проект"); ТаблицаЗначений.Колонки.Добавить("Период",,"Период"); ТаблицаЗначений.Колонки.Добавить("КоэффициентУчастия",,"КоэффициентУчастия"); Пока УчастиеСотрудника.Следующий() Цикл Стр=ТаблицаЗначений.Добавить(); Стр.Проект=УчастиеСотрудника.Проект; Стр.Период=УчастиеСотрудника.Период; Стр.КоэффициентУчастия=УчастиеСотрудника.Сумма; КонецЦикла; НаборЗаписей= РегистрыСведений.ВспомогательныйУчастиеВПроектах.СоздатьНаборЗаписей(); НаборЗаписей.Загрузить(ТаблицаЗначений); НаборЗаписей.Записать(); Оное происходит даже когда я просто хочу его очистить, Выполняю код: НаборЗаписей= РегистрыСведений.ВспомогательныйУчастиеВПроектах.СоздатьНаборЗаписей(); НаборЗаписей.Записать(); результат 0, изменений в регистре не происходит В чем проблема понять не могу. Платформа 1С:Предприятие 8.2 (8.2.15.289). Есть у кого предположения? |
|||
1
Ненавижу 1С
гуру
26.07.12
✎
12:27
|
может стоит отбор по периоду делать?
|
|||
2
Volhvus
26.07.12
✎
12:29
|
Пробывал, результат тот же.Но при простом удалении всех записей тоже ничего не происходит?
|
|||
3
Саша80
26.07.12
✎
12:54
|
забыл кое что
НаборЗаписей= РегистрыСведений.ВспомогательныйУчастиеВПроектах.СоздатьНаборЗаписей(); НоваяЗапись=НаборЗаписей.Добавить(); НаборЗаписей.Загрузить(ТаблицаЗначений); НаборЗаписей.Записать(); |
|||
4
Саша80
26.07.12
✎
12:55
|
как то так
|
|||
5
Саша80
26.07.12
✎
12:56
|
или НоваяЗапись.Проект=стр.Проект и т.д.
|
|||
6
Volhvus
26.07.12
✎
13:16
|
3- Добавить() нужно если идет набор записей отдельными строками, я же загружаю сразу всю таблицу значений. Набор записей и Добавить() и Загрузить() формируется один и тот же. Вопрос в том, что полученный набор записей не записывается в регистр сведений и логическое объяснение я этому пока не могу найти, типы загружаемых данных соответствуют.
|
|||
7
Саша80
26.07.12
✎
13:36
|
НаборЗаписей= РегистрыСведений.ВспомогательныйУчастиеВПроектах.СоздатьНаборЗаписей();
Пока УчастиеСотрудника.Следующий() Цикл НоваяЗапись=НаборЗаписей.Добавить(); НоваяЗапись.Проект=УчастиеСотрудника.Проект; НоваяЗапись.Период=УчастиеСотрудника.Период; НоваяЗапись.КоэффициентУчастия=УчастиеСотрудника.Сумма; КонецЦикла; НаборЗаписей.Записать(); |
|||
8
Саша80
26.07.12
✎
13:36
|
а если как то так?
|
|||
9
Volhvus
26.07.12
✎
13:40
|
Я про то что не важно каким методом сформирован набор записей, и тем что предложено через Добавить() и через Загрузить() набор записей формируется один и тот же, проблема в том что после Записать() в регистре ровным счетом ничего не меняется.
|
|||
10
Саша80
26.07.12
✎
13:44
|
хм..тогда не знаю...отбор какой может использовать
|
|||
11
nvs
26.07.12
✎
13:46
|
может все это в транзакции происходит, которая потом откатывается?
|
|||
12
Саша80
26.07.12
✎
13:46
|
НаборЗаписей= РегистрыСведений.ВспомогательныйУчастиеВПроектах.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Проект.Установить(ТекущийПроект); НаборЗаписей.Отбор.Период.Установить(ТекущийПериод); НаборЗаписей.Отбор.КоэффициентУчастия.Установить(ТекущийКоэффициентУчастия); НаборЗаписей.Загрузить(ТаблицаЗначений); НаборЗаписей.Записать(); |
|||
13
Саша80
26.07.12
✎
13:47
|
попробуй так
|
|||
14
nvs
26.07.12
✎
13:53
|
Отбор максимум на период и на измерения можно ставить
Думаю строка: НаборЗаписей.Отбор.КоэффициентУчастия.Установить(ТекущийКоэффициентУчастия) неправомерна поскольку КоэффициентУчастия скорее всего измерение Установлен отбор или нет - пофигу, единственно, что если установлен отбор, то для каждого набора записей измерения и период должны быть равны тем значениям которые стоят в отборе |
|||
15
nvs
26.07.12
✎
13:55
|
поправлюсь:
КоэффициентУчастия скорее всего ресурс |
|||
16
nvs
26.07.12
✎
14:02
|
а как определяете, что в регистре ничего нет? (если через ТП РегистрСведенийСписок - то там может быть установлен отбор)
|
|||
17
Volhvus
26.07.12
✎
14:26
|
Определяю просто, захожу в базу и смотрю. Там остаются те записи, которые я внес руками.
|
|||
18
hhhh
26.07.12
✎
14:28
|
(17) а "обновить" там на регистре нажимали?
|
|||
19
Volhvus
26.07.12
✎
14:52
|
При открытии регистра а не переходе к нему, смысла нет его обновлять, но все равно пробывал!:)
|
|||
20
Volhvus
26.07.12
✎
14:55
|
Все тоже самое в базе, созданной с нуля работает. Значит дело не в платформе.
|
|||
21
НастоящееИмя
26.07.12
✎
14:56
|
(19) может просто данные не изменяются?
|
|||
22
Volhvus
26.07.12
✎
16:24
|
Меняются. Я сделал две записи, а записываю другие, при этом регистр должен очиститься, мне он нужен только чтобы получить срезпоследних по загружаемым в него данным.
Может быть задачу можно решить другими способами? Есть документ который делает движения в периодическом регистре сведений Измерения: Сотрудник, Проект Тип СправочникСсылка и ресурс коэффициент участия Тип Число). В него он заносит данные по распределению ЗП производственных рабочих по проектам. Каждый раз при проведении документа происходит проверка на то чтобы сумма коэффициентов по сотруднику на дату документа с учетом данных, которые должен внести документ не превышала 1. Я пошел таким способом: Сделал подписку на событие обработка проведения данного документа. Беру срез последних на дату документа из регистра в котором хранятся данные за исключением тех которые были внесены ранее данным документом если он перепроводится, а не создается новый, заношу их в таблицу значений, потом считываю данные из табличной части проводимого документа и добавляю их в таблицу значений. Таблицу значений заношу в другой регистр сведений и по нему беру срез последних и считаю коэффициент если он больше 1 то выдается сообщение пользователю и отменяю проведение документа. Процедура ПроверкаРаспределенияСотрудниковПоПроектамОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт КоличествоСтрок=Источник.Участие.Количество(); Если КоличествоСтрок=0 Тогда Сообщить("Не указаны проекты для сотрудника!",); Отказ=Истина; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | УчастиеВПроектахСрезПоследних.Проект, | СУММА(УчастиеВПроектахСрезПоследних.КоэффициентУчастия) КАК Сумма, | УчастиеВПроектахСрезПоследних.Период |ИЗ | РегистрСведений.УчастиеВПроектах.СрезПоследних( | &Период, | Сотрудник = &Сотрудник | И НЕ Регистратор = &Регистратор) КАК УчастиеВПроектахСрезПоследних | |СГРУППИРОВАТЬ ПО | УчастиеВПроектахСрезПоследних.Проект, | УчастиеВПроектахСрезПоследних.Период"; Запрос.УстановитьПараметр("Период", Источник.Дата); Запрос.УстановитьПараметр("Сотрудник", Источник.Сотрудник); Запрос.УстановитьПараметр("Регистратор", Источник.Ссылка); Результат = Запрос.Выполнить(); УчастиеСотрудника=Результат.Выбрать(); ТаблицаЗначений=Новый ТаблицаЗначений; ТаблицаЗначений.Колонки.Добавить("Проект",,"Проект"); ТаблицаЗначений.Колонки.Добавить("Период",,"Период"); ТаблицаЗначений.Колонки.Добавить("КоэффициентУчастия",,"КоэффициентУчастия"); Пока УчастиеСотрудника.Следующий() Цикл Стр=ТаблицаЗначений.Добавить(); Стр.Проект=УчастиеСотрудника.Проект; Стр.Период=УчастиеСотрудника.Период; Стр.КоэффициентУчастия=УчастиеСотрудника.Сумма; КонецЦикла; Для Каждого СтрТЧ из Источник.Участие Цикл Стр=ТаблицаЗначений.Добавить(); Стр.Проект=СтрТЧ.Проект; Стр.Период=Источник.Дата; Стр.КоэффициентУчастия=СтрТЧ.КоэффициентУчастия; КонецЦикла; НаборЗаписей= РегистрыСведений.УчастиеВпроектахПромежуточный.СоздатьНаборЗаписей(); НаборЗаписей.Загрузить(ТаблицаЗначений); НаборЗаписей.Записать(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СУММА(УчастиеВпроектахПромежуточныйСрезПоследних.КоэффициентУчастия) КАК Сумма |ИЗ | РегистрСведений.УчастиеВпроектахПромежуточный.СрезПоследних(&Период, ) КАК УчастиеВпроектахПромежуточныйСрезПоследних"; Запрос.УстановитьПараметр("Период", Источник.Дата); Результат = Запрос.Выполнить().Выбрать(); Если Не Результат.Сумма=1 Тогда Сообщить("Сумма коэффициентов участия сотрудника "+ Источник.Сотрудник+" не равна 1 !",); Отказ=Истина; КонецЕсли; КонецПроцедуры |
|||
23
Volhvus
26.07.12
✎
16:53
|
Есть предположение, что возникает промлема к обращению в регистр сведений из общего модуля, но какая пока не нашел.
|
|||
24
Volhvus
27.07.12
✎
09:42
|
Проблема решена, нашел ошибки в коде. Всем спасибо за помошь.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |