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

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

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С - Предприятие 8"

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

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

Ответов: 2
Просмотров: 4803
Последний ответ 31 Янв 2014, 12:22
от i_anton
Не списано 0,0004 кг товара "XXXXX", счет учета 1310, склад Склад материалов

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

Ответов: 2
Просмотров: 4817
Последний ответ 30 Июл 2015, 09:21
от Макси
Вывод результата запроса через условие другого запроса

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

Ответов: 2
Просмотров: 2854
Последний ответ 16 Окт 2013, 15:08
от jonik_joker
Вывод линейной таблицы посредством СКД в виде "шахматки"

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

Ответов: 9
Просмотров: 10601
Последний ответ 19 Апр 2011, 11:12
от Klyacksa

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

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

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


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

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

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

* Реклама

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

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

Геннадий ОбьГЭС Геннадий ОбьГЭС
164 Сообщений
MuI_I_Ika MuI_I_Ika
96 Сообщений
oleg-x
67 Сообщений
alex0402
66 Сообщений
ilyay ilyay
58 Сообщений
Dmitry Qwe Dmitry Qwe
32 Сообщений
Sy4a
22 Сообщений
Dima Dddd Dima Dddd
20 Сообщений
BuhRust
19 Сообщений
Golickoff Golickoff
16 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal