Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
27 мая 2024, 05:43

Заполнение ТЧ на форме на сервере

Автор Sasha1C, 24 апр 2024, 14:10

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

Sasha1C

Добрый день, нужно реализовать заполнение реквизитов ТЧ ценаПоставщика и ЦенаПродажи из Регистра сведений ЦеныНаКниги, который имеет 2 измерения "НазваниеКниги" и "ВидЦены"(Закупочная, Розничная) и ресурс "цена"
Функция ПолучениеЦен(НазваниеКниги, Период)
Отбор1  = Новый Структура;
Отбор1.Вставить("Книга", НазваниеКниги);
отбор1.Вставить("ВидЦены",Перечисления.ВидЦен.Закупочная);

Данные1 = РегистрыСведений.ЦеныНаКниги.ПолучитьПоследнее(Период,Отбор1);

ПроданныеКнигиЦенаПоставщика = Данные1.Цена;

Отбор2 = Новый Структура;
Отбор2.Вставить("Книга", НазваниеКниги);
Отбор2.Вставить("ВидЦены", Перечисления.ВидЦен.Розничная);

Данные2 = РегистрыСведений.ЦеныНаКниги.ПолучитьПоследнее(Период,Отбор2);

ПроданныеКнигиЦенаПродажи = Данные2.Цена;

 КонецФункции

При изменении названия книги запускается функция, которая должна присвоить реквизитам ТЧ ЦенаПоставщика и ЦенаПродажи, в результате
Данные1 и данные2 получают нужные значения, проверял через отладку, но не могу найти как присвоить эти значения реквизитам ТЧ на сервере. В интернете предлагают через индекс строки, но я пока что не особо понимаю каким образом это должно работать. Буду благодарен за любые предложения. Разбить по отдельным функциям и сделать на клиенте можно, но я хотел сократить код для лучшей читабельности и самообразования.

LexaK

Sasha1C, еще выложите процедуру из которой вызываете эту Функция ПолучениеЦен(
если помогло нажмите: Спасибо!

Максим75

Sasha1C, смотрите, где у Вас меняется НазваниеКниги? Это вообще что - реквизит формы, реквизит табличной части или что?
Дальше, смотрите, обратиться к регистрам сведений Вы можете только на сервере.
А вот событие скорее всего ПриИзменении - это событие клиента.
Если НазваниеКниги - все же таки реквизит табличной части, то в событии ПриИзменении Вам будет доступна следующая конструкция
ТекущаяСтрока = Элементы.Здесь имя Вашей табличной части.ТекущиеДанные;
Через ТекущаяСтрока.НазваниеКниги Вы получаете саму книгу.
Потом вызываете функцию на сервере, передаете туда книгу, получаете что-то и Вам это что-то надо вернуть. Если два и более значения - то рисуйте Структуру и возвращайте с сервера на клиент структуру, на клиенте ее разбираете и
через ТекущаяСтрока.ЦенаПоставщика заполняете цену поставщика, ЦенаПродажи точно так же.

Sasha1C

LexaK,
&НаКлиенте
Процедура ПроданныеКнигиНазваниеКнигиПриИзменении(Элемент)

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

Sasha1C

Максим75, Это реквизиты Документа, но как разбирать структуру на клиенте, если нужен отбор, который сравнивает элемент нашей структуры и Значение из Перечисления.ВидыЦен(Но сравнивать так можно только на сервере)

Максим75

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

ну а потом через ДанныеФункции.Что-то получайте цены или еще что Вам надо.
Вот я не уверен, что на клиенте это будет работать, не помню просто.
Если не будет работать - то на сервере делайте структуру и возвращайте структуру, на клиенте ее разбирайте.

Кстати, не уверен что у Вас на клиенте вторая функция сработает, не знаю, как Вы автора ищите, если запрос или обращение к справочнику - то точно не сработает.

LexaK

Sasha1C, переделайте свою функцию: ПолучениеЦен что бы она возращала структуру с ценами: ценаПоставщика и ЦенаПродажи
и измените код так
&НаКлиенте
Процедура ПроданныеКнигиНазваниеКнигиПриИзменении(Элемент)
   
        ТекущиеДанные = Элементы.ПроданныеКниги.ТекущиеДанные;
        ТекущиеДанные.Автор =АвторПоКниге(ТекущиеДанные.НазваниеКниги);
       
        //заполняем цены
        ЗаполнитьЗначенияСвойств(ТекущиеДанные, ПолучениеЦен(ТекущиеДанные.НазваниеКниги, Объект.Дата));
                         
КонецПроцедуры
(как получать данные из функции знаете?)
если помогло нажмите: Спасибо!

Sasha1C

LexaK, Когда попробую, тогда и узнаю)

Sasha1C

Максим75, В принципе методику я понял и заполняется реквизит ЦенаПродажи, но хотел узнать мой регистр заполняется во так "Картинка", и структура цепляет 0, можно ли как-то этого избежать. Движения в регистре сведений создаются автоматически с помощью приходных и расходных документов. По этой причине у меня и был один ресурс "цена" первоначально,  а сейчас таблица смотрится слегка не оптимальной

Максим75

Sasha1C, ничего не понял))
У Вас в регистре помимо Номенклатуры есть еще и вид цен. Получайте срез последних на нужную дату, по нужной номенклатуре и по нужному виду цен и берите или цену поставщика или цену продажи.
дайте окончательный вариант кода.

Теги: Сервер ТЧ 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск