Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Запрос в обработке проведения

Запрос в обработке проведения
Я
   prilforreal
 
31.10.18 - 09:46
Доброго утра, Миста! В обработке проведения запросом нахожу приходную запись из того же регистра, чтобы из нее заполнить расходную запись, запросом нахожу ее через штрихкод, но почему то код в самой записи регистра не распознается, подскажите где ошибся?
И еще меня терзают чувства что можно все сделать как то проще, без запроса...

если СокрЛП(ТекСтрокаТабличнаяЧасть1.Товар.Родитель)="002_ИЗДЕЛИЯ"  тогда
        ШК=ТекСтрокаТабличнаяЧасть1.ШтрихКод;
        ШтК=ЛЕВ(ШК,13);
              //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ОтправкаОстатки.Пункт,
        |    ОтправкаОстатки.ВремяОтправки,
        |    ОтправкаОстатки.Контрагент,
        |    ОтправкаОстатки.Комментарий,
        |    ОтправкаОстатки.Маршрут,
        |    ОтправкаОстатки.ВремяПрибытия,
        |    ОтправкаОстатки.Код,
        |    ОтправкаОстатки.ПлощадьОстаток
        |ИЗ
        |    РегистрНакопления.Отправка.Остатки КАК ОтправкаОстатки
        |ГДЕ
        |    ОтправкаОстатки.Код = &ШтК";
    
    Запрос.УстановитьПараметр("Штк", Штк);    
    //Рез = Запрос.Выполнить.Выбрать();
    
    РезультатЗапроса = Запрос.Выполнить();    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    КодОтпр=ВыборкаДетальныеЗаписи.Код;    
    Сообщить(КодОтпр);
    Если ШтК=ВыборкаДетальныеЗаписи.Код Тогда
        
            Движения.Отправка.Записывать=Истина;
            Движение=Движения.Отправка.Добавить();
            Движение.ВидДвижения=ВидДвиженияНакопления.Расход;
            Движение.Период=Дата;
            Движение.Контрагент=Контрагент;
            Движение.Комментарий=ВыборкаДетальныеЗаписи.Комментарий;
            Движение.Маршрут=ВыборкаДетальныеЗаписи.Маршрут;
            Движение.Пункт=ВыборкаДетальныеЗаписи.Пункт;
            Движение.ВремяОтправки=ВыборкаДетальныеЗаписи.ВремяОтправки;
            Движение.ВремяПрибытия=ВыборкаДетальныеЗаписи.ВремяПрибытия;
            Движение.Площадь=ВыборкаДетальныеЗаписи.ПлощадьОстаток;
            Движение.Код=ВыборкаДетальныеЗаписи.Код;

    КонецЕсли;
 
 
   Радим1987
 
1 - 31.10.18 - 09:57
Жди ща начнется)))
   azernot
 
2 - 31.10.18 - 09:58
Самое первое:
нет строки
ВыборкаДетальныеЗаписи.Слудущий()
   prilforreal
 
3 - 31.10.18 - 10:03
(2) Это же обработка проведения, все итак в цикле, мне только одна запись нужна, код которой соответствует коду строки.
   azernot
 
4 - 31.10.18 - 10:05
(3) Мсьё профессионал? Тогда что мсьё делает на Мисте?

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
КодОтпр=ВыборкаДетальныеЗаписи.Код;    

Ожидаемо даёт КОдОТпр = Неопределено.

Чисто ради интереса, попробуй

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ВыборкаДетальныеЗаписи.Следующий();
КодОтпр=ВыборкаДетальныеЗаписи.Код;
   azernot
 
5 - 31.10.18 - 10:06
+(4)
А вообще, код из (0) это треш. Запомни ссылку на эту ветку. Если будешь продолжать изучать 1С, через пару лет загляни в эту ветку. Поржёшь.
   Радим1987
 
6 - 31.10.18 - 10:07
(5) +
   prilforreal
 
7 - 31.10.18 - 10:10
(5) Хорошо) Почитаю обязательно)) Поместил в цикл работу с выборкой и все заработало)
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    КодОтпр=ВыборкаДетальныеЗаписи.Код;    
    Сообщить(КодОтпр);
    Если ШтК=ВыборкаДетальныеЗаписи.Код Тогда
    
        // Вставить обработку выборки ВыборкаДетальныеЗаписи

        
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


            Движения.Отправка.Записывать=Истина;
            Движение=Движения.Отправка.Добавить();
            Движение.ВидДвижения=ВидДвиженияНакопления.Расход;
            Движение.Период=Дата;
            Движение.Контрагент=Контрагент;
            Движение.Комментарий=ВыборкаДетальныеЗаписи.Комментарий;
            Движение.Маршрут=ВыборкаДетальныеЗаписи.Маршрут;
            Движение.Пункт=ВыборкаДетальныеЗаписи.Пункт;
            Движение.ВремяОтправки=ВыборкаДетальныеЗаписи.ВремяОтправки;
            Движение.ВремяПрибытия=ВыборкаДетальныеЗаписи.ВремяПрибытия;
            Движение.Площадь=ВыборкаДетальныеЗаписи.ПлощадьОстаток;
            Движение.Код=ВыборкаДетальныеЗаписи.Код;

        КонецЕсли;
        КонецЦикла;
   hhhh
 
8 - 31.10.18 - 10:12
(5) он уже давно здесь мелькает. похоже уже ас.
   prilforreal
 
9 - 31.10.18 - 10:12
(5) Спасибо, Сэмпай!)
   azernot
 
10 - 31.10.18 - 10:18
(7) Вопрос вовсе не в цикле.
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
лишь открывает выборку

А вот 
ВыборкаДетальныеЗаписи.Следующий();
позиционирет не следующую запись.

Если в запросе предполагается всего одна строка, то конструкция
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
не нужна. Достаточно спозиционироваться один раз.


Вообще же, желательно при проведении документов,  запрос выполнять один раз, по всей табличной части, а потом уже перебирая результат запроса в цикле формировать движения.

Также крайне нежелательно обращаться к реквизитам ссылки через точку:
ТекСтрокаТабличнаяЧасть1.Товар.Родитель
в этот момент система считывает данные всего объекта Товар, что приводит к тормозам, а поскольку это в транзакции проведения, ещё и к блокировкам.
   prilforreal
 
11 - 31.10.18 - 10:24
(10) Спасибо! А как спозиционироваться один раз без ВыборкаДетальныеЗаписи.Следующий();?
   azernot
 
12 - 31.10.18 - 10:26
(11) Просто скопировать код из (4).

Ну или
Если ВыборкаДетальныеЗаписи.Следующий() Тогда

вместе

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
   azernot
 
13 - 31.10.18 - 10:26
*(12) вместО
   prilforreal
 
14 - 31.10.18 - 10:28
(13) Ясно, буду практиковать, еще раз спасибо и хорошего дня)

Список тем форума
Рекламное место пустует  Рекламное место пустует
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.