7.7 Автозаполнение табличной части номенклатурой с положительным остатком

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем BOBS, 4 апр 2014.

  1. TopicStarter Overlay
    BOBS
    Offline

    BOBS

    Регистрация:
    22 май 2010
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    Подскажите пожалуйста, (самодельная кофига, многократно переписанная разными специалистами). Начальству потребовался документ для корректировки цен, при создании документа по кнопочке должна заполняться табличная часть выборкой из номенклатуры (всех позиций имеющих остаток больше 0).
    Повыдирал из чужого кода в этой базе похожие функции и насколько смог скомпоновал их, сейчас выборка делает в табличной части только номер по порядку и количество остатков из регистра. никак не соображу как прилепить наименование номенклатуры чтоб от него уже плясать с заполнением закупочной и продажной стоимости.
    Код:
    Процедура ЗаполняемОстатками()
    НоваяСтрока();
    СпрТов=СоздатьОбъект("Справочник.Товары");
    ВыбратьСтроки();
    Пока ПолучитьСтроку()=1 Цикл
    СпрТов.ВыбратьЭлементы();
    Пока СпрТов.ПолучитьЭлемент()=1 Цикл
    Если СпрТов.ТекущийЭлемент().ЭтоГруппа()=1 Тогда
    Иначе
    Если (Регистр.ОстаткиТоваров.Остаток(СпрТов.ТекущийЭлемент(),"Остаток"))>0 Тогда
    НоваяСтрока();
    Закупочная=Наименование.Закупочная.Получить(ДатаДок);
    Продажная=Наименование.Продажная.Получить(ДатаДок);
    Количество=Регистр.ОстаткиТоваров.Остаток(СпрТов.ТекущийЭлемент(),"Остаток")
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    КонецПроцедуры
    
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    раз конфа самописная, то и говорить не о чем без МДшника
  3. TopicStarter Overlay
    BOBS
    Offline

    BOBS

    Регистрация:
    22 май 2010
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    утро оказалось мудреннее вечера ))
    Код:
    Процедура ЗаполняемОстатками()
        НоваяСтрока();
        СпрТов=СоздатьОбъект("Справочник.Товары");
        ВыбратьСтроки();
        Пока ПолучитьСтроку()=1 Цикл
            СпрТов.ВыбратьЭлементы();
        Пока СпрТов.ПолучитьЭлемент()=1 Цикл  
            Если СпрТов.ТекущийЭлемент().ЭтоГруппа()=1 Тогда
        Иначе
            Товар=СпрТов.ТекущийЭлемент();      //  вот это вставил и заработало.
        Если (Регистр.ОстаткиТоваров.Остаток(СпрТов.ТекущийЭлемент(),"Остаток"))>0 Тогда
            НоваяСтрока();
            Количество=Регистр.ОстаткиТоваров.Остаток(СпрТов.ТекущийЭлемент(),"Остаток");
            Продажная=Товар.Продажная.Получить(ДатаДок);
            ПродажнаяОпт=Товар.ПродажнаяОпт.Получить(ДатаДок);
            Закупочная=Товар.Закупочная.Получить(ДатаДок);
            Наименование=Товар.Наименование;      // а вот это не работает.
            Код=Товар.Код;
            Ед=Товар.Ед;
            Гарантия=Товар.Гарантия;
            КонецЕсли;
        КонецЕсли;
            КонецЦикла;
        КонецЦикла;
    КонецПроцедуры 
    Реквизиты стало нормально цеплять, а вот само наименование товара не берет ((
    Подскажите как получить Наименование товара, если его нет в списке обычных реквизитов у номенклатуры ?
    Точнее как правильно получить встроенный, а не добавленный реквизит.
  4. LordMaverick
    Online

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.441
    Симпатии:
    374
    Баллы:
    104
    а если не так
    Код:
    Наименование=Товар.Наименование; // а вот это не работает.
    
    а так
    Код:
    Наименование=Товар;
    
    ;-)

    PS
    да и код по идее "долгий" по выполнению, столько раз регистр построчно дёргать
    по идее лучше один раз запросом из регистра взять данные (по условиям) и поместить в ТЗ а уж потом с ней работать
    BOBS нравится это.
  5. TopicStarter Overlay
    BOBS
    Offline

    BOBS

    Регистрация:
    22 май 2010
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    Спасибо большое! вот оказывается как все просто )))
    насчет времени, пока спасает маленькая база, в выборке всего 400 строк. С 1С я пока на уровне копи-паста+метод тыка )))
    и ещё один вопрос, откуда то берется пустая первая строка.
  6. LordMaverick
    Online

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.441
    Симпатии:
    374
    Баллы:
    104
    наверное потому что при входе в процедуру
    стоит НоваяСтрока
    Код:
    Процедура ЗаполняемОстатками()
    НоваяСтрока();
    
    и потом , когда условие сработало, снова НоваяСтрока
    --- Объединение сообщений, 5 апр 2014 ---
    желательно избегать конструкций с двумя "."
    типа такой
    Код:
    Регистр.ОстаткиТоваров.Остаток(СпрТов.ТекущийЭлемент()
    
  7. LordMaverick
    Online

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.441
    Симпатии:
    374
    Баллы:
    104
    код примерно так надо
    Код:
    Процедура ЗаполняемОстатками()
        СпрТов=СоздатьОбъект("Справочник.Товары");
        ВыбратьСтроки();
        Пока ПолучитьСтроку()=1 Цикл
            СпрТов.ВыбратьЭлементы();
            Пока СпрТов.ПолучитьЭлемент()=1 Цикл  
                Товар=СпрТов.ТекущийЭлемент();
                Если Товар.ЭтоГруппа()=1 Тогда
                    Продолжить;
                Иначе
                    Если (Регистр.ОстаткиТоваров.Остаток(Товар,"Остаток"))>0 Тогда
                        НоваяСтрока();
                        Количество=Регистр.ОстаткиТоваров.Остаток(Товар,"Остаток");
                        Продажная=Товар.Продажная.Получить(ДатаДок);
                        ПродажнаяОпт=Товар.ПродажнаяОпт.Получить(ДатаДок);
                        Закупочная=Товар.Закупочная.Получить(ДатаДок);
                        Наименование=Товар;
                        Код=Товар.Код;
                        Ед=Товар.Ед;
                        Гарантия=Товар.Гарантия;
                    КонецЕсли;
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;
    КонецПроцедуры
    
    BOBS нравится это.
  8. TopicStarter Overlay
    BOBS
    Offline

    BOBS

    Регистрация:
    22 май 2010
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    Спасибо за совет!
    а по поводу новой строки в начале, если убираю, то без неё код не выполняется вообще((
  9. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Код:
    Процедура ЗаполняемОстатками()
        УдалитьСтроки();
        СпрТов=СоздатьОбъект("Справочник.Товары");
        СпрТов.ВыбратьЭлементы();
        Пока СпрТов.ПолучитьЭлемент()=1 Цикл
            Если СпрТов.ТекущийЭлемент().ЭтоГруппа()=1 Тогда
                Продолжить;
           Иначе
        Товар=СпрТов.ТекущийЭлемент();    
        остаток=Регистр.ОстаткиТоваров.Остаток(Товар,"Остаток");
        Если (Остаток)>0 Тогда
            НоваяСтрока();
            Количество=Остаток;
            Продажная=Товар.Продажная.Получить(ДатаДок);
            ПродажнаяОпт=Товар.ПродажнаяОпт.Получить(ДатаДок);
            Закупочная=Товар.Закупочная.Получить(ДатаДок);
           Наименование=Товар;        Код=Товар.Код;
            Ед=Товар.Ед;
            Гарантия=Товар.Гарантия;
            КонецЕсли;
        КонецЕсли;
        КонецЦикла;
    КонецПроцедуры 
    BOBS нравится это.
  10. TopicStarter Overlay
    BOBS
    Offline

    BOBS

    Регистрация:
    22 май 2010
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    Спасибо большое! УдалитьСтроки(); как раз то что надо! теперь идеально работает.
    и даже намного быстрее стало выполняться с остатком где 1 запрос вместо двух.
  11. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Конечно быстрее)))
    Еще момент - можно задавать вопрос на очистку табличной части если она не пустая... Вдруг СЛУЧАЙНО нажали заполнение
    BOBS нравится это.
  12. TopicStarter Overlay
    BOBS
    Offline

    BOBS

    Регистрация:
    22 май 2010
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    Как то не подумал об этом )) вставил, Спасибо за подсказку!
  13. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Не за что.

Поделиться этой страницей