Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
16 Дек 2017, 18:02
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Остатки товара в форме списка справочника на определённую дату  (Прочитано 7647 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Сергей_1

  • *
  • Сообщений: 7
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-11-05
  • Сайт: 
  • Профессия: Программист 7.7
Остатки товара в форме списка справочника на определённую дату
У меня есть в форме списка для подбора в табличной части реквизит "Текст", там в сфойствах формула:  ОстатокТовараНаСкладе() , она вызывает из модуля

Функция ОстатокТовараНаСкладе()
   Если Склад.Выбран()=1 Тогда
      Возврат Формат(Регистр.ОстаткиТоваров.Остаток(Фирма,ТекущийЭлемент(),Склад,"ОстатокТовара"),"Ч6.1");
   Иначе
      Возврат Формат(Регистр.ОстаткиТоваров.СводныйОстаток(Фирма,ТекущийЭлемент(),,"ОстатокТовара"),"Ч6.1");
   КонецЕсли;
КонецФункции

и на против каждого товара я вижу остаток.
Но я хочу сделать ещё одну колонку, остаток на определённую дату (чтобы видеть в подборе, сколько было скажем 10 дней назад)
Пробывал

Функция НачОстаток() 
   Возврат Формат(Запрос.Товар),"Ч6.1");
   СпецРег = СоздатьОбъект("Регистры");
   Рег = СпецРег.ОстаткиТоваров;
   Рег.ВременныйРасчет();
   СпецРег.РассчитатьРегистрыНа(ДатаНачДвиж);
   Рег.Товар = ТекущийЭлемент();
   Рег.Фирма = Фирма;
   Если Склад.Выбран()=1 Тогда
      Рег.Склад = Склад;
   КонецЕсли;
   Рег.ОстаткиПолучить();
   ТекОстаток = Рег.ОстатокТовара;
      Возврат Формат(ТекОстаток,"Ч6.1");
КонецФункции

Это работает, но ОООЧЕНЬ медленно, пока каждая строка пересчитает свой регистр... Подскажите, как можно поступить?


Оффлайн Herby

  • *****
  • Сообщений: 936
  • РЕПУТАЦИЯ: 164
  • КПД: 18%
  • Регистрация: 2010-08-31
  • Сайт: 
  • Профессия: Программист 7.7
возможно прямой запрос к базе быстрее будет работать, но не факт что намного быстрее.. пробовать надо.
временной расчет тяжелый, здесь ничего не придумаешь.

но уменьшить время все равно можно, вот эти операции выполняйте единожды, при открытии справочника или при смене даты, на которую вам нужно показать остатки:
   
   // спецРег и Рег сделайте глобальными переменными модуля формы списка справочника
   СпецРег = СоздатьОбъект("Регистры");
   Рег = СпецРег.ОстаткиТоваров;
   Рег.ВременныйРасчет();
   СпецРег.РассчитатьРегистрыНа(ДатаНачДвиж);

а в функции НачОстаток() пусть выполняются только непосредственно методы по получению остатка.
В вашем же варианте, создание объекта регистра и временной расчет выполняется каждый раз для каждого товара, на что уходит не мало времени.

Оффлайн Сергей_1

  • *
  • Сообщений: 7
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-11-05
  • Сайт: 
  • Профессия: Программист 7.7
Хо-го! Заработало! В разы быстрее! Спасибо:) Сейчас ещё попробую от туда выдернуть движения (чтоб сразу показывало сколько приходило и уходило).
Я пытался при открытии формы пересчитать регистры, но не допёр переменными обозначить их:(
Добавлено: 06 Ноя 2012, 12:09

Не пойму почему не срабатывает смена даты: на форме поле ввода ДатаНач, в нём формула СменаДатыНачала(), а в модуле

Процедура СменаДатыНачала()
   ДатаНачПамять=ДатаНач;
КонецПроцедуры

Вот эта ДатаНачПамять не меняется после смены ДатаНач

Последний раз редактировалось: Сергей_1; 06 Ноя 2012, 12:09

Оффлайн Herby

  • *****
  • Сообщений: 936
  • РЕПУТАЦИЯ: 164
  • КПД: 18%
  • Регистрация: 2010-08-31
  • Сайт: 
  • Профессия: Программист 7.7
а что это за "ДатаНачПамять"? она во временном расчете регистра участвует или где? 

Оффлайн Сергей_1

  • *
  • Сообщений: 7
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-11-05
  • Сайт: 
  • Профессия: Программист 7.7
Упс, простите, запарился уже, другую переменную смотр...
Добавлено: 06 Ноя 2012, 21:12

   // спецРег и Рег сделайте глобальными переменными модуля формы списка справочника
   СпецРег = СоздатьОбъект("Регистры");
   Рег = СпецРег.ОстаткиТоваров;
   Рег.ВременныйРасчет();
   СпецРег.РассчитатьРегистрыНа(ДатаНачДвиж);

А я могу сюда же добавить примерно следущее:
Рег.ВыбратьДвижения(ДатаНачДвиж,ДатаКон );

А в функциях
   Пока Рег.ПолучитьДвижение() >
???

Последний раз редактировалось: Сергей_1; 06 Ноя 2012, 21:12

Оффлайн Herby

  • *****
  • Сообщений: 936
  • РЕПУТАЦИЯ: 164
  • КПД: 18%
  • Регистрация: 2010-08-31
  • Сайт: 
  • Профессия: Программист 7.7
смотря что хотите сделать. если выбираете движения для каждого товара, то нет.
для каждого товара нужно устанавливать свой фильтр и потом открывать выборку

Оффлайн Сергей_1

  • *
  • Сообщений: 7
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-11-05
  • Сайт: 
  • Профессия: Программист 7.7
Это получатся такие тормоза...
А запрос создать один раз, а потом с него выбирать получится?

Оффлайн Herby

  • *****
  • Сообщений: 936
  • РЕПУТАЦИЯ: 164
  • КПД: 18%
  • Регистрация: 2010-08-31
  • Сайт: 
  • Профессия: Программист 7.7
из запроса данные вытягиваются быстро, но а сам запрос вы в какой момент будете выполнять?
при открытии? и будет справочник открываться "полчаса".

а показывать приход/расход в справочнике очень обязательно или вы делаете так... для общего развития?

Оффлайн Сергей_1

  • *
  • Сообщений: 7
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-11-05
  • Сайт: 
  • Профессия: Программист 7.7
а показывать приход/расход в справочнике очень обязательно или вы делаете так... для общего развития?
Удобней работать будет. Я открываю подбор, и вижу сколько было скажем 10 дней назад, сколько пришло-ушло, и по этим движениям решаю сколько надо дозаказать.

Оффлайн Herby

  • *****
  • Сообщений: 936
  • РЕПУТАЦИЯ: 164
  • КПД: 18%
  • Регистрация: 2010-08-31
  • Сайт: 
  • Профессия: Программист 7.7
а если создать механизм автоматического заказа/дозаказа?


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
157 Сообщений
ilyay ilyay
66 Сообщений
alex0402
53 Сообщений
AIFrame
47 Сообщений
oleg-x
44 Сообщений
andron81_81
44 Сообщений
BuhRust
33 Сообщений
MuI_I_Ika MuI_I_Ika
32 Сообщений
Golickoff Golickoff
31 Сообщений
Dima Dddd Dima Dddd
24 Сообщений

* Кто онлайн

  • Точка Гостей: 243
  • Точка Скрытых: 0
  • Точка Пользователей: 8
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal