Имя: Пароль:
1C
1С v8
Задача для собеседования
0 Ненавижу 1С
 
гуру
01.06.12
13:03
Простая.
Написать функцию принимающую на входе 2 ссылки на иерархический справочник. На выходе - ближайший их общий прародитель или пустая ссылка, если такого нет
1 Irek-kazan
 
01.06.12
13:03
где вопрос?
2 Господин ПЖ
 
01.06.12
13:03
угадывай...
3 Ненавижу 1С
 
гуру
01.06.12
13:04
(1) зачем, есть предложение
4 rotting
 
01.06.12
13:04
Это тебе задали или ты придумал?
5 Ненавижу 1С
 
гуру
01.06.12
13:04
(4) я придумал
6 Guk
 
01.06.12
13:05
какая-то не очень умная задача. а главное очень "практичная"...
7 Guk
 
01.06.12
13:06
разве что позволяет развернуть дискуссию с собеседуемым на философскую тему "что есть ближайший общий прародитель"...
8 Feanor
 
01.06.12
13:07
(5) садись, два :)
9 Господин ПЖ
 
01.06.12
13:07
(6) Сейчас тебе расскажут что тебе без этого теперь никак...

Ваня закомплексует и пойдет в сторожа
10 Axel2009
 
01.06.12
13:07
(0) задача на собеседовании
есть РС периодический Номенклатура, ХарактеристикаНоменклатуры, Цена
нужно получить срез последних по измерению Номенклатура
11 Господин ПЖ
 
01.06.12
13:08
(7) тут вроде все понятно... если пойдут вопросы "ачоэто?" можно сразу не ждать решения
12 Ахиллес
 
01.06.12
13:08
(5) Полное наименование поделить на подстроки и сравнивать эти подстроки.
13 Ненавижу 1С
 
гуру
01.06.12
13:08
(8) чего так резко?
(9) ))
14 Guk
 
01.06.12
13:08
(10) в чем подвох?...
15 rotting
 
01.06.12
13:09
(12) вот и не стандартное решение первое)
16 rotting
 
01.06.12
13:09
(14) в том что получишь несколько цен)
17 Ненавижу 1С
 
гуру
01.06.12
13:09
(10) это уже было, надо просто забыть, что есть ХарактеристикаНоменклатуры и самому "вручную" сделать срез последних
но есть некорректность - цен может быть несколько
(12) если они неуникальны?
18 Ахиллес
 
01.06.12
13:10
(17) Тогда первое же сравнение выдаст ЛОЖЬ
19 Guk
 
01.06.12
13:11
(16) а этот смысл как-то скрыт? разве изначально это непонятно?...
20 Ахиллес
 
01.06.12
13:11
...стоп чё то не так понял :-)
21 Guk
 
01.06.12
13:11
(20) вооот, смотрим (7)...
22 Ахиллес
 
01.06.12
13:12
Тогда по полному коду :-)  Меня на мякине не проведёшь :-)
23 Buster007
 
01.06.12
13:12
(19) ну стоит подумать об адекватности собеседующего...
01.06.12 00:00:00 Н1 Х1 100
01.06.12 00:00:00 Н1 Х2 120
какая последняя?
24 Guk
 
01.06.12
13:14
(23) какая больше, та и последняя разумеется. мы же говорим про российскую коммерческую фирму, надеюсь?...
25 Ненавижу 1С
 
гуру
01.06.12
13:15
(24) даже в Российской иногда нужна меньшая ))
26 Ахиллес
 
01.06.12
13:15
Обе последние.
27 Starhan
 
01.06.12
13:24
на вскидку
получаем два массива с родителями обоих ссылок. (запрос только иерархия)
И начиная с конца меньшего сравниваем их попорядку до нулевого элемента массива.
28 Starhan
 
01.06.12
13:27
хотя вру. проще навероне с начала начать так как до общего прародителя начало будет полностью одинаковое.
29 Beduin
 
01.06.12
13:28
Функция ДляНенавижу1С(Знач Ссылка1, Знач Ссылка2)
   Спр = Справочники.Номенклатура;
   НачальнаяСсылка2 = Ссылка2;
   Пока Ссылка1.Родитель <> Спр.ПустаяСсылка() Цикл
       Если Ссылка1.Родитель = Ссылка2.Родитель Тогда
           Возврат Ссылка1.Родитель;
       КонецЕсли;
       Ссылка2 = Ссылка2.Родитель;
       Если Ссылка2.Родитель = Спр.ПустаяСсылка() Тогда
           Ссылка1 = Ссылка1.Родитель;
           Ссылка2 = НачальнаяСсылка2;
       КонецЕсли;
   КонецЦикла;
   Возврат Спр.ПустаяСсылка();
КонецФункции
30 rutony
 
01.06.12
13:31
Мы дали человеку задачку на собеседование:
УТ 10.3, вывести штрихкод товара в форме списка номенклатуры.

Вот это я понимаю задачка, нужно написать и оптимально, что бы не лагало, так еще и с подвохом=)

Человек парился 1 день, так и не смог родить ничего=)
31 Азазелло
 
01.06.12
13:31
В Т1 получаем ("Ссылка", "Порядок")
Ссылка1 0
РодительСсылки1 1
....
РодительРодителя....Ссылки1 N
В Т2 получаем ("Ссылка", "Порядок")

Ссылка2 0
РодительСсылки2 1
....
РодительРодителя....Ссылки2 M

А дальше джойним Т1 и Т2 по "Ссылка", группируем по ней с агрегатом МИНИМУМ("Порядок") и выбираем минимальный.

(29) ай-яй-яй, к реквизитам элемента через точку обращаться...
32 ptiz
 
01.06.12
13:38
если "в лоб"

   ОбщийРодитель = Справочники.Номенклатура.ПустаяСсылка();
   
   Если Элемент1.Уровень() < Элемент2.Уровень() Тогда
       ТекущийРодитель = Элемент1.Родитель;
   Иначе
       ТекущийРодитель = Элемент2.Родитель;
   КонецЕсли;
   
   Пока НЕ ТекущийРодитель.Пустая() Цикл
   
       Если Элемент1.ПринадлежитЭлементу(ТекущийРодитель)
           И Элемент2.ПринадлежитЭлементу(ТекущийРодитель)  Тогда
           ОбщийРодитель = ТекущийРодитель;
           Прервать;
       КонецЕсли;
       
       ТекущийРодитель = ТекущийРодитель.Родитель;
   
   КонецЦикла;
   
   Сообщить(ОбщийРодитель);
33 Ахиллес
 
01.06.12
13:38
(30) Штрихкод в графическом виде в списке справочника номенклатуры?
34 Ахиллес
 
01.06.12
13:40
(32) Азазелло прав. Нехрен базу в цикле дёргать через точку, когда можно зараз получить всех родителей и сравнивать уже их.
35 rutony
 
01.06.12
13:43
(33) Да нет=) Просто циферки.
В конфе даже серий и характеристик небыло. Подвох в том что у парочки товаров было несколько штрихкодов)
36 Alex S D
 
01.06.12
13:43
а непростые задачки даешь ?
37 Ахиллес
 
01.06.12
13:44
(35) Так же как с показом остатков и цен в типовой конфигурации. Хрен ли тут придумывать ещё.
38 Dmitry77
 
01.06.12
13:44
Например
1. Получаем всех родителей первого элемента и всех родителей второго.
2. Грузим их в ТЗ вида родитель, элемент, дальность от элемента. Грузим эту таблицу в запрос.
3. Группируем по родителям, сумируем стороки запроса, сортируем п одальности от элемента. Отбираем где строк =2.
39 Beduin
 
01.06.12
13:50
(34) А ты думаешь зараз всех родителей получить быстрее будет, чем по одной таблице прыгать?
40 gosn1ck
 
01.06.12
13:51
(10) 1. срез последних 2. соединение (3 поля + период среза > периода физ тч) с физ таблицей из которой берем только период; делаем группировку чтобы этот период был в максимум 3. соединяем еще раз с физ таблицей (также 3 поля + новое поле из 2 + период из физ тч).
вот те и 2 цены
на работу возьмёте?
41 Ахиллес
 
01.06.12
13:53
(39) В твоём примере нет никакой таблицы.
42 Азазелло
 
01.06.12
13:53
(39) боюсь, что в рамках запросов 1С, не позволяющих создавать рекурсии, не получится разом получить всех родителей Элемента.
43 Ненавижу 1С
 
гуру
01.06.12
13:53
кстати, итоги по иерархии 1С делает так, делаются итоги без иерархии, потом сервер приложений в цикле достраивает иерархию
44 Ахиллес
 
01.06.12
13:56
(42) Можно с помощью .Уровень нарисовать запрос со всеми родителями. Но это извращения всё. Сравнения Полных кодов проще.
45 Ненавижу 1С
 
гуру
01.06.12
13:56
(36) по регистру ТоварыНаСкладах сделать отчет по среднему времени (в днях) нахождения товара на заданном складе без учета характеристик
46 Ненавижу 1С
 
гуру
01.06.12
13:56
(44) если не уникальны они?
47 Азазелло
 
01.06.12
13:58
(46)+1 несерьезно это, по текстовым полям сравнивать
48 _Atilla
 
01.06.12
13:59
(0) Вид иерархии? контроль уникальности кодов...

Есть какие то условия?
49 Ненавижу 1С
 
гуру
01.06.12
14:00
(48) нет, нельзя на это завязываться
50 Beduin
 
01.06.12
14:00
(41) Хм. Таблица справочника это теперь не таблица?
51 Ахиллес
 
01.06.12
14:00
(46) Неуникальные кода? Значит сами себе злобные буратины и придётся извращатся со ссылками и родителями. Нет ни одной вменяемой причины почему в спавочнике должны быть неуникальные кода.
(47)Да ну? Нормально.
52 Ненавижу 1С
 
гуру
01.06.12
14:02
(51) а как ты думаешь он строится этот полный код? не тем ли обходом иерархии? ))
53 _Atilla
 
01.06.12
14:03
(32) Если вид иерархии "групп и элементов" твой корректно сработает?
54 Ахиллес
 
01.06.12
14:06
(52) Так всё таки, зачем заводить справочники с неуникальными кодами? В какой секте свидетелей Быдлокода такому учат?
55 Beduin
 
01.06.12
14:07
(54) С объединением баз никогда не сталкивался?
56 Buster007
 
01.06.12
14:08
(54) бывают такие справочники у которых длина кода равна 0.
57 Ненавижу 1С
 
гуру
01.06.12
14:09
(54) да хрен с ними со справочниками и БД вообще
есть объект, у него поле Родитель - ссылка на объект такого же типа, может быть не заполнено
известно, что ссылки эти образуют дерево
найти для двух объектов минимального общего предка
58 Ахиллес
 
01.06.12
14:09
(55) В объединённой базе не будет уникальных кодов? ;-) Обычно кода в другой реквизит переносят в таком случае если они нужны в новой базе или префикс базы добавляют.
(56)Бывают, бывают, я разве говорил, что не бывают?
59 Buster007
 
01.06.12
14:10
(58) ну вот ) значит зачем завязываться на код?
60 Beduin
 
01.06.12
14:11
(57) Выложи свою версию?
61 Ненавижу 1С
 
гуру
01.06.12
14:13
(60) в цикле попеременно сдвигаем обе ссылки на родителя (приближаемся к корню), проверяя на общего и пустого родителя
62 Ахиллес
 
01.06.12
14:15
(59)Я больше привык прикладные задачи решать. А оптимальное решение может включать в себя посыл неадекватного менеджера в пешее эротическое путешествие если он какую то фигню сморозил. Если задача в (0) теоретическая и к 1С отношение имеет постольку, поскольку, то опять же в цикле сравниваем родителей начиная снизу, в чем тут задача, вообще не понятно если задача не завязана на конкретный одинэсовский код.
63 Buster007
 
01.06.12
14:15
(61) не интересно. надо запросом! )
64 Ненавижу 1С
 
гуру
01.06.12
14:15
(63) это про (57)
65 Axel2009
 
01.06.12
14:16
(61) 10 уровней иерархии. один элемент указываем из 9 уровня, другой из 3го. кого куда сдвигать?
66 Ахиллес
 
01.06.12
14:16
Блин. Ну вот, Гора (0) родила мышь (61). И в чем тут задача, когда и так было понятно, что надо родителей сравнивать?
67 Beduin
 
01.06.12
14:17
(61) Почти как у меня в (29)
68 Ненавижу 1С
 
гуру
01.06.12
14:21
кстати в (61) я брешу
69 Buster007
 
01.06.12
14:22
(64) ну да.
70 _Atilla
 
01.06.12
14:25
(61) в цикле попеременно сдвигаем обе ссылки на родителя (приближаемся к корню), проверяя на общего и пустого родителя

Доработаем твою мысль: У кого уровень выше надо поднимать до уровня другого.
71 Beduin
 
01.06.12
14:25
(68) )))
Хз тогда как. Запросом не получится, пихать это все в массивы не вариант.
Сдвигать проще, безопасней и быстрей.
72 _Atilla
 
01.06.12
14:25
(70) дальше по твоему будет.
73 Ненавижу 1С
 
гуру
01.06.12
14:25
в (61) надо еще запоминать
в общем снимается, согласен - неинтересно
пойду ка я в отпуск
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший