Добавление колонки "остаток" в заказ поставщику

1. Daseraf 11.03.18 22:14 Сейчас в теме
Другую тему с таким же названием видел, но решения для себя не нашел.
Ребят, помогите пожалуйста:
Как переписать данный код для выполнения по команде (кнопка в форме) вместо ПриВыводеСтроки.
Вариант с "Видимость" я уже реализовал, но результат мало устраивает. Опыта, к сожалению, мало, задачу самостоятельно решить не могу.
На просторах интернета найден код, которых большую часть задачи для меня решает, но зависания при каждом действии (скроллинг, выбор позиции, добавление позиции) - просто убивает.
УТ10.3 Заказ поставщику:

//RS:
Функция ОстатокНаСкладе(Номенклатура) Экспорт
ВидСклада = Склад.ВидСклада;
Если ВидСклада = Перечисления.ВидыСкладов.НТТ Тогда
   Текст = "ВЫБРАТЬ
           |   ТоварыВНТТОстатки.КоличествоОстаток КАК Количество
           |ИЗ
           |   РегистрНакопления.ТоварыВНТТ.Остатки(&Дата, ) КАК ТоварыВНТТОстатки
           |ГДЕ
           |   ТоварыВНТТОстатки.Склад = &Склад
           |   И ТоварыВНТТОстатки.Номенклатура = &Номенклатура";
ИначеЕсли ВидСклада = Перечисления.ВидыСкладов.Оптовый Тогда
   Текст = "ВЫБРАТЬ
           |   ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество
           |ИЗ
           |   РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, ) КАК ТоварыНаСкладахОстатки
           |ГДЕ
           |   ТоварыНаСкладахОстатки.Склад = &Склад
           |   И ТоварыНаСкладахОстатки.Номенклатура = &Номенклатура";
ИначеЕсли ВидСклада = Перечисления.ВидыСкладов.Розничный Тогда
   Текст = "ВЫБРАТЬ
           |   ТоварыВРозницеОстатки.КоличествоОстаток КАК Количество
           |ИЗ
           |   РегистрНакопления.ТоварыВРознице.Остатки(&Дата, ) КАК ТоварыВРозницеОстатки
           |ГДЕ
           |   ТоварыВРозницеОстатки.Склад = &Склад
           |   И ТоварыВРозницеОстатки.Номенклатура = &Номенклатура";
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = Текст;
Запрос.УстановитьПараметр("Дата",Дата);
Запрос.УстановитьПараметр("Склад",Склад);
Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Количество = ?(Выборка.Следующий(),Выборка.Количество,0);
Возврат Количество;
КонецФункции

Функция ОстатокОрганизации(Номенклатура) Экспорт
Текст = "ВЫБРАТЬ
        |   ТоварыОрганизацийОстатки.КоличествоОстаток КАК Количество
        |ИЗ
        |   РегистрНакопления.ТоварыОрганизаций.Остатки(&Дата, ) КАК ТоварыОрганизацийОстатки
        |ГДЕ
        |   ТоварыОрганизацийОстатки.Организация = &Организация
        |   И ТоварыОрганизацийОстатки.Номенклатура = &Номенклатура";
Запрос = Новый Запрос;
Запрос.Текст = Текст;
Запрос.УстановитьПараметр("Дата",Дата);
Запрос.УстановитьПараметр("Организация",Организация);
Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Количество = ?(Выборка.Следующий(),Выборка.Количество,0);
Возврат Количество;
КонецФункции

Процедура ПоказатьОстатокСклада(КолонкиТабПоля, ЯчейкиСтрокиТабПоля, Номенклатура) Экспорт
Если КолонкиТабПоля.ОстатокСклада.Видимость Тогда
      Если ТипЗнч(Номенклатура) = Тип("СправочникСсылка.Номенклатура") Тогда
          Остаток = ОстатокНаСкладе(Номенклатура);
         ЯчейкиСтрокиТабПоля.ОстатокСклада.УстановитьТекст(Остаток);
      Иначе
         ЯчейкиСтрокиТабПоля.ОстатокСклада.УстановитьТекст("");
      КонецЕсли;
КонецЕсли;   
КонецПроцедуры

Процедура ПоказатьОстатокОрганизации(КолонкиТабПоля, ЯчейкиСтрокиТабПоля, Номенклатура) Экспорт
Если КолонкиТабПоля.ОстатокОрганизации.Видимость Тогда
      Если ТипЗнч(Номенклатура) = Тип("СправочникСсылка.Номенклатура") Тогда
          Остаток = ОстатокОрганизации(Номенклатура);
         ЯчейкиСтрокиТабПоля.ОстатокОрганизации.УстановитьТекст(Остаток);
      Иначе
         ЯчейкиСтрокиТабПоля.ОстатокОрганизации.УстановитьТекст("");
      КонецЕсли;
КонецЕсли;   
КонецПроцедуры
//RS.

Далее в табличной части Товары формы документа добавляем две колонки - ОстатокСклада и ОстатокОрганизации. Желательно,
чтобы два свойства колонки имели такие значения:
Данные - пусто;
ЭлементУправления = ПолеВвода;

Затем заходим в событие ТЧ Товары - ПриВыводеСтроки и попадаем в процедуру формы ТоварыПриВыводеСтроки.
В конце ее текста вставляем две наши строчки:

//RS:
   ПоказатьОстатокСклада(мКолонкиТовары, ОформлениеСтроки.Ячейки, ДанныеСтроки.Номенклатура);
   ПоказатьОстатокОрганизации(мКолонкиТовары, ОформлениеСтроки.Ячейки, ДанныеСтроки.Номенклатура);
//RS.
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. YNik 11.03.18 23:34 Сейчас в теме
(1), лучше использовать событие ПриПолученииДанных вместо ПриВыводеСтроки, гораздо быстрее.
Примерно так:

Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
	
	Если ОформленияСтрок.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	МассивНоменклатуры = Новый Массив;
	Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
		МассивНоменклатуры.Добавить(ОформлениеСтроки.ДанныеСтроки.Номенклатура);
	КонецЦикла;

	Текст = "ВЫБРАТЬ
        |   ТоварыОрганизацийОстатки.Номенклатура КАК Номенклатура,
        |   ТоварыОрганизацийОстатки.КоличествоОстаток КАК Количество
        |ИЗ
        |   РегистрНакопления.ТоварыОрганизаций.Остатки(&Дата, ) КАК ТоварыОрганизацийОстатки
        |ГДЕ
        |   ТоварыОрганизацийОстатки.Организация = &Организация
        |   И ТоварыОрганизацийОстатки.Номенклатура  В (&МассивНоменклатуры)";
	Запрос = Новый Запрос;
	Запрос.Текст = Текст;
	Запрос.УстановитьПараметр("Дата",Дата);
	Запрос.УстановитьПараметр("Организация",Организация);
	Запрос.УстановитьПараметр("МассивНоменклатуры", МассивНоменклатуры);
	ОстаткиОрганизации = Запрос.Выполнить().Выгрузить();
	ОстаткиОрганизации.Индексы.Добавить("Номенклатура");

	Для Каждого ОформлениеСтроки из ОформленияСтрок Цикл
		НайденнаяСтрока = ОстаткиОрганизации.Найти(ОформлениеСтроки.ДанныеСтроки.Номенклатура, "Номенклатура");
		Если НайденнаяСтрока <> Неопределено Тогда
			ОформлениеСтроки.Ячейки.ОстатокОрганизации.ОтображатьТекст = Истина;
			ОформлениеСтроки.Ячейки.ОстатокОрганизации.Текст = ""+НайденнаяСтрока.Количество;
		Иначе
			ОформлениеСтроки.Ячейки.ОстатокОрганизации.ОтображатьТекст = Ложь;
		КонецЕсли;
	КонецЦикла;
Показать
DimDiemon; +1 Ответить
3. pm74 199 12.03.18 08:41 Сейчас в теме
(1) в ДополнительныеСвойства запихните соответствие с номерами строк
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот