- 1
bool isNoGoodCommentText = String.IsNullOrEmpty(this.txbxCommentCtrl.Text) || String.IsNullOrWhiteSpace(this.txbxCommentCtrl.Text);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+1
bool isNoGoodCommentText = String.IsNullOrEmpty(this.txbxCommentCtrl.Text) || String.IsNullOrWhiteSpace(this.txbxCommentCtrl.Text);
И действительно, is not good
+3
$tdir = APPLICATION_PATH.'/../tmp/lv/'.md5(json_encode($_GET));
if (!is_dir($tdir))
mkdir($tdir, 0777, true);
foreach(glob($lv.'/*') as $f) if(filemtime($f) < time() - 3600) rm_rf($f);
Вот поэтому нотайсы должны быть фатальными
+2
<?php
function generate_number_part($length=2) {
$password = substr(preg_replace("/[^0-9]/", "", crypt(time())) .
preg_replace("/[^0-9]/", "", crypt(time())) .
preg_replace("/[^0-9]/", "", crypt(time())),
0, $length);
return $password;
}
Сгенерировать пароль из ровно $length цифр... или меньше
+4
#define RandomNumbers_count 16
static unsigned char RandomNumbers[] =
{
7, 167, 203, 54,
32, 78, 164, 112,
237, 182, 75, 96,
135, 13, 42, 27
};
static unsigned char CurrUrandPos = 0;
void getURandom(void *buf, size_t size)
{
if (size == 0)
return;
for (size_t i = 0; i < size; i++)
{
((char*)buf)[i] = RandomNumbers[CurrUrandPos];
CurrUrandPos = (CurrUrandPos + 1) % RandomNumbers_count;
}
}
Генератор псевдослучайных чисел: избавляемся от платформозависимого кода.
−101
// Процедура организует выбор элементов по результату запроса
Процедура ВыбратьЭлементОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка, ОбработкаПоискаПоСтроке, ТекстПоискаПоСтроке, РезультатЗапроса, ЭтаФорма, ПоследнееЗначениеЭлементаПоискаПоСтроке = Неопределено,
ПриОтсутствииЗначенияОставлятьТекст = Истина, ПоляПоиска, ПолеВыбора,
СтруктураВыбранногоЭлемента = Неопределено, ОсновноеПредставлениеВВидеКода = Ложь,
Знач СообщатьПользователюОбОшибкеВводаДанных = Истина)
// Процедура организует выбор элементов по результату запроса
Процедура ВыбратьЭлементОкончаниеВводаАдресногоКлассификатора(Элемент, Текст, Значение, СтандартнаяОбработка, ОбработкаПоискаПоСтроке, ТекстПоискаПоСтроке, РезультатЗапроса, ЭтаФорма, ПоследнееЗначениеЭлементаПоискаПоСтроке = Неопределено,
ПриОтсутствииЗначенияОставлятьТекст = Истина, ПоляПоиска, ПолеВыбора,
СтруктураВыбранногоЭлемента = Неопределено, НачальныйУровеньДетализации = 0, КонечныйУровеньДетализации = 5)
// Процедура организует выбор элементов по результату запроса
Процедура ВыбратьЭлементОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка, ОбработкаПоискаПоСтроке, ТекстПоискаПоСтроке, РезультатЗапроса, ЭтаФорма, ПоследнееЗначениеЭлементаПоискаПоСтроке = Неопределено,
ПриОтсутствииЗначенияОставлятьТекст = Истина, ПоляПоиска, ПолеВыбора,
СтруктураВыбранногоЭлемента = Неопределено, ОсновноеПредставлениеВВидеКода = Ложь,
Знач СообщатьПользователюОбОшибкеВводаДанных = Истина)
Просто пара заголовков процедур из типовых конфигураций 1С (15 параметров, Карл, там 15 параметров!). Сопроводительные комментарии прилагаются.
К слову сами процедуры занимают не более 20 строк, но самое забавное заключается в том, что некоторые параметры вообще не используются при работе процедуры.
0
<?
//Ограничиваем время выполнения скрипта 3-мя минутами
set_time_limit(180);
//Подключаемся к MySQL, при неудаче выводим ошибку
mysql_connect("localhost", "torrent", "password") or die("Could not connect to MySQL");
//Выбираем БД, при неудаче выводим ошибку
mysql_select_db("torrent") or die("Could not select database");
//Переводим все общение с БД в кодировку utf8
mysql_query("SET NAMES utf8");
//Открываем файл указанный в url переменной "f"
$fp = fopen($_GET[f], "r");
//Запускаем цикл до конца строк в файле
while (!feof($fp)) {
//Считываем строку (да, функцию trim() выполнять не обязательно, но у каждого программиста свои "тараканы")
$tmp = trim(fgets($fp));
//Преобразуем строку в массив. За разделитель используем ";"
$torrent = explode('";"', $tmp);
//В первом и последнем элементе удаляем лишние символы "
$torrent[0] = substr($torrent[0], 1);
$torrent[6] = substr($torrent[6], 0, (strlen($torrent[6]) - 1));
//Если раскомментировать следующую строку, то можно увидеть как распарсился первый торрент в файле
//print '<pre>'; print_r($torrent); exit();
//Вставляем данные текущего торрента в таблицу
mysql_query("INSERT INTO `torrents`
(`name`,
`hash`,
`date`,
`size`,
`topic_id`,
`cat_id`,
`cat_name`)
VALUES
('" . mysql_real_escape_string($torrent[4]) . "',
'" . $torrent[3] . "',
'" . $torrent[6] . "',
'" . $torrent[5] . "',
'" . $torrent[2] . "',
'" . $torrent[0] . "',
'" . mysql_real_escape_string($torrent[1]) . "')
");
}
//Закрываем файл
fclose($fp);
//Выводим сообщение о завершении работы
print 'complete: ' . $_GET[f];
?>
Импорт CSV в MySQL. Со швабры.
+1
<script>
var link=window.location.href;
var arr = link.split("#");
document.write("<script> function fuk_flash(){");
if (arr[1] != "d4"){
document.write("appD4.setAttribute(\"style\", \"display:none\");");
}
if (arr[1] != "d5"){
document.write("appD5.setAttribute(\"style\", \"display:none\");");
}
if (arr[1] != "f"){
document.write("appF.setAttribute(\"style\", \"display:none\");");
}
document.write("}<\/script>");
</script>
<script>
window.onload=fuk_flash;
</script>
Когда на странице 3 флэшки, необходимо показывать только одну, исходя из атрибутов ссылки, и когда ни одна из них не показывает полосу загрузки (при своем немалом весе) после обращения к себе, и когда все более-менее адекватные решения провалились.
(Но проблема оказалась в том, что флэш находил в адресе страницы # и переставал грузиться)
+1
function getQueryParam(param) {
if (!getQueryParam.params) {
var params = {},
query = window.location.search.substring(1);
if (query) {
var queryParts = query.split('&'),
queryPartsLen = queryParts.length,
decode = decodeURIComponent;
while (queryPartsLen--) {
var queryPart = queryParts[queryPartsLen].split('='),
key = queryPart[0],
value = queryPart[1];
params[decode(key)] = decode(value) || null;
}
}
getQueryParam.params = params;
}
return getQueryParam.params[param] || null;
}
function getQueryParam
−99
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
///////////////////////////////////////////////////////
// Подготовка табличной части документа
тчТовары = Товары.Выгрузить();
Отказ = ОбщийМодуль.СформироватьТабличнуюЧастьСОстаткамиНаСкладе(тчТовары, Ссылка, РежимПроведения, Расшифровка, ВыявлятьНехваткуТоваров);
Для Каждого СтрокаТЧТовары Из тчТовары Цикл
Если ЗначениеЗаполнено(СтрокаТЧТовары.НовыйАдресХранения) И ЗначениеЗаполнено(СтрокаТЧТовары.АдресХраненияАВТО) Тогда
// тут добавляются движения
....
КонецПроцедуры
Функция СформироватьТабличнуюЧастьСОстаткамиНаСкладе(ТабличнаяЧасть, ДокументСсылка, РежимПроведения, Расшифровка, ВыявлятьНехваткуТоваров=Истина) Экспорт
Отказ = Ложь;
Запрос = Новый Запрос;
МВТ = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МВТ;
Запрос.Текст =
"ВЫБРАТЬ
| ТЧДокумента.ОбъектНоменклатуры КАК ОбъектНоменклатуры,
| ТЧДокумента.АдресХранения КАК АдресХранения,
| ТЧДокумента.НовыйАдресХранения КАК НовыйАдресХранения,
| ТЧДокумента.Количество КАК Количество,
| ТЧДокумента.КоличествоУУ КАК КоличествоУУ
|ПОМЕСТИТЬ ТЧДокумента
|ИЗ
| &ТЧ КАК ТЧДокумента";
Запрос.УстановитьПараметр("ТЧ", ТабличнаяЧасть);
Запрос.Выполнить();
Запрос.Текст =
"ВЫБРАТЬ
| ТЧДокумента.ОбъектНоменклатуры КАК ОбъектНоменклатуры,
| ТЧДокумента.ОбъектНоменклатуры.Номенклатура КАК Номенклатура,
| ТЧДокумента.ОбъектНоменклатуры.Нарезка.Размер КАК РазмерНарезки,
| ТЧДокумента.АдресХранения КАК АдресХранения,
| ТЧДокумента.НовыйАдресХранения КАК НовыйАдресХранения,
| ЯССМ_ТоварыНаСкладахПоЯчейкамОстатки.АдресХранения КАК АдресХраненияАВТО,
| ЕСТЬNULL(ТЧДокумента.Количество, 0) КАК КоличествоТребуется,
| ЕСТЬNULL(ЯССМ_ТоварыНаСкладахПоЯчейкамОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
| ЕСТЬNULL(ТЧДокумента.КоличествоУУ, 0) КАК КоличествоУУТребуется,
| ЕСТЬNULL(ЯССМ_ТоварыНаСкладахПоЯчейкамОстатки.КоличествоУУОстаток, 0) КАК КоличествоУУОстаток,
| ЯССМ_ТоварыНаСкладахПоЯчейкамОстатки.Склад КАК Склад
|ИЗ
| ТЧДокумента КАК ТЧДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЯССМ_ТоварыНаСкладахПоЯчейкам.Остатки(&МоментДокумента, ) КАК ЯССМ_ТоварыНаСкладахПоЯчейкамОстатки
| ПО ТЧДокумента.ОбъектНоменклатуры = ЯССМ_ТоварыНаСкладахПоЯчейкамОстатки.ОбъектНоменклатуры
|ГДЕ
| ТЧДокумента.АдресХранения = ЗНАЧЕНИЕ(Справочник.ЯС_АдресаХранения.ПустаяСсылка)
|";
ТабличнаяЧасть.Очистить();
Запрос.УстановитьПараметр("МоментДокумента", ДокументСсылка.МоментВремени());
// !!!!! делаю это для автоматического получения колонок результирующего запроса. Это крэзи конечно, но пока оставлю так. Нет времени
ТабличнаяЧасть = Запрос.Выполнить().Выгрузить();
ТабличнаяЧасть.Очистить();
ВыборкаОбъект = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаОбъект.Следующий() Цикл
ВыборкаАдресХранения = ВыборкаОбъект.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаАдресХранения.Следующий() Цикл
Если ВыявлятьНехваткуТоваров И ВыборкаАдресХранения.КоличествоТребуется>ВыборкаАдресХранения.КоличествоОстаток Тогда
Расшифровка = Расшифровка + Символы.ПС + "Недостаточно товара (код номенкл.: "+ВыборкаАдресХранения.Номенклатура.Код+") """+ВыборкаАдресХранения.ОбъектНоменклатуры + """" +
?(ЗначениеЗаполнено(ВыборкаАдресХранения.АдресХранения), " по адресу хранения """+ВыборкаАдресХранения.АдресХранения+"""", "")+"! "+
"Остаток товара "+ВыборкаАдресХранения.КоличествоОстаток+", а требуется "+ВыборкаАдресХранения.КоличествоТребуется+".";
Отказ = Истина;
Иначе
ВыборкаАдресХраненияАвто = ВыборкаАдресХранения.Выбрать();
Пока ВыборкаАдресХраненияАвто.Следующий() Цикл
Если ВыборкаАдресХраненияАвто.Количество()>1 Тогда
Расшифровка = Расшифровка + Символы.ПС + "Для товара (код номенкл.: "+ВыборкаАдресХранения.Номенклатура.Код+") """+ВыборкаАдресХранения.ОбъектНоменклатуры + """" +
" невозможно определить адрес хранения, т.к. остатки товаров расположены "+ Символы.ПС
+ " более чем в одном адресе хранения. Необходимо в документе явно указать адрес хранения товара!";
Отказ = Истина;
Иначе
// добавляем строку в результирующую таблицу
НоваяСтрока = ТабличнаяЧасть.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ВыборкаАдресХраненияАвто);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат Отказ;
КонецФункции //СформироватьТабличнуюЧастьСОстаткамиНаСкладе
Обработка проведения одного писателя...
Сначала берём выгружаем в ТЗ табличную часть, потом отдаём в общий модуль, там ТЗ передаём параметром в запрос, кладём в ВТ потом в другом запросе соединяем с остатками, меняем имена и состав колонок, выгружаем в ТЗ, возвращаем ТЗ в обработку проведения и уже по ней делаем движения.
Вообще, эта задача решается одним запросом. Но зачем?! Ведь если общий модуль существует, должен же кто-то его испрользовать...
+1
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using Excel;
using FPCLib.Models.Broadcasts;
namespace ExcelReadTests.Model.Путевка
{
public class MyExcel : IDisposable
{
private readonly DataTable table;
public MyExcel(string putevkaFileName)
{
table = ReadToTable(putevkaFileName);
}
internal DataTable ReadToTable(string excelFileName)
{
var stream = File.Open(excelFileName, FileMode.Open, FileAccess.Read);
var excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
return excelReader.AsDataSet().Tables[0];
}
public bool IsTvc()
{
if (table.Columns.Count == 10)
return true;
return false;
}
public bool IsFriday()
{
if (table.Columns.Count == 16)
return true;
return false;
}
public List<Broadcast> GetBroadcastsFriday()
{
var broadcasts = new List<Broadcast>();
for (var i = 0; i < table.Rows.Count; i++)
{
if (table.Rows[i][0].ToString().Length > 1)
{
broadcasts.Add(new Broadcast
{
Time = new Time(table.Rows[i][0].ToString()),
Title = table.Rows[i][1].ToString(),
File = table.Rows[i][3].ToString(),
Type = table.Rows[i][7].ToString(),
Id = table.Rows[i][2].ToString(),
Length = new Time(table.Rows[i][4].ToString())
});
}
}
return broadcasts;
}
public List<Broadcast> GetBroadcastsTvc()
{
var broadcasts = new List<Broadcast>();
for (var i = 0; i < table.Rows.Count; i++)
{
broadcasts.Add(new Broadcast
{
Time = new Time(table.Rows[i][0].ToString()),
Title = table.Rows[i][2].ToString().Trim(),
File = table.Rows[i][6].ToString().Trim(),
Type = table.Rows[i][9].ToString().Trim(),
Id = table.Rows[i][1].ToString().Trim(),
Length = new Time(table.Rows[i][5].ToString())
});
}
return broadcasts;
}
public void Dispose()
{
}
}
}
вот так открываю эксельку
DataTable ReadToTable(string excelFileName)
по количеству столбцов, определяю ее источник)
public bool IsTvc()
public bool IsFriday()
и даже поддерживаю интерфейс IDisposable))