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

28.03.24

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
Тестовая задача на вакансию "Старший разработчик 1С":
.epf 7,09Kb
8
8
1 SM
Скачать Купить за 1 850 руб.

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

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

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

 

Количество

Сумма

10

 

13

 

-5

 

1.33

 

100

 

1

 

20

 

 

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

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

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

См. также

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

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

1800 руб.

11.02.2014    75232    86    14    

179

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

Я Олег, разработчик 1С. Расскажу, как сдавал на сертификат Специалиста, в чём ошибся и что стоит учесть.

11.06.2024    11603    PROSTO-1C    51    

63

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

Хочу поделиться своей историей планирования обучения, подготовки к экзамену и сдачи непосредственно экзамена. Надеюсь, что это будет полезно и откинет все вопросы об экзамене.

04.06.2024    7553    anton99    49    

52

Подготовка к аттестации Стажер Конфигурации 1cv8 Фармацевтика, аптеки Россия Управленческий учет Бесплатно (free)

Краткий рассказ о выборе 1С как основного языка программирования для дипломной работы в университете, и само приложение к диплому.

28.05.2024    3715    DmitryOneBit    20    

19

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

В публикации предоставлено решения 7 билетов из сборника 2022 года . Решения выполнены по пунктам и подробно, каждый БП описан и решен по условиям задач. Благодаря данному решению к экзамену стало подготовиться проще, чем когда-либо.

8 стартмани

07.05.2024    7338    72    user1988637    16    

41

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

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

18.03.2024    7358    AlOkt    4    

6

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

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

14.03.2024    13776    PROSTO-1C    46    

90
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RustIG 1721 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 841 28.03.24 14:19 Сейчас в теме
вот если бы запросом поделить, то тогда "Да", а так "Нет"
5. Vinzor 102 28.03.24 15:58 Сейчас в теме
Запросом можно поделить, есть хитрость одна, уже делал. Но всё же на копейку проверить стоит, и если она будет, то применить её к максимальному числу из набора.
6. Stas-ch 35 28.03.24 18:23 Сейчас в теме
Мне вот интересно, а отрицательные числа как рассматривать? Или брать по модулю?
7. unichkin 1572 28.03.24 22:13 Сейчас в теме
В бсп решено давным-давно.. ОбщегоНазначенияКлиентСеревер.РаспределитьСуммуПоКожффициентам
alwiz3; Dunda; +2 Ответить
8. MrFlanker 227 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 227 29.03.24 14:18 Сейчас в теме
Нужно ометить что Погрешность всегда будет кратна услновным 0.01. И всегда за конечное число шагов будет раскидана по имебщимся коэфициентам. И Посколько она будет раскидываться минимально возможными порциями, причем не на максимальным суммам, а именно к суммам где расхождение с точной сумму максимальное это более правильно. И среднее отклоненние такого подхода к округлению должно дать хорошие результаты.

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