- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
&НаКлиенте
Процедура НастройкаВидимости()
НастройкаВидимости();
КонецПроцедуры
&НаКлиенте
Процедура ВидЗаявкиПриИзменении(Элемент)
НастройкаВидимости();
КонецПроцедуры
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
&НаКлиенте
Процедура НастройкаВидимости()
НастройкаВидимости();
КонецПроцедуры
&НаКлиенте
Процедура ВидЗаявкиПриИзменении(Элемент)
НастройкаВидимости();
КонецПроцедуры
Когда отвлекли телефонным звонком, а потом сидишь полчаса и думаешь почему при выборе значения на форме в поле "Вид заявки" 1ска крашиться)))
+1
СТРЗАМЕНИТЬ(СОКРЛ(СТРЗАМЕНИТЬ(уатПутевойЛист.Номер, "0", " ")), " ", "0") КАК НомерПЛ,
Удаляет нули в номере документа для вывода на печатную форму
−1
Функция ПолучитьСеб (Номенклатура,ДатаОстатков) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| УчетПартийОстатки.Номенклатура,
| УчетПартийОстатки.Партия КАК Партия,
| УчетПартийОстатки.СуммаБезНДСОстаток / УчетПартийОстатки.КоличествоОстаток КАК бухСС
|ИЗ
| РегистрНакопления.УчетПартий.Остатки(&ДатаОстатков, Номенклатура В (&Номенклатура)) КАК УчетПартийОстатки
| ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииНоменклатуры.Остатки(&ДатаОстатков, Номенклатура В (&Номенклатура)) КАК ПартииНоменклатурыОстатки
| ПО УчетПартийОстатки.Характеристика = ПартииНоменклатурыОстатки.Характеристика
| И УчетПартийОстатки.МестоХранения = ПартииНоменклатурыОстатки.МестоХранения
| И УчетПартийОстатки.Статус = ПартииНоменклатурыОстатки.Статус
| И УчетПартийОстатки.Номенклатура = ПартииНоменклатурыОстатки.Номенклатура
| И УчетПартийОстатки.Партия = ПартииНоменклатурыОстатки.Партия
|ГДЕ
| УчетПартийОстатки.КоличествоОстаток > 0
|
|УПОРЯДОЧИТЬ ПО
| Партия";
Запрос.УстановитьПараметр("ДатаОстатков", ДатаОстатков);
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи.бухсс;
КонецЕсли;
КонецФункции
Нашёл сие поделие в базе одного клиента, придраться хочется ко всему, начиная с лютого нэйминга - имя функции ПолучитьСеб(), не намного лучше чем Функция1(), имя переменной в запросе бухСС тоже так себе.
Задача функции вернуть себестоимость единицы товара, при этом число она возвращает только если в запросе что-то есть, понятно что в остальных случаях вернет Неопределено, но себестоимость это всегда число, никаких Неопределено быть не должно.
Если посмотреть текст запроса, то видно, что поля выборки на 100% беруться из одной таблицы, зачем там ещё одну прилепили, да ещё и с полным соединением - теряюсь в догадках.
Упорядочивание по полю Партия вообще смысла не имеет, если уж речь идёт о получении себестоимости, то скорей автор хотел получить её из первой партии, что косвенно подвтерждается выражением "ПЕРВЫЕ 1", но дело в том, что упорядочивание по ссылке (Партия - это элемент справочника Партии) не имеет никакой привязки к дате, т.е. нужно было писать так: "Упорядочить По Партия.ДатаПартии".
Здесь не видно, но функция вызывается только в двух местах модуля и всегда с конкретным значением номенклатуры, т.е. условие виртуальной таблицы может быть оптимизировано до "Номенклатура = &Номенклатура".
Ну и на последок - в данном случае полное соединение конечно нужно ликвидировать, но если бы оно действительно было нужно, то виртуальные таблицы не стоит связывать между собой, предварительно их нужно помещать во временные таблицы и индексировать по полям условий соединения.
+1
ЗапросБезСЛ = Новый Запрос;
ЗапросБезСЛ.Текст = "ВЫБРАТЬ
| КарточкаСделкиТовары.Ссылка.Ссылка КАК СсылкаКС
|ИЗ
| Документ.КарточкаСделки.Товары КАК КарточкаСделкиТовары
|ГДЕ
| КарточкаСделкиТовары.Ссылка.Завершена = ЛОЖЬ
| И КарточкаСделкиТовары.Ссылка.ПометкаУдаления = ЛОЖЬ
| И (КарточкаСделкиТовары.СтатусСтроки = &СтатусСтрокиПлан
| ИЛИ КарточкаСделкиТовары.СтатусСтроки = &СтатусСтрокиПланХочуВЗаказано
| ИЛИ КарточкаСделкиТовары.Ссылка.Клиент = &Электросистем
| И КарточкаСделкиТовары.СтатусСтроки <> &СтатусСтрокиЗавершено)
| И КарточкаСделкиТовары.КонтрактнаяДата < НАЧАЛОПЕРИОДА(&ТекДата, ДЕНЬ)
| И КарточкаСделкиТовары.Ссылка.Подразделение В ИЕРАРХИИ(&ДРП)
| И КарточкаСделкиТовары.Ссылка.ДляПланаПроизводства = ЛОЖЬ
| И КарточкаСделкиТовары.Ссылка.Дата > &ПрошлыйГод
| И КарточкаСделкиТовары.Ссылка.Статус <> ЗНАЧЕНИЕ(Справочник.СтатусыКарточекСделки.Завершена)
//| И КарточкаСделкиТовары.Ссылка.Номер = ""180010002""
|
|СГРУППИРОВАТЬ ПО
| КарточкаСделкиТовары.Ссылка.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| КарточкаСделкиТовары.Ссылка.Дата УБЫВ";
ЗапросБезСЛ.УстановитьПараметр("СтатусСтрокиПлан", Справочники.СтатусыСтрокКарточкиСделки.Запланировано);
ЗапросБезСЛ.УстановитьПараметр("СтатусСтрокиПланХочуВЗаказано", Справочники.СтатусыСтрокКарточкиСделки.Заказано);
ЗапросБезСЛ.УстановитьПараметр("ТекДата", ТекущаяДата());
ЗапросБезСЛ.УстановитьПараметр("ДРП",Справочники.ФункциональныеОтделыПродаж.НайтиПоКоду("d16"));
ЗапросБезСЛ.УстановитьПараметр("Электросистем", Справочники.Контрагенты.НайтиПоКоду("140755"));
ЗапросБезСЛ.УстановитьПараметр("СтатусСтрокиЗавершено", Справочники.СтатусыСтрокКарточкиСделки.Завершено);
ЗапросБезСЛ.УстановитьПараметр("ПрошлыйГод", НачалоГода(НачалоГода(ТекущаяДата())-3 * 86400));
Выборка = ЗапросБезСЛ.Выполнить().Выбрать();
сПользователь = Справочники.Пользователи.НайтиПоКоду("17 644").Руководитель;
НоваяКонтрДата = ОбщиеПроцедурыИФункции.ОпределитьДатуЗавершения(сПользователь, ТекущаяДата(), 3600*8*1);
Пока Выборка.Следующий() Цикл
КС = Выборка.СсылкаКС.ПолучитьОбъект();
НеобходимоЗаписать = Ложь;
Если ЗначениеЗаполнено(Выборка.СсылкаКС.КодSL) Тогда
Для каждого Изделие из КС.Товары Цикл
СтатусСтроки = ПолучитьСтатусСтрокиВSL(Выборка.СсылкаКС.КодSL,Изделие.НомерСтроки,Выборка.СсылкаКС.Склад);
Если СтатусСтроки <> Неопределено И СтатусСтроки <> "F" //выполн.
и СтатусСтроки <> "C" //завершено
Тогда
Если Изделие.КонтрактнаяДата < НачалоДня(ТекущаяДата()) Тогда
Если (Изделие.СтатусСтроки = Справочники.СтатусыСтрокКарточкиСделки.Запланировано
или Изделие.СтатусСтроки = Справочники.СтатусыСтрокКарточкиСделки.Заказано) ИЛИ (Изделие.СтатусСтроки <> Справочники.СтатусыСтрокКарточкиСделки.Завершено И Выборка.СсылкаКС.Клиент = Справочники.Контрагенты.НайтиПоКоду("140755")) Тогда
Изделие.КонтрактнаяДата = НоваяКонтрДата;
НеобходимоЗаписать = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если НеобходимоЗаписать Тогда
КС.Записать();
Документы.КарточкаСделки.ОбновитьПараметрыКарточкиСделкиВSL(КС);
rs = Неопределено;
КонецЕсли;
Иначе
Для каждого Изделие из КС.Товары Цикл
Если Изделие.КонтрактнаяДата < НачалоДня(ТекущаяДата()) Тогда
Если (Изделие.СтатусСтроки = Справочники.СтатусыСтрокКарточкиСделки.Запланировано
или Изделие.СтатусСтроки = Справочники.СтатусыСтрокКарточкиСделки.Заказано) ИЛИ (Изделие.СтатусСтроки <> Справочники.СтатусыСтрокКарточкиСделки.Завершено И Выборка.СсылкаКС.Клиент = Справочники.Контрагенты.НайтиПоКоду("140755")) Тогда
Изделие.КонтрактнаяДата = НоваяКонтрДата;
НеобходимоЗаписать = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если НеобходимоЗаписать Тогда
КС.Записать();
rs = Неопределено;
КонецЕсли;
КонецЕсли;
КонецЦикла;
0
Процедура СоздаватьПКОПриИзменении(Элемент)
Если НЕ ЗаписыватьДокументы Тогда
ЗаписыватьДокументы = Истина;
КонецЕсли;
КонецПроцедуры
Нельзя так просто взять и не создавать документы.
0
ДокОбъект = ДокСсылка.ПолучитьОбъект();
ДокОбъект.ОбменДанными.Загрузка = Истина;
ДокОбъект.ПометкаУдаления = Истина;
ДокОбъект.Записать();
−4
Функция ПолучитьОсновногоБухгалтераПоОрганизации(организация) Экспорт
текстЗапроса = "
|ВЫБРАТЬ ПЕРВЫЕ 1
| ПользовательБухгалтер
|ИЗ
| РегистрСведений.СКАНИЯ_ОтветственныеБухгалтерыПоОрганизациям
|ГДЕ
| Организация = &организация
| И Основной = ИСТИНА
|";
запрос = Новый Запрос(текстЗапроса);
запрос.УстановитьПараметр("организация", организация);
выборка = запрос.Выполнить().Выбрать();
Если выборка.Следующий() Тогда
возврат выборка.ПользовательБухгалтер;
Иначе
возврат Справочники.Пользователи.ПустаяСсылка();
КонецЕсли;
КонецФункции
+1
Функция ПолучитьПарамтерыОтправкиРеестра()
Адресат = ПараметрыСеанса.ТекущийПользователь.аОфис.ОфисАрхивации.Ответственный;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ТерриторииИПомещения.Ссылка КАК Ссылка
|ИЗ
| Справочник.ТерриторииИПомещения КАК ТерриторииИПомещения
|ГДЕ
| ТерриторииИПомещения.аОфисПредприятия = &Архив
| И НЕ ТерриторииИПомещения.ПометкаУдаления";
Запрос.УстановитьПараметр("Архив", Адресат.аОфис.ОфисАрхивации);
РЗОф = Запрос.Выполнить().Выгрузить();
Если РЗОф.Количество() = 0 Тогда
Сообщить("Офис архивации """ + Адресат.аОфис.ОфисАрхивации + """ не прикреплен к территории. Обратитесь в техническую поддержку");
ИначеЕсли РЗОф.Количество() > 1 Тогда
Сообщить("Офис архивации """ + Адресат.аОфис.ОфисАрхивации + """ прикреплен к нескольким территориям:");
Для Каждого СтрТер ИЗ РЗОф Цикл
Сообщить(СтрТер.Ссылка);
КонецЦикла;
Сообщить("Обратитесь в техническую поддержку.");
Иначе
ОфисПолучателя = РЗОф[0].Ссылка;
ПодразделениеПолучателя = Адресат.Подразделение;
КонецЕсли;
Возврат Новый Структура("Адресат, ОфисПолучателя, ПодразделениеПолучателя", Адресат, ОфисПолучателя, ПодразделениеПолучателя);
КонецФункции
−1
Для ТекИндекс = 0 По Объект.Товары.Количество() -1 Цикл
Стр = Объект.Товары[ТекИндекс];
//Интересе, а чем не устроило?:
Для каждого Стр из Объект.Товары Цикл
+1
ДокументСсылка = парВыборка.Документ;
Если СокрЛП(ДокументСсылка) = "" Тогда
Продолжить;
КонецЕсли;
А как вы проверяете на ПустуюСсылку?