Имя: Пароль:
1C
1С v8
Оптимизация загрузки ТЗ в регистр бухгалтерии, при различных условиях
0 ivnvld
 
28.04.15
13:42
Собственно вопрос.
Понимаю будет сложновато без программного кода, но давайте попытаемся.

Имеем таблицу значений, полученную ранее из управленческого регистра.
Таблицу помещаем как параметр в запрос, и в зависимости от тех или иных условий, формируем готовую таблицу для загрузки в БУ (представить 10 000 строк).

Внимание вопрос, есть ли смысл в запросе использовать различного рода оператора "Выбор когда ..", или пойти другим путем. Взять результат таблицы и раскидать на кучу "подтаблиц" по правилу "корреспонденций БУ(счетДт-счетКт)", после чего "маленькие подтаблицы объединить в одну и закинуть в регистр БУ"

Сам запрос. Документ, например делает проводки 78-92 и 91-78. Всего 10 000 проводок.
Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    Таблица.Организация,
                   |    Таблица.Период,
                   |    Таблица.Валюта,
                   |    Таблица.ВидСтрахования,
                   |    Таблица.Договор,
                   |    Таблица.Контрагент,
                   |    Таблица.Соглашение,
                   |    Таблица.Сумма,
                   |    Таблица.СуммаРегл
                   |ПОМЕСТИТЬ врТаблица
                   |ИЗ
                   |    &Таблица КАК Таблица
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    врТаблица.Организация,
                   |    врТаблица.Период,
                   |    ВЫБОР
                   |        КОГДА врТаблица.СуммаРегл < 0
                   |            ТОГДА ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Счет9101)
                   |        ИНАЧЕ ВЫБОР
                   |                КОГДА ЖурналДоговоров.Квазивалюта
                   |                    ТОГДА ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Счет78013)
                   |                ИНАЧЕ ВЫБОР
                   |                        КОГДА врТаблица.Валюта = ЗНАЧЕНИЕ(Справочник.Валюты.RUB)
                   |                            ТОГДА ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Счет78011)
                   |                        ИНАЧЕ ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Счет78012)
                   |                    КОНЕЦ
                   |            КОНЕЦ
                   |    КОНЕЦ КАК СчетДт,
                   |    ВЫБОР
                   |        КОГДА врТаблица.СуммаРегл < 0
                   |            ТОГДА ЗНАЧЕНИЕ(Справочник.ПрочиеДоходыИРасходы.НепогашДтЗадолженностьСтрахователя)
                   |        ИНАЧЕ врТаблица.ВидСтрахования
                   |    КОНЕЦ КАК СубконтоДт1,
                   |    ВЫБОР
                   |        КОГДА врТаблица.СуммаРегл < 0
                   |            ТОГДА ЗНАЧЕНИЕ(Перечисление.ГруппаДоходовРасходов.РасходыПодлежащиеНО)
                   |        ИНАЧЕ врТаблица.Контрагент
                   |    КОНЕЦ КАК СубконтоДт2,
                   |    врТаблица.Договор КАК СубконтоДт3,
                   |    ВЫБОР
                   |        КОГДА врТаблица.СуммаРегл < 0
                   |            ТОГДА ВЫБОР
                   |                    КОГДА ЖурналДоговоров.Квазивалюта
                   |                        ТОГДА ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Счет78013)
                   |                    ИНАЧЕ ВЫБОР
                   |                            КОГДА врТаблица.Валюта = ЗНАЧЕНИЕ(Справочник.Валюты.RUB)
                   |                                ТОГДА ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Счет78011)
                   |                            ИНАЧЕ ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Счет78012)
                   |                        КОНЕЦ
                   |                КОНЕЦ
                   |        ИНАЧЕ ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Счет9201)
                   |    КОНЕЦ КАК СчетКт,
                   |    врТаблица.ВидСтрахования КАК СубконтоКт1,
                   |    врТаблица.Контрагент КАК СубконтоКт2,
                   |    врТаблица.Договор КАК СубконтоКт3,
                   |    врТаблица.Валюта,
                   |    врТаблица.Сумма,
                   |    врТаблица.СуммаРегл
                   |ПОМЕСТИТЬ врБУ
                   |ИЗ
                   |    врТаблица КАК врТаблица
                   |        ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов.ЖурналДоговоров КАК ЖурналДоговоров
                   |        ПО врТаблица.Организация = ЖурналДоговоров.Организация
                   |            И врТаблица.Договор = ЖурналДоговоров.Договор
                   |            И врТаблица.Соглашение = ЖурналДоговоров.Ссылка
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    врБУ.Организация,
                   |    врБУ.Период,
                   |    врБУ.СчетДт,
                   |    врБУ.СубконтоДт1,
                   |    врБУ.СубконтоДт2,
                   |    врБУ.СубконтоДт3,
                   |    ВЫБОР
                   |        КОГДА врБУ.СчетДт.Валютный
                   |            ТОГДА врБУ.Валюта
                   |    КОНЕЦ КАК ВалютаДт,
                   |    ВЫБОР
                   |        КОГДА врБУ.СчетДт.Валютный
                   |            ТОГДА врБУ.Сумма
                   |    КОНЕЦ КАК ВалютнаяСуммаДт,
                   |    ВЫБОР
                   |        КОГДА врБУ.СуммаРегл < 0
                   |            ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.ПрочиеДоходыИРасходы)
                   |        ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.ВидыСтрахования)
                   |    КОНЕЦ КАК ВидСубконтоДт1,
                   |    ВЫБОР
                   |        КОГДА врБУ.СуммаРегл < 0
                   |            ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.ГруппаДоходовРасходов)
                   |        ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Контрагенты)
                   |    КОНЕЦ КАК ВидСубконтоДт2,
                   |    ВЫБОР
                   |        КОГДА врБУ.СуммаРегл < 0
                   |            ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.ПустаяСсылка)
                   |        ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.ДСП)
                   |    КОНЕЦ КАК ВидСубконтоДт3,
                   |    врБУ.СчетКт,
                   |    врБУ.СубконтоКт1,
                   |    врБУ.СубконтоКт2,
                   |    врБУ.СубконтоКт3,
                   |    ВЫБОР
                   |        КОГДА врБУ.СчетКт.Валютный
                   |            ТОГДА врБУ.Валюта
                   |    КОНЕЦ КАК ВалютаКт,
                   |    ВЫБОР
                   |        КОГДА врБУ.СчетКт.Валютный
                   |            ТОГДА врБУ.Сумма
                   |    КОНЕЦ КАК ВалютнаяСуммаКт,
                   |    ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.ВидыСтрахования) КАК ВидСубконтоКт1,
                   |    ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Контрагенты) КАК ВидСубконтоКт2,
                   |    ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.ДСП) КАК ВидСубконтоКт3,
                   |    ВЫБОР
                   |        КОГДА врБУ.СуммаРегл < 0
                   |            ТОГДА врБУ.СуммаРегл * -1
                   |        ИНАЧЕ врБУ.СуммаРегл
                   |    КОНЕЦ КАК Сумма,
                   |    ""Начисление премии"" КАК Содержание
                   |ИЗ
                   |    врБУ КАК врБУ";
    Запрос.УстановитьПараметр("Таблица",Таблица);
    Результат = Запрос.Выполнить();
    
    Движения = ДокументОбъект.Движения;
    Движения.Хозрасчетный.Записывать = Истина;
    Движения.Хозрасчетный.Загрузить(Результат.Выгрузить());
1 zak555
 
28.04.15
13:44
> Внимание вопрос, есть ли смысл в запросе использовать различного рода оператора "Выбор когда ..", или пойти другим путем


зачем он нужен ?
2 asady
 
28.04.15
13:45
(0) я бы дописывал движения обработкой порциями по 100-200 проводок в одной транзакции
3 Лефмихалыч
 
28.04.15
13:45
(0) имеет ли смысл об этом задумываться ради каких-то 10000 проводок? Не все ли равно, как они получаются?
4 ivnvld
 
28.04.15
13:58
Если говорить предметно, в первом варианте мы получаем 1 таблицу. Для того чтобы закинуть всё это в БУ, пишем условия под каждую проводку, которая может быть в документе. Либо эти условия делать описывать в мелких подтаблиц. Подтаблицы получаются из единой Таблицы, путем метода

Таб1 = Таблица.Скопировать(Новый Структура("Счет", ПланыСчетов.Хозрасчетный.Счет9101));

Таб2 = Таблица.Скопировать(Новый Структура("Счет", ПланыСчетов.Хозрасчетный.Счет9101));

После чего их кидать в отдельный запрос, объдинять и закидывать в БУ.
5 ivnvld
 
28.04.15
14:02
Таб2 = Таблица.Скопировать(Новый Структура("Счет", ПланыСчетов.Хозрасчетный.Счет9201));
Таб2 = Таблица.Скопировать(Новый Структура("Счет", ПланыСчетов.Хозрасчетный.Счет9101));

вот так правильней
6 hhhh
 
28.04.15
14:10
(5) нет лучше один раз. Не делить. Потому что деление займет больше времени, чем загрузка.
7 ivnvld
 
28.04.15
14:17
(6) я бы с удовольствием это прочитал в каких либо книжках 1С или вырезках
В данный момент коллега пытается сделать 2ым методом, чтобы могли сравнить время выполнения
8 hhhh
 
28.04.15
14:22
(7) такие мизерные объемы сидеть загружать всем отделом? Ну, вы мазохисты.
9 Зеленый пень
 
28.04.15
14:52
+1 к мизерным объемам, нечего тут блох ловить
AdBlock убивает бесплатный контент. 1Сергей