Тестовая задача на вакансию "Старший разработчик 1С"

28.03.24

Разработка - Подготовка к аттестации

Необходимо написать алгоритм для распределения суммы пропорционально количеству в таблице.

Скачать исходный код

Наименование Файл Версия Размер
Тестовая задача на вакансию "Старший разработчик 1С":
.epf 7,09Kb
7
.epf 7,09Kb 7 Скачать

Тестовое задание

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

Результат представить в виде внешней обработки.

 

Количество

Сумма

10

 

13

 

-5

 

1.33

 

100

 

1

 

20

 

 

Решение можно скачать в виде внешней обработки. Тестировалось на платформе 8.3.20.1914, должно работать и на предыдущих версиях и последующих.

Тестировалось на платформе 1С:Предприятие 8.3 (8.3.21.1624).

Необходимо написать алгоритм для распределения суммы пропорционально количеству в таблице.

См. также

Запросы 1С OnLine. Интерактивная обучающая программа

Подготовка к аттестации Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Интерактивное изучение языка запросов с самого начала: - 50 практических заданий с различным уровнем сложности; - Методические материалы по практике написания запросов; - Описание назначения таблиц и индексов 1С Предприятие 8; - Методика решения реальных задач запросом 1С; - Автоматическая система проверки решений с указанием ошибок; - Инструкции по решению задач с разъяснениями; - Техническая поддержка пользователей. Подходит для начинающих и действующих разработчиков 1С

1800 руб.

11.02.2014    74535    79    14    

172

Экзамен "1С:Специалист-консультант" по внедрению подсистем управленческого учета в 1С:ERP. Полные и правильные решения билетов

Подготовка к аттестации Платформа 1С v8.3 1С:ERP Управление предприятием 2 Россия Абонемент ($m)

В публикации представлены только решения тех заданий, который попадаются на экзамене 1С:СК управленческого учета ERP. Благодаря данным решениям к экзамену стало подготовиться проще, чем когда-либо.

10 стартмани

08.04.2024    1685    20    user1988637    0    

11

Программист 1С: как начать с нуля с минимальными затратами

Подготовка к аттестации Программист Платформа 1С v8.3 Россия Бесплатно (free)

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

18.03.2024    4332    AlOkt    4    

6

Как я готовилась к экзамену на Специалиста по платформе 1С

Подготовка к аттестации Программист Стажер Платформа 1С v8.3 Россия Бесплатно (free)

Готовилась три месяца, сдала с первого раза. Делюсь опытом, лайфхаками и ресурсами, по которым учила материал.

14.03.2024    12007    PROSTO-1C    46    

89

Как я стал Экспертом по технологическим вопросам за 3 месяца

Подготовка к аттестации Программист Бесплатно (free)

Мой опыт подготовки и сдачи к экзамену 1С: Эксперт по технологическим вопросам за 3 месяца. Часть 1.

29.01.2024    14880    shuhratsj    103    

157

1С: Специалист-консультант ЗУП 8. Решения из сборника задач для подготовки к экзамену «1С:Специалист-консультант» по внедрению прикладного решения „1С:Зарплата и управление персоналом 8“, редакция сентябрь 2023. Часть 6

Подготовка к аттестации Зарплата Кадровый учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Абонемент ($m)

Часть шестая. Делюсь сквозным решением 15-ти задач из сборника задач для подготовки к экзамену «1С:Специалист-консультант» по внедрению прикладного решения „1С:Зарплата и управление персоналом 8“, редакция сентябрь 2023.

5 стартмани

01.12.2023    1741    23    Ocherkcons    0    

6

1С: Специалист-консультант ЗУП 8. С чего начать решение билета на экзамене? Актуальность: ноябрь 2023 года

Подготовка к аттестации Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Делюсь наработками из опыта подготовки к экзамену на получение сертификата 1С:Специалист-консультант по внедрению прикладного решения „1С:Зарплата и управление персоналом 8“. Первые минуты на экзамене.

17.11.2023    3709    Ocherkcons    0    

8
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RustIG 1642 28.03.24 09:05 Сейчас в теме
(0) вот два описания реальных задач, где также приходится решать проблему копеек:
Распределение расходов
Бонусная система
пользуйтесь.
можно конечно воспользоваться поиском по сайту ИС по ключевым словам "проблема копеек", но выйдет много лишнего и не относящегося к этой теме...
2. OlegAr 22 28.03.24 10:06 Сейчас в теме
добавлю "копейку в огород", расчет начисление заработной платы от обратного. (Начисление от суммы выплаты).
количество интераций к бесконечности.
3. davdykin 25 28.03.24 12:29 Сейчас в теме
Интуитивно задача выглядит очень легкой.. неужели такие реально дают на старшего разраба?
Faroka; dmfaleleev; MrFlanker; Itilive.ru; +4 Ответить
4. dimanich70 746 28.03.24 14:19 Сейчас в теме
вот если бы запросом поделить, то тогда "Да", а так "Нет"
5. Vinzor 96 28.03.24 15:58 Сейчас в теме
Запросом можно поделить, есть хитрость одна, уже делал. Но всё же на копейку проверить стоит, и если она будет, то применить её к максимальному числу из набора.
6. Stas-ch 35 28.03.24 18:23 Сейчас в теме
Мне вот интересно, а отрицательные числа как рассматривать? Или брать по модулю?
7. unichkin 1567 28.03.24 22:13 Сейчас в теме
В бсп решено давным-давно.. ОбщегоНазначенияКлиентСеревер.РаспределитьСуммуПоКожффициентам
alwiz3; Dunda; +2 Ответить
8. MrFlanker 226 29.03.24 14:12 Сейчас в теме
Вот так решена задача в типовой УТ10.3
// Функция выполняет пропорциональное распределение суммы в соответствии
// с заданными коэффициентами распределения
//
// Параметры:
//  ИсхСумма   - распределяемая сумма
//  МассивКоэф - массив коэффициентов распределения
//  Точность   - точность округления при распределении. Необязателен.
//
//Возвращает:
//  МассивСумм - массив размерностью равный массиву коэффициентов, содержит
//               суммы в соответствии с весом коэффициента (из массива коэффициентов)
//               В случае если распределить не удалось (сумма = 0, кол-во коэф. = 0,
//               или суммарный вес коэф. = 0), тогда возвращается значение Неопределено
//
Функция РаспределитьПропорционально(Знач ИсхСумма, МассивКоэф, Знач Точность = 2, ПроверкаНулевыхЗначений=Истина) Экспорт

	Если МассивКоэф.Количество() = 0 Или (ПроверкаНулевыхЗначений И ИсхСумма = 0) Или ИсхСумма = Null Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	ИндексМакс = 0;
	МаксЗнач   = 0;
	РаспрСумма = 0;
	СуммаКоэф  = 0;
	
	Для К = 0 По МассивКоэф.Количество() - 1 Цикл
		
		МодульЧисла = ?(МассивКоэф[К] > 0, МассивКоэф[К], - МассивКоэф[К]);
		
		Если МаксЗнач < МодульЧисла Тогда
			МаксЗнач = МодульЧисла;
			ИндексМакс = К;
		КонецЕсли;
		
		СуммаКоэф = СуммаКоэф + МассивКоэф[К];
		
	КонецЦикла;
	
	Если СуммаКоэф = 0 Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	МассивСумм = Новый Массив(МассивКоэф.Количество());
	
	Для К = 0 По МассивКоэф.Количество() - 1 Цикл
		МассивСумм[К] = Окр(ИсхСумма * МассивКоэф[К] / СуммаКоэф, Точность, 1);
		РаспрСумма = РаспрСумма + МассивСумм[К];
	КонецЦикла;
	
	// Погрешности округления отнесем на коэффицент с максимальным весом
	Если Не РаспрСумма = ИсхСумма Тогда
		МассивСумм[ИндексМакс] = МассивСумм[ИндексМакс] + ИсхСумма - РаспрСумма;
	КонецЕсли;
	
	Возврат МассивСумм;

КонецФункции // РаспределитьПропорционально()

Показать


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

Я бы построил алгоритм так:
- находим минимум и максиум значений (-5 и +100).
- сдаивгаем все в плюс... чтобы не было значений ниже 0 (+5 делаем)
- в примере получаются числа от 0...105
- распределяем сумму с максимальной точностью (на выходе массив дробных чисел)
- копируем точный массив распределения суммы и округляем числа до необходимой точности
- считаем погрешность итоговую Погрешность = Сумма - Массив.
далее самое интересное... способ распределения погрешности
первое что приходит в голову
- докидывать к суммам можно только по 1 еденицы точности Например (0,01 = 1 копейка) для точности округляени 2.
- Шаг1. Находим максимальную разнциу округл. и точных коэф.
- Щаг2. Докидываем 0.01 к этому коэфициенту
- Щаг3. Погрешность уменьшилась на 0.01, проверяем если она не равно нулю повторяем шаг1.
Посло того как вся погрешность раскидана.. возвращаем смещение -5.
Готово.
9. MrFlanker 226 29.03.24 14:18 Сейчас в теме
Нужно ометить что Погрешность всегда будет кратна услновным 0.01. И всегда за конечное число шагов будет раскидана по имебщимся коэфициентам. И Посколько она будет раскидываться минимально возможными порциями, причем не на максимальным суммам, а именно к суммам где расхождение с точной сумму максимальное это более правильно. И среднее отклоненние такого подхода к округлению должно дать хорошие результаты.

Но возможно если подумать еще немного найдется способа без массива в цикле N раз. что приведет к числу операций O(N^2) .
10. tugushev98 29.03.24 15:40 Сейчас в теме
Необходимо уточнение, что значит проблема копеек в данном контексте?
11. MrFlanker 226 29.03.24 16:56 Сейчас в теме
Формулирую проблема копеек: Сумма взятых по модулю абсолютных отклонений округленных значений от точных должна быть минимальна.
12. json 3318 30.03.24 22:19 Сейчас в теме
Если мне скинут решение в обработке "Внешняя обработка 1", то я посчитаю что разработчик невнимателен к деталям (как минимум). Потратить минуту чтобы придумать человекочитаемое имя - несложно и решение будет выглядить солиднее.
Когда на собеседовании дают задачу, то смотрят в первую очередь не на то "решил/не решил", а на то "как решил". Стиль написания кода, понимание стандартов.
Само решение может осилить и мидл. И даже может будет работать. Но определяющим фактором является качество решения.
Тоже давали раньше подобную задачу кандидатам. Почти все воспринимают такие задачи как проверку на умение кодировать, но проверяющий дает такие задачи, чтобы посмотреть, как разработчик пишет код в обычной жизни
13. Tornado_Storm 53 01.04.24 16:49 Сейчас в теме
(12) Здесь акцент делается на код, но субъективные моменты тоже учитываем, поэтому в ближайшее время учтём.
14. Tornado_Storm 53 01.04.24 16:53 Сейчас в теме
(12)Если честно, мне тоже это бросилось в глаза при оформлении публикации и собирался переименовать, но, учитывая, что на вкус и цвет товарищей нет - решил устроить мини-конкурс на лучшее название обработки, а код тогда вообще можно удалить:-)
15. abakcom 9 01.04.24 20:47 Сейчас в теме
А если в таблице с количествами вместо "100" написать "-100" — в поле "сумма" будет 167,59 или -167,59?
16. Tornado_Storm 53 02.04.24 12:51 Сейчас в теме
(15) Об этом можно узнать из обработки:-)
Оставьте свое сообщение