Тестовая задача на вакансию "Старший разработчик 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    74186    679    14    

168

Оптимизация запросов 1С - от теории к практике

Подготовка к аттестации Запросы Конфигурации 1cv8 Платные (руб)

Желаете повысить свой уровень разработки? Не знаете, как оптимизировать работу тяжелых запросов 1С? Или знаете методы оптимизации, но на практике не получаете результат? Тогда эта интерактивная обучающая программа для Вас! Оптимизация запросов прямо в программе 1С:Предприятие 8. Несколько десятков практических заданий, рассматривающих методы оптимизации на практике. От Вас требуются реальные решения - оптимизация представленных запросов. Автоматизированная система оценит Ваш запрос и представит результат проверки.

1800 руб.

06.07.2015    71033    118    9    

128

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

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

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

10 стартмани

08.04.2024    1151    13    user1988637    0    

10

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

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

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

18.03.2024    2676    AlOkt    4    

6

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

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

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

14.03.2024    11159    PROSTO-1C    46    

85

Как я стал Экспертом по технологическим вопросам за 3 месяца. Часть 2 (обновлена)

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

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

04.02.2024    6212    shuhratsj    16    

75

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

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

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

29.01.2024    13946    shuhratsj    103    

154

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

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

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

5 стартмани

01.12.2023    1535    19    Ocherkcons    0    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RustIG 1619 28.03.24 09:05 Сейчас в теме
(0) вот два описания реальных задач, где также приходится решать проблему копеек:
Распределение расходов
Бонусная система
пользуйтесь.
можно конечно воспользоваться поиском по сайту ИС по ключевым словам "проблема копеек", но выйдет много лишнего и не относящегося к этой теме...
2. OlegAr 21 28.03.24 10:06 Сейчас в теме
добавлю "копейку в огород", расчет начисление заработной платы от обратного. (Начисление от суммы выплаты).
количество интераций к бесконечности.
3. davdykin 25 28.03.24 12:29 Сейчас в теме
Интуитивно задача выглядит очень легкой.. неужели такие реально дают на старшего разраба?
user1747691; dmfaleleev; MrFlanker; Itilive.ru; +4 Ответить
4. dimanich70 644 28.03.24 14:19 Сейчас в теме
вот если бы запросом поделить, то тогда "Да", а так "Нет"
5. Vinzor 91 28.03.24 15:58 Сейчас в теме
Запросом можно поделить, есть хитрость одна, уже делал. Но всё же на копейку проверить стоит, и если она будет, то применить её к максимальному числу из набора.
6. Stas-ch 35 28.03.24 18:23 Сейчас в теме
Мне вот интересно, а отрицательные числа как рассматривать? Или брать по модулю?
7. unichkin 1565 28.03.24 22:13 Сейчас в теме
В бсп решено давным-давно.. ОбщегоНазначенияКлиентСеревер.РаспределитьСуммуПоКожффициентам
alwiz3; Dunda; +2 Ответить
8. MrFlanker 224 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 224 29.03.24 14:18 Сейчас в теме
Нужно ометить что Погрешность всегда будет кратна услновным 0.01. И всегда за конечное число шагов будет раскидана по имебщимся коэфициентам. И Посколько она будет раскидываться минимально возможными порциями, причем не на максимальным суммам, а именно к суммам где расхождение с точной сумму максимальное это более правильно. И среднее отклоненние такого подхода к округлению должно дать хорошие результаты.

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