|
Как сделать покороче код | ☑ | ||
---|---|---|---|---|
0
DonJon
11.06.16
✎
23:06
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ | ХозрасчетныйДвиженияССубконто.Регистратор |ИЗ | РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК ХозрасчетныйДвиженияССубконто |ГДЕ | ХозрасчетныйДвиженияССубконто.СчетКт = &СчетКт | И ХозрасчетныйДвиженияССубконто.СчетДт = &СчетДт | И НЕ ХозрасчетныйДвиженияССубконто.СубконтоДт2 = ХозрасчетныйДвиженияССубконто.СубконтоКт2 | |СГРУППИРОВАТЬ ПО | ХозрасчетныйДвиженияССубконто.Регистратор"; Запрос.УстановитьПараметр("СчетДт", ПланыСчетов.Хозрасчетный.НайтиПоКоду("76.05")); Запрос.УстановитьПараметр("СчетКт", ПланыСчетов.Хозрасчетный.НайтиПоКоду("86.01")); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Движения = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей(); Движения.Отбор.Регистратор.Установить(ВыборкаДетальныеЗаписи.Регистратор); Движения.Прочитать(); Для Каждого Проводка Из Движения Цикл Если Проводка.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("76.05") И Проводка.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("86.01") И НЕ Проводка.СубконтоДт.Договоры = Проводка.СубконтоКт.Договоры Тогда Проводка.СубконтоКт.Договоры = Проводка.СубконтоДт.Договоры; КонецЕсли; КонецЦикла; Движения.ОбменДанными.Загрузка = Истина; Попытка Движения.Записать(); Сообщить("Исправлен - "+ВыборкаДетальныеЗаписи.Регистратор); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЦикла; //приходники ВыборкаПКО = Документы.ПриходныйКассовыйОрдер.Выбрать(); Пока ВыборкаПКО.Следующий() Цикл ДокПКО = ВыборкаПКО.ПолучитьОбъект(); Если ДокПКО.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.НайтиПоКоду("76.05") ИЛИ ДокПКО.СчетУчетаРасчетовСКонтрагентом.Родитель = ПланыСчетов.Хозрасчетный.НайтиПоКоду("76") Тогда Если НЕ ДокПКО.СубконтоКт1 = ДокПКО.СубконтоКт2.Владелец Тогда Договор = Справочники.ДоговорыКонтрагентов.Выбрать(,ДокПКО.СубконтоКт1); Если Договор.Следующий() Тогда ДокПКО.СубконтоКт2 = Договор.Ссылка; Попытка ДокПКО.Записать(?(ДокПКО.Проведен,РежимЗаписиДокумента.Проведение,РежимЗаписиДокумента.Запись),РежимПроведенияДокумента.Неоперативный); Сообщить("Исправлен - "+ДокПКО.Ссылка); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
1
Defender aka LINN
11.06.16
✎
23:32
|
Что платишь?
|
|||
2
Матиус III
12.06.16
✎
00:03
|
(0) Могу подсказать как сделать быстрее, как короче не скажу - уже некуда сжимать.
|
|||
3
Матиус III
12.06.16
✎
00:05
|
(0) Хотя в одну строку можно запилить, по вертикали короче будет.
|
|||
4
ShAV
12.06.16
✎
08:50
|
(3) :)
или как вариант настроить в конфигураторе сервис -> параметры -> модуль -> группировка |
|||
5
PR
12.06.16
✎
09:47
|
(0) Зачем?
|
|||
6
hhhh
12.06.16
✎
09:51
|
(0) Если Проводка.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("76.05")
тысячу раз поиск по коду фигачишь? А про использование переменных в языке 1с никогда не слышал? В начале кода пишешь Сч_7605 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("76.05"); и потом уже везде пишешь Сч_7605. Это конечно будет длиннее, но зато быстрее. |
|||
7
Armando
12.06.16
✎
10:05
|
(6) ты не понял - автору покороче надо. Странно что вообще запросы используются, это же очень длинно получается.
|
|||
8
ILM
гуру
12.06.16
✎
10:07
|
Алгоритм правки ПКО неверный. Сделайте запрос сразу же к ПКО, исправляйте документ.
|
|||
9
Лефмихалыч
12.06.16
✎
10:13
|
(0) там чинить нечего - только начисто переписывать.
Общая идея такова - надо, чтобы запрос вернул только то, что надо обрабатывать, чтобы не приходилось проверки в цикле крутить. Кроме того, значения, которые надо поставить в данные, тоже должен запрос вернуть, чтобы не приходилось запросы в цикле делать. И запросы в цикле должен ни когда не делай. От запросов в цикле шерсть на ладошках вырастает и слепошарие образовывается |
|||
10
Лефмихалыч
12.06.16
✎
10:16
|
+(9) по первому циклу - запрос должен тебе вернуть регистраторы и номера строк проводок, которые надо обработать. Тогда ты в цикле по регистрторам получаешь набор, а в цикле по номерам строк получаешь Набор[Выборка.НомерСтроки].ЧтоТамНадо = Выборка.ЧтоУгодно;
|
|||
11
ILM
гуру
12.06.16
✎
10:16
|
Тоже и с движениями - выгрузили в запросе с исправленными данными и загрузили сразу в набор.
|
|||
12
RomanYS
12.06.16
✎
10:22
|
(10) +100
главное ещё не забыть сделать бэкап, чтобы потом была возможность запустить Набор[Выборка.НомерСтроки - 1].... Без "минус один" результат может быть неожиданным )). |
|||
13
Лефмихалыч
12.06.16
✎
10:53
|
(12) минусодин надо в запросе делать
|
|||
14
RomanYS
12.06.16
✎
17:42
|
(13) тоже согласен, толь тогда надо называть "это" индекс, а не номерстроки
|
|||
15
DonJon
15.06.16
✎
13:39
|
(13)Спасибо всем за ценные советы.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |