- 1
- 2
СтрокаСуммаСРазделителями = Строка(ТекСсылка.СуммаДокумента);
СтрокаСуммаБезРазделителей = СтрЗаменить(СтрокаСуммаСРазделителями, СимволРазделительСуммы, "");
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−116
СтрокаСуммаСРазделителями = Строка(ТекСсылка.СуммаДокумента);
СтрокаСуммаБезРазделителей = СтрЗаменить(СтрокаСуммаСРазделителями, СимволРазделительСуммы, "");
Видать, использование "Формат" запрещено внутренней политикой =(
−104
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| ВЫБОР Когда Ном.Ссылка.ЭтоГруппа=Истина Тогда 1 Иначе 0 Конец как этоГруппа,
| 1 как Уровень,
| ВЫБОР Когда Ном.Ссылка.Родитель.Код=""00002"" Тогда """" Иначе Ном.Ссылка.Родитель.Код Конец как кодРодителя,
| Ном.Ссылка.Код как Код,
| Ном.Ссылка.Наименование как Наименование,
| Ном.Ссылка как Элемент
|ИЗ справочник.Номенклатура как Ном";
РЗ = Запрос.Выполнить();
ТЗ = РЗ.Выгрузить();
Сообщить("1. Подготовка таблицы ...");
КК=0;
КМАКС=ТЗ.Количество();
Индикатор1 = ЭлементыФормы.Индикатор;
Индикатор1.МаксимальноеЗначение = ТЗ.Количество();
Индикатор1.Значение = 0;
Для Каждого ТекСтрока ИЗ ТЗ Цикл
Индикатор1.Значение = Индикатор1.Значение + 1;
ОбработкаПрерыванияПользователя();
КК = КК + 1;
Состояние(Формат(КК/КМАКС*100, "ЧЦ=8; ЧДЦ=2"),Цел(КК/КМАКС*100));
ТекСтрока.Уровень = ТекСтрока.Элемент.Уровень()-1;
КонецЦикла;
ТЗ.Сортировать("этоГруппа убыв,Уровень возр,Наименование возр");
Вот такой вот способ получения номенклатуры вместе с иерархией
−121
//Рарус Обработка МодульОбменаДанными СоставКонтуровОбмена()
КешСоставКонтуровОбмена = Новый Соответствие;
КешОбъектовКонтуровОбмена = Новый Соответствие; // м.б. будем использовать для ограничения типов поля "Документ" в запросе по регистру ТаблицаРегистрацииДокументов
Попытка
//Вот здесь в программу загружается список контуров обмена, представляющии из себя политики для документов
Шаблон = ПолучитьМакет("СоставКонтуровОбмена"+Метаданные.Имя);
ВерсияВШаблоне = СокрЛП(Шаблон.Область(1, 2).Текст);
......
КешСоставКонтуровОбмена.Вставить(Тип(ТипСтр+"Ссылка."+ИмяСтр), ПеречислениеСсылка);
Просто засунули все в макет, раздел макета это тип политик для набора Документов. Это не такой плохой способ, притом что очень хорошо видно в конфигураторе как и куда петкать политики обработки файлов. Но по всем параметрам говнокод.
http://i54.fastpic.ru/big/2013/0130/34/730bb0d4a34dbccb43c3cb5cd46fea34.jpg
−119
Торм. колодки передние[?(Докум.ТКП_Процент>0,",ост.толщина","")] [?(Докум.ТКП_Процент>0,Докум.ТКП_Процент,"")][?(Докум.ТКП_Процент>0,"мм","")]
это содержимое одной ячейки таблицы с видом вывода "Шаблон", мало того что автор вынуждает 3 раза обращаться к полю Докум.ТКП_Процент, так ещё и о конкатенации строк видимо ничего не слышал, упрощается до:
Торм. колодки передние [?(Докум.ТКП_Процент>0,",ост.толщина "+Докум.ТКП_Процент+" мм","")]
−119
Функция РазобратьКодыНеисправностей(СтрокаКодов, ТипКода)
СпрКодов = СоздатьОбъект("Справочник.КодыГарантийныхНеисправностей");
ГруппаТ1 = СпрКодов.НайтиПоКоду("0",0);
ГруппаТ2 = СпрКодов.НайтиПоКоду("00",0);
ГруппаТ3 = СпрКодов.НайтиПоКоду("000",0);
Если СтрокаКодов <> "" Тогда
Разд1 = Найти(СтрокаКодов, ";");
Разд2 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд1), ";") + Разд1;
Разд3 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд2), ";") + Разд2;
Разд4 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд3), ";") + Разд3;
Разд5 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд4), ";") + Разд4;
Разд6 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд5), ";") + Разд5;
Разд7 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд6), ";") + Разд6;
Разд8 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд7), ";") + Разд7;
Разд9 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд8), ";") + Разд8;
Разд10 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд9), ";") + Разд9;
Разд11 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд10), ";") + Разд10;
Если ТипКода = "Т1" Тогда
Если Разд1 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ1);
Если СпрКодов.НайтиПоКоду("0/" + Лев(СтрокаКодов,Разд1-1),2) = 1 Тогда
ПолучТ1 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ1;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипКода = "Т2" Тогда
Если Разд2-Разд1 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ2);
Если СпрКодов.НайтиПоКоду("00/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд1), Разд2 - Разд1 - 1), 2) = 1 Тогда
ПолучТ2 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ2;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипКода = "Т3_1" Тогда
Если Разд3-Разд2 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ3);
Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд2), Разд3 - Разд2 - 1), 2) = 1 Тогда
ПолучТ3_1 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ3_1;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипКода = "Т3_2" Тогда
Если Разд4-Разд3 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ3);
Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд3), Разд4 - Разд3 - 1), 2) = 1 Тогда
ПолучТ3_2 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ3_2;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипКода = "Т3_3" Тогда
Если Разд5-Разд4 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ3);
Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд4), Разд5 - Разд4 - 1), 2) = 1 Тогда
ПолучТ3_3 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ3_3;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипКода = "Т3_4" Тогда
Если Разд6-Разд5 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ3);
Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд5), Разд6 - Разд5 - 1), 2) = 1 Тогда
ПолучТ3_4 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ3_4;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипКода = "Т3_5" Тогда
Если Разд7-Разд6 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ3);
Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд6), Разд7 - Разд6 - 1), 2) = 1 Тогда
ПолучТ3_5 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ3_5;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипКода = "Т3_6" Тогда
Если Разд8-Разд7 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ3);
Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд7), Разд8 - Разд7 - 1), 2) = 1 Тогда
ПолучТ3_6 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ3_6;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипКода = "Т3_7" Тогда
Если Разд9-Разд8 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ3);
Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд8), Разд9 - Разд8 - 1), 2) = 1 Тогда
ПолучТ3_7 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ3_7;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипКода = "Т3_8" Тогда
Если Разд10-Разд9 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ3);
Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд9), Разд10 - Разд9 - 1), 2) = 1 Тогда
ПолучТ3_8 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ3_8;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипКода = "Т3_9" Тогда
Если Разд11-Разд10 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ3);
ещё один высер от автодилера.
1. начнём сначала, там есть строки:
...
ГруппаТ1 = СпрКодов.НайтиПоКоду("0",0);
..., обращаю внимание автора, что функция НайтиПоКоду не возвращает элемент справочника, она лишь говорит есть он или нет, для позиционирования на элементе не хватает строк типа ГруппаТ1 = СпрКодом.ТекущийЭлемент(); и т.д.
2. дальше. в функцию передаётся параметр СтрокаКодов - это строка с запятыми в качестве разделителей. я конечно понимаю, что в 1С нет встроенной функции для получения массива частей строки типа split в java, но написать свою вообще не сложно, но видимо у автора не хватило мозг..., извините, времени.
3. теперь смотрим на подобные (их несколько в функции) блоки кода типа:
СпрКодов.ИспользоватьРодителя(ГруппаТ1);
Если СпрКодов.НайтиПоКоду("0/" + Лев(СтрокаКодов,Разд1-1),2) = 1 Тогда
ПолучТ1 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ1;
КонецЕсли;
строка СпрКодов.ИспользоватьРодителя(ГруппаТ1); не имеет смысла, т.к. ГруппаТ1 содержит значение 1 (см. п.1), а не ссылку на элемент справочника, код работает только благодаря второму параметру - 2, т.к. он заставляет функцию НайтиПоКоду искать по всему справочнику, используя полный код.
−122
Word.FormFields("Data").Result = СокрЛП(?(ДатаЧисло(ДатаДок2)<10,"0","")+ДатаЧисло(ДатаДок2));
Word.FormFields("Manth").Result = СокрЛП(МесяцПрописью(ДатаДок2));
Word.FormFields("God").Result = СокрЛП(ДатаГод(ДатаДок2));
взято из конфигурации одного автодилера, особенно порадовали имена частей даты
−118
Если (ЕстьНомен.НайтиЗначение(Док.Номенклатура) > 0)
ИЛИ (ЕстьНомен.НайтиЗначение(Док.Номенклатура.Родитель) > 0)
ИЛИ (ЕстьНомен.НайтиЗначение(Док.Номенклатура.Родитель.Родитель) > 0)
ИЛИ (ЕстьНомен.НайтиЗначение(Док.Номенклатура.Родитель.Родитель.Родитель) > 0)
ИЛИ (ЕстьНомен.НайтиЗначение(Док.Номенклатура.Родитель.Родитель.Родитель.Родитель) > 0)
ИЛИ (ЕстьНомен.НайтиЗначение(Док.Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель) > 0) Тогда
ИтогоРМ = ИтогоРМ+Док.Сумма;
КонецЕсли;
ЕстьНомен - это элемент формы Список, т.е. код можно упростить до:
Если ЕстьНомен.Принадлежит(Док.Номенклатура) =1 Тогда
ИтогоРМ = ИтогоРМ+Док.Сумма;
КонецЕсли;
взято из конфигурации одного автодилера.
−120
Мутабелен ли 1С.Овощи.Банан?
Коллега считает что мутабелен.
−119
ВЫБРАТЬ
ЕСТЬNULL(СрокПолезногоИспользования, 0) КАК СрокПолезногоИспользования
ИЗ
РегистрСведений.РасчетАмортизацииОС.СрезПоследних
ГДЕ
ОС = &ОсновноеСредство
Типовая конфигурация. Там такой запрос используют в печатной форме Основных средств... Думает по 10-15 минут
2 глупых ошибки:
1. Проверка на NULL, в данном случае его быть не может (хотя это особо ни на что не влияет)
2. Условие по законам 1С должно применяться в РегистрСведений.РасчетАмортизацииОС.Срез Последних(,ОС = &ОсновноеСредство), иначе сильно падает скорость выполнения.
−120
Пока ТЗРаспределения.ТаблицаРеализацийИВозвратовНеСвернутая.ТаблицаНоменклатур.ТаблицаРеализацийНеСв.ТаблицаВозвратовНеСв.ПолучитьСтроку()=1 Цикл
СтрокаВозвратов = СтрокаВозвратов + ТЗРаспределения.ТаблицаРеализацийИВозвратовНеСвернутая.ТаблицаНоменклатур.ТаблицаРеализацийНеСв.ТаблицаВозвратовНеСв.Возврат + ";" ;
КонецЦикла;
Очередной шедевр... Живем в 6(!!!)-мерном мире. У меня чуть мозг не взорвался.