Бухгалтерия / Говнокод #8369 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
СпрСклады = СоздатьОбъект("Справочник.Склады");
НСкл = 0;
СпрСклады.ВыбратьЭлементы();
Пока СпрСклады.ПолучитьЭлемент() = 1 Цикл
	Склад = СпрСклады.ТекущийЭлемент();
	НСкл = НСкл + 1;
	Если НСкл = 1 Тогда
		Прервать
	КонецЕсли;
КонецЦикла;

Вот такую "красоту" оставили предыдущие программисты.

droff droff, (Updated )

Комментарии (10, +10)

Бухгалтерия / Говнокод #8247 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
case 2: //редактирование таблицы
			do
			{
				for (i = 0; i < size; i++) //вывод таблицы, чтобы видно было, что нужно изменять
				{
					for (j = 0; j < 4; j++)
					{
						for (k = 0; k < 4; k++)
						{
							adres[k] = ((maska << (24 - 8 * k)) & bin_adres[i][j]) >> (24 - 8 * k);
						}
						cout << adres [0] << "." << adres [1] << "." << adres [2] << "." << adres [3] << "\t";
					}
					cout << endl;
				}
				cto ("Наберите необходимый адрес назначения" , s);
				cout << s << endl;
				for (j = 0; j < 4; j++)
				{
					cin >> adres [j];
					if (adres[j] < 0 || adres[i] > 255) //проверка каждой введенной цифры на соответствие интервалу
					{
						cto ("Вы ввели неверное число. Введите число в диапазонe 0-255" , s);
						cout << s << endl;
						j--;
					}
					else
						crv = (adres[0] << 24) + (adres[1] << 16) + (adres[2] << 8) + adres[3]; 
				}
				for (i = 0; i < size; i++) //перебор по строкам всего массива
				{
					if (crv == bin_adres[i][0]) //сравниваем первый элемент каждой строки, с введенным значением
					{
						temp = i; //получаем номер строки, которую необходимо редактировать
						break;
					}
				}
				cto ("Что необходимо изменить?\n Адрес назначения (нажмите 1)\n Адрес источника (нажмите 2)\n Шлюз(Нажмите 3)\n Маску(нажмите 4)\n", s);
				cout << s << endl;
				number = 0;
				cin >> number; //получаем номер столбца для изменения
				number--; //для правильного определения индекса элемента в массиве
				cto ("Введите элемент", s);
				cout << s << endl;
				for (i = 0; i < 4; i++)
				{
					cin >> adres[i];
					if (adres[i] < 0 || adres[i] > 255)
					{
						cto ("Вы выпали из диапазона 0-255. Введите нормальное число", s);
						cout << s << endl;
						i--;
					}
				}
				bin_adres[temp][number] = (adres[0] << 24) + (adres[1] << 16) + (adres[2] << 8) + adres[3]; //записываем данный элемент в заданную строку
				cto ("Для выхода из редактирования нажмите 1 (продолжить - любая цифра)", s);
				cout << s << endl;
				cin >> number;
			}
			while (number != 1);
			system("cls"); //очиста окна командной строки
			break;

Команда стажеров писала маршрутизатор на базе 1С предприятия и вот что получилось.

alexoy alexoy, (Updated )

Комментарии (3, +3)

Бухгалтерия / Говнокод #8241 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
Для Каждого Стр0 из ДеревоНаФорме.Строки Цикл
		Сум0 =0;
	Для Каждого Стр1 из	Стр0.Строки Цикл
		Сум1 =0;
		Для Каждого Стр2 из Стр1.Строки Цикл;
			 Попытка
		Стр2.СуммаВсего = Стр2.Количество * Стр2.Нормочасы*ЦенаНормочаса *(1-Стр2.СкидкаНаРаботы/100)+ Стр2.Количество * Стр2.Цена *(1-Стр2.СкидкаНаЗапчасти/100) ;
		Стр2.СтоимостьУстановки = Стр2.Количество * Стр2.Нормочасы*ЦенаНормочаса;		
				Сум1=Сум1+ Стр2.СуммаВсего;
		 	 исключение КонецПопытки;
		 КонецЦикла;
		 Стр1.СуммаВсего = Сум1;
		 Сум0 = Сум0+Сум1;
	 КонецЦикла;
	 Стр0.СуммаВсего = Сум0; 
КонецЦикла;

Умопомрачительный подсчёт итога по колонке "СуммаВсего" в дереве.
ДеревоНаФорме - дерево на форме. При интеркативном изменении числовых реквизитов - пересчитывается строка, но! на всякий случай здесь - в Попытке-Исключении пересчитываем СуммуВсего по строке ещё раз... Ну и конечно порадовала изящность конструкции....

Pauchog Pauchog, (Updated )

Комментарии (7, +7)

Бухгалтерия / Говнокод #8200 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
Девушкой, которую я любил
Оказался педофил
Он на 1С все показал
И научил
Теперь я здесь настраиваю все
Прямо как во сне

Александр Сергеевич Пушкин-Блок

alexoy alexoy, (Updated )

Комментарии (15, +15)

Бухгалтерия / Говнокод #8176 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
Исходные коды на 1С!
На джаву перейти мы рады,
Но не стерплю такой утраты,
Я снова перейду на 1С

А мой товарищ одинокий
Нам закодирует EE

Ну и кто сказал, что Маяковский умер?

alexoy alexoy, (Updated )

Комментарии (6, +6)

Бухгалтерия / Говнокод #8171 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
Для Каждого ТекущаяСтрока Из ОтработанноеВремя Цикл
        ТекущаяСтрока.ИтогоЧасов=0;
		ТекущаяСтрока.ИтогоЧасов=ТекущаяСтрока.ПервыйЧасов1+ТекущаяСтрока.ПервыйЧасов2+ТекущаяСтрока.ПервыйЧасов3+
		ТекущаяСтрока.ПервыйЧасов4+ТекущаяСтрока.ПервыйЧасов5+ТекущаяСтрока.ПервыйЧасов6+ТекущаяСтрока.ПервыйЧасов7+
		ТекущаяСтрока.ПервыйЧасов8+ТекущаяСтрока.ПервыйЧасов9+ТекущаяСтрока.ПервыйЧасов10+ТекущаяСтрока.ПервыйЧасов11+
		ТекущаяСтрока.ПервыйЧасов12+ТекущаяСтрока.ПервыйЧасов13+ТекущаяСтрока.ПервыйЧасов14+ТекущаяСтрока.ПервыйЧасов15+
		ТекущаяСтрока.ПервыйЧасов16+ТекущаяСтрока.ПервыйЧасов17+ТекущаяСтрока.ПервыйЧасов18+ТекущаяСтрока.ПервыйЧасов19+
		ТекущаяСтрока.ПервыйЧасов20+ТекущаяСтрока.ПервыйЧасов21+ТекущаяСтрока.ПервыйЧасов22+ТекущаяСтрока.ПервыйЧасов23+
		ТекущаяСтрока.ПервыйЧасов24+ТекущаяСтрока.ПервыйЧасов25+ТекущаяСтрока.ПервыйЧасов26+ТекущаяСтрока.ПервыйЧасов27+
		ТекущаяСтрока.ПервыйЧасов28+ТекущаяСтрока.ПервыйЧасов29+ТекущаяСтрока.ПервыйЧасов30+ТекущаяСтрока.ПервыйЧасов31;	
		
		ТекущаяСтрока.ИтогоОклад=0;
		ТекущаяСтрока.ИтогоОклад= ОКр(ТекущаяСтрока.ИтогоЧасов/ТекущаяСтрока.НормаЧасов*ТекущаяСтрока.Оклад,2);
		
		ТекущаяСтрока.Выручка=0;
		
		Если ТекущаяСтрока.ПервыйЧасов1>0 тогда
			НайденнаяСтрока = РабочаяТаблица.Найти(1, "День");
			Если НайденнаяСтрока = Неопределено Тогда			
			Иначе
				ТекущаяСтрока.Выручка = ТекущаяСтрока.Выручка+НайденнаяСтрока.Продано;
			КонецЕсли;	
		КонецЕсли;	
		Если ТекущаяСтрока.ПервыйЧасов2>0 тогда
			НайденнаяСтрока = РабочаяТаблица.Найти(2, "День");
			Если НайденнаяСтрока = Неопределено Тогда			
			Иначе	
				ТекущаяСтрока.Выручка = ТекущаяСтрока.Выручка+НайденнаяСтрока.Продано;
			КонецЕсли;	
		КонецЕсли;	
		Если ТекущаяСтрока.ПервыйЧасов3>0 тогда
			НайденнаяСтрока = РабочаяТаблица.Найти(3, "День");
			Если НайденнаяСтрока = Неопределено Тогда			
			Иначе
				ТекущаяСтрока.Выручка = ТекущаяСтрока.Выручка+НайденнаяСтрока.Продано;
			КонецЕсли;	
		КонецЕсли;	
		Если ТекущаяСтрока.ПервыйЧасов4>0 тогда
			НайденнаяСтрока = РабочаяТаблица.Найти(4, "День");
			Если НайденнаяСтрока = Неопределено Тогда			
			Иначе
				ТекущаяСтрока.Выручка = ТекущаяСтрока.Выручка+НайденнаяСтрока.Продано;
			КонецЕсли;	
		КонецЕсли;
		Если ТекущаяСтрока.ПервыйЧасов5>0 тогда
			НайденнаяСтрока = РабочаяТаблица.Найти(5, "День");
			Если НайденнаяСтрока = Неопределено Тогда			
			Иначе
				ТекущаяСтрока.Выручка = ТекущаяСтрока.Выручка+НайденнаяСтрока.Продано;
			КонецЕсли;	
		КонецЕсли;	

************************************************************  и так далее :)

Почти 300 строк говнокода превращаются в 10 :D

Для Инд = 1 По 31 Цикл
Если ТекущаяСтрока["ПервыйЧасов" + Инд] > 0 Тогда
ТекущаяСтрока.ИтогоЧасов = ТекущаяСтрока.ИтогоЧасов + ТекущаяСтрока["ПервыйЧасов" + Инд];

НайденнаяСтрока = РабочаяТаблица.Найти(Инд, "День");
Если НайденнаяСтрока <> Неопределено Тогда
ТекущаяСтрока.Выручка = ТекущаяСтрока.Выручка+НайденнаяСтрока.Пр одано;
КонецЕсли;
КонецЕсли;
КонецЦикла;

VikUp VikUp, (Updated )

Комментарии (7, +7)

Бухгалтерия / Говнокод #8149 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
Мое решение является эффективным и уникальным.
Решение задачи базируется на принципе двойственности.
В первом стеке будем хранить сами числа, а во втором - результат XOR над ними.
[] []
push a ->[a] [a]
push b -> [b a] [a^b a]
pop -> b^(a^b) = a [a] [a]
Однако после такого pop пропадает b.
Как с этим бороться я расскажу через 24 часа.

Задача о двух стеках. Поэтапное решение для повышения слюноотделения.

alexoy alexoy, (Updated )

Комментарии (24, +24)