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

Автор Тема: Из Регистра в Табличную часть  (Прочитано 2989 раз)

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

Оффлайн Artex

  • *
  • Сообщений: 4
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-01-18
  • Сайт: 
Недавно начал изучение, столкнулся с надобностью при изменении реквизита документа выбрать из регистра сведений данные по этому реквизиту и разместить их в табличной части. Вот что я написал:

Функция ПолучитьЦена(ТипЦены, Номенклатура = Неопределено, Знач Дата = Неопределено) Экспорт
Дата = ?(Дата = Неопределено, ТекущаяДата(),Дата);

Структура = Новый Структура();
Структура.Вставить("ТипЦены", ТипЦены);

Данные = РегистрыСведений.ЦеныНоменклатуры.СрезПоследних(Дата,Структура);
Возврат Данные;
КонецЕсли;
КонецФункции


Таким образом пытаюсь выбрать последние цены для всех позиций номенклатуры и вернуть их клиенту. Конфигуратор не ругался, но при отладке ловил ошибку (видимо нельзя вернуть таблицу значений из функции).  Вопрос в том, как это сделать (через массив?) и потом записать в табличную часть:

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

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

Планировал сделать это как-то так... Что изменить?





Оффлайн MuI_I_Ika

  • Гончаров Михаил
  • Администратор
  • *****
  • Сообщений: 6558
  • РЕПУТАЦИЯ: 775
  • КПД: 12%
  • Регистрация: 2012-08-15
    • Skype: MuI_I_Ika
  • Сайт: 
  • Профессия: Программист 1С
У вас неправильный вызов функции:

ОбщиеФункции.ПолучитьЦена(Объект.ТипЦены, Объект.Дата);

И раз уж вы меняете цену только в текщей строке, не надо городить циклы.

Цена = ОбщиеФункции.ПолучитьЦена(Объект.ТипЦены,Элементы.ПриходуемыеТовары.ТекущиеДанные.Номенклатура, Объект.Дата);
Элементы.ПриходуемыеТовары.ТекущиеДанные.Цена = Цена;

Функция ПолучитьЦена(ТипЦены, Номенклатура = Неопределено, Знач Дата = Неопределено) Экспорт

        Дата = ?(Дата = Неопределено, ТекущаяДата(),Дата);

        Структура = Новый Структура();
        Структура.Вставить("ТипЦены", ТипЦены);   
        Структура.Вставить("Номенклатура",Номенклатура);
       
        Данные = РегистрыСведений.ЦеныНоменклатуры.СрезПоследних(Дата,Структура);
        Если Данные.Количество()>0 Тогда
            Возврат Данные[0].Цена;
        Иначе
            Возврат 0;
        КонецЕсли;
                                         
КонецФункции

Оффлайн Artex

  • *
  • Сообщений: 4
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-01-18
  • Сайт: 
Ах да, вызов функции и правда неправильный)

А вот цены мне надо менять во всех строках табличной части, в которых есть номенклатура, для которой я выбрал цены в регистре. Для одной строки я уже сделал, теперь надо для всех... А для этого передавать надо не одну цену, а все.

Оффлайн sertak

  • ****
  • Сообщений: 274
  • РЕПУТАЦИЯ: 74
  • КПД: 27%
  • Регистрация: 2013-01-16
    • Skype: vitaly_sertakov
  • Сайт: www.sertakov.ru
  • Профессия: Программист 1С
Раз вам надо изменять все строки, нужно использовать один из вариантов:
1) во-первых, изменить последовательность параметров в функции: необязательный параметр "номенклатура" должен идти в вашем случае последним, т.к. вы его не указываете для получения массива:
Функция ПолучитьЦена(ТипЦены, Знач Дата = Неопределено, Номенклатура = Неопределено) Экспорт
;
во-вторых, в цикле сравнивать номенклатуру и присваивать значение цены не через
Элементы.ПриходуемыеТовары.ТекущиеДанные.Цена = Цена.Цена
(это изменяет только текущий элемент, т.е. тот, который интерактивно выделен пользователем), а через
Строка.Цена = Цена.Цена
 
2) и возможен второй вариант, когда вы в цикле перебора табличной части вызываете функцию для каждого элемента. Тогда функция должна быть такой, как привел [/code]MuI_I_Ika, а обработчик будет следующим:
Процедура ТипЦеныПриИзменении(Элемент)
Для Каждого Строка Из Элементы.ПриходуемыеТовары Цикл         
    Строка.Цена = ОбщиеФункции.ПолучитьЦена(Объект.ТипЦены, Строка.Номенклатура, Объект.Дата);
КонецЦикла;
Если ты знаешь свой путь, то удачи и неудачи равно продвигают тебя вперед

Оффлайн Artex

  • *
  • Сообщений: 4
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-01-18
  • Сайт: 
Сделал по второму способу, появляется следующее:

 "Итератор для значения не определен - Для Каждого Строка Из Элементы.ПриходуемыеТовары Цикл"

Оффлайн sertak

  • ****
  • Сообщений: 274
  • РЕПУТАЦИЯ: 74
  • КПД: 27%
  • Регистрация: 2013-01-16
    • Skype: vitaly_sertakov
  • Сайт: www.sertakov.ru
  • Профессия: Программист 1С
Да, есть ошибка, не заметил.
Вместо перебора элемента формы, что бессмысленно в 8.2:
 Для Каждого Строка Из Элементы.ПриходуемыеТовары Цикл
нужно написать:
 Для Каждого Строка Из Объект.ТЧПриходуемыеТовары Цикл
где ТЧПриходуемыеТовары - это название табличной части, чьи данные отображает элемент формы ПриходуемыеТовары. Посмотрите как называется табличная часть и подставьте. Она может называться так же, как и элемент формы.
Если ты знаешь свой путь, то удачи и неудачи равно продвигают тебя вперед

Оффлайн Artex

  • *
  • Сообщений: 4
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-01-18
  • Сайт: 
Да, чтото я сам не догадался) Элементы.ПриходуемыеТовары это же элемент формы, а Объект.ПриходуемыеТовары это сама табличная часть)) Пока путаюсь еще. Спасибо, все заработало!


Теги:
 

Как можно подставлять цену из регистра сведений "Цены поставщиков" в документ"ПоступлениеТоваров" на актуальную дату? Необходимо использовать запрос в решении.

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

Ответов: 14
Просмотров: 9361
Последний ответ 24 Окт 2014, 13:30
от cska-fanat-kz
Часть четвертая: переход на «1С» версии «3.0». Где в программе находятся «Параметры учета»? Алгоритм настройки кадрового учета в новой версии программы «1С»

Автор 1cwikiРаздел Зарплата и управление персоналом

Ответов: 0
Просмотров: 3981
Последний ответ 20 Мар 2015, 12:58
от 1cwiki
Можно ли програмно изменить одну из колонок таблицы формы регистра сведений при создании формы

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

Ответов: 4
Просмотров: 1293
Последний ответ 21 Фев 2016, 17:00
от vitasw
Запрос к виртуальной таблице регистра накопления: что писать в "Произвольном Выражении"?

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

Ответов: 1
Просмотров: 159
Последний ответ 27 Окт 2017, 21:02
от MuI_I_Ika
Заполнение регистра сведений "Авансы сотрудникам организаций"

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

Ответов: 4
Просмотров: 1545
Последний ответ 02 Дек 2015, 11:50
от rielter_al

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

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

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


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

* Реклама

* Поиск

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

* Реклама

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

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

Геннадий ОбьГЭС Геннадий ОбьГЭС
154 Сообщений
ilyay ilyay
66 Сообщений
alex0402
53 Сообщений
AIFrame
46 Сообщений
oleg-x
44 Сообщений
andron81_81
44 Сообщений
BuhRust
32 Сообщений
MuI_I_Ika MuI_I_Ika
32 Сообщений
Golickoff Golickoff
31 Сообщений
Dima Dddd Dima Dddd
24 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal