- 1
СуммаРЗ = СуммаРЗ;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−144
СуммаРЗ = СуммаРЗ;
Капитан, это вы?
−139
Если ЗначениеЗаполнено(ВыслугаЛет) Тогда
Запрос.УстановитьПараметр("ВыслугаЛет", ВыслугаЛет);
КонецЕсли;
Если не ЗначениеЗаполнено(ВыслугаЛет) Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст,"И ПНУ.ВидРасчета <> &ВыслугаЛет","");
Запрос.Текст = СтрЗаменить(Запрос.Текст,"И ТабельныйЛист.ВидРасчета <> &ВыслугаЛет","");
Запрос.Текст = СтрЗаменить(Запрос.Текст,"И Прекращения.ВидРасчета <> &ВыслугаЛет","");
КонецЕсли;
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("ПодразделениеОрганизации", ПодразделениеОрганизации);
Если ПодразделениеОрганизации.Пустая() Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст,"И Подразделение В ИЕРАРХИИ(&ПодразделениеОрганизации)","");
Запрос.Текст = СтрЗаменить(Запрос.Текст,"И Прекращения.ПодразделениеОрганизации = &ПодразделениеОрганизации","");
Запрос.Текст = СтрЗаменить(Запрос.Текст,"И ТабельныйЛист.Подразделение В ИЕРАРХИИ(&ПодразделениеОрганизации)","");
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ВыслугаЛет) Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст,"ГДЕ
| ТабельныйЛист.ВидРасчета <> &ВыслугаЛет
| И","Где ");
КонецЕсли;
−142
Если РучнойВводОтработанногоВремени И СТЧ.ОтработаноДней = 0 И СТЧ.ОтработаноЧасов = 0 Тогда
Если СТЧ.ОтработаноДней = 0 И СТЧ.ОтработаноЧасов = 0 Тогда
СТЧ.ОтработаноДней = НачислениеИзРегистрыРасчета.ОтработаноДней;
СТЧ.ОтработаноЧасов = НачислениеИзРегистрыРасчета.ОтработаноЧасов;
КонецЕсли;
КонецЕсли;
Бонд, Джеймс Бонд.
Если СТЧ.ОтработаноДней = 0 И СТЧ.ОтработаноЧасов = 0 Тогда
Если СТЧ.ОтработаноДней = 0 И СТЧ.ОтработаноЧасов = 0 Тогда
−133
Функция ПроверкаНогИВанны()
Строка = ТаблицаНоменклатуры.Найти(Справочники.Номенклатура.НайтиПоКоду("50641 "), "Номенклатура");
Если Строка = Неопределено Тогда
Возврат Ложь;
Иначе
СтрокаВанна = ТаблицаНоменклатуры.Найти(Справочники.Номенклатура.НайтиПоКоду("50624 "), "Номенклатура");
Если СтрокаВанна = Неопределено Тогда
Возврат Истина
Иначе
Возврат Ложь
КонецЕсли;
КонецЕсли;
КонецФункции
−137
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ЭтоНовый() Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Период", НачалоГода(ТекущаяДата()));
Запрос.Текст = "ВЫБРАТЬ
| Максимум(ПлатежноеПоручение.Номер) КАК Номер
|ИЗ
| Документ.ПлатежноеПоручение КАК ПлатежноеПоручение
|ГДЕ
| ПлатежноеПоручение.Дата >= &Период";
Выборка = Запрос.Выполнить().Выбрать();
НомерМакс = 0;
Пока Выборка.Следующий() Цикл
Если НомерМакс < Число(Выборка.Номер) Тогда
НомерМакс = Число(Выборка.Номер);
Если СтрДлина(НомерМакс) = 1 И НомерМакс<9 Тогда
НомерДок ="0000000000" + Строка(Число(Число(Выборка.Номер) + 1));
ИначеЕсли (СтрДлина(НомерМакс) = 2 И НомерМакс<>99) Или НомерМакс=9 Тогда
НомерДок ="000000000" + Строка(Число(Число(Выборка.Номер) + 1));
ИначеЕсли (СтрДлина(НомерМакс) = 3 И НомерМакс<>999) Или НомерМакс<>99 Тогда
НомерДок ="00000000" + Строка(Число(Число(Выборка.Номер) + 1));
ИначеЕсли (СтрДлина(НомерМакс) = 4 И НомерМакс<>9999) Или НомерМакс<>999 Тогда
НомерДок ="0000000" + Строка(Число(Число(Выборка.Номер) + 1));
ИначеЕсли (СтрДлина(НомерМакс) = 5 И НомерМакс<>99999) Или НомерМакс<>9999 Тогда
НомерДок ="000000" + Строка(Число(Число(Выборка.Номер) + 1));
ИначеЕсли (СтрДлина(НомерМакс) = 6 И НомерМакс<>999999) Или НомерМакс<>99999 Тогда
НомерДок ="00000" + Строка(Число(Число(Выборка.Номер) + 1));
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЭтотОбъект.Номер = НомерДок;
КонецЕсли;
КонецПроцедуры
Мое творение, писАл на полном серьезе. В одном из документов БП пользователь отредактировал вручную номер документа, после этого сбилась нумерации. Документы с "неправильными" номерами удалили и добавили вновь - было поздно. Типового решения проблемы не нашлось и был написан этот код.
Можно увидеть очень интересное: нахождение максимального значения в запросе и одновременный бесполезный прогон всего цикла, чтобы снова найти максимальное значение и много чего другого.
−151
Процедура ВводНаОсновании(ДокОснование)
// .....
ДатаДок=РабочаяДата();
// .....
КонецПроцедуры
Типовая торговля для Украины.
Зачем то явно указывается рабочая дата. Причём ровно один раз.
−146
Процедура ОбработкаНоменклатуры()
НомерЛистаТипы = 1;
Попытка ExcelТипы = СоздатьОбъект("Excel.Application");
ФайлДанныхТипы = ExcelТипы.Workbooks.Open(НазваниеФайла);
Исключение
КонецПопытки;
//Лист = ФайлДанныхТипы.WorkSheets(НазваниеФайла);
ЗагрузкаТипы = ФайлДанныхТипы.Worksheets(НомерЛистаТипы).UsedRange;
//КоличествоСтрокЭкселеТипы = Лист.Rows.Count;
КоличествоСтрокЭкселеТипы = ФайлДанныхТипы.Worksheets(НомерЛистаТипы).UsedRange.Rows.Count;
ExcelТипы.Sheets(НомерЛистаТипы).Select();
Спр2 = СоздатьОбъект("Справочник.Номенклатура");
СпрВидНом = СоздатьОбъект("Справочник.ВидыНоменклатуры");
СпрНДС = СоздатьОбъект("Справочник.СтавкиНДС");
СпрНП = СоздатьОбъект("Справочник.СтавкиНП");
СпрЕд = СоздатьОбъект("Справочник.ЕдиницыИзмерений");
Для СтрТипы = НачСтр+1 По КонСтр Цикл
Спр = СоздатьОбъект("Справочник.Номенклатура");
Если Спр.НайтиПоНаименованию(Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,1).Value))) = 1 Тогда
Сообщить("Номенклатура найдена");
Если ВидыЦен = 1 Тогда
Спр.Себестоимость = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,4).Value));
ИначеЕсли ВидыЦен = 2 Тогда
Спр.Цена = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,4).Value));
КонецЕсли;
Спр.Записать();
Иначе
Спр.Новый();
Спр.ИспользоватьДату('01.11.2011');
Если Спр2.НайтиПоКоду("Сй111")=1 Тогда
Спр.Родитель =Спр2.ТекущийЭлемент();
Конецесли;
Спр.Наименование = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,1).Value));
Сообщить("Создается номенклатура" + Спр.Наименование);
Спр.ТипТовара = Перечисление.ТипыТоваров.Собственный;
Если СпрВидНом.НайтиПоНаименованию("Товар")=1 Тогда
Спр.ВидНоменклатуры = СпрВидНом.ТекущийЭлемент();
КонецЕсли;
Спр.ПолнНаименование = Спр.Наименование;
Если ВидыЦен = 1 Тогда
Спр.Себестоимость = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,4).Value));
ИначеЕсли ВидыЦен = 2 Тогда
Спр.Цена = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,4).Value));
КонецЕсли;
Спр.СтранаПроисхожд = 1;
Если СпрНДС.НайтиПоКоду("3")=1 Тогда
Спр.СтавкаНДС = СпрНДС.ТекущийЭлемент();
КонецЕсли;
Если СпрНП.НайтиПоКоду("1")=1 тогда
Спр.СтавкаНП = СпрНП.ТекущийЭлемент();
КонецЕсли;
Если СпрЕд.НайтиПоНаименованию("шт")=1 Тогда
Спр.ЕдиницаИзмерения = СпрЕд.ТекущийЭлемент();
КонецЕсли;
Спр.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
В бух 7.7 нужно было загрузить определенный данные из экселя. С 7.7 не работаю - начал сочинять. В начале писал по аналогии с 8.х:
Спр.СтавкаНДС = СпрНДС.НайтиПоКоду("3") и т.д.
Потом на инфостарте и мисте подсказали как правильно сделать и посоветовали создать здесь эту запись)
−138
Для Каждого СтрПЛ Из ПутевыеЛисты Цикл
ЗаказСсылкаИзПЛ = СтрПЛ.ЗаказНаИспользованиеТС;
Если Не ЗаказСсылкаИзПЛ.Пустая() Тогда
ЗапросВыборкаЗаказовПоСсылкеИЗПЛ = Новый Запрос;
ЗапросВыборкаЗаказовПоСсылкеИЗПЛ.Текст = "ВЫБРАТЬ
| АСУ_ЗаказНаИспользованиеТС.Ссылка
|ИЗ
| Документ.АСУ_ЗаказНаИспользованиеТС КАК АСУ_ЗаказНаИспользованиеТС
|ГДЕ
| АСУ_ЗаказНаИспользованиеТС.ДатаС <= &Дата1
| И АСУ_ЗаказНаИспользованиеТС.ДатаПо >= &Дата2
| И АСУ_ЗаказНаИспользованиеТС.Ответственный = &Ответственный
| И АСУ_ЗаказНаИспользованиеТС.Номер = &Номер";
ЗапросВыборкаЗаказовПоСсылкеИЗПЛ.УстановитьПараметр("Дата1", КонецДня(Дата));
ЗапросВыборкаЗаказовПоСсылкеИЗПЛ.УстановитьПараметр("Дата2", НачалоДня(Дата));
ЗапросВыборкаЗаказовПоСсылкеИЗПЛ.УстановитьПараметр("Ответственный", Ответственный);
ЗапросВыборкаЗаказовПоСсылкеИЗПЛ.УстановитьПараметр("Номер", ЗаказСсылкаИзПЛ.Номер);
РезультатЗаказыПоСсылкеИзПЛ = ЗапросВыборкаЗаказовПоСсылкеИЗПЛ.Выполнить().Выгрузить();
Если РезультатЗаказыПоСсылкеИзПЛ.Количество() > 0 Тогда
Для Каждого СтрЗаказПоСсылкеИзПЛ Из РезультатЗаказыПоСсылкеИзПЛ Цикл
...
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Ищем заказ по номеру. А номер берем из заказа. И, конечно же, их может оказаться множество. (КонтрольУникальности = Истина, периодичность = Непериодический).
А также хитровылепленный способ убедиться, что заказ попадает в указанный период и имеет указанного ответственного.
И, конечно же, запрос надо создавать заново для каждой СтрПЛ, а вдруг он испортился...
Вот такие у нас крайне осторожные прогромисты.
−143
Функция ПолучитьМаксимальныйДокументРеализации(ТЗРеализаций)
МаксДок = ПолучитьПустоеЗначение("Документ");
ТЗРеализаций.ВыбратьСтроки();
Пока ТЗРеализаций.ПолучитьСтроку()=1 Цикл
Если МаксДок = ПолучитьПустоеЗначение("Документ") Тогда
МаксДок = ТЗРеализаций.ДокументРеализации;
ИначеЕсли МаксДок.ДатаДок < ТЗРеализаций.ДокументРеализации.ДатаДок Тогда
МаксДок = ТЗРеализаций.ДокументРеализации;
КонецЕсли;
КонецЦикла;
Возврат МаксДок;
КонецФункции
Во как надо получать последний документ из таблицы!
−135
Процедура ЗаписатьТрижды(Док)
Попытка
Док.Записать();
Исключение
Для ХХХ=1 По 1000 Цикл
УУУ = ХХХ;
КонецЦикла;
Попытка
Док.Записать();
Исключение
Для ХХХ=1 По 1000 Цикл
УУУ = ХХХ;
КонецЦикла;
Попытка
Док.Записать();
Исключение
Сообщить("И с третьей попытки не удалось записать документ "+Док);
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПопытки;
КонецПопытки;
Разбирал тут обработку, наткнулся на этот шедевр...