- 1
ПроцентНДС = 18;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
Всего: 15
−111
ПроцентНДС = 18;
Сферический, в вакууме. При любых условиях. 18! И точка! Что? Перечисление? Какое нахрен ещё перечисление! Перечисления для слабаков!
−99
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
///////////////////////////////////////////////////////
// Подготовка табличной части документа
тчТовары = Товары.Выгрузить();
Отказ = ОбщийМодуль.СформироватьТабличнуюЧастьСОстаткамиНаСкладе(тчТовары, Ссылка, РежимПроведения, Расшифровка, ВыявлятьНехваткуТоваров);
Для Каждого СтрокаТЧТовары Из тчТовары Цикл
Если ЗначениеЗаполнено(СтрокаТЧТовары.НовыйАдресХранения) И ЗначениеЗаполнено(СтрокаТЧТовары.АдресХраненияАВТО) Тогда
// тут добавляются движения
....
КонецПроцедуры
Функция СформироватьТабличнуюЧастьСОстаткамиНаСкладе(ТабличнаяЧасть, ДокументСсылка, РежимПроведения, Расшифровка, ВыявлятьНехваткуТоваров=Истина) Экспорт
Отказ = Ложь;
Запрос = Новый Запрос;
МВТ = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МВТ;
Запрос.Текст =
"ВЫБРАТЬ
| ТЧДокумента.ОбъектНоменклатуры КАК ОбъектНоменклатуры,
| ТЧДокумента.АдресХранения КАК АдресХранения,
| ТЧДокумента.НовыйАдресХранения КАК НовыйАдресХранения,
| ТЧДокумента.Количество КАК Количество,
| ТЧДокумента.КоличествоУУ КАК КоличествоУУ
|ПОМЕСТИТЬ ТЧДокумента
|ИЗ
| &ТЧ КАК ТЧДокумента";
Запрос.УстановитьПараметр("ТЧ", ТабличнаяЧасть);
Запрос.Выполнить();
Запрос.Текст =
"ВЫБРАТЬ
| ТЧДокумента.ОбъектНоменклатуры КАК ОбъектНоменклатуры,
| ТЧДокумента.ОбъектНоменклатуры.Номенклатура КАК Номенклатура,
| ТЧДокумента.ОбъектНоменклатуры.Нарезка.Размер КАК РазмерНарезки,
| ТЧДокумента.АдресХранения КАК АдресХранения,
| ТЧДокумента.НовыйАдресХранения КАК НовыйАдресХранения,
| ЯССМ_ТоварыНаСкладахПоЯчейкамОстатки.АдресХранения КАК АдресХраненияАВТО,
| ЕСТЬNULL(ТЧДокумента.Количество, 0) КАК КоличествоТребуется,
| ЕСТЬNULL(ЯССМ_ТоварыНаСкладахПоЯчейкамОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
| ЕСТЬNULL(ТЧДокумента.КоличествоУУ, 0) КАК КоличествоУУТребуется,
| ЕСТЬNULL(ЯССМ_ТоварыНаСкладахПоЯчейкамОстатки.КоличествоУУОстаток, 0) КАК КоличествоУУОстаток,
| ЯССМ_ТоварыНаСкладахПоЯчейкамОстатки.Склад КАК Склад
|ИЗ
| ТЧДокумента КАК ТЧДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЯССМ_ТоварыНаСкладахПоЯчейкам.Остатки(&МоментДокумента, ) КАК ЯССМ_ТоварыНаСкладахПоЯчейкамОстатки
| ПО ТЧДокумента.ОбъектНоменклатуры = ЯССМ_ТоварыНаСкладахПоЯчейкамОстатки.ОбъектНоменклатуры
|ГДЕ
| ТЧДокумента.АдресХранения = ЗНАЧЕНИЕ(Справочник.ЯС_АдресаХранения.ПустаяСсылка)
|";
ТабличнаяЧасть.Очистить();
Запрос.УстановитьПараметр("МоментДокумента", ДокументСсылка.МоментВремени());
// !!!!! делаю это для автоматического получения колонок результирующего запроса. Это крэзи конечно, но пока оставлю так. Нет времени
ТабличнаяЧасть = Запрос.Выполнить().Выгрузить();
ТабличнаяЧасть.Очистить();
ВыборкаОбъект = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаОбъект.Следующий() Цикл
ВыборкаАдресХранения = ВыборкаОбъект.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаАдресХранения.Следующий() Цикл
Если ВыявлятьНехваткуТоваров И ВыборкаАдресХранения.КоличествоТребуется>ВыборкаАдресХранения.КоличествоОстаток Тогда
Расшифровка = Расшифровка + Символы.ПС + "Недостаточно товара (код номенкл.: "+ВыборкаАдресХранения.Номенклатура.Код+") """+ВыборкаАдресХранения.ОбъектНоменклатуры + """" +
?(ЗначениеЗаполнено(ВыборкаАдресХранения.АдресХранения), " по адресу хранения """+ВыборкаАдресХранения.АдресХранения+"""", "")+"! "+
"Остаток товара "+ВыборкаАдресХранения.КоличествоОстаток+", а требуется "+ВыборкаАдресХранения.КоличествоТребуется+".";
Отказ = Истина;
Иначе
ВыборкаАдресХраненияАвто = ВыборкаАдресХранения.Выбрать();
Пока ВыборкаАдресХраненияАвто.Следующий() Цикл
Если ВыборкаАдресХраненияАвто.Количество()>1 Тогда
Расшифровка = Расшифровка + Символы.ПС + "Для товара (код номенкл.: "+ВыборкаАдресХранения.Номенклатура.Код+") """+ВыборкаАдресХранения.ОбъектНоменклатуры + """" +
" невозможно определить адрес хранения, т.к. остатки товаров расположены "+ Символы.ПС
+ " более чем в одном адресе хранения. Необходимо в документе явно указать адрес хранения товара!";
Отказ = Истина;
Иначе
// добавляем строку в результирующую таблицу
НоваяСтрока = ТабличнаяЧасть.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ВыборкаАдресХраненияАвто);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат Отказ;
КонецФункции //СформироватьТабличнуюЧастьСОстаткамиНаСкладе
Обработка проведения одного писателя...
Сначала берём выгружаем в ТЗ табличную часть, потом отдаём в общий модуль, там ТЗ передаём параметром в запрос, кладём в ВТ потом в другом запросе соединяем с остатками, меняем имена и состав колонок, выгружаем в ТЗ, возвращаем ТЗ в обработку проведения и уже по ней делаем движения.
Вообще, эта задача решается одним запросом. Но зачем?! Ведь если общий модуль существует, должен же кто-то его испрользовать...
−94
ВыборкаПоПроектам = ВзаиморасчетыСКонтрагентами.ПолучитьЗаполженностьКонтрагентовНаДату(МассивОрганизаций, КонецДня(ДатаОтчета), Истина, Истина, Истина);
Если ВыборкаПоПроектам <> Неопределено Тогда
ТаблицаВзаиморасчетов = Новый ТаблицаЗначений;
ДополнитьТаблицуКолонками(ТаблицаВзаиморасчетов);
Пока ВыборкаПоПроектам.Следующий() Цикл /// Проект
Если ВыборкаПоПроектам.СуммаОстаток <> 0 Тогда
ВыборкаПоКонтрагентам = ВыборкаПоПроектам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоКонтрагентам.Следующий() Цикл /// Контрагент
Если ВыборкаПоКонтрагентам.СуммаОстаток <> 0 Тогда
ВыборкаПоПлательщикам = ВыборкаПоКонтрагентам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоПлательщикам.Следующий() Цикл // плательщик
Если (ВыборкаПоПлательщикам.СуммаОстаток <> 0) Тогда
ВыборкаПоДоговорам = ВыборкаПоПлательщикам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоДоговорам.Следующий() Цикл // договор
Если ВыборкаПоДоговорам.СуммаОстаток <> 0 Тогда
ВыборкаПоДокументам = ВыборкаПоДоговорам.Выбрать();
Пока ВыборкаПоДокументам.Следующий() Цикл // документ
СтрокаВзаиморасчетов = ТаблицаВзаиморасчетов.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаВзаиморасчетов, ВыборкаПоДокументам);
А потом вот такая таблица помещается в СКД, на неё накладывается отбор... и даже по 1 контрагенту отчёт формируется минут 5. Научили дурака Богу молиться...
−98
Перем ОписаниеФормы;
ОписаниеФормы = Новый Структура;
ОписаниеФормы.Вставить("ТипОбъектаФормы", Неопределено);
ОписаниеФормы.Вставить("ТипФормы", Неопределено);
ОписаниеФормы.Вставить("СсылкаНаОбъектФормы", Неопределено);
ОписаниеФормы.Вставить("СсылкаНаФорму", ФормаКлиента);
Попытка
ОписаниеФормы.Вставить("ТипОбъектаФормы", Метаданные.НайтиПоТипу(ТипЗнч(ФормаКлиента.ОбработкаОбъект)).Имя);
ОписаниеФормы.Вставить("СсылкаНаОбъектФормы", ФормаКлиента.ОбработкаОбъект.Ссылка);
ОписаниеФормы.Вставить("ТипФормы", "Обработка");
Исключение
КонецПопытки;
Попытка
ОписаниеФормы.Вставить("ТипОбъектаФормы", Метаданные.НайтиПоТипу(ТипЗнч(ФормаКлиента.ДокументСписок)).Имя);
ОписаниеФормы.Вставить("СсылкаНаОбъектФормы", Неопределено);
ОписаниеФормы.Вставить("ТипФормы", " ДокументСписок");
Исключение
КонецПопытки;
Попытка
ОписаниеФормы.Вставить("ТипОбъектаФормы", Метаданные.НайтиПоТипу(ТипЗнч(ФормаКлиента.ДокументОбъект)).Имя);
ОписаниеФормы.Вставить("СсылкаНаОбъектФормы", ФормаКлиента.ДокументОбъект.Ссылка);
ОписаниеФормы.Вставить("ТипФормы", "Документ");
Исключение
КонецПопытки;
Попытка
ОписаниеФормы.Вставить("ТипОбъектаФормы", Метаданные.НайтиПоТипу(ТипЗнч(ФормаКлиента.СправочникСписок)).Имя);
ОписаниеФормы.Вставить("СсылкаНаОбъектФормы", Неопределено);
ОписаниеФормы.Вставить("ТипФормы", "СправочникСписок");
Исключение
КонецПопытки;
Попытка
ОписаниеФормы.Вставить("ТипОбъектаФормы", Метаданные.НайтиПоТипу(ТипЗнч(ФормаКлиента.СправочникОбъект)).Имя);
ОписаниеФормы.Вставить("СсылкаНаОбъектФормы", ФормаКлиента.СправочникОбъект.Ссылка);
ОписаниеФормы.Вставить("ТипФормы", "Справочник");
Исключение
КонецПопытки;
Попытка //если в самой форме описан её тип...
ОписаниеФормы.Вставить("ТипОбъектаФормы", ФормаКлиента.ТипОбъектаФормы);
ОписаниеФормы.Вставить("СсылкаНаОбъектФормы", ФормаКлиента.СсылкаНаОбъектФормы);
ОписаниеФормы.Вставить("ТипФормы", ФормаКлиента.ТипФормы);
Исключение
КонецПопытки;
Возврат ОписаниеФормы;
Более "эвристического" метода чем N попыток аффтар видимо придумать не смог. Всё бы ничего, пытайся на здоровье, просто есть люди которые иногда включают режим отладки "остановка по ошибке"... бесит...
−163
Процедура ЗаполнитьТоЧтоможно()
СписокТогоЧтоМожно = СоздатьОбъект("СписокЗначений");
//Start = _GetPerformanceCounter();
ЗапросГрупп = CreateObject("ODBCRECORDSET");