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