Когда пора сдавать проект
КОД В МЕШКЕ. ОШИБКИ ПРОГРАММИСТОВ НА МИЛЛИОНЫ ДОЛЛАРОВ
Айтишником нынче быть модно. Они много получают, могут работать из дома и вообще из любой точки мира, - компьютерные языки одинаковы для всех стран.
Неудивительно, что интернет наполнен всевозможными курсами, тренингами и программами обучения, которые сулят хорошие карьерные перспективы и зарплаты с пятью нулями. Как после этого не захотеть погрузиться в мир операторов, команд, строк операций и алгоритмов?
Кодинг может не только приносить огромные деньги, но и с таким же успехом их терять. Так, к примеру, случилось с космическим аппаратом Mariner 1. Он должен был совершить первый полёт вокруг Венеры. В первые минуты запуска что-то пошло не так и Mariner серьёзно сбился с запланированной орбиты. Анализ показал, что 135 миллионов долларов сгорели в атмосфере из-за точки с запятой, которую нерадивые программисты забыли поставить в одной из строчек кода.
Забавная и одновременно страшная ситуация произошла в одной из больниц Мичигана. Медцентр Св. Марии Милосердия в 2003-м году обновил программное обеспечение для управления данными своих пациентов.
Вскоре начало происходить необъяснимое. Тысячи людей получили письма о смерти, приходили они не только шокированным родственникам, но и страховым компаниям, которые аннулировали медицинские полисы. Программа “проработала” в таком режиме больше 2-х месяцев.
“Безобидный эксперимент”, — как назвал его аспирант Роберт Моррис, — вышел из-под контроля и уничтожил тысячи компьютеров общей стоимостью в 100 миллионов долларов. Учёный Корнеллского университета написал небольшой вирус, который начал стремительно распространяться и уничтожать компьютеры. Судьба повернулась к Роберту Моррису лицом. Он получил лишь 10 000 долларов штрафа, а затем за свои заслуги в области программирования был назначен адъюнкт-профессором Массачусетского технологического института. Дискета с его экспериментом почётно хранится в Бостонском Университете.
Случайности иногда способны предотвратить трагедии. В начале 70-х в американском Хартфорде был построен крупный хоккейный стадион. Проектирование здания отдали на откуп программе, которая помогла сэкономить городу полмиллиона долларов. Стадион вышел славный, он даже стал домашней площадкой для известной хоккейной команды. В 1978-м году он внезапно рухнул. Спасло лишь то, что в тот день на стадионе никого не было. СМИ распространили информацию о том, что причиной аварии стал снег, но детальное расследование показало: главная причина обвала — наивное доверие программе.
К слову о наивности. Выдающийся случай произошёл с известной компанией Intel, производящей процессоры и другое оборудование. В 1994-м году в одном из научных журналов была опубликована статья о вероятной ошибке в вычисления новых процессоров компании.
В ответ Intеl заявил, что вероятность этой ошибки столь мала, что абсолютное большинство пользователей её даже не заметит. После этих слов на компанию обрушилась волна возвратов и требований вернуть деньги. Компания потеряла полмиллиарда долларов на этой маленькой оплошности.
Российские програмоделы тоже могут похвастаться провалами. Интересный случай произошёл 20-го декабря 2017 года. Первыми проблемы обнаружили жители Владивостока, в чьих торговых сетях перестала работать отправка электронных чеков в налоговую. Проблема быстро добралась до столицы. Налоговикам пришлось временно разрешить работать магазинам оффлайн, а затем в течение нескольких дней латать дыры в коде. По мнению Ассоциации Электронной Торговли суммарный ущерб от поломки мог составить 2,5 миллиарда рублей.
Вне себя от счастья
Во время учебы в вузе забегает к нам к товарищу в комнату (парень с примата) и говорит:
П: CGAleksey, а ты знаешь, что можно коментить код вот так:
/*
code
*/
Я: ну конечно.
П: а знаешь что можно еще и вот так:
/*
code
// */
а если сделать так, то код не закоментится:
//*
code
// */
Я: ну да
П: а еще вот так можно и закоментится все:
/*
/_*
// *_/
work code
// */
А если так, то "work code" не закоментится. И это ОЧЕНЬ круто и удобно:
/*
/_*
// */
work code
// */
Смотрит на меня восхищенными глазами, показывает что и как можно коментить в IDE XD
Я изобразил удивление / восхищение этой IDE: да, меня это тоже очень выручает, спасибо что показал.
Не стал умничать и спойлерить, наверно будет вне себя от счастья, когда откроет такие инструменты как Profiler, MemoryWatch, StackTrac, Ida и прочее.
И вновь 1с
Всем привет, вынужден вновь обратиться за разъяснениями) Как и писал ранее, на работе необходимо временно вносить разные изменения в 1с. Соответственно с Вашей помощью освоил внешние обработки) За что Вам большое и огромнейшее спасибо!
Ну к делу.
Имеется 1С:Предприятие 8.3 (8.3.20.1549)
Конфигурация: Зарплата и управление персоналом, редакция 3.1 (3.1.19.48)
Задача:
Выполнить печать комплекта документов в едином документе, с уже нужным количеством копий.
Пакет документов следующий: Трудовой договор, приказ о приеме на работу, согласие на обработку и заявление о приеме на работу.
Была доработана внешняя обработка, где все необходимы данные подставляются в шаблон word. Все отлично, но столкнулся со следующей проблемой:
В ТД (трудовом договоре) указано, что работодатель имеет право начислять премию в таком то размере.
Это находится в начислениях, в нашем случае называется "дополнительные начисления". Для понимания прикладываю скрины.
Данные набавки добавляются ручкам кадровика при трудоустройстве нового сотрудника и руками же проставляется значение (на скрине ниже выделено красным)
Не понимаю, как вытянуть это значение в печатную форму.
Что делал:
В конструкторе сформированы запросы:
Но результата этого не дает.
Окей идем дальше, делаю запрос в РегистрСведений
ПлановыеНачисленияСрезПоследних получаю поля размер и наименование.
Но при выходе в шаблон у меня отражается совершенно другое значение. (25020 вместо 12,5)
А поле наименование показывает совершенно другую надбавку (РайонныйКоэфф).
Код запроса (есть лишние моменты, но на данные момент они на получение тех данных что нужны не влияют):
Функция СформироватьЗапросДляПечатиТрудовогоДоговораН(СсылкаНаДокумент)
Запрос = Новый Запрос;
// Установим параметры запроса
Запрос.УстановитьПараметр("СсылкаНаДокумент", СсылкаНаДокумент);
Запрос.Текст =
"ВЫБРАТЬ
| ТД.Ссылка КАК Ссылка,
| ТД.Сотрудник.Наименование КАК Сотрудник,
| ТД.ДатаПриема КАК ДатаПриема,
| ТД.Должность КАК Должность,
| ТД.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
| ТД.ФизическоеЛицо КАК ФизическоеЛицо,
| ТД.УсловияПриема КАК УсловияПриема,
| ТД.ТрудовойДоговорНомер КАК ТрудовойДоговорНомер,
| ТД.ТрудовойДоговорДата КАК ТрудовойДоговорДата,
| ТД.ДатаЗавершенияТрудовогоДоговора КАК ДатаЗавершенияТрудовогоДоговора,
| АдресМестаПроживания.Представление КАК АдресМестаПроживания,
| АдресПоПрописке.Представление КАК АдресПоПрописке,
| Паспорт.ВидДокумента.Наименование КАК ВидДокумента,
| Паспорт.Серия КАК Серия,
| Паспорт.Номер КАК Номер,
| Паспорт.ДатаВыдачи КАК ДатаВыдачи,
| Паспорт.КемВыдан КАК КемВыдан,
| Паспорт.КодПодразделения КАК КодПодразделения,
| ФОТ.Размер КАК ТарифнаяСтавка,
| АдресОрг.Представление КАК АдресОрганизации,
| АдресОрг.Город КАК Город,
| ЗарплатныеПроекты.Банк КАК Банк,
| ЗарплатныеПроекты.РасчетныйСчет КАК РасчетныйСчет,
| ЗарплатныеПроекты.Представление КАК БанкПредставление,
| ЗарплатныеПроекты.Банк.КоррСчет КАК КоррСчет,
| ТД.Ссылка.Организация.НаименованиеПолное КАК ОрганизацияНаименованиеПолное,
| ТД.Ссылка.Организация.НаименованиеСокращенное КАК ОрганизацияНаименованиеСокращенное,
| ТД.Ссылка.Дата КАК Дата,
| ТД.Ссылка.Номер КАК ТДНомер,
| ТД.Ссылка.Руководитель.Наименование КАК Руководитель,
| ТД.Ссылка.Руководитель.Пол КАК РуководительПол,
| ТД.Ссылка.ДолжностьРуководителя.Наименование КАК ДолжностьРуководителя,
| ТД.Ссылка.Подразделение.Наименование КАК Подразделение,
| ТД.Ссылка.Организация.ИНН КАК ОрганизацияИНН,
| ТД.Ссылка.Организация.ОГРН КАК ОрганизацияОГРН,
| ТД.Ссылка.Организация.КодПоОКПО КАК КодПоОКПО,
| ТД.Ссылка.Организация.РегистрацияВНалоговомОргане.КПП КАК КПП,
| ТД.Ссылка.ВидЗанятости КАК ВидЗанятости,
| ТД.Ссылка.Территория КАК Территория,
| ТД.Ссылка.ГрафикРаботы КАК ГрафикРаботы,
| ЗарплатныеПроекты.Банк.Код КАК Код,
| ТД.ДлительностьИспытательногоСрока КАК ДлительностьИспытательногоСрока,
| ТД.Ссылка.ГрафикРаботы.РабочихДнейВНеделе КАК РабочихДнейВНеделе,
| ТД.Подразделение.РайонныйКоэффициент КАК ПодразделениеРайонныйКоэффициент,
| ТД.Подразделение.РайонныйКоэффициентРФ КАК ПодразделениеРайонныйКоэффициентРФ,
| ТД.Ссылка.СовокупнаяТарифнаяСтавка КАК СсылкаСовокупнаяТарифнаяСтавка,
| ВложенныйЗапрос.НомерПриказа КАК НомерПриказа,
| ВложенныйЗапрос.НомерПриказа1 КАК НомерПриказа1,
| ТД.Сотрудник.Код КАК СотрудникКод,
| ФОТ.Начисления.(
| Результат КАК Результат
| ) КАК Начисления,
| ФОТ.Начислено КАК Начислено,
| ФОТ.ВидПремииНаименование КАК ВидПремииНаименование
|ИЗ
| (ВЫБРАТЬ
| ПриемНаРаботу.Ссылка КАК Ссылка,
| ПриемНаРаботу.НомерПриказа КАК НомерПриказа,
| ПриемНаРаботу.ВерсияДанных КАК ВерсияДанных,
| ПриемНаРаботу.ПометкаУдаления КАК ПометкаУдаления,
| ПриемНаРаботу.Номер КАК Номер,
| ПриемНаРаботу.Дата КАК Дата,
| ПриемНаРаботу.Проведен КАК Проведен,
| ПриемНаРаботу.Организация КАК Организация,
| ПриемНаРаботу.Подразделение КАК Подразделение,
| ПриемНаРаботу.Сотрудник КАК Сотрудник,
| ПриемНаРаботу.ФизическоеЛицо КАК ФизическоеЛицо,
| ПриемНаРаботу.Должность КАК Должность,
| ПриемНаРаботу.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
| ПриемНаРаботу.ДатаПриема КАК ДатаПриема,
| ПриемНаРаботу.КоличествоСтавок КАК КоличествоСтавок,
| ПриемНаРаботу.ВидЗанятости КАК ВидЗанятости,
| ПриемНаРаботу.ДлительностьИспытательногоСрока КАК ДлительностьИспытательногоСрока,
| ПриемНаРаботу.ГрафикРаботы КАК ГрафикРаботы,
| ПриемНаРаботу.СпособРасчетаАванса КАК СпособРасчетаАванса,
| ПриемНаРаботу.Аванс КАК Аванс,
| ПриемНаРаботу.УсловияПриема КАК УсловияПриема,
| ПриемНаРаботу.Руководитель КАК Руководитель,
| ПриемНаРаботу.ДолжностьРуководителя КАК ДолжностьРуководителя,
| ПриемНаРаботу.НачисленияУтверждены КАК НачисленияУтверждены,
| ПриемНаРаботу.СпособОтраженияЗарплатыВБухучете КАК СпособОтраженияЗарплатыВБухучете,
| ПриемНаРаботу.ОтношениеКЕНВД КАК ОтношениеКЕНВД,
| ПриемНаРаботу.СтатьяФинансирования КАК СтатьяФинансирования,
| ПриемНаРаботу.ИсправленныйДокумент КАК ИсправленныйДокумент,
| ПриемНаРаботу.ПорядокРасчетаСтоимостиЕдиницыВремени КАК ПорядокРасчетаСтоимостиЕдиницыВремени,
| ПриемНаРаботу.СовокупнаяТарифнаяСтавка КАК СовокупнаяТарифнаяСтавка,
| ПриемНаРаботу.ВидТарифнойСтавки КАК ВидТарифнойСтавки,
| ПриемНаРаботу.РазрядКатегория КАК РазрядКатегория,
| ПриемНаРаботу.ВидДоговора КАК ВидДоговора,
| ПриемНаРаботу.ТрудовойДоговорНомер КАК ТрудовойДоговорНомер,
| ПриемНаРаботу.ТрудовойДоговорДата КАК ТрудовойДоговорДата,
| ПриемНаРаботу.СрочныйДоговор КАК СрочныйДоговор,
| ПриемНаРаботу.ДатаЗавершенияТрудовогоДоговора КАК ДатаЗавершенияТрудовогоДоговора,
| ПриемНаРаботу.ОснованиеСрочногоДоговора КАК ОснованиеСрочногоДоговора,
| ПриемНаРаботу.СрокЗаключенияДоговора КАК СрокЗаключенияДоговора,
| ПриемНаРаботу.ОснованиеПредставителяНанимателя КАК ОснованиеПредставителяНанимателя,
| ПриемНаРаботу.СпособПоступленияНаСлужбу КАК СпособПоступленияНаСлужбу,
| ПриемНаРаботу.ПоступлениеНаСлужбуВпервые КАК ПоступлениеНаСлужбуВпервые,
| ПриемНаРаботу.ВидАктаГосоргана КАК ВидАктаГосоргана,
| ПриемНаРаботу.ОборудованиеРабочегоМеста КАК ОборудованиеРабочегоМеста,
| ПриемНаРаботу.ИныеУсловияДоговора КАК ИныеУсловияДоговора,
| ПриемНаРаботу.Грейд КАК Грейд,
| ПриемНаРаботу.Территория КАК Территория,
| ПриемНаРаботу.Подразделение.РайонныйКоэффициент КАК ПодразделениеРайонныйКоэффициент,
| ПриемНаРаботу.Подразделение.РайонныйКоэффициентРФ КАК ПодразделениеРайонныйКоэффициентРФ,
| ПриемНаРаботу.Ссылка.СовокупнаяТарифнаяСтавка КАК СсылкаСовокупнаяТарифнаяСтавка,
| ПриемНаРаботу.БронированиеПозиции КАК БронированиеПозиции,
| ПриемНаРаботу.РазрешениеНаРаботу КАК РазрешениеНаРаботу,
| ПриемНаРаботу.РазрешениеНаПроживание КАК РазрешениеНаПроживание,
| ПриемНаРаботу.УсловияОказанияМедпомощи КАК УсловияОказанияМедпомощи,
| ПриемНаРаботу.ПКУ КАК ПКУ
| ИЗ
| Документ.ПриемНаРаботу КАК ПриемНаРаботу
| ГДЕ
| ПриемНаРаботу.Ссылка = &СсылкаНаДокумент) КАК ТД
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ФизическиеЛицаКонтактнаяИнформация.Ссылка КАК Ссылка,
| ФизическиеЛицаКонтактнаяИнформация.Представление КАК Представление
| ИЗ
| Справочник.ФизическиеЛица.КонтактнаяИнформация КАК ФизическиеЛицаКонтактнаяИнформация
| ГДЕ
| ФизическиеЛицаКонтактнаяИнформация.Вид.Наименование = ""Адрес по прописке"") КАК АдресПоПрописке
| ПО ТД.ФизическоеЛицо = АдресПоПрописке.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ФизическиеЛицаКонтактнаяИнформация.Ссылка КАК Ссылка,
| ФизическиеЛицаКонтактнаяИнформация.Представление КАК Представление
| ИЗ
| Справочник.ФизическиеЛица.КонтактнаяИнформация КАК ФизическиеЛицаКонтактнаяИнформация
| ГДЕ
| ФизическиеЛицаКонтактнаяИнформация.Вид.Наименование = ""Адрес места проживания"") КАК АдресМестаПроживания
| ПО ТД.ФизическоеЛицо = АдресМестаПроживания.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ДокументыФизическихЛицСрезПоследних.Период КАК Период,
| ДокументыФизическихЛицСрезПоследних.Физлицо КАК Физлицо,
| ДокументыФизическихЛицСрезПоследних.ВидДокумента КАК ВидДокумента,
| ДокументыФизическихЛицСрезПоследних.Серия КАК Серия,
| ДокументыФизическихЛицСрезПоследних.Номер КАК Номер,
| ДокументыФизическихЛицСрезПоследних.ДатаВыдачи КАК ДатаВыдачи,
| ДокументыФизическихЛицСрезПоследних.СрокДействия КАК СрокДействия,
| ДокументыФизическихЛицСрезПоследних.КемВыдан КАК КемВыдан,
| ДокументыФизическихЛицСрезПоследних.КодПодразделения КАК КодПодразделения,
| ДокументыФизическихЛицСрезПоследних.ЯвляетсяДокументомУдостоверяющимЛичность КАК ЯвляетсяДокументомУдостоверяющимЛичность,
| ДокументыФизическихЛицСрезПоследних.Представление КАК Представление,
| ДокументыФизическихЛицСрезПоследних.УдалитьВидДокумента КАК УдалитьВидДокумента
| ИЗ
| РегистрСведений.ДокументыФизическихЛиц.СрезПоследних(, ЯвляетсяДокументомУдостоверяющимЛичность) КАК ДокументыФизическихЛицСрезПоследних) КАК Паспорт
| ПО ТД.ФизическоеЛицо = Паспорт.Физлицо
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ПриемНаРаботуНачисления.Размер КАК Размер,
| ПриемНаРаботуНачисления.Ссылка КАК Ссылка,
| ПриемНаРаботуНачисления.Начисление.КатегорияНачисленияИлиНеоплаченногоВремени КАК НачислениеКатегорияНачисленияИлиНеоплаченногоВремени,
| ПриемНаРаботуНачисления.Начисление.ВидВремени КАК НачислениеВидВремени,
| Премия.ВидПремии.Наименование КАК ВидПремииНаименование,
| Премия.ВидПремии.Ссылка КАК ВидПремииСсылка,
| Премия.ВидПремии.КатегорияНачисленияИлиНеоплаченногоВремени КАК ВидПремииКатегорияНачисленияИлиНеоплаченногоВремени,
| Премия.Начислено КАК Начислено,
| Премия.Начисления.(
| Сотрудник КАК Сотрудник,
| Результат КАК Результат
| ) КАК Начисления
| ИЗ
| Документ.ПриемНаРаботу.Начисления КАК ПриемНаРаботуНачисления,
| Документ.Премия КАК Премия) КАК ФОТ
| ПО ТД.Ссылка = ФОТ.Ссылка
| И ТД.Сотрудник.Ссылка = ФОТ.Начисления.Сотрудник
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ОрганизацииКонтактнаяИнформация.Ссылка КАК Ссылка,
| ОрганизацииКонтактнаяИнформация.Тип КАК Тип,
| ОрганизацииКонтактнаяИнформация.Вид КАК Вид,
| ОрганизацииКонтактнаяИнформация.Представление КАК Представление,
| ОрганизацииКонтактнаяИнформация.Город КАК Город
| ИЗ
| Справочник.Организации.КонтактнаяИнформация КАК ОрганизацииКонтактнаяИнформация
| ГДЕ
| ОрганизацииКонтактнаяИнформация.Вид.Наименование = ""Фактический адрес"") КАК АдресОрг
| ПО ТД.Организация = АдресОрг.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ЗарплатныеПроекты.Ссылка КАК Ссылка,
| ЗарплатныеПроекты.Наименование КАК Наименование,
| ЗарплатныеПроекты.Банк КАК Банк,
| ЗарплатныеПроекты.НомерДоговора КАК НомерДоговора,
| ЗарплатныеПроекты.Организация КАК Организация,
| ЗарплатныеПроекты.ОтделениеБанка КАК ОтделениеБанка,
| ЗарплатныеПроекты.РасчетныйСчет КАК РасчетныйСчет,
| ЗарплатныеПроекты.ФилиалОтделенияБанка КАК ФилиалОтделенияБанка,
| ЗарплатныеПроекты.Представление КАК Представление
| ИЗ
| Справочник.ЗарплатныеПроекты КАК ЗарплатныеПроекты
| ГДЕ
| НЕ ЗарплатныеПроекты.ПометкаУдаления) КАК ЗарплатныеПроекты
| ПО ТД.Организация = ЗарплатныеПроекты.Организация
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ПриемНаРаботу.НомерПриказа КАК НомерПриказа,
| ПриемНаРаботуСписком.НомерПриказа КАК НомерПриказа1
| ИЗ
| Документ.ПриемНаРаботу КАК ПриемНаРаботу,
| Документ.ПриемНаРаботуСписком КАК ПриемНаРаботуСписком) КАК ВложенныйЗапрос
| ПО ТД.НомерПриказа = ВложенныйЗапрос.НомерПриказа
| И ТД.НомерПриказа = ВложенныйЗапрос.НомерПриказа1";
ТаблицаЗначений = Запрос.Выполнить().Выгрузить();
//Индекс = ТаблицаЗначений.Количество();
//Сообщить("Индекс : "+Индекс);
//Пока Индекс > 1 Цикл
// Попытка
// ТаблицаЗначений.Удалить(Индекс-1);
// Исключение
// КонецПопытки;
// Индекс = Индекс -1;
//КонецЦикла;
//
//Возврат ТаблицаЗначенийВМассив(ТаблицаЗначений);
ТаблицаЗначений2 = ТаблицаЗначений.СкопироватьКолонки();
Для каждого СтрокаИсточник Из ТаблицаЗначений Цикл
НоваяСтрока = ТаблицаЗначений2.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока,СтрокаИсточник);
Прервать;
КонецЦикла;
Возврат ТаблицаЗначенийВМассив(ТаблицаЗначений2);
КонецФункции // СформироватьЗапросДляПечати()
Подскажите пожалуйста, где в ЗУП хранится данное значение, что бы вытащить его запросом?
Нужно ли при этом указывать период ? (если да, то как это сделать?)))
Прошу указать в каком направлении копать?
Цель та же, решить задачу и главное понять, как делать правильно, так, что бы потом не было стыдно)
Заранее спасибо!
Я родился! (с) Лунтик
Я таксист до мозга костей. С 18 лет работаю в сфере извоза. Начинал нелегально, под чужим именем из-за отсутствия стажа. Затем легализировался и стал самозанятым.
Недавно я понял, что нужно что-то менять в своей жизни и я начал это изменение. Я решил стать программистом. Начал с изучения языка python и буду описывать "свой путь" здесь на Пикабу.
Если есть готовые помочь в этом нелегком деле советом или накинуть реальных практических задач - буду крайне благодарен. Иными словами мне нужен мастер, чьим падаваном я смог бы стать. =)