![]() |
|
крутит цикл | ☑ | ||
---|---|---|---|---|
0
Nemirov
27.04.20
✎
10:54
|
Добрый день. Уже голова не варит 1с бухгалтерия при выполнении цикл не останавливается подскажите где я ошибку сделал
Процедура КнопкаВыполнитьНажатие(Кнопка) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОтчетОРозничныхПродажах.Ссылка КАК Ссылка, | ОтчетОРозничныхПродажах.Дата КАК Дата, | ОтчетОРозничныхПродажахТовары.Субконто, | ВЫБОР | КОГДА ПриходныйКассовыйОрдер.Ссылка ЕСТЬ NULL | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ПроведенныеПКО |ИЗ | Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах | ПО ПриходныйКассовыйОрдер.ДокументОснование = ОтчетОРозничныхПродажах.Ссылка, | Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары |ГДЕ | ОтчетОРозничныхПродажах.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания"; Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ЕстьПКО = Документы.ПриходныйКассовыйОрдер.НайтиПоРеквизиту("ДокументОснование", ВыборкаДетальныеЗаписи.Ссылка); Если НЕ ВыборкаДетальныеЗаписи.ПроведенныеПКО Тогда Если ЭлементыФормы.БезПерезаписиДокумента.Значение = Ложь Тогда СуществующийДокумент = ЕстьПКО.ПолучитьОбъект(); Если ЕстьПКО.ПометкаУдаления = Истина Тогда Сообщить(" " + СуществующийДокумент + " " + "Помечен на удаление"); Продолжить; Иначе СуществующийДокумент.Заполнить(ВыборкаДетальныеЗаписи.ссылка); Субконто = ВыборкаДетальныеЗаписи.Субконто; СуществующийДокумент.Дата = ВыборкаДетальныеЗаписи.Дата; СуществующийДокумент.ПринятоОт = ВыборкаДетальныеЗаписи.Субконто; СуществующийДокумент.Записать(РежимЗаписиДокумента.Проведение); Сообщить("" +СуществующийДокумент + " " + "Переписан",); КонецЕсли; Иначе Сообщить("Пропускаем существующие"); КонецЕсли; Продолжить; КонецЕсли; Док = Документы.ПриходныйКассовыйОрдер.СоздатьДокумент(); Док.Заполнить(ВыборкаДетальныеЗаписи.ссылка); Док.Дата = ВыборкаДетальныеЗаписи.Дата; Попытка Док.Записать(РежимЗаписиДокумента.Проведение); Сообщить("" + Док.ЭтотОбъект + " " + "создан"); Исключение Сообщить("" + ОписаниеОшибки() ); КонецПопытки; КонецЦикла; Возврат; КонецПроцедуры |
|||
1
RomanYS
27.04.20
✎
10:58
|
(0) проблема не в цикле, а в запросе. Вот здесь
| ПО ПриходныйКассовыйОрдер.ДокументОснование = ОтчетОРозничныхПродажах.Ссылка, | Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары |
|||
2
Ненавижу 1С
гуру
27.04.20
✎
10:58
|
(0) потому что ты постоянно перезаписываешь документ из выборки и ее сбиваешь, выгрузи результат в таблицу значений
|
|||
3
Ненавижу 1С
гуру
27.04.20
✎
10:59
|
+(1) ну это тоже ад
|
|||
4
RomanYS
27.04.20
✎
11:00
|
(2) Выборку запроса нельзя сбить записью документов. Это же не ДокументВыборка
|
|||
5
dmpl
27.04.20
✎
11:01
|
Может начинается битва обработчиков или подписок на события?
|
|||
6
dmpl
27.04.20
✎
11:02
|
Рекомендую включить замер производительности и посмотреть, где что крутится.
|
|||
7
Franchiser
гуру
27.04.20
✎
11:03
|
Итоги добавь
|
|||
8
Franchiser
гуру
27.04.20
✎
11:04
|
у тебя в запросе декартово произведение
|
|||
9
Nemirov
27.04.20
✎
11:05
|
Получилась такая беда я когда запрос изменил, добавив субконто, а остальное левым сединением может поэтому) просто до этого все нормально перезаписывалось. В отчете о розничных продаж когда вводишь эти накладные на основании, не заполняется от кого получено, единственный способ я так понял добавив субконто, я может не правильно соединение сделал? (8)
|
|||
10
Nemirov
27.04.20
✎
11:06
|
До этого запрос такой был
"ВЫБРАТЬ | ОтчетОРозничныхПродажах.Ссылка КАК Ссылка, | ОтчетОРозничныхПродажах.Дата КАК Дата, | ВЫБОР | КОГДА ПриходныйКассовыйОрдер.Ссылка ЕСТЬ NULL | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ПроведенныеПКО |ИЗ | Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах | ПО ПриходныйКассовыйОрдер.ДокументОснование = ОтчетОРозничныхПродажах.Ссылка |ГДЕ | ОтчетОРозничныхПродажах.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания |
|||
11
Nemirov
27.04.20
✎
11:07
|
Извиняюсь такой
"ВЫБРАТЬ | ОтчетОРозничныхПродажах.Ссылка, | ОтчетОРозничныхПродажах.Дата, | ВЫБОР | КОГДА ПриходныйКассовыйОрдер.Ссылка ЕСТЬ NULL | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ПроведенныеПКО |ИЗ | Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер | ПО (ПриходныйКассовыйОрдер.ДокументОснование = ОтчетОРозничныхПродажах.Ссылка) |ГДЕ | ОтчетОРозничныхПродажах.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания"; |
|||
12
ИУБиПовиц
27.04.20
✎
11:11
|
У вас соединение изменилось.
А как вы определяете что именно цикл крутиться, т.е. до выборки вообще доходит? может просто тупо документов больше стало и запрос не успевает обработать?:) |
|||
13
RomanYS
27.04.20
✎
11:11
|
(9) Да. Соединение ты сделал неправильно. Ты его вообще не сделал, а сделал (8)
|
|||
14
Nemirov
27.04.20
✎
11:37
|
(12) Сообщить("" +СуществующийДокумент + " " + "Переписан",); перезаписывает по кругу существующие.
|
|||
15
Nemirov
27.04.20
✎
11:37
|
(13) Вариант поправить помочь мои декарты есть?
|
|||
16
Nemirov
27.04.20
✎
11:38
|
(15) Может свернуть покажете как?
|
|||
17
Ненавижу 1С
гуру
27.04.20
✎
11:44
|
ну сделай хотя бы РАЗЛИЧНЫЕ
но вот интересно, что будет когда в одном документе будет разное ОтчетОРозничныхПродажахТовары.Субконто |
|||
18
ИУБиПовиц
27.04.20
✎
11:52
|
(14) Ну на сколько я понимаю, перезаписывать будет сколько строк в документе. сделайте что ли обход по группировкам результат запроса, первым циклом по доку, вторым субконто выбираете
или максимум субконто, что б одно из субконтов из тч выбиралось |
|||
19
Nemirov
27.04.20
✎
11:52
|
хорошо давай другим путем, если не субконто как определить какой структурной единице принадлежит документ отчет о розничных продажах) если справочника структурные единицы нет и единственное где указан чей документ это в субконто(17)
|
|||
20
Nemirov
27.04.20
✎
11:52
|
(18) Ладно спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |