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

Структура регистра сведений

Автор Новенькая, 28 июл 2014, 19:16

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

Новенькая

Есть документ "Конструктор". В нем имеем 3 табличные части "Конструкции", "Методы", "Ресурсы" и реквизит ОбъектЗатрат. Табличная часть "Методы" связана с "Конструкциями" реквизитом "УИСтроки", а табл. часть "ресурсы" связана соот-но с "методами" реквизитом "УИСтрокиМетоды". Мне необходимо эту структуру где-то хранить. Было принято решение хранить в регистре сведений...но я пока не знаю как правильно его орагнизовать.
Что пока имею. Сделала регистр сведений "СоставБюджета", периодичность "в пределах секунды", режим записи "подчинение регистратору". Измерения: ОбъектЗатрат, Конструкция, Метод, Ресурс. В обработке проведения документа процедура:



Процедура ОбработкаПроведения(Отказ, РежимПроведения)
   
    ТаблицаДвижений = СформироватьДвиженияПоСоставу();
    Движения.СоставБюджета.Записывать = Истина;
    Движения.СоставБюджета.Очистить();
   
    Для Каждого ТекСтрока Из ТаблицаДвижений Цикл
        Движение = Движения.СоставБюджета.Добавить();
        Движение.Период = Дата;
        Движение.ОбъектЗатрат = ОбъектЗатрат;
        ЗаполнитьЗначенияСвойств(Движение,ТекСтрока);
    КонецЦикла;
КонецПроцедуры


Функция СформироватьДвиженияПоСоставу()
   
    Запрос = Новый Запрос("ВЫБРАТЬ
                          |    КонструкторБюджетаКонструкции.Конструкция КАК КонструкцияБюджета,
                          |    КонструкторБюджетаМетоды.Метод КАК МетодЛитерыБюджета,
                          |    КонструкторБюджетаРесурсы.Ресурс КАК РесурсЛитерыБюджета
                          |ИЗ
                          |    Документ.КонструкторБюджета.Конструкции КАК КонструкторБюджетаКонструкции
                          |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.КонструкторБюджета.Методы КАК КонструкторБюджетаМетоды
                          |            ЛЕВОЕ СОЕДИНЕНИЕ Документ.КонструкторБюджета.Ресурсы КАК КонструкторБюджетаРесурсы
                          |            ПО КонструкторБюджетаМетоды.УИСтрокиМетоды = КонструкторБюджетаРесурсы.УИСтрокиМетоды
                          |        ПО КонструкторБюджетаКонструкции.УИСтроки = КонструкторБюджетаМетоды.УИСтроки
                          |ГДЕ
                          |    КонструкторБюджетаКонструкции.Ссылка = &Ссылка");
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
   
    Возврат Запрос.Выполнить().Выгрузить();
   
КонецФункции



В таком раскладе, если я захочу скопировать документ и незначительно что-то поменять, уже при записи в регистр будет ругаться, что такие записи существуют. как правильно организовать эту схему? может проверять комбинацию объектЗатрат, конструкция, метод, ресурс..и если уже такая есть, то в регистр не записывать? есть более рациональное решение?

DmitriyF

Цитата: Новенькая от 28 июл 2014, 19:16
Есть документ "Конструктор". В нем имеем 3 табличные части "Конструкции", "Методы", "Ресурсы" и реквизит ОбъектЗатрат. Табличная часть "Методы" связана с "Конструкциями" реквизитом "УИСтроки", а табл. часть "ресурсы" связана соот-но с "методами" реквизитом "УИСтрокиМетоды". Мне необходимо эту структуру где-то хранить. Было принято решение хранить в регистре сведений...но я пока не знаю как правильно его орагнизовать.
Что пока имею. Сделала регистр сведений "СоставБюджета", периодичность "в пределах секунды", режим записи "подчинение регистратору". Измерения: ОбъектЗатрат, Конструкция, Метод, Ресурс. В обработке проведения документа процедура:



Процедура ОбработкаПроведения(Отказ, РежимПроведения)
   
    ТаблицаДвижений = СформироватьДвиженияПоСоставу();
    Движения.СоставБюджета.Записывать = Истина;
    Движения.СоставБюджета.Очистить();
   
    Для Каждого ТекСтрока Из ТаблицаДвижений Цикл
        Движение = Движения.СоставБюджета.Добавить();
        Движение.Период = Дата;
        Движение.ОбъектЗатрат = ОбъектЗатрат;
        ЗаполнитьЗначенияСвойств(Движение,ТекСтрока);
    КонецЦикла;
КонецПроцедуры


Функция СформироватьДвиженияПоСоставу()
   
    Запрос = Новый Запрос("ВЫБРАТЬ
                          |    КонструкторБюджетаКонструкции.Конструкция КАК КонструкцияБюджета,
                          |    КонструкторБюджетаМетоды.Метод КАК МетодЛитерыБюджета,
                          |    КонструкторБюджетаРесурсы.Ресурс КАК РесурсЛитерыБюджета
                          |ИЗ
                          |    Документ.КонструкторБюджета.Конструкции КАК КонструкторБюджетаКонструкции
                          |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.КонструкторБюджета.Методы КАК КонструкторБюджетаМетоды
                          |            ЛЕВОЕ СОЕДИНЕНИЕ Документ.КонструкторБюджета.Ресурсы КАК КонструкторБюджетаРесурсы
                          |            ПО КонструкторБюджетаМетоды.УИСтрокиМетоды = КонструкторБюджетаРесурсы.УИСтрокиМетоды
                          |        ПО КонструкторБюджетаКонструкции.УИСтроки = КонструкторБюджетаМетоды.УИСтроки
                          |ГДЕ
                          |    КонструкторБюджетаКонструкции.Ссылка = &Ссылка");
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
   
    Возврат Запрос.Выполнить().Выгрузить();
   
КонецФункции



В таком раскладе, если я захочу скопировать документ и незначительно что-то поменять, уже при записи в регистр будет ругаться, что такие записи существуют. как правильно организовать эту схему? может проверять комбинацию объектЗатрат, конструкция, метод, ресурс..и если уже такая есть, то в регистр не записывать? есть более рациональное решение?
Может попробовать сначала движения очистить а потом записать?

Теги:

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

Рейтинг@Mail.ru

Поиск