|
Запрос в обработке проведения | ☑ | ||
---|---|---|---|---|
0
prilforreal
31.10.18
✎
09:46
|
Доброго утра, Миста! В обработке проведения запросом нахожу приходную запись из того же регистра, чтобы из нее заполнить расходную запись, запросом нахожу ее через штрихкод, но почему то код в самой записи регистра не распознается, подскажите где ошибся?
И еще меня терзают чувства что можно все сделать как то проще, без запроса... если СокрЛП(ТекСтрокаТабличнаяЧасть1.Товар.Родитель)="002_ИЗДЕЛИЯ" тогда ШК=ТекСтрокаТабличнаяЧасть1.ШтрихКод; ШтК=ЛЕВ(ШК,13); //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОтправкаОстатки.Пункт, | ОтправкаОстатки.ВремяОтправки, | ОтправкаОстатки.Контрагент, | ОтправкаОстатки.Комментарий, | ОтправкаОстатки.Маршрут, | ОтправкаОстатки.ВремяПрибытия, | ОтправкаОстатки.Код, | ОтправкаОстатки.ПлощадьОстаток |ИЗ | РегистрНакопления.Отправка.Остатки КАК ОтправкаОстатки |ГДЕ | ОтправкаОстатки.Код = &ШтК"; Запрос.УстановитьПараметр("Штк", Штк); //Рез = Запрос.Выполнить.Выбрать(); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); КодОтпр=ВыборкаДетальныеЗаписи.Код; Сообщить(КодОтпр); Если ШтК=ВыборкаДетальныеЗаписи.Код Тогда Движения.Отправка.Записывать=Истина; Движение=Движения.Отправка.Добавить(); Движение.ВидДвижения=ВидДвиженияНакопления.Расход; Движение.Период=Дата; Движение.Контрагент=Контрагент; Движение.Комментарий=ВыборкаДетальныеЗаписи.Комментарий; Движение.Маршрут=ВыборкаДетальныеЗаписи.Маршрут; Движение.Пункт=ВыборкаДетальныеЗаписи.Пункт; Движение.ВремяОтправки=ВыборкаДетальныеЗаписи.ВремяОтправки; Движение.ВремяПрибытия=ВыборкаДетальныеЗаписи.ВремяПрибытия; Движение.Площадь=ВыборкаДетальныеЗаписи.ПлощадьОстаток; Движение.Код=ВыборкаДетальныеЗаписи.Код; КонецЕсли; |
|||
1
Радим1987
31.10.18
✎
09:57
|
Жди ща начнется)))
|
|||
2
azernot
31.10.18
✎
09:58
|
Самое первое:
нет строки ВыборкаДетальныеЗаписи.Слудущий() |
|||
3
prilforreal
31.10.18
✎
10:03
|
(2) Это же обработка проведения, все итак в цикле, мне только одна запись нужна, код которой соответствует коду строки.
|
|||
4
azernot
31.10.18
✎
10:05
|
(3) Мсьё профессионал? Тогда что мсьё делает на Мисте?
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); КодОтпр=ВыборкаДетальныеЗаписи.Код; Ожидаемо даёт КОдОТпр = Неопределено. Чисто ради интереса, попробуй ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); ВыборкаДетальныеЗаписи.Следующий(); КодОтпр=ВыборкаДетальныеЗаписи.Код; |
|||
5
azernot
31.10.18
✎
10:06
|
+(4)
А вообще, код из (0) это треш. Запомни ссылку на эту ветку. Если будешь продолжать изучать 1С, через пару лет загляни в эту ветку. Поржёшь. |
|||
6
Радим1987
31.10.18
✎
10:07
|
(5) +
|
|||
7
prilforreal
31.10.18
✎
10:10
|
(5) Хорошо) Почитаю обязательно)) Поместил в цикл работу с выборкой и все заработало)
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл КодОтпр=ВыборкаДетальныеЗаписи.Код; Сообщить(КодОтпр); Если ШтК=ВыборкаДетальныеЗаписи.Код Тогда // Вставить обработку выборки ВыборкаДетальныеЗаписи //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА Движения.Отправка.Записывать=Истина; Движение=Движения.Отправка.Добавить(); Движение.ВидДвижения=ВидДвиженияНакопления.Расход; Движение.Период=Дата; Движение.Контрагент=Контрагент; Движение.Комментарий=ВыборкаДетальныеЗаписи.Комментарий; Движение.Маршрут=ВыборкаДетальныеЗаписи.Маршрут; Движение.Пункт=ВыборкаДетальныеЗаписи.Пункт; Движение.ВремяОтправки=ВыборкаДетальныеЗаписи.ВремяОтправки; Движение.ВремяПрибытия=ВыборкаДетальныеЗаписи.ВремяПрибытия; Движение.Площадь=ВыборкаДетальныеЗаписи.ПлощадьОстаток; Движение.Код=ВыборкаДетальныеЗаписи.Код; КонецЕсли; КонецЦикла; |
|||
8
hhhh
31.10.18
✎
10:12
|
(5) он уже давно здесь мелькает. похоже уже ас.
|
|||
9
prilforreal
31.10.18
✎
10:12
|
(5) Спасибо, Сэмпай!)
|
|||
10
azernot
31.10.18
✎
10:18
|
(7) Вопрос вовсе не в цикле.
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); лишь открывает выборку А вот ВыборкаДетальныеЗаписи.Следующий(); позиционирет не следующую запись. Если в запросе предполагается всего одна строка, то конструкция Пока ВыборкаДетальныеЗаписи.Следующий() Цикл не нужна. Достаточно спозиционироваться один раз. Вообще же, желательно при проведении документов, запрос выполнять один раз, по всей табличной части, а потом уже перебирая результат запроса в цикле формировать движения. Также крайне нежелательно обращаться к реквизитам ссылки через точку: ТекСтрокаТабличнаяЧасть1.Товар.Родитель в этот момент система считывает данные всего объекта Товар, что приводит к тормозам, а поскольку это в транзакции проведения, ещё и к блокировкам. |
|||
11
prilforreal
31.10.18
✎
10:24
|
(10) Спасибо! А как спозиционироваться один раз без ВыборкаДетальныеЗаписи.Следующий();?
|
|||
12
azernot
31.10.18
✎
10:26
|
(11) Просто скопировать код из (4).
Ну или Если ВыборкаДетальныеЗаписи.Следующий() Тогда вместе Пока ВыборкаДетальныеЗаписи.Следующий() Цикл |
|||
13
azernot
31.10.18
✎
10:26
|
*(12) вместО
|
|||
14
prilforreal
31.10.18
✎
10:28
|
(13) Ясно, буду практиковать, еще раз спасибо и хорошего дня)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |