- 1
https://phpclub.ru/talk/threads/перевод-алгаритма-с-1с-в-пхп.52808/
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
https://phpclub.ru/talk/threads/перевод-алгаритма-с-1с-в-пхп.52808/
+1
Если ВидОперации = Перечисления.МОЛ_ВидыОперацийПоступленияСырья.Перемещение Тогда
ДоговорКонтрагента = "";
ТипЦен = "";
Если Сырье.Количество()>0 Тогда
Для каждого СтрокаСырье Из Сырье Цикл
СтрокаСырье.Цена = 0;
СтрокаСырье.Сумма = 0;
СтрокаСырье.СуммаНДС = 0;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Добавлена проверка, чтобы цикл вдруг не выполнился при пустой таб части!
Кстати выполняется при открытии формы и постоянно вызывает модифицированность
Молокозавод 1.3.121
+2
ПроизведенаРабота = Истина;
Если ЗапрашиватьТрудозатраты И Не ВыполняетсяПеренаправление Тогда
ПроизведенаРабота = Истина;
КонецЕсли;
Типично
+4
&НаКлиенте
Процедура Расчитать(Команда)
ТекДата = ТекущаяДата();
ТекМесяц = Месяц(ТекДата);
МесяцРождения = Месяц(ДатаРождения);
Если ТекМесяц=МесяцРождения Тогда //День рождения сегодня или в этом месяце,
Если День(ТекДата)=День(ДатаРождения) Тогда
КоличествоДнейДоДР = 0;
ИначеЕсли День(ТекДата)<День(ДатаРождения) Тогда
КоличествоДнейДоДР = День(ДатаРождения)-День(ТекДата);
Иначе
КоличествоДнейДоДР = День(КонецМесяца(ТекДата))-День(ТекДата);
Дата = ДобавитьМесяц(ТекДата,1);
Ограничитель = (12-ТекМесяц)+МесяцРождения;
Для сч=1 По Ограничитель Цикл
Если сч=Ограничитель Тогда
КоличествоДнейДоДР = КоличествоДнейДоДР+День(ДатаРождения);
продолжить;
КонецЕсли;
КоличествоДнейДоДР = КоличествоДнейДоДР+День(КонецМесяца(Дата)) ;
Дата = ДобавитьМесяц(Дата,1);
КонецЦикла;
КонецЕсли;
ИначеЕсли ТекМесяц<МесяцРождения Тогда //День рождения еще не наступил,
КоличествоДнейДоДР = День(КонецМесяца(ТекДата))-День(ТекДата);
Дата = ДобавитьМесяц(ТекДата,1);
Для сч= ТекМесяц+1 По МесяцРождения Цикл
Если сч=МесяцРождения Тогда
КоличествоДнейДоДР = КоличествоДнейДоДР+День(ДатаРождения);
продолжить;
КонецЕсли;
КоличествоДнейДоДР = КоличествоДнейДоДР+День(КонецМесяца(Дата)) ;
Дата = ДобавитьМесяц(Дата,1);
КонецЦикла;
ИначеЕсли ТекМесяц>МесяцРождения Тогда //День рождения уже прошел.
КоличествоДнейДоДР = День(КонецМесяца(ТекДата))-День(ТекДата);
Дата = ДобавитьМесяц(ТекДата,1);
Ограничитель = (12-ТекМесяц)+МесяцРождения;
Для сч= 1 По Ограничитель Цикл
Если сч=Ограничитель Тогда
КоличествоДнейДоДР = КоличествоДнейДоДР+День(ДатаРождения);
продолжить;
КонецЕсли;
КоличествоДнейДоДР = КоличествоДнейДоДР+День(КонецМесяца(Дата)) ;
Дата = ДобавитьМесяц(Дата,1);
КонецЦикла;
КонецЕсли;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = КоличествоДнейДоДР;
Сообщение.Сообщить();
// Вставить содержимое обработчика.
КонецПроцедуры
Задача рассчитать количество дней до дня рождения, вопрос в том что не много ли я использовал условий Если?
0
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЭтапРемонт.Номер КАК Номер
|ИЗ
| Документ.ЭтапРемонт КАК ЭтапРемонт
|ГДЕ
| ЭтапРемонт.Основание = &Основание";
Запрос.УстановитьПараметр("Основание", Объект.Ссылка);
Выб = Запрос.Выполнить().Выбрать();
Выгрузка = Запрос.Выполнить().Выгрузить();
Количество = Выб.Количество();
Если Количество > 0 Тогда
Ссыль = Выгрузка[0].Номер;
ЭтаФорма.Элементы.Этап.Заголовок = Документы.ЭтапРемонт.НайтиПоНомеру(Ссыль);
КонецЕсли;
Задача кода - установить текстовое представление документа в надписи на форме, для этого автор сначала получает номер требуемого документа, потом проверяет выборку на наличие записей, а потом по полученному номеру ищет ссылку методом НайтиПоНомеру.
Говнокод в том, что:
1. Ссылку можно получить сразу же в запросе
2. Выгружать выборку в коллекцию значений нет никакой необходимости, можно всё необходимое взять из выборки, она для этого и предназначена.
Автор - один из франей Абакана.
+2
Функция ПолучитьСтавкуНДС(СуммаСНДС, НДС)
Если НДС = 0 Тогда
Возврат Перечисления.СтавкиНДС.БезНДС;
ИначеЕсли СуммаСНДС = 0 Тогда //некорректные данные
Возврат Перечисления.СтавкиНДС.БезНДС;
ИначеЕсли НДС / СуммаСНДС <= 0.152+0.0152 и НДС / СуммаСНДС >= 0.152-0.0152 Тогда
Возврат Перечисления.СтавкиНДС.НДС18;
ИначеЕсли НДС / СуммаСНДС <= 0.091+0.0091 и НДС / СуммаСНДС >= 0.091-0.0091 Тогда
Возврат Перечисления.СтавкиНДС.НДС10;
КонецЕсли;
КонецФункции
Костыль костыльный
−1
ЧисловойСимвол = ?(Найти("0123456789",СимволVIN)>0,Истина,Ложь);
Проверка на то, является ли "СимволVIN" числом
0
&НаСервере
Процедура ЗаполнитьТовары()
Объект.Товары.Загрузить(Товары.Выгрузить());
КонецПроцедуры // ЗаполнитьТовары()
&НаКлиенте
Процедура КомандаЧО06ПлатежнаяКарта(Команда)
ЗаполнитьТовары();
ВыполнитьЧО06ПлатежнаяКарта();
Товары.Очистить();
Объект.Товары.Очистить();
Элементы.КнопкаСуммы.Заголовок = "";
КонецПроцедуры
+2
Если ЭтоКонецПрихода = 1 Тогда
ЭтоКонецПрихода = ЭтоКонецПрихода+1;
1. Реальный код
2. Переменная используется как логическая, 0 и 1
+2
Функция ПолучитьЗначениеПеременной(Имя) Экспорт
ИмяПараметраВР = ВРег(Имя);
НайденноеЗначение = Неопределено;
Кэш = Неопределено;
ПоместитьВКэш = Ложь;
НайденноеЗначение = Неопределено;
Если НайденноеЗначение = Неопределено Тогда
//...
КонецЕсли;
Типовая УПП, общий модуль "РаботаСОбщимиПеренменными". Интересно, а бывает ситуация когда после двух присвоений переменной значения, она все таки не неопределено