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

Автор Тема: Вывод дополнительной колонки, с остатком товара.  (Прочитано 32733 раз)

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

Оффлайн СерьезныйЧеловек

  • ***
  • Сообщений: 165
  • РЕПУТАЦИЯ: 12
  • КПД: 7%
  • Регистрация: 2010-08-13
  • Сайт: 
Здравствуйте! В УТ в документе Реализация товаров и услуг нужно добавить колонку, в которую нужно вывести остаток товара на дату документа, не являющейся реквизитом табличной части документов.
Вопрос вот в чем. Из какого регистра мне взять остаток товара.


Оффлайн СерьезныйЧеловек

  • ***
  • Сообщений: 165
  • РЕПУТАЦИЯ: 12
  • КПД: 7%
  • Регистрация: 2010-08-13
  • Сайт: 
И как вывести в колонку мой запрос, если данная колонка информационная, т.е не является реквизитом?

Оффлайн mohock

  • ***
  • Сообщений: 170
  • РЕПУТАЦИЯ: 50
  • КПД: 29%
  • Регистрация: 2010-08-12
  • Сайт: 
  • Профессия: Программист 8.1
Здравствуйте! В УТ в документе Реализация товаров и услуг нужно добавить колонку, в которую нужно вывести остаток товара на дату документа, не являющейся реквизитом табличной части документов.
Вопрос вот в чем. Из какого регистра мне взять остаток товара.

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

Оффлайн mohock

  • ***
  • Сообщений: 170
  • РЕПУТАЦИЯ: 50
  • КПД: 29%
  • Регистрация: 2010-08-12
  • Сайт: 
  • Профессия: Программист 8.1
И как вывести в колонку мой запрос, если данная колонка информационная, т.е не является реквизитом?

Есть сбытие ТЧ - При выводе строки. Взгляни, как испльзуя его выводится артикул. У тебя тот же случай.
Ключевая фраза:
ЯчейкиСтрокиТабПоля.Артикул.УстановитьТекст(Номенклатура.Артикул);
У тебя это будет:
ЯчейкиСтрокиТабПоля.Остаток.УстановитьТекст(ОстатокНоменклатуры(Нменклатура));
Остатк - название твоей свобдной ячейки
Функция ОстатокНоменклатуры(Нменклатура) - рассчитывает остаток
Она должна сдержать запрос к регистру накопления с двумя параметрами - Дата накладной (или текущая дата) и ссылка на Номенклатуру.
Как это расположить в объекте:
В модуле объекта рисуешь функцию возвращающую остаток и экспртную процедуру заполнения поля остатка (см. Артикул)
Затем в сбытие При вывде строки в ТЧ товары вставляещь одну строчку с пследней процедурой.
 

Оффлайн СерьезныйЧеловек

  • ***
  • Сообщений: 165
  • РЕПУТАЦИЯ: 12
  • КПД: 7%
  • Регистрация: 2010-08-13
  • Сайт: 
Я сейчас попробую сделать. А вот например в документе Реализация Товров и Услуг у меня же несколько строк. Потом эту колонку нужно будет циклом заполнять?

Оффлайн mohock

  • ***
  • Сообщений: 170
  • РЕПУТАЦИЯ: 50
  • КПД: 29%
  • Регистрация: 2010-08-12
  • Сайт: 
  • Профессия: Программист 8.1
Я сейчас попробую сделать. А вот например в документе Реализация Товров и Услуг у меня же несколько строк. Потом эту колонку нужно будет циклом заполнять?

Как раз событие при выводе строки и делает этот цикл за тебя.  :D

Оффлайн СерьезныйЧеловек

  • ***
  • Сообщений: 165
  • РЕПУТАЦИЯ: 12
  • КПД: 7%
  • Регистрация: 2010-08-13
  • Сайт: 
Я чего-то не догоняю.
Еще раз можете рассказать структуру.

Вот я сделал Функцию, которая не работает:
ункция ОстатокНоменклатуры()
   Запрос=Новый Запрос;
Запрос.Текст=

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

 
 Запрос.УстановитьПараметр("Дата",ЭлементыФормы.Дата);
 Выборка=Запрос.Выполнить().Выгрузить();


Потом нужно написать в ПриВыводеСтроки вот это-
Товары.Остаток.УстановитьТекст(ОстатокНоменклатуры(Нменклатура))
 


Оффлайн СерьезныйЧеловек

  • ***
  • Сообщений: 165
  • РЕПУТАЦИЯ: 12
  • КПД: 7%
  • Регистрация: 2010-08-13
  • Сайт: 
Тут вот Артикул не так как Вы описали выводится:

Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

   Если мКолонкиТовары.Всего.Видимость Тогда
      ОформлениеСтроки.Ячейки.Всего.УстановитьТекст(ОбщегоНазначения.ФорматСумм(ДанныеСтроки.Сумма
                                          + ?(СуммаВключаетНДС, 0, ДанныеСтроки.СуммаНДС)));
   КонецЕсли;

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

КонецПроцедуры // ТоварыПриВыводеСтроки()

Я пересмотрел все, нигде явно не описано слово Артикул.

Оффлайн СерьезныйЧеловек

  • ***
  • Сообщений: 165
  • РЕПУТАЦИЯ: 12
  • КПД: 7%
  • Регистрация: 2010-08-13
  • Сайт: 
Ой извините, Акртикул выводится при помощи Процедуры - РаботаСДиалогами. И там как раз написана эта ф-я ЯчейкиСтрокиТабПоля.Артикул.УстановитьТекст. Но я почему то все равно никак не пойму как это все работает?

Оффлайн mohock

  • ***
  • Сообщений: 170
  • РЕПУТАЦИЯ: 50
  • КПД: 29%
  • Регистрация: 2010-08-12
  • Сайт: 
  • Профессия: Программист 8.1
Ой извините, Акртикул выводится при помощи Процедуры - РаботаСДиалогами. И там как раз написана эта ф-я ЯчейкиСтрокиТабПоля.Артикул.УстановитьТекст. Но я почему то все равно никак не пойму как это все работает?

 :D :D :D :D
Ладно. Т.к. это весьма распространенная просьба наших клиентов, не имеющих ни какого представления о принципах работы 1С, и к тому-же они привыкли к другому на своих старых системах и хотят то-же видеть в 1С.
Вот как это делается:

В модуль документа РеализацияТоваровУслуг помещаем примерно такие функции и процедуры:

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

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

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

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

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

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


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

//RS:
   ПоказатьОстатокСклада(мКолонкиТовары, ОформлениеСтроки.Ячейки, ДанныеСтроки.Номенклатура);
   ПоказатьОстатокОрганизации(мКолонкиТовары, ОформлениеСтроки.Ячейки, ДанныеСтроки.Номенклатура);
//RS.

Ну вот и все.  :D

Да, кстати. Желательно выводить остатки с тремя знаками после запятой. Сообразишь где задать формат?  :D
И еще обрати внимание насколько медленнее стала выводиться на экран не пустая тч Товары в сохраненном документе.
Несколько усложнив текст наших процедур, а может создав дополнительные с этим можно побороться.
Идея в том, что если у документа не пустая ТЧ, то ее можно выгрузить в таблицу значений. Затем выполнить один
запрос (а не построчно, как у нас) по этим товарам и получить сразу остатки за один проход. При этом в конце
надо будет использовать уже другое событие - ПриПолученииДанных  :D
Удачи!


Теги:
 

при загрузке цен в 1с предприятие управление торговлей 11.1 возникают дубли товаров разной цены, т.e. новый товар при загрузке не суммируется с уже загруженным. как можно объединять при загрузке товары с последней загруженной ценой товара? Есть ли такая о

Автор сергей123Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 1285
Последний ответ 01 Авг 2019, 12:43
от Геннадий ОбьГЭС
Вывод комментария в документ "Расходная накладная" из документа "Заказ покупателя"

Автор ОльгаПлРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 1677
Последний ответ 07 Окт 2017, 19:03
от Norfolk
УТ 10.3 Цена единицы товара в партии и цена списания этой единицы при реализации не совпадают????????????????????????

Автор i_antonРаздел Пользователям "1С - Предприятие 8"

Ответов: 2
Просмотров: 6857
Последний ответ 31 Янв 2014, 12:22
от i_anton
Отгрузка товара по 0,5 кг. - 1С 8.3 "УНФ 1.6"

Автор mamapapaРаздел Пользователям "1С - Предприятие 8"

Ответов: 3
Просмотров: 559
Последний ответ 01 Окт 2019, 17:40
от BuhRust
Не списано 0,0004 кг товара "XXXXX", счет учета 1310, склад Склад материалов

Автор RamirasРаздел Пользователям "1С - Предприятие 8"

Ответов: 2
Просмотров: 6513
Последний ответ 30 Июл 2015, 09:21
от Макси

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

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

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


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

* Реклама

* Поиск

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

* Реклама

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

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

Геннадий ОбьГЭС Геннадий ОбьГЭС
70 Сообщений
LexaK
34 Сообщений
oooo800
30 Сообщений
Дмитрий Джей Дмитрий Джей
24 Сообщений
DmitriyF DmitriyF
16 Сообщений
IL2016
16 Сообщений
antoneus antoneus
16 Сообщений
Ann_
16 Сообщений
SoOliateR
15 Сообщений
мадам брошкина
13 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal