Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Последнее поступление товара.          
Sede Подменю пользователя
сообщение 15.09.15, 16:26
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 51
Спасибо сказали: 2 раз
Рейтинг: 0

Доброго Дня.
Подсобите пожалуйста:
Есть:
ТаблицаЗначений (тзТаблица) с колонками - Товар(заполнено), Контрагент(пусто), датаПоследнегоПоступления(пусто)

Как заполнить пустые колонки.

Данную задачу решил таким путем:
Процедура ЗапросПН()
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(ЗапросПН)      
    |Период с (НачГода(ТекущаяДата())) по (ТекущаяДата());
//    |Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Контрагент = Документ.ПриходнаяНакладная.Контрагент;
    |ТМЦ = Документ.ПриходнаяНакладная.ТМЦ;
    |ДатаДок = Документ.ПриходнаяНакладная.ДатаДок;
    |Группировка ТМЦ;
    |Условие(ТМЦ = тзТаблица.Товар);
    |"//}}ЗАПРОС
;
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

        тзТаблица.Контрагент = Запрос.Контрагент;
        тзТаблица.ДатаПослПост=Запрос.ДатаДок;

КонецПроцедуры


Далее просто делаю перебор самой таблицы
тзТаблица.ВыбратьСтроки();
Пока тзТаблица.ПолучитьСтроку()=1 Цикл
ЗапросПН();      
КонецЦикла;


Все работает, результат правильный.
Но больно долго думает, особенно когда товаров много. Что-то мне подсказывает что есть варианты "По правильнее" и более быстрые.

Naghual Подменю пользователя
сообщение 15.09.15, 16:29
Сообщение #2

Завсегдатай
****
Группа: Пользователи
Сообщений: 102
Из: Днепропетровск
Спасибо сказали: 21 раз
Рейтинг: 0

Конечно долго! Запрос на каждую строку ТЗ - это-ж кошмар!
сделайте СписокЗначений со всеми товарами из ТЗ и получи все результаты в одном запросе.

Потом уже циклом по результатам пройдись и проставь значения в ТЗ.


Signature
Я желаю всем Счастья!

Sede Подменю пользователя
сообщение 15.09.15, 16:43
Сообщение #3

Говорящий
***
Группа: Пользователи
Сообщений: 51
Спасибо сказали: 2 раз
Рейтинг: 0

А примерчик как в запрос засунуть список можно?

Naghual Подменю пользователя
сообщение 15.09.15, 16:50
Сообщение #4

Завсегдатай
****
Группа: Пользователи
Сообщений: 102
Из: Днепропетровск
Спасибо сказали: 21 раз
Рейтинг: 0

можно так:
|Условие(ТМЦ В СЗ);

Но более правильно будет так:
|Условие(СЗ.Принадлежит(ТМЦ)=1);


Signature
Я желаю всем Счастья!

Спасибо сказали: Sede,

Sede Подменю пользователя
сообщение 15.09.15, 16:57
Сообщение #5

Говорящий
***
Группа: Пользователи
Сообщений: 51
Спасибо сказали: 2 раз
Рейтинг: 0

Цитата(Naghual @ 15.09.15, 17:50) *
можно так:
|Условие(ТМЦ В СЗ);

Но более правильно будет так:
|Условие(СЗ.Принадлежит(ТМЦ)=1);


Большое спасибо.
Казалось бы ничего сложного... одна строчка но найти нормальной учебной информации днем с огнем не сыщешь.

mister-x Подменю пользователя
сообщение 15.09.15, 21:58
Сообщение #6

...
Иконка группы
Модератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 3477
Из: Тернопіль
Спасибо сказали: 1417 раз
Рейтинг: 0

Цитата(Sede @ 15.09.15, 16:57) *
но найти нормальной учебной информации днем с огнем не сыщешь.

сюди заглядали?

Спасибо сказали: Sede,

Dartvader111 Подменю пользователя
сообщение 17.09.15, 9:33
Сообщение #7

Общительный
**
Группа: Пользователи
Сообщений: 29
Спасибо сказали: 8 раз
Рейтинг: 0

Ускорить очень просто в десятки раз.


    ТекстЗапроса = 
    "Период с (НачГода(ТекущаяДата())) по (ТекущаяДата());
    |Без итогов;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Контрагент = Документ.ПриходнаяНакладная.Контрагент;
    |ТМЦ = Документ.ПриходнаяНакладная.ТМЦ;
    |ДатаДок = Документ.ПриходнаяНакладная.ДатаДок;
    |Группировка Контрагент без групп без упорядочивания;
    |Группировка ТМЦ без групп без упорядочивания;
    |Группировка ДатаДок без групп без упорядочивания;
    |Условие(ТМЦ = тзТаблица.Товар);
    |";
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    Запрос.Выгрузить(тбТоварыПрихода)
    тбТоварыПрихода.Сортировать("Товар,ДатаДок");
КонецПроцедуры



 i 

Код можно выделять
 


Сообщение отредактировал Vofka - 17.09.15, 9:49

Спасибо сказали: twilight_dream,

twilight_dream Подменю пользователя
сообщение 17.09.15, 9:51
Сообщение #8

Оратор
*****
Группа: Пользователи
Сообщений: 265
Спасибо сказали: 4 раз
Рейтинг: 0

Вы что ребята, беленов объелись, простите, не сдержался. Вообще всю таблицу нужно получить одним запросом.
А если запрос медленно работает, то плюсы ставить и SQL запросом.


Signature

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 20.04.24, 1:34
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!