Оцените сложность задания по 1С !

  1. 9 г. назад
    13.05.2015 10:01:12 отредактировано Будущий_Олигарх

    Изучить представленную конфигурацию и написать обработку, простейший перенумератор документов для представленной базы.

    В обработке не нужно делать какой-то особенной функциональности, просто одна кнопка, после нажатия, на которую все имеющиеся документы в базе будут перенумерованы последовательно согласно моменту времени.

    конфа: https://cloud.mail.ru/public/4Gy8uMvKEuFU/Тест1С.zip

    Не слишком легкое ?

    p.s. ВАЖНО: количество документов(метаданных) может меняться, так же как и кол-во нумераторов !!! :)

    Ответы: (4) (8) (44) (81)
  2. jsmith82 если представишь рабочую обработку 100-ка на телефон(киви) упадет !

  3. так стандартных полно. вроде на том же итс есть. а уж на каком-нибудь инфостарте их вообще как грязи...

    Ответы: (5)
  4. имхо 5 часов работы на все.

    Ответы: (16)
  5. (0) Вредная обработка, если она будет делать "по одной кнопке" абсолютно все доки за все периоды
    Ты уже отдал контрагентам подписанные акты с одним номером, а после обработки номер станет совсем другим - бухи после этого будут пачками стреляться

  6. (2) Те которые работают с произвольными нумераторами, таких единицы.

  7. Это ТЕСТОВОЕ задание ! Увидеть код человека !

  8. Что ты подразумеваешь под произвольным нумератором?

    Ответы: (9)
  9. (0) беру. только не на телефон. гляну

  10. (7) Разные документы могут быть привязаны к единому нумератору, у нумератора есть своя периодичность и т.д. !

    Ответы: (10)
  11. 13.05.2015 10:09:14 отредактировано КитайскийМуй

    (9) Уже из этого предложения - нужны 2 реквизита формы обработки окромя кнопки... :)

    Ответы: (11) (12)
  12. (10) для упрощения решения задания кандидату, упрощаем ! И говрим что должна быть ОДНА кнопка после которой все имеющиеся документы в базе будут перенумерованы !
    Причем обработку мы должны запустить на любой базе, с любым кол-вом документов(объекты) и любым кол-вом нумераторов!!!

  13. (10) И что? Или предполагается что нельзя использовать нумерацию средствами платформы?

    Ответы: (13)
  14. (12)Нумератор = Неопределено

    Ответы: (14)
  15. (13) и что?
    Или мы про случай когда галка "Автонумерация" не установлена?

    Ответы: (15)
  16. (14) Да что мешает проверить наличие нумератора и использовать его, иначе - средствами платформы.
    Как-то все ждут готовых решений.

  17. Hans имхо 5 часов работы на все.

    Не много ли 5 часов ?

    Кандидатка прислала решение на 104 строки кода.

    Ответы: (17) (23)
  18. Будущий_Олигарх Кандидатка прислала решение на 104 строки кода.

    ты под видом тестовых заданий на собеседование, рассылаешь свою работу? )))))))

    Ответы: (20)
  19. Много, 2-3 часа если перенумеровывать все документы, без выбора периода, и всяких своих перенумераторов. Код кандидата в студию.

  20. да да да код сюда

  21. sf ты под видом тестовых заданий на собеседование, рассылаешь свою работу? )))))))

    Не пали контору ;)

  22. код и фото

  23. 13.05.2015 10:32:40 отредактировано Бендер

    сиськи Кандидатки

    Ответы: (24)
  24. 13.05.2015 10:34:41 отредактировано КитайскийМуй

    (16) Ну, если тебе только "Увидеть код человека", то в принципе - обработка может быть и не полностью рабочей... )))

    А мог бы - просто попросить кусок кода из какой-нибудь обработки, размещённой на инфостарте.

  25. Если Джейсмит код даст, тогда Выложу и её код, для более предметного обсуждения!

    Бендер сиськи Кандидатки

    Замужем.

    Ответы: (25) (26) (28)
  26. (24) Замужние более охотно показывают сиськи. :)

  27. (24)это нам не помешает какбэ

  28. Код - сюда, сиськи - в Пятницу :)

  29. (24) покажу, хуле. пишу покамест. тока есть вероятность, что на некоторое время буду в оффлайне. надеюсь, подождёшь. я никуда не денусь

    Ответы: (29)
  30. (28)не уходи в астрал только , пулей в магаз за топливом и обратно , и кодить кодить

    Ответы: (30)
  31. (29) Какой магаз??? Прочитать 10 псалмов и после ОтчеНаш - за работу!!! Магаз - потом, по готовности обработки...

  32. Сделал

    Ответы: (32)
  33. (31)ну выкладывай чего ждешь то ?

  34. ТС, выложил в частную ветку обработку
    Можешь сюда код мой закидывать )))

  35. так трудиться, и даже не увидеть сисек.
    Не любишь ты себя, Джейсмит...

  36. всё. я в оффлайн часа на три!

    Ответы: (36)
  37. (35)беги в магаз беги )))))

  38. ТАк код Джейсмита !

    &НаКлиенте
    Процедура ВыполнитьОбработку(Команда)
        
        ВыполнитьОбработкуНаСервере();
        
    КонецПроцедуры
    
    &НаСервере
    Процедура ВыполнитьОбработкуНаСервере()
        
        Для Каждого ОМ Из Метаданные.Документы Цикл
            
            ОбработатьДок(ОМ)
            
        КонецЦикла;
        
    КонецПроцедуры
    
    &НаСервере
    Процедура ОбработатьДок(ОМ)
        
        ТаблицаДок = ПолучитьТаблицаДок(ОМ);
        Для Каждого Строка Из ТаблицаДок.Строки Цикл
            Перенумеровать(Строка.Строки, "А", ОМ.ДлинаНомера);	
            Перенумеровать(Строка.Строки, "", ОМ.ДлинаНомера);	
        КонецЦикла;	
        
    КонецПроцедуры
    
    Функция ПолучитьТаблицаДок(ОМ)
        
        Запрос = Новый Запрос();
        Текст =						
        "ВЫБРАТЬ
        |	Таблица.Ссылка КАК Ссылка,
        |	Таблица.Дата КАК Дата,
        |	ГруппировкаНумератор КАК Период
        |ИЗ
        |	Документ.ИмяДок КАК Таблица
        |
        |УПОРЯДОЧИТЬ ПО
        |	Таблица.МоментВремени
        |ИТОГИ ПО
        |	Период";
        Текст = СтрЗаменить(Текст, "ИмяДок", ОМ.Имя);
        Нумератор = ОМ.Нумератор;
        ГруппировкаНумератор = "0";
        Если		Нумератор = Неопределено Тогда
            ГруппировкаНумератор = "0";
        ИначеЕсли	Нумератор.ПериодичностьНомера = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.Год Тогда
            ГруппировкаНумератор = "НАЧАЛОПЕРИОДА(Таблица.Дата, ГОД)";
        ИначеЕсли	Нумератор.ПериодичностьНомера = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.Квартал Тогда
            ГруппировкаНумератор = "НАЧАЛОПЕРИОДА(Таблица.Дата, КВАРТАЛ)";		
        ИначеЕсли	Нумератор.ПериодичностьНомера = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.Месяц Тогда
            ГруппировкаНумератор = "НАЧАЛОПЕРИОДА(Таблица.Дата, МЕСЯЦ)";
        ИначеЕсли	Нумератор.ПериодичностьНомера = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.День Тогда
            ГруппировкаНумератор = "НАЧАЛОПЕРИОДА(Таблица.Дата, ДЕНЬ)";		
        КонецЕсли;
        Текст = СтрЗаменить(Текст, "ГруппировкаНумератор", ГруппировкаНумератор);
        Запрос.Текст = Текст;
        Таблица = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
        Возврат Таблица;
                
    КонецФункции
    
    Процедура Перенумеровать(Доки, Префикс, Длина)
        
        Номер = 1;
        Для Каждого Док Из Доки Цикл
            ДокОбъект = Док.Ссылка.ПолучитьОбъект();
            ДокОбъект.Номер = ПолучитьНомерСтрокой(Номер, Префикс, Длина);
            ДокОбъект.ОбменДанными.Загрузка = Истина;
            ДокОбъект.Записать();
            Номер = Номер + 1;
        КонецЦикла;
        
    КонецПроцедуры
    
    // Не дописал!!! Упростил!!!
    Функция ПолучитьНомерСтрокой(Номер, Префикс, Длина)
        
        СтрНомер = Строка(Номер);
        СтрНомер = СтрЗаменить(СтрНомер, Символы.НПП, "");
        СтрНомер = Префикс + СтрНомер;
        Возврат СтрНомер;
        
    КонецФункции

    Я не проверял, ща потестим.

  39. Код у ДЖсмита кое-чего не учитывает, спишем на скорость! А в задании я как раз таки и ставлю акцент на изучение представленной конфы !

  40. Код кандидатки

    &НаСервере
    Процедура ВыполнитьНажатиеНаСервере()
        
        // 1) для каждого нумератора определяем типы документов
        Для Каждого СтрНумератор Из  Метаданные.НумераторыДокументов Цикл
            СписокДокументов = Новый СписокЗначений;
            ТекстЗапроса = "";
            Сч = 0;
            Для Индекс = 0 По Метаданные.Документы.Количество()-1 Цикл
                Если Метаданные.Документы[Индекс].Нумератор = СтрНумератор Тогда
                    Сч = Сч + 1;
                    СписокДокументов.Добавить(Метаданные.Документы[Индекс]);
                    ОтборДокумент = Строка(Метаданные.Документы[Индекс]);
                    ОтборПериод = Строка(СтрНумератор.ПериодичностьНомера);
                    Если Сч > 1  Тогда
                        ТекстЗапроса = ТекстЗапроса + 
                        " 
                        |ОБЪЕДИНИТЬ ВСЕ 
                        |";
                    КонецЕсли;
                    ТекстЗапроса = ТекстЗапроса + 
                    "ВЫБРАТЬ
                    |	НАЧАЛОПЕРИОДА(" + ОтборДокумент + ".Дата, " + ОтборПериод + ") КАК Период ";
                    Если Сч = 1 Тогда
                        ТекстЗапроса = ТекстЗапроса + "ПОМЕСТИТЬ Врем ";
                    КонецЕсли;
                    ТекстЗапроса = ТекстЗапроса + 
                    "ИЗ
                    |	Документ." + ОтборДокумент + " КАК " + ОтборДокумент +
                    " СГРУППИРОВАТЬ ПО
                    |	НАЧАЛОПЕРИОДА(" + ОтборДокумент + ".Дата, " + ОтборПериод + ")";
                КонецЕсли;
            КонецЦикла;
            ТекстЗапроса = ТекстЗапроса + 
            "
            |;
            |/////////////////////////////////////////
            |ВЫБРАТЬ
            |	Врем.Период КАК Период
            |ИЗ
            |	Врем КАК Врем
            |
            |СГРУППИРОВАТЬ ПО
            |	Врем.Период
            |
            |УПОРЯДОЧИТЬ ПО
            |	Период";
            
            // 2) получаем периоды, за которые будем делать перенумерацию (годы, кварталы)
            ЗапросПериоды = Новый Запрос;
            ЗапросПериоды.Текст = ТекстЗапроса;
            ВыборкаПериоды = ЗапросПериоды.Выполнить().Выбрать();
            
            // 3) внутри каждого периода (года, квартала) получаем список документов
            Пока ВыборкаПериоды.Следующий() Цикл
                Сч = 0;
                ТекстЗапроса = "";
                Для Индекс = 0 По СписокДокументов.Количество()-1 Цикл
                    Сч = Сч + 1;
                    ОтборДокумент = Строка(СписокДокументов[Индекс]);
                    Если Сч > 1  Тогда
                        ТекстЗапроса = ТекстЗапроса + 
                        " 
                        |ОБЪЕДИНИТЬ ВСЕ 
                        |";
                    КонецЕсли;
                    ТекстЗапроса = ТекстЗапроса + 
                    "ВЫБРАТЬ " + 
                    ОтборДокумент + ".Ссылка, " + 
                    ОтборДокумент + ".Дата КАК Период 				
                    |ИЗ Документ." + ОтборДокумент + " КАК " + ОтборДокумент +
                    " ГДЕ " + ОтборДокумент + ".Дата Между &ДатаНачала И &ДатаОкончания ";		
                КонецЦикла;
                ТекстЗапроса = ТекстЗапроса +" Упорядочить ПО Период";
                ЗапросДокументы = Новый Запрос;
                ЗапросДокументы.Текст = ТекстЗапроса;
                Если Строка(СтрНумератор.ПериодичностьНомера) = "Год" Тогда
                    ЗапросДокументы.УстановитьПараметр("ДатаНачала", НачалоГода(ВыборкаПериоды.Период));
                    ЗапросДокументы.УстановитьПараметр("ДатаОкончания", КонецГода(ВыборкаПериоды.Период));
                ИначеЕсли Строка(СтрНумератор.ПериодичностьНомера) = "Квартал" Тогда
                    ЗапросДокументы.УстановитьПараметр("ДатаНачала", НачалоКвартала(ВыборкаПериоды.Период));
                    ЗапросДокументы.УстановитьПараметр("ДатаОкончания", КонецКвартала(ВыборкаПериоды.Период));
                КонецЕсли;
                ВыборкаДокументы = ЗапросДокументы.Выполнить().Выбрать();  
                
                // 4) делаем перенумерацию документов
                Номер = 1;
                Пока ВыборкаДокументы.Следующий() Цикл
                    ДокОбъект = ВыборкаДокументы.Ссылка.ПолучитьОбъект();
                    ДокОбъект.Номер = Номер;
                    ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
                    Номер = Номер + 1;
                КонецЦикла;
            КонецЦикла;
            
        КонецЦикла;
        
    КонецПроцедуры
    
    &НаКлиенте
    Процедура ВыполнитьНажатие(Команда)
        ВыполнитьНажатиеНаСервере();
    КонецПроцедуры
    
    Ответы: (46) (49)
  41. Ни где не увидел ключевого метода "УстановитьНовыйНомер(<ПрефиксНомера>) " Это они тупые или я тупой?

    Ответы: (41) (42) (43)
  42. (40) Кандидатка задавала уточняющие вопросы, про префиксы и прочие моменты, по этому я опустил этот момент и сказал максимально просто сделать.

    Ответы: (62)
  43. (40) это не нужно...
    а вот без ОбновитьНумерациюДокументов не комильфо.....

  44. (40) и использует ограничение документов по датам...

  45. Если базу в (0) обработать этими обработками, номера документов разные )))) какая-то из обработок не рабочая ))

    Ответы: (45)
  46. (44) Мой вариант ближе к кандидатке, учтены совместные нумераторы.

    Ответы: (53)
  47. (39) Чето я не вкурю. А если документу не назначен нумератор?

    Ответы: (48) (49)
  48. Чем париться с анализом периодичности, проще все документы перенумеровать сначала с левым префиксом, потом - без него, с помощью УстановитьНовыйНомер().
    И, если уж делается перенумерация за 1 проход, - надо делать Запись с признаком ОбменДанными.Загрузка = Истина, чтобы не напороться на ошибку. У кандидатки проведение зачем-то сделано. У джейсмита правильнее в этом моменте.

  49. (46) Тогда средствами платформы, по-умолчанию.

  50. ptiz (39) Чето я не вкурю. А если документу не назначен нумератор?

    Я для кандидатки делал акцент на нумераторах. По этому обычные доки без нумераторов меня не интересуют.

  51. 13.05.2015 12:41:33 отредактировано Hans
    Процедура КнопкаВыполнитьНажатие(Кнопка)
        // Вставить содержимое обработчика.
        
        ВыполнитьОбработкуНаСервере();
        
    КонецПроцедуры
    
    Процедура ВыполнитьОбработкуНаСервере()
        
        Для Каждого ОМ Из Метаданные.Документы Цикл
            
            ОбработатьДок(ОМ)
            
        КонецЦикла;
        
    КонецПроцедуры
    
    
    Процедура ОбработатьДок(ОМ)
        
        ТаблицаДок = ПолучитьТаблицаДок(ОМ);
        Перенумеровать(ТаблицаДок);
        
    КонецПроцедуры
    
    Функция ПолучитьТаблицаДок(ОМ)
        
        Состояние(ОМ.Имя);
        
        Запрос = Новый Запрос();
        Текст =	"ВЫБРАТЬ
               	|	ABCКлассификацияПокупателей.Ссылка
               	|ИЗ
               	|	Документ.ABCКлассификацияПокупателей КАК ABCКлассификацияПокупателей
               	|
               	|УПОРЯДОЧИТЬ ПО
               	|	ABCКлассификацияПокупателей.МоментВремени";					
        Текст = СтрЗаменить(Текст, "ABCКлассификацияПокупателей", ОМ.Имя);
        Запрос.Текст = Текст;
        Таблица = Запрос.Выполнить().Выгрузить();
        Возврат Таблица;
                
    КонецФункции
    
    Процедура Перенумеровать(Доки)
        
        Для Каждого Док Из Доки Цикл
            ДокОбъект = Док.Ссылка.ПолучитьОбъект();
            ДокОбъект.Номер = "~" + Прав(ДокОбъект.Номер, СтрДлина(ДокОбъект.Номер)-1) ;
            ДокОбъект.ОбменДанными.Загрузка = Истина;
            ДокОбъект.Записать();
            
        КонецЦикла;
        
        Для Каждого Док Из Доки Цикл
            ДокОбъект = Док.Ссылка.ПолучитьОбъект();
            ДокОбъект.УстановитьНовыйНомер();
            ДокОбъект.ОбменДанными.Загрузка = Истина;
            ДокОбъект.Записать();   
        КонецЦикла;
    
        
    КонецПроцедуры
    
  52. ИМХО кандидатка что то очень усложнила, за такими прогами разгребать код это ппц.

    Ответы: (63)
  53. + у кандидатки запрос из кусков.
    А у меня поговорка по Горькому - "Уничтожте гомосексуализм - и запросы из кусков исчезнут."

    Ответы: (53)
  54. (52) твой вариант учитывает (45)

    Я как раз даю базу тестовую в которой есть доки завязанные на один нумератор и обработать такую схему можно только динамически создавая текст запроса.

  55. Давайте еще обсудим какие вопросы должен задать, грамотный спец при виде такого задания ? Для более качественного выполнения ?

    Ответы: (55) (57)
  56. Будущий_Олигарх какие вопросы должен задать, грамотный спец при виде такого задания

    1. а это точно тест на собеседование, а не Вы свою работу моими руками делаете?

    Ответы: (61) (62)
  57. хотя это не грамотный, это опытный спец спросит

  58. (54) Грамотный спец должен был предложить тебе не любить ему мозги дурными заданиями

    Ответы: (58)
  59. (57) Ну когда мы со страта предлагаем больше чем она получает в настоящий момент, это должно для неё быть мотиватором выполнить задание ?

    Ответы: (59)
  60. (58) Уровень задания не для спеца, а для студента. Студент будет решать, спец вас пошлет, а скорее и не придет к вам. Ну разве что вы предлагаете отстатыщ за решение студенческих заданий

    Ответы: (60)
  61. (59) Давай задание на спеца. Глянем.

    Ответы: (64)
  62. (55) вобщем, да, все документы собрать без запроса из кусков не получится. А при перенумерации мне способ с подстановкой префикса, и установитьНовыйНомер нравится больше.

    Ответы: (62)
  63. Hans (55) вобщем, да, все документы собрать без запроса из кусков не получится. А при перенумерации мне способ с подстановкой префикса, и установитьНовыйНомер нравится больше.

    Соглашусь, но с учетом (41) в данном контексте это опускаем, так как я так же не люблю тратить чужое время.

  64. 13.05.2015 13:42:06 отредактировано Fedot

    Hans ИМХО кандидатка что то очень усложнила, за такими прогами разгребать код это ппц

    После женщин/девушек программисток только переписывать заново.

  65. (60) У спеца обычно резюме есть, по которому и так видно, что он умеет. Достаточно собеседования, имхо

    Ответы: (65)
  66. (64) А что такое спец в твоем понимании ?

    Ответы: (66) (67)
  67. (65) от 22 см

  68. (65) Он имел ввиду: кандидат на вакансию, который прислал резюме.

  69. онлайн. извините, я писал очень бегло, наспех
    конечно, некоторые вещи не учёл

  70. совместные нумераторы не учёл, ага

    Ответы: (70)
  71. 13.05.2015 17:19:26 отредактировано Hans

    (69) сотку тебе заплатили за работу?

    Ответы: (71)
  72. (70) 200 :)

  73. Я сейчас при приеме даю 3 задачи. С жестким ограничением времени 30 минут на 1 и 2 пункт.
    1. в форме списке вывести наличие связанных документов (например для заказа) колонка булево
    2. написать запрос "документ, предыдущий документ"
    3. что такое Web-сервис в 1с своими словами
    Из 14 собеседованных никто не справился. Но все равно троих берем - работать нужно ...

    Ответы: (77) (78) (86)
  74. Из 14 первый пункт сделали трое, второй у всех почему то вызвал ступор и его не сделал ни кто. На 3 вопрос ответило 2 из 3 принятых на работу ... Така фигня малята ...

    Ответы: (76)
  75. и какое решение правильное? Через критерий отбора если такой есть в конфе?

  76. ИМХО не такая ж простая задача, особенно если нужно что бы список после этого крутился быстро.

  77. (73) А теперь расскажи, что из этого вы используете в реальности в вашей нетленки?

    Ответы: (79)
  78. Fynjy предыдущий документ

    А мне вообще непонятно, что это за зверь? Документ - основание????

    Ответы: (79)
  79. (72) А 1 и 3 в принципе, не вопросы. Для студентов без моска.

    Ответы: (80)
  80. (76) ну такая задача была вывести колонку булево для заказа отражающую наличие связанных документов. Вебсервисы во всю используются у заказчика. А 2 пункт знание языка запросов. Не сложная задача на 5 минут.
    (77) причем тут документ основание? Нужен предыдущий документ ...
    Д1, Д2, Д3
    Д3,Д2
    Д2,Д1
    Д1, Null

    Ответы: (82)
  81. (78) из отсеянных было 2 полных георгеевских кавалера - по 4 сертификатов спеца ... Не справились со всеми тремя задачами ...

  82. (0) никакая это не "тестовая обработка", это вирус типичный :)
    зв: и в задании "Изучить представленную конфигурацию" - явно лишнее, ну разве что версию узнать

  83. (79) а в этой программе ОбратныйПорядок для выборок так и не прикрутиле?

    Ответы: (83)
  84. (82) не понял вопроса?

    Ответы: (84)
  85. (83) СКД-шнику семерочника не понять. Это только в клюшках найти твой предыдущий = три строки кода.

  86. (85) мне как бы вывести список и это явно не три строки.

  87. 16.05.2015 10:22:08 отредактировано Вопак

    Fynjy 2. написать запрос "документ, предыдущий документ"

    а профФєсор все маеться... набирает остапушка, шукаэ стулья.

или зарегистрируйтесь чтобы ответить!