Вход | Регистрация

1С:Предприятие ::

Метки: 

Как в УФ на форме в произвольном списке добавить колонку с нужным значением

Я
   oleg_prg
 
12.12.17 - 14:09
Добрый день уважаемые форумчане. Подскажите пожалуйста как в УФ на форме в произвольном списке добавить колонку с нужным значением.
Вот фотка чтобы было понятно. https://yadi.sk/i/AHUcuPSe3QYPgR
Заранее спасибо!
 
 
   DmitrO
 
1 - 12.12.17 - 14:17
Нужно использовать событие ПриПолученииДанныхНаСервере. Все получится.
   Сти
 
2 - 12.12.17 - 14:22
(1) для динамических списков только начиная с 8.3.8. Кроме того, поиск, отбор и прочее по получившейся колонке работать не будет.
   drcrasher
 
3 - 12.12.17 - 14:28
(1) нафиг. у него там произвольный запрос, пусть туды и пихает. а потом колонку на форму
   oleg_prg
 
4 - 12.12.17 - 14:43
(3) Даты запихнуть не получится т.к. мне надо дата прописью типа: 9 лет 5 месяев 3 дня  В запросе так не сделать
Я думал запрос отработает, выведу в таблицу а там похимичу с элементом строки. НО БЛИН! ПриПолученииДанныхНаСервере предопределенная работает только на сервереБЕЗконтекста - зараза. Вот и мучаюсь... не знаю как подступиться
   oleg_prg
 
5 - 12.12.17 - 14:44
(4) а модифицировать набор полученных данных не получается т.к. выдается ошибка - нарушение ключа записи и что-то там еще
   Cyberhawk
 
6 - 12.12.17 - 14:46
выбор когда год(дата) = 1 тогда "год" когда год(дата) > 1 и год(дата) < 5 тогда "года" когда год(дата) > 5 тогда "лет" конец
:)
   oleg_prg
 
7 - 12.12.17 - 14:49
(6) =))))))))
   Cyberhawk
 
8 - 12.12.17 - 14:51
(5) Это ты криво запрос модифицировал, у тебя появились дубли по ссылкам
   Сти
 
9 - 12.12.17 - 14:54
(5) в запрос вставь "" как "СтажСтрокой" и потом модифицируй этот СтажСтрокой как хочешь
(6) 21?
   Cyberhawk
 
10 - 12.12.17 - 15:02
(9) 21? Это ты уже придираешься :) Но думаю остатком от деления можно разрулить
 
  Рекламное место пустует
   Zamestas
 
11 - 12.12.17 - 15:03
(10) Да уж тогда/когда до сотни.
   2dolist
 
12 - 12.12.17 - 15:05
не очень универсально, а вдруг люди будут жить по миллиону лет.
   SSSSS_AAAAA
 
13 - 12.12.17 - 15:15
(4) "мне надо дата прописью типа: 9 лет 5 месяев 3 дня"
А уже определился с методикой расчета? Или еще не знаешь, что их несколько, все они дают разные результаты и каждая из них подходит только для какой-то конкретной области деятельности?
   oleg_prg
 
14 - 12.12.17 - 16:10
Ребята - спасибо! Такс - все получилось. Вот реализация может кому пригодится.

Функция ДатаПрописьюГодМесяцДень(СрокПолезногоИспользования) Экспорт
    
    РасшифровкаСрокаПолезногоИспользования = "";
    Если ЗначениеЗаполнено(СрокПолезногоИспользования) Тогда
        ЧастьМесяца = СрокПолезногоИспользования - Цел(СрокПолезногоИспользования);
        ЧислоДней = Цел(30 * ЧастьМесяца);
        Суффикс = "";
        Если НЕ ЧислоДней = 0 Тогда
            Суффикс = ЧислоПрописью(ЧислоДней, "НД = Ложь", "#$ень, #$ня, #$ней, м,,,,,0");

            ПозицияПослеПрописи = Найти(Суффикс, "#$");

            Суффикс = Сред(Суффикс, ПозицияПослеПрописи);
            Суффикс = " " + СокрЛП(ЧислоДней) + " " + Суффикс;
        КонецЕсли;
        ЧислоЛет = Цел(СрокПолезногоИспользования / 12);
        ЧислоМесяцев = Цел((СрокПолезногоИспользования % 12));
        ЧислоЛетМесяцев = ЧислоЛет + ЧислоМесяцев/100;
        Если ЧислоЛет = 0 Тогда
            СтрокаЧислоЛетМесяцев = ЧислоПрописью(ЧислоМесяцев, "НД = Ложь", "месяц, месяца, месяцев, м,,,,,0");
            СтрокаПоиска = "месяц";
        Иначе
            СтрокаЧислоЛетМесяцев = ЧислоПрописью(ЧислоЛетМесяцев, ?(ЧислоМесяцев = 0, "НД = Ложь", "НД = Истина"), "год, года, лет, м" + ?(ЧислоМесяцев = 0, ",,,,,0" ,", месяц, месяца, месяцев, м, 2"));
            СтрокаПоиска = "год";
        КонецЕсли;
        ПозицияПослеЛет = Найти(СтрокаЧислоЛетМесяцев, СтрокаПоиска);
        Если ПозицияПослеЛет = 0 Тогда
            ПозицияПослеЛет = Найти(СтрокаЧислоЛетМесяцев, "лет");
            Если ПозицияПослеЛет = 0 Тогда
                //Фигня какая-то, оставим алгоритм МиСофт

                //От сих старый код типовой конфигурации

                //**************************************

                Если НЕ (ЧислоЛет = 0) Тогда
                    // Построим строку с числом лет

                    Если (СтрДлина(ЧислоЛет) > 1) И (Число(Сред(ЧислоЛет, СтрДлина(ЧислоЛет) - 1, 1)) = 1) Тогда
                        СтрокаГод = " лет";
                    ИначеЕсли Число(Прав(ЧислоЛет, 1)) = 1 Тогда
                        СтрокаГод = " год";
                    ИначеЕсли (Число(Прав(ЧислоЛет, 1)) > 1) И (Число(Прав(ЧислоЛет, 1)) < 5) Тогда
                        СтрокаГод = " года";
                    Иначе
                        СтрокаГод = " лет";
                    КонецЕсли;
                    РасшифровкаСрокаПолезногоИспользования = РасшифровкаСрокаПолезногоИспользования + Строка(ЧислоЛет) + СтрокаГод;
                КонецЕсли;
                Если НЕ (ЧислоМесяцев = 0) Тогда
                    // Построим строку с числом месяцев

                    Если (СтрДлина(Цел(ЧислоМесяцев)) > 1) И (Число(Сред(Цел(ЧислоМесяцев), СтрДлина(Цел(ЧислоМесяцев)) - 1, 1)) = 1) Тогда
                        СтрокаМесяц = " месяцев";
                    ИначеЕсли Число(Прав(Цел(ЧислоМесяцев), 1)) = 1 Тогда
                        СтрокаМесяц = " месяц";
                    ИначеЕсли (Число(Прав(Цел(ЧислоМесяцев), 1)) > 1) И (Число(Прав(Цел(ЧислоМесяцев), 1)) < 5) Тогда
                        СтрокаМесяц = " месяца";
                    Иначе
                        СтрокаМесяц = " месяцев";
                    КонецЕсли;
                    РасшифровкаСрокаПолезногоИспользования = РасшифровкаСрокаПолезногоИспользования + ?(НЕ ЗначениеЗаполнено(РасшифровкаСрокаПолезногоИспользования), "", " ") + Строка(ЧислоМесяцев) + СтрокаМесяц;
                КонецЕсли;
                РасшифровкаСрокаПолезногоИспользования = "(" + РасшифровкаСрокаПолезногоИспользования + ")";
                
                //**************************************

                //До сих старый код типовой конфигурации

                
                
            КонецЕсли;
        КонецЕсли;
        Если РасшифровкаСрокаПолезногоИспользования = "" Тогда
            РасшифровкаСрокаПолезногоИспользования = СокрЛП(?(ЧислоЛет = 0, ЧислоМесяцев, ЧислоЛет)) + " " + Сред(СтрокаЧислоЛетМесяцев, ПозицияПослеЛет);
            //Уберем обязательное двузначное число месяцев, если оно получилось:

            РасшифровкаСрокаПолезногоИспользования = СтрЗаменить(РасшифровкаСрокаПолезногоИспользования, " 0", " ") + СтрЗаменить(Суффикс, "#$", "д");

            
            
        КонецЕсли;
    КонецЕсли;
    Возврат РасшифровкаСрокаПолезногоИспользования;
КонецФункци// РасшифровкаСрокаПолезногоИспользования()


В запросе поставил " " КАК СтажСтрокой

В модуде
&НаСервереБезКонтекста
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
    
    Для Каждого Эл из Строки Цикл
        Эл.Значение.Данные.СтажСтрокой = РаботаСоСтроками.ДатаПрописьюГодМесяцДень(Эл.Значение.Данные.Стаж);
    КонецЦикла
    
КонецПроцедуры
   DmitrO
 
15 - 12.12.17 - 16:17
Поздравляю. Решена еще одна важная (но по сути бесполезная) для заказчика задача. )
   Новиков
 
16 - 12.12.17 - 16:19
Красивая фукнция, надо забрать в коллекцию маразмов.
   тарам пам пам
 
17 - 12.12.17 - 16:58
(14) тебе что, платят за число строк кода?
   oleg_prg
 
18 - 12.12.17 - 17:36
(17) Хочешь поговорить об этом? ;)


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует