Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 апр 2024, 17:54

Регистр сведений Измерения

Автор andryscha92, 04 фев 2015, 13:45

0 Пользователей и 1 гость просматривают эту тему.

andryscha92

Здравствуйте.есть регистр сведений подчиненый регистратору. в нем измерение Субконто1. Создал ещё одно измерение Субконто2. Подскажите пожалуйста возможно ли скопировать данные Субконто1 в субконто2 ? Напоминаю РС подчинен регистратору!

LexaK

необходимо написать обработку
1.запросом получите всех владельцев данного регистра
2.создаете набор записей
цикл(1) - обход владельцев
3.в цикле устанавливаете отбор по владельцу, читаете набор записей
цикл(2) - перебор записей в наборе
4.для каждой записи пишите лкЗапись.Субконто2 = лкЗапись.Субконто1;
конеццикла(2)
5.записываете набор записей
конеццикла(1)
если помогло нажмите: Спасибо!

Slin

чего нельзя то?
главное, чтобы они были совместимых типов
skype: slin-dev

andryscha92

Цитата: LexaK от 04 фев 2015, 14:32
необходимо написать обработку
1.запросом получите всех владельцев данного регистра
2.создаете набор записей
цикл(1) - обход владельцев
3.в цикле устанавливаете отбор по владельцу, читаете набор записей
цикл(2) - перебор записей в наборе
4.для каждой записи пишите лкЗапись.Субконто2 = лкЗапись.Субконто1;
конеццикла(2)
5.записываете набор записей
конеццикла(1)

всё так и сделал, работает. Но на определенном этапе при записи ошибка

{Форма.Форма.Форма(44)}: Ошибка при вызове метода контекста (Записать)
      НаборЗаписей.Записать();
по причине:
Запись с такими ключевыми полями существует! : РасчетРазницВОценкеАктивовИОбязательств: 01.12.2013, ООО "Юбилейное", Цех полуфабрикатов, Незавершенное производство, , , , Временные разницы, 20.01, , ,  (Регистр сведений: Расчет разниц в оценке активов и обязательств; Номер строки: 725)
Добавлено: 09 фев 2015, 09:50


вот код
//Получим всех регистраторов регистра сведений
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОперацияБух.Ссылка
|ИЗ
| Документ.ОперацияБух КАК ОперацияБух
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РегламентнаяОперация.Ссылка
|ИЗ
| Документ.РегламентнаяОперация КАК РегламентнаяОперация";
Результат = Запрос.Выполнить();    

Выборка = Результат.Выбрать();

РасчетРазниц = РегистрыСведений.РасчетРазницВОценкеАктивовИОбязательств;
НаборЗаписей = РасчетРазниц.СоздатьНаборЗаписей();

Пока Выборка.Следующий() Цикл

НаборЗаписей.Отбор.Регистратор.Значение = Выборка.Ссылка;
НаборЗаписей.Прочитать();

Для каждого строка из НаборЗаписей цикл

строка.Субконто4 = строка.Субконто1;
строка.Субконто5 = строка.Субконто2;
строка.Субконто6 = строка.Субконто3;

КонецЦикла;

НаборЗаписей.Записать();
КонецЦикла;

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Завершено!";
Сообщение.Сообщить();

LexaK

так как вы изменяете измерения, у вас появляются(могут появляться) записи с одинаковыми ключами. что бы избежать ошибки при записи вам необходимо сворачивать ваш набор записей по измерениям, проще всего это сделать через таблицу значений.
у набора записей регистра есть метод выгрузить()/загрузить(),
план действий следующий (данные действия вставить перед записью набора)
...
1.Выгрузить набор записей в таблицу значений
2.свернуть таблицу значений ("Поля измерений","Поля ресурсов")
3.Загрузить полученную таблицу значений в набор записей
...
если помогло нажмите: Спасибо!

andryscha92

Цитата: LexaK от 09 фев 2015, 10:41
так как вы изменяете измерения, у вас появляются(могут появляться) записи с одинаковыми ключами. что бы избежать ошибки при записи вам необходимо сворачивать ваш набор записей по измерениям, проще всего это сделать через таблицу значений.
у набора записей регистра есть метод выгрузить()/загрузить(),
план действий следующий (данные действия вставить перед записью набора)
...
1.Выгрузить набор записей в таблицу значений
2.свернуть таблицу значений ("Поля измерений","Поля ресурсов")
3.Загрузить полученную таблицу значений в набор записей
...
Добавлено: 09 фев 2015, 11:17


Цитата: andryscha92 от 09 фев 2015, 11:14
Цитата: LexaK от 09 фев 2015, 10:41
так как вы изменяете измерения, у вас появляются(могут появляться) записи с одинаковыми ключами. что бы избежать ошибки при записи вам необходимо сворачивать ваш набор записей по измерениям, проще всего это сделать через таблицу значений.
у набора записей регистра есть метод выгрузить()/загрузить(),
план действий следующий (данные действия вставить перед записью набора)
...
1.Выгрузить набор записей в таблицу значений
2.свернуть таблицу значений ("Поля измерений","Поля ресурсов")
3.Загрузить полученную таблицу значений в набор записей
...
спасибо действительно так будет правильней, так и сделаю.сейчас проблему решил сделав ещё одно измерение в РС и присвоив ему уникальный номер, тем самым записи стали уникальными.
//Получим всех регистраторов регистра сведений
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОперацияБух.Ссылка
|ИЗ
| Документ.ОперацияБух КАК ОперацияБух
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РегламентнаяОперация.Ссылка
|ИЗ
| Документ.РегламентнаяОперация КАК РегламентнаяОперация";
Результат = Запрос.Выполнить();    

Выборка = Результат.Выбрать();

РасчетРазниц = РегистрыСведений.РасчетРазницВОценкеАктивовИОбязательств;
НаборЗаписей = РасчетРазниц.СоздатьНаборЗаписей();

Пока Выборка.Следующий() Цикл

НаборЗаписей.Отбор.Регистратор.Значение = Выборка.Ссылка;
НаборЗаписей.Прочитать();
Номер = 0;
Для каждого строка из НаборЗаписей цикл
Номер = Номер+1;
строка.Субконто4 = строка.Субконто1;
строка.Субконто5 = строка.Субконто2;
строка.Субконто6 = строка.Субконто3;
строка.Резерв = Номер;
КонецЦикла;

НаборЗаписей.Записать();
КонецЦикла;

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Завершено!";
Сообщение.Сообщить();



Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск