Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
24 июн 2021, 15:19

Возможность выбора в ТЧ документа сотрудников , которые питаются сегодня из регистра сведений

Автор Vladislav, 02 июл 2017, 15:15

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

Vladislav

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

Прилагаю код, структуру документа ОценкаМеню,РегистраСведений - Питающиеся..

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

Запрос.УстановитьПараметр("Период", ТекущаяДата());
Запрос.УстановитьПараметр("Статус", Перечисления.СостояниеСотрудника.Питается);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Список = Новый СписокЗначений;

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Список.Добавить(ВыборкаДетальныеЗаписи.Сотрудник);
КонецЦикла;

Возврат Список;
КонецФункции

&НаКлиенте
Процедура СотрудникНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)

Стр = Элементы.ТабличнаяЧасть2.ТекущиеДанные;
СтрТаблицы = Стр.Сотрудник;

Список = Новый СписокЗначений;



Для Каждого Значение из Список Цикл
Список = СотрудникНачалоВыбораИзСпискаНаСервере(СтрТаблицы);

КонецЦикла;
СтрТаблицы = Список.Значение;
КонецПроцедуры

Vladislav


oleg-x

Цитата: Vladislav от 04 июл 2017, 18:08
аааааууууу..программисты:mellow:
Для начало научись оформлять код на форуме, по этой крако-зябле ничего не разберешь.
Добавлено: 04 июл 2017, 18:58


&НаКлиенте
Процедура СотрудникНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)

Стр = Элементы.ТабличнаяЧасть2.ТекущиеДанные;
СтрТаблицы = Стр.Сотрудник;

Список = Новый СписокЗначений; //При этом ты также создаешь список и на сервере

Для Каждого Значение из Список Цикл
Список = СотрудникНачалоВыбораИзСпискаНаСервере(СтрТаблицы);  //Делаешь цикл для списка, в котором нет ни одной записи.
КонецЦикла;
СтрТаблицы = Список.Значение;
КонецПроцедуры

Добавлено: 04 июл 2017, 19:00


Вместо:
    Для Каждого Значение из Список Цикл
        Список = СотрудникНачалоВыбораИзСпискаНаСервере(СтрТаблицы);  //Делаешь цикл для списка, в котором нет ни одной записи.
    КонецЦикла;
    СтрТаблицы = Список.Значение;

Сделай:
Список = СотрудникНачалоВыбораИзСпискаНаСервере(СтрТаблицы);
СтрТаблицы = Список.Значение;


Добавлено: 04 июл 2017, 19:02


Но может и ошибаюсь в исправление синтаксиса, так как со списком еще не работал
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

Norfolk

Цитата: Vladislav от 04 июл 2017, 18:08
аааааууууу..программисты:mellow:
Как-то так. Где-то может ошибся с названием реквизитов, так как на скорую руку делал у себя в базе.

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

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

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

Vladislav

Цитата: Norfolk от 04 июл 2017, 19:55
Цитата: Vladislav от 04 июл 2017, 18:08
аааааууууу..программисты:mellow:
Как-то так. Где-то может ошибся с названием реквизитов, так как на скорую руку делал у себя в базе.

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

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

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



Все равно все сотрудники отображаются..
кажется...он не понимает куда надо записать значения..

Добавлено: 05 июл 2017, 13:49


Цитата: oleg-x от 04 июл 2017, 18:54
Цитата: Vladislav от 04 июл 2017, 18:08
аааааууууу..программисты:mellow:
Для начало научись оформлять код на форуме, по этой крако-зябле ничего не разберешь.
Добавлено: 04 июл 2017, 18:58


&НаКлиенте
Процедура СотрудникНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)

Стр = Элементы.ТабличнаяЧасть2.ТекущиеДанные;
СтрТаблицы = Стр.Сотрудник;

Список = Новый СписокЗначений; //При этом ты также создаешь список и на сервере

Для Каждого Значение из Список Цикл
Список = СотрудникНачалоВыбораИзСпискаНаСервере(СтрТаблицы);  //Делаешь цикл для списка, в котором нет ни одной записи.
КонецЦикла;
СтрТаблицы = Список.Значение;
КонецПроцедуры

Добавлено: 04 июл 2017, 19:00


Вместо:
    Для Каждого Значение из Список Цикл
        Список = СотрудникНачалоВыбораИзСпискаНаСервере(СтрТаблицы);  //Делаешь цикл для списка, в котором нет ни одной записи.
    КонецЦикла;
    СтрТаблицы = Список.Значение;

Сделай:
Список = СотрудникНачалоВыбораИзСпискаНаСервере(СтрТаблицы);
СтрТаблицы = Список.Значение;


Добавлено: 04 июл 2017, 19:02


Но может и ошибаюсь в исправление синтаксиса, так как со списком еще не работал



Все равно все сотрудники отображаются

Norfolk

Цитировать
Все равно все сотрудники отображаются
Скинуть .dt или .cf можете?

Vladislav

Цитата: Norfolk от 05 июл 2017, 14:51
Цитировать
Все равно все сотрудники отображаются
Скинуть .dt или .cf можете?


мне понадобилось учесть пункт питания..и теперь нужно чтобы в выпадающем списке были сотрудники,которые принадлежат данному пункту



Norfolk

Цитата: Vladislav от 05 июл 2017, 16:16
Цитата: Norfolk от 05 июл 2017, 14:51
Цитировать
Все равно все сотрудники отображаются
Скинуть .dt или .cf можете?


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

Теги:

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

Рейтинг@Mail.ru Rambler's Top100

Поиск