Как сделать колонку в документе Заказ поставщику с остатками товаров на текущем складе

1. luic 18.09.11 12:28 Сейчас в теме
Подскажите новичку!!
Как сделать колонку в документе Заказ поставщику с остатками товаров на текущем складе
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. vudu 85 18.09.11 13:07 Сейчас в теме
Добавляешь в табличную часть Товары новую колонку.
Там же создаешь подписку на событие при получении данных (если нет)
Вот текст процедуры (сделано для Реализации товаров УТП Украины, так что тебе придется переделывать):


// Процедура - обработчик события "ПриПолученииДанных" табличной части
// "Товары".
Процедура ТоварыПриПолученииДанных(Элемент, ОформленияСтрок)
	
		
	Для Каждого ТекСтрока из ОформленияСтрок Цикл
		Запрос = Новый Запрос;
		Запрос.Параметры.Вставить("ДатаДокумента",Дата);
		Запрос.Параметры.Вставить("Организация",Организация);
		Запрос.Параметры.Вставить("Номенклатура",ТекСтрока.ДанныеСтроки.Номенклатура);
		Запрос.Текст = "ВЫБРАТЬ
		               |	СУММА(ПартииТоваровНаСкладахНалоговыйУчетОстатки.КоличествоОстаток) КАК КоличествоОстаток
		               |ИЗ
		               |	РегистрНакопления.ПартииТоваровНаСкладахНалоговыйУчет.Остатки(&ДатаДокумента, ) КАК ПартииТоваровНаСкладахНалоговыйУчетОстатки
		               |ГДЕ
		               |	ПартииТоваровНаСкладахНалоговыйУчетОстатки.Номенклатура = &Номенклатура
		               |	И ПартииТоваровНаСкладахНалоговыйУчетОстатки.Организация = &Организация";
					   
		Выборка = Запрос.Выполнить().Выбрать();			   
		ТекСтрока.Ячейки.ОстакиНаСкладе.ОтображатьТекст = Истина;
		ТекСтрока.Ячейки.ОстакиНаСкладе.Выравнивание = ГоризонтальноеПоложение.Право;
		Если  Выборка.Следующий()  Тогда
			
			ОстатокКоличество = ?(Выборка.КоличествоОстаток = Null,0,Выборка.КоличествоОстаток);
			
			Если ОстатокКоличество < 0 ТОгда
				ТекСтрока.Ячейки.ОстакиНаСкладе.ЦветТекста = Новый Цвет(255,102,0);
			КонецЕсли;
		Иначе
			ОстатокКоличество = 0;
			ТекСтрока.Ячейки.ОстакиНаСкладе.ЦветТекста = Новый Цвет(-1,-1,-1);
		КонецЕсли;	
		Если ОстатокКоличество - ТекСтрока.ДанныеСтроки.Количество < 0 Тогда
			ТекСтрока.ЦветФона = Новый Цвет(255,185,234);
		Иначе
			ТекСтрока.ЦветФона = Новый Цвет(-1,-1,-1);
		КонецЕсли;
		ТекСтрока.Ячейки.ОстакиНаСкладе.Текст = "" + ОстатокКоличество;
	КонецЦикла;
КонецПроцедуры
Показать
3. luic 18.09.11 13:14 Сейчас в теме
Спасибо за помощь, завтра попробую. А что, верся для Украины сильно от Российской отличается?
4. vudu 85 18.09.11 13:17 Сейчас в теме
(3)Нет не сильно. А вот УТП от УТ в данном сильно! ПартииТоваровНаСкладахНалоговыйУчетОстатки в УТ врядли будут!
5. Jimbo 9 20.09.11 13:00 Сейчас в теме
зачем колонка ? и чем не устраивает типовой подбор - там и колонка остатки есть, и режимы по справочнику или по остаткам, и даже с ценами
6. radja2011 20.09.11 13:30 Сейчас в теме
зачем описывать свойства колонки не понятно
7. Andydi 21.09.11 10:34 Сейчас в теме
лучше сделать обновление остатков при нажатии какой-нибудь кнопки. если ПриПолученииДанных выполнять - документ открываться долго будет и при прокрутке списка тормоза будут, а данные эти скорее всего не всегда нужны
9. luic 21.09.11 11:35 Сейчас в теме
(7) Andydi,
А можно поподробнее. Что за кнопку Вы предлагаете?
8. luic 21.09.11 11:34 Сейчас в теме
Jimbo пишет:

зачем колонка ? и чем не устраивает типовой подбор - там и колонка остатки есть, и режимы по справочнику или по остаткам, и даже с ценами

Дело в том, что нужна видимость остатков в документе. Заявку делают менеджеры, а начальство проверяет, что они там назаказывали! Приходится каждый раз в каталог переходить....
10. Andydi 21.09.11 11:45 Сейчас в теме
просто добавить кнопку, и при ее нажатии считывать остатки и заполнять колонку в табличной части, например так:
запр=новый запрос("ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура,
| ТоварыНаСкладахОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(
| &дата,
| Номенклатура В (&ном)
| И Склад = &Склад) КАК ТоварыНаСкладахОстатки") ;

запр.УстановитьПараметр("дата",ТекущаяДата());
запр.УстановитьПараметр("ном",товары.ВыгрузитьКолонку("Номенклатура"));
запр.УстановитьПараметр("Склад",Склад);

выб=запр.Выполнить().Выбрать();

пока выб.Следующий() цикл
нс=товары.Найти(выб.Номенклатура,"номенклатура");

если нс<> Неопределено тогда
нс.остаток=выб.КоличествоОстаток;
КонецЕсли;


КонецЦикла;
15. luic 21.09.11 23:33 Сейчас в теме
(10) Andydi,
Спасибо, с кнопкой Вы классно придумали. Все отлично получилось!!!
11. znaher 21.09.11 11:50 Сейчас в теме
А зачем делать это в документе, не легче внешнюю печатную форму сделать?
12. Поручик 4674 21.09.11 12:14 Сейчас в теме
(11) Как правило, этого хотят тупые менеджеры, которым влом лишний раз мышкой махнуть.
13. cool.vlad4 2 21.09.11 12:17 Сейчас в теме
+1 к 12. А потом они скажут, че так хреновомедленно работает или че так много колонок каких-то лишних. Лучше не вестись на провокации.
14. znaher 21.09.11 12:34 Сейчас в теме
Не знаю, а какая разница что он "жмакнет" кнопку на форме, и добавится в таблицу колонка, что обновит всю табличную часть или он кликнет "Печать" и выберит форму. + форму можно к нескольким документам привязать и конфу при этом не менять...
16. GreenLab 83 02.10.11 18:09 Сейчас в теме
Вот еще вариант:
Добавляешь колонку "ОстатокНаСкладах"

В переменные формы добавляешь:

Перем мОстаткиТоваровНаСкладах;

Добавляешь в модуль формы процедуру

Процедура ЗаполнитьОстаткиНаСкладах()

ЗапросПоОстаткам = Новый Запрос();

Если ЭтоНовый() Тогда

ТекстЗапросаПоОстаткам = "ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.СерияНоменклатуры КАК СерияНоменклатуры,
| ТоварыНаСкладахОстатки.Склад КАК Склад,
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
|ГДЕ
| ТоварыНаСкладахОстатки.КоличествоОстаток > 0
|ОБЪЕДИНИТЬ
|ВЫБРАТЬ
| ТоварыВРозницеОстатки.Номенклатура КАК Номенклатура,
| ТоварыВРозницеОстатки.СерияНоменклатуры КАК СерияНоменклатуры,
| ТоварыВРозницеОстатки.Склад КАК Склад,
| ТоварыВРозницеОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыВРознице.Остатки КАК ТоварыВРозницеОстатки
|ГДЕ
| ТоварыВРозницеОстатки.КоличествоОстаток > 0";

Иначе

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


ЗапросПоОстаткам.УстановитьПараметр("ДатаОстатков",ЭтотОбъект.МоментВремени());

КонецЕсли;

ЗапросПоОстаткам.Текст = ТекстЗапросаПоОстаткам;

мОстаткиТоваровНаСкладах = ЗапросПоОстаткам.Выполнить().Выгрузить();

мОстаткиТоваровНаСкладах.Свернуть("Номенклатура,СерияНоменклатуры,Склад","КоличествоОстаток");

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

Вызываешь ее при открытии формы.
При выводе строки (можно и при получении данных с небольшими изменениями)
Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

......
ОформлениеСтроки.Ячейки.ОстатокНаСкладах.ОтображатьТекст = Истина;
СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("Номенклатура",ДанныеСтроки.Номенклатура);
СтруктураОтбора.Вставить("СерияНоменклатуры",ДанныеСтроки.СерияНоменклатуры);
СтруктураОтбора.Вставить("Склад",?(ЗначениеЗаполнено(ДанныеСтроки.Склад),ДанныеСтроки.Склад,ЭтотОбъект.Склад));

Остаток = мОстаткиТоваровНаСкладах.НайтиСтроки(СтруктураОтбора);

Если Остаток.Количество()<>0 Тогда
ОформлениеСтроки.Ячейки.ОстатокНаСкладах.Текст = Формат(Остаток[0].КоличествоОстаток,"ЧЦ=10; ЧДЦ=3");
Иначе
ОформлениеСтроки.Ячейки.ОстатокНаСкладах.Текст = ""
КонецЕсли;
22. deutsch2008 20.11.17 11:02 Сейчас в теме
(16)
ЗаполнитьОстаткиНаСкладах()

Что -то пошло не так! :-(

{Документ.ЗаказПокупателя.Форма.ФормаДокумента.Форма(1928)}: Поле объекта не обнаружено (Склад)
СтруктураОтбора.Вставить("Склад",?(ЗначениеЗаполнено(ДанныеСтроки.Склад),ДанныеСтроки.Склад,ЭтотОбъект.Склад));
17. Vasisualiy 15.08.12 09:31 Сейчас в теме
Господа! А еще большему новичку подскажите (или ткните носом куда идти), как добавляют кнопки описанные Andydi, или как реализуют вариант GreenLab, прям поэтапно если возможно? Тоже захотел добавить колонку, или не получилось :-(
18. пользователь 16.08.12 23:22
Сообщение было скрыто модератором.
...
19. пользователь 16.08.12 23:23
Сообщение было скрыто модератором.
...
20. Vasisualiy 17.08.12 12:32 Сейчас в теме
(19) Eugeneer,
Спасибо за предложение, пока бюджет на "модернизацию" 1С в фирме не предусмотрен, по-этому пока планируется выкручиваться собственными силами. И всё же хотелось бы повторить свою просьбу, где можно прочитать развернутую (лучше если поэтапную) статью как добавляют кнопки в 1С.
21. UserPro 4 06.02.17 08:51 Сейчас в теме
Ставлю "плюс" не сложно и все работает
Оставьте свое сообщение

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