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

Автор Тема: Нужна помощь!!!  (Прочитано 1997 раз)

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

Оффлайн Maximoshka

  • *
  • Сообщений: 12
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-12-12
  • Сайт: 
  • Профессия: Ученик 1С
Здравствуйте, я являюсь студентом. Изучаю 1С. Может быть я чего-то не понимаю, поэтому мои задачи могут быть немножко не логичными, как и принципы их решения.
Имеется Магазин со складом. При помощи документа  "ТоварнаяНакладная" заносится информация о товарах. Такие свойства как "Цена" заносится в регистр накопления "РегистрТоваров" из табличной части документа .
При продаже товара необходимо что бы в табличной части документа "ПродажаТовара" бралась информация "Наименование", а в этой же строке из регистра накопления автоматически указывалась "Цена".
Я подумал, что можно сделать это через запрос, И в модуле формы документа  "ПродажаТовара" я прописал следующее:


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


Ошибок не выдавалось но Цена не добавляется.

Помогите пожалуйста.


Оффлайн БезПонтов

  • *
  • Сообщений: 26
  • РЕПУТАЦИЯ: 2
  • КПД: 8%
  • Регистрация: 2011-06-27
  • Сайт: 
  • Профессия: Программист 1С
Re: Нужна помощь!!!
« Ответ #1: 12 Дек 2013, 21:03 »
Записывать цену в регистр накопления весьма и весьма не логично. Для этого есть регистр сведений. Если же цена в регистре накопления и занесен как Измерение, тогда нужно кроме позиционирования на товаре (кстати, по наименованию искать не разумно, ибо может быть несколько товаров с одним наименованием, но разным артикулом), позиционироваться на цене) т.е. на том, что ищем :dfbsdfbsdf:, если же Цена указана как Ресурс, тогда цена вычисляется как Сумма/Количество.
В общем виде
   Текст="ВЫБРАТЬ
         |   ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьКонечныйОстаток / ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК Цена
         |ИЗ
         |   РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты КАК ПартииТоваровНаСкладахОстаткиИОбороты
         |ГДЕ
         |   ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура = &Номенклатура";
   Запрос.УстановитьПараметр("Номенклатура", Элементы.Товары.ТекущиеДанные.Товар);

Результат=Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
    Элементы.Товары.ТекущиеДанные.Цена=Выборка.Цена;
КонецЕсли;

Ну как-то так.
Ответ на вопрос - бесплатно!
Ответ на дурацкий вопрос - 5$
Ответ на дурацкий вопрос с обдумыванием - 100$

Оффлайн Maximoshka

  • *
  • Сообщений: 12
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-12-12
  • Сайт: 
  • Профессия: Ученик 1С
Re: Нужна помощь!!!
« Ответ #2: 12 Дек 2013, 21:25 »
Я переделал ваш код под себя, ошибок не выдаёт, но всёрано цену в табличную часть документа не устанавливает. Прошу прощения я не исключаю того, что я сделал что-то не так.
Я всего лишь 3 дня назад начал изучать 1С.
Вот мой код:

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

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

Добавлено: 12 Дек 2013, 21:27

Эта строчка лишняя:
 Элементы.Товары.ТекущиеДанные.Сумма = Элементы.Товары.ТекущиеДанные.Цена * Элементы.Товары.ТекущиеДанные.Количество;

Оффлайн БезПонтов

  • *
  • Сообщений: 26
  • РЕПУТАЦИЯ: 2
  • КПД: 8%
  • Регистрация: 2011-06-27
  • Сайт: 
  • Профессия: Программист 1С
Re: Нужна помощь!!!
« Ответ #3: 12 Дек 2013, 21:43 »

   Запрос.УстановитьПараметр("Наименование.Товары.ТекущиеДанные.Товар");

   Запрос.УстановитьПараметр("Наименование",Элементы.Товары.ТекущиеДанные.Товар");

Добавлено: 12 Дек 2013, 21:45

Повторюсь, использовать наименование не разумно!
Как выглядит регистр-то? Это какая-то конфа 1С или полностью самописная?
Ответ на вопрос - бесплатно!
Ответ на дурацкий вопрос - 5$
Ответ на дурацкий вопрос с обдумыванием - 100$

Оффлайн Maximoshka

  • *
  • Сообщений: 12
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-12-12
  • Сайт: 
  • Профессия: Ученик 1С
Re: Нужна помощь!!!
« Ответ #4: 13 Дек 2013, 15:46 »
Повторюсь, использовать наименование не разумно!
Как выглядит регистр-то? Это какая-то конфа 1С или полностью самописная?

Конфигурацию создавал я сам с нуля. Табличная часть документа "ПродажаТоавара" состоит из реквизитов: Наименование, Количество, Цена, Сумма. Регистр "РегистрТоваров" имеет изменение "Товары" которое берётся из "Наименования" и ресурсы Количество, Цена, Сумма, которые подвязаны к табличной части документа, к ресурсам с таким же названием.

Я поправил код так, как вы предложили, ошибок нет, но всё равно ничего не происходит. Код выглядит так:



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

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

Оффлайн БезПонтов

  • *
  • Сообщений: 26
  • РЕПУТАЦИЯ: 2
  • КПД: 8%
  • Регистрация: 2011-06-27
  • Сайт: 
  • Профессия: Программист 1С
Re: Нужна помощь!!!
« Ответ #5: 13 Дек 2013, 16:52 »
Регистр измерение Наименование или Товар?

Можно попробовать так:

Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Сообщить("В запрос ничего не попало!");
КонецЕсли;

Выборка=Результат.Выбрать();
Пока Выборка.Следующий() Цикл
    Сообщить(Результат.Цена);
КонецЦикла;

Так хоть будет понятно очепятка
Добавлено: 13 Дек 2013, 16:56

Кстати, Цену пихать в регистр накопления не имеет ваще смысла ибо Регистр НАКАПЛИВАЕТ данные. И Цену можно выдрать только запросом за ПЕРИОД, что не нужно исходя из задачи.
Ещё момент, цена на товар с течением времени может меняться и полученная цена из регистра накопления будет средней по больнице.
Типа
01.12.13 Товар1 поступил 1 шт по 12 руб.
02.12.13 Товар1 поступил за 13 руб.

Цена из запроса получится 12,50 руб
Ответ на вопрос - бесплатно!
Ответ на дурацкий вопрос - 5$
Ответ на дурацкий вопрос с обдумыванием - 100$

Оффлайн Maximoshka

  • *
  • Сообщений: 12
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-12-12
  • Сайт: 
  • Профессия: Ученик 1С
Re: Нужна помощь!!!
« Ответ #6: 09 Фев 2016, 13:39 »
Регистр измерение Наименование или Товар?

Можно попробовать так:

Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Сообщить("В запрос ничего не попало!");
КонецЕсли;

Выборка=Результат.Выбрать();
Пока Выборка.Следующий() Цикл
    Сообщить(Результат.Цена);
КонецЦикла;

Так хоть будет понятно очепятка
Добавлено: 13 Дек 2013, 16:56

Кстати, Цену пихать в регистр накопления не имеет ваще смысла ибо Регистр НАКАПЛИВАЕТ данные. И Цену можно выдрать только запросом за ПЕРИОД, что не нужно исходя из задачи.
Ещё момент, цена на товар с течением времени может меняться и полученная цена из регистра накопления будет средней по больнице.
Типа
01.12.13 Товар1 поступил 1 шт по 12 руб.
02.12.13 Товар1 поступил за 13 руб.

Цена из запроса получится 12,50 руб
Спасибо)


Теги:
 


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

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

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


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

* Реклама

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

СМОТРЕТЬ >>

* Поиск

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

* Реклама

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

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

oleg-x
93 Сообщений
alex0402
93 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
64 Сообщений
Golickoff Golickoff
50 Сообщений
ilyay ilyay
44 Сообщений
AIFrame
41 Сообщений
wise wise
31 Сообщений
Амал
30 Сообщений
ab30ru
24 Сообщений
lansy
22 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal