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

  1. 8 г. назад
    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. написать запрос "документ, предыдущий документ"

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

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