|
Оптимизация загрузки ТЗ в регистр бухгалтерии, при различных условиях | ☑ | ||
---|---|---|---|---|
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 к мизерным объемам, нечего тут блох ловить
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |