|
Помогите улучшить код | ☑ | ||
---|---|---|---|---|
0
1CVERYGOOD
22.03.14
✎
12:58
|
Подозреваю что написано криво. Подскажите как можно оптимизировать ?
Зап = новый Запрос; зап.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ТИПЗНАЧЕНИЯ(ХозрасчетныйОборотыДтКт.Регистратор) как ТипДок, | ХозрасчетныйОборотыДтКт.Регистратор.Организация, | ХозрасчетныйОборотыДтКт.Регистратор, | ХозрасчетныйОборотыДтКт.СчетДт, | ХозрасчетныйОборотыДтКт.СчетКт, | ХозрасчетныйОборотыДтКт.ПодразделениеДт КАК ПодразделениеДт, | ХозрасчетныйОборотыДтКт.ПодразделениеКт КАК ПодразделениеКт, | ХозрасчетныйОборотыДтКт.СуммаОборот КАК СуммаОборот | ИЗ | РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&датаначала, &датаокончания, Регистратор, , , , , ) КАК ХозрасчетныйОборотыДтКт |ГДЕ | (ХозрасчетныйОборотыДтКт.СчетДт =&СчетДт | ИЛИ ХозрасчетныйОборотыДтКт.СчетКт=&СчетКт) |//И ТИПЗНАЧЕНИЯ(ХозрасчетныйОборотыДтКт.Регистратор) = ТИП(Документ.ВводНачальныхОстатков) |И ТИПЗНАЧЕНИЯ(ХозрасчетныйОборотыДтКт.Регистратор) = ТИП(Документ.СписаниеСРасчетногоСчета) |//И ТИПЗНАЧЕНИЯ(ХозрасчетныйОборотыДтКт.Регистратор) = ТИП(Документ.ОтражениеЗарплатыВРеглУчете) |//И ТИПЗНАЧЕНИЯ(ХозрасчетныйОборотыДтКт.Регистратор) = ТИП(Документ.ОперацияБух)"; зап.Параметры.Вставить("датаначала",'20110101'); зап.Параметры.Вставить("датаокончания",'20140322'); зап.Параметры.Вставить("СчетДт",ПланыСчетов.Хозрасчетный.НайтиПоКоду("68.01")); зап.Параметры.Вставить("СчетКт",ПланыСчетов.Хозрасчетный.НайтиПоКоду("68.01")); рез = Зап.Выполнить().Выбрать(); Пока рез.Следующий() ЦИКЛ ОбработкаПрерыванияПользователя(); об = рез.Регистратор.ПолучитьОбъект(); Для каждого НаборЗаписейРегистра из об.Движения Цикл НаборЗаписейРегистра.Прочитать(); Для каждого зап из НаборЗаписейРегистра Цикл ЕСЛИ ТипЗнч(зап)= тип("РегистрБухгалтерииЗапись.Хозрасчетный") ТОГДА зап.ПодразделениеДт = об.ПодразделениеДт; Сообщить(об.ссылка); НаборЗаписейРегистра.Записать(); КОНЕЦЕСЛИ; КОНЕЦЦИКЛА; КонецЦикла; КОНЕЦЦИКЛА; |
|||
1
vicof
22.03.14
✎
13:02
|
ГДЕ можно удалить.
Параметры виртуальных таблиц - классика проверять тип можно раньше |
|||
2
1CVERYGOOD
22.03.14
✎
13:02
|
Задача в том, чтобы проставить подразделениеДт в проводках по 68.01, где документ = СписаниеСРасчетногоСчета из соотв. реквизита.
|
|||
3
vicof
22.03.14
✎
13:03
|
набор записей в цикле записывать не круто
|
|||
4
1CVERYGOOD
22.03.14
✎
13:03
|
Запрос то быстро выполняется. Цикл очень медленно работает.
|
|||
5
Kookish
22.03.14
✎
13:17
|
(0), (4) Подозреваю, что без цикла вообще можно обойтись. Одним запросом.
И да, (1). См. http://kb.1c.ru/articleView.jsp?id=44 |
|||
6
Kookish
22.03.14
✎
13:27
|
(4) Он и будет долго выполняться. Вы ж за три с лишним года документы перелопачиваете. А еще по-моему, можно не перебирать все движения, а сразу обратиться к движениям по хозрасчетному, через точку или квадратные скобки.
|
|||
7
mehfk
22.03.14
✎
15:03
|
(0) ТИПЗНАЧЕНИЯ(ХозрасчетныйОборотыДтКт.Регистратор) = ТИП(...)
Заменить на ХозрасчетныйОборотыДтКт.Регистратор ССЫЛКА ... |
|||
8
mehfk
22.03.14
✎
15:05
|
(ХозрасчетныйОборотыДтКт.СчетДт =&СчетДт
| ИЛИ ХозрасчетныйОборотыДтКт.СчетКт=&СчетКт) Вставить в условия в виртуальной таблице |
|||
9
rphosts
22.03.14
✎
15:42
|
(4) тебе-ж в (3) написали что вынеси запись после цикла и пиши всего 1 раз.... запись в циткле оно как запрос в цикле
|
|||
10
1CVERYGOOD
22.03.14
✎
15:51
|
об = рез.Регистратор.ПолучитьОбъект();
об.Движения["Хозрасчетный"].Прочитать(); Для каждого зап из об.Движения["Хозрасчетный"] Цикл зап.ПодразделениеКт = об.ПодразделениеОрганизации; КОНЕЦЦИКЛА; об.Движения["Хозрасчетный"].Записать(); Вот так сделал. |
|||
11
grate
22.03.14
✎
16:02
|
Зап = новый Запрос;
зап.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ХозрасчетныйОбороты.Регистратор |ПОМЕСТИТЬ ВТ_Документы |ИЗ | РегистрБухгалтерии.Хозрасчетный.Обороты(&датаначала, &датаокончания, Регистратор, Счет = &Счет6801, , , , ) КАК ХозрасчетныйОбороты |ГДЕ | ХозрасчетныйОбороты.Регистратор ССЫЛКА Документ.СписаниеСРасчетногоСчета |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_Документы.Регистратор, | СписаниеСРасчетногоСчета.ПодразделениеДт |ИЗ | ВТ_Документы КАК ВТ_Документы | ЛЕВОЕ СОЕДИНЕНИЕ Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета | ПО ВТ_Документы.Регистратор = СписаниеСРасчетногоСчета.Ссылка"; зап.Параметры.Вставить("ДатаНачала",'20110101'); зап.Параметры.Вставить("ДатаОкончания",'20140322'); Счет6801 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("68.01"); зап.Параметры.Вставить("Счет6801", Счет6801); рез = Зап.Выполнить().Выбрать(); НЗ = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей(); Пока рез.Следующий() ЦИКЛ ОбработкаПрерыванияПользователя(); НЗ.Отбор.Регистратор.Установить(рез.Регистратор); НЗ.Прочитать(); Для Каждого зап Из НЗ Цикл Если зап.СчетДт = Счет6801 ИЛИ зап.СчетКт = Счет6801 Тогда зап.ПодразделениеДт = рез.ПодразделениеДт; КонецЕсли; КонецЦикла; НЗ.Записать(); КОНЕЦЦИКЛА; |
|||
12
jsmith82
22.03.14
✎
17:18
|
Почему капс перемежается с обычным кеглем
|
|||
13
jsmith82
22.03.14
✎
17:18
|
Наименование переменной то с маленькой, то с большой буквы
Что за деревенский стайл? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |