- 1
Если ВРЕГ(ДанныеСчета.УсловияЗаполнения)<>"ЛОЖЬ" Тогда
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−90
Если ВРЕГ(ДанныеСчета.УсловияЗаполнения)<>"ЛОЖЬ" Тогда
УПП 1.3 (1.3.75.2)
ОбщиеМодули.СчетаУчетаВДокументах
Подскажите если изменятся языковые настройки конфигурации как себя поведет данный код?
−73
Запрос=Новый Запрос;
ТекстЗапроса="ВЫБРАТЬ
| РасходнаяНакладнаяТовары.Товар КАК Товар,
| РасходнаяНакладнаяТовары.Ссылка КАК Ссылка,
| СУММА(РасходнаяНакладнаяТовары.Количество) КАК КоличествоОстаток
|ИЗ
| Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары
|ГДЕ
| РасходнаяНакладнаяТовары.Ссылка.Проведен = Ложь
| И РасходнаяНакладнаяТовары.Ссылка.ПометкаУдаления = Ложь
|";
Если ЗначениеЗаполнено(ВыбСклад) Тогда
ТекстЗапроса=ТекстЗапроса+"
| И РасходнаяНакладнаяТовары.Ссылка.Склад =&ВыбСклад ";
КонецЕсли;
Если ВыбТовар.Количество()>0 Тогда
ТекстЗапроса=ТекстЗапроса+"
| И РасходнаяНакладнаяТовары.Товар В ИЕРАРХИИ(&ВыбТовар) ";
КонецЕсли;
ТекстЗапроса=ТекстЗапроса+"
|СГРУППИРОВАТЬ ПО
| Товар,
| Ссылка
|ИТОГИ
| СУММА(КоличествоОстаток)
|ПО
| ОБЩИЕ,
| Товар,
| Ссылка
|";
Запрос.Текст=ТекстЗапроса;
Запрос.УстановитьПараметр("ВыбСклад",ВыбСклад);
Запрос.УстановитьПараметр("ВыбТовар",ВыбТовар);
РезультатЗапроса=Запрос.Выполнить();
ТабДокумент = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("ОстаткиТоваров");
ОбластьМакета = Макет.ПолучитьОбласть("Шапа");
построитель запроса не существует... шапа... ШАПА, КАРЛ!!!
−11
з.Текст =
"ВЫБРАТЬ
| СобственныеКонтрагенты.Контрагент
|ПОМЕСТИТЬ втСобственныеКонтрагенты
|ИЗ
| РегистрСведений.СобственныеКонтрагенты КАК СобственныеКонтрагенты
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
| РеализацияТоваровУслугТовары.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| РеализацияТоваровУслугТовары.Цена КАК Цена,
| РеализацияТоваровУслугТовары.Ссылка.Дата КАК Дата
|ПОМЕСТИТЬ втПоступление_Доки
|ИЗ
| Документ.ПоступлениеТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
| РеализацияТоваровУслугТовары.Ссылка.Проведен
| И РеализацияТоваровУслугТовары.Ссылка.Дата <= КОНЕЦПЕРИОДА(&ДатаДок, ДЕНЬ)
| И РеализацияТоваровУслугТовары.Ссылка.Организация = &ОрганизацияПродавец
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втПоступление_Доки.Номенклатура КАК Номенклатура,
| втПоступление_Доки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| МАКСИМУМ(втПоступление_Доки.Дата) КАК Дата
|ПОМЕСТИТЬ втПоступление_Макс
|ИЗ
| втПоступление_Доки КАК втПоступление_Доки
|
|СГРУППИРОВАТЬ ПО
| втПоступление_Доки.Номенклатура,
| втПоступление_Доки.ХарактеристикаНоменклатуры
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втПоступление_Макс.Номенклатура,
| втПоступление_Макс.ХарактеристикаНоменклатуры,
| МИНИМУМ(втПоступление_Доки.Цена) КАК Цена
|ПОМЕСТИТЬ втПоступлениеЦена
|ИЗ
| втПоступление_Макс КАК втПоступление_Макс
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ втПоступление_Доки КАК втПоступление_Доки
| ПО втПоступление_Макс.Номенклатура = втПоступление_Доки.Номенклатура
| И втПоступление_Макс.ХарактеристикаНоменклатуры = втПоступление_Доки.ХарактеристикаНоменклатуры
| И втПоступление_Макс.Дата = втПоступление_Доки.Дата
|
|СГРУППИРОВАТЬ ПО
| втПоступление_Макс.Номенклатура,
| втПоступление_Макс.ХарактеристикаНоменклатуры
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
| РеализацияТоваровУслугТовары.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| РеализацияТоваровУслугТовары.Цена КАК Цена,
| РеализацияТоваровУслугТовары.Ссылка.Дата КАК Дата
|ПОМЕСТИТЬ втРеализацияПоставщика_Доки
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
| РеализацияТоваровУслугТовары.Ссылка.Проведен
| И РеализацияТоваровУслугТовары.Ссылка.Дата <= КОНЕЦПЕРИОДА(&ДатаДок, ДЕНЬ)
| И РеализацияТоваровУслугТовары.Ссылка.Организация = &ОрганизацияПродавец
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втРеализацияПоставщика_Доки.Номенклатура КАК Номенклатура,
| втРеализацияПоставщика_Доки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| МАКСИМУМ(втРеализацияПоставщика_Доки.Дата) КАК Дата
|ПОМЕСТИТЬ втРеализацияПоставщика_Макс
|ИЗ
| втРеализацияПоставщика_Доки КАК втРеализацияПоставщика_Доки
|
|СГРУППИРОВАТЬ ПО
| втРеализацияПоставщика_Доки.Номенклатура,
| втРеализацияПоставщика_Доки.ХарактеристикаНоменклатуры
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втРеализацияПоставщика_Макс.Номенклатура,
| втРеализацияПоставщика_Макс.ХарактеристикаНоменклатуры,
| МИНИМУМ(втРеализацияПоставщика_Доки.Цена) КАК Цена
|ПОМЕСТИТЬ втРеализацияПоставщикаЦена
|ИЗ
| втРеализацияПоставщика_Макс КАК втРеализацияПоставщика_Макс
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ втРеализацияПоставщика_Доки КАК втРеализацияПоставщика_Доки
| ПО втРеализацияПоставщика_Макс.Номенклатура = втРеализацияПоставщика_Доки.Номенклатура
| И втРеализацияПоставщика_Макс.ХарактеристикаНоменклатуры = втРеализацияПоставщика_Доки.ХарактеристикаНоменклатуры
| И втРеализацияПоставщика_Макс.Дата = втРеализацияПоставщика_Доки.Дата
|
|СГРУППИРОВАТЬ ПО
| втРеализацияПоставщика_Макс.Номенклатура,
| втРеализацияПоставщика_Макс.ХарактеристикаНоменклатуры";
про регистр накопления закупки мы походу не слышали... менеджер временных таблиц висит как глобальная переменная модуля формы, поиск организаций по коду в справочнике и т д
−53
Законы де Моргана в 1С
Казалось бы, при чем Булева Алгебра к 1С?
Предположим, есть задача - отобрать действующие договора на некую дату проверки &Дата.
При этом у договора есть дата начала и дата окончания, если дата окончания не задана, то договор действует до конца времен.
Как решается задача? В лоб так:
ВЫБРАТЬ Ссылка ИЗ Справочник.Договоры ГДЕ ДатаНачала <= &Дата И (ДатаОкончания >= &Дата ИЛИ ДатаОкончания = ДатаВремя(1,1,1))
Но операция ИЛИ вызывает некоторые проблемы по скорости, поэтому есть желание обойтись без нее. Как это сделать? Тут приходит на помощь законы Де Моргана.
Перепишем так:
ВЫБРАТЬ Ссылка ИЗ Справочник.Договоры ГДЕ ДатаНачала <= &Дата И НЕ (ДатаОкончания < &Дата И ДатаОкончания <> ДатаВремя(1,1,1))
И всё работает.
Проверяем выделенную зеленым часть условия:
1. Если дата окончания договора меньше даты проверки, то получим НЕ (ИСТИНА И ИСТИНА) = ЛОЖЬ
2. Если дата окончания договора больше или равно даты проверки, то получим НЕ (ЛОЖЬ И ИСТИНА) = ИСТИНА
3. Если дата окончания договора не заполнена, то получим НЕ (ЛОЖЬ) = истина.
Торжество формальной логики! Причем некоторые товарщи пытаются оптимизировать этот запрос через запросы с объединением, а ларчик открывается просто!
Немножко обо мне:
Действующий пикапер. Честно соблазнил 174 женщин и купил 42 феи (на август 2015)
Использует функциональную 5 бальную шкалу оценок женщин.
Известный 1сник с кличкой Гений 1С. Получает от 120 тыщ.
Изобрел фонд «Секс за ваши» - занимаюсь сексом с проститутками за счет пожертвований фанатов.
Изобрел Религию Дембеля.
−16
Небольшой гуру-тест по сопровождению типовых конфигураций.
Есть запрос, который получает себестоимость и выручку документа возврата товара от клиента (процедура ТекстЗапросаТаблицаВыручкаИСебестоимостьПродаж в модуле менеджера документа):
ТекстЗапроса = "
....
| - ВидыЗапасов.СуммаСНДСУпр КАК СуммаВыручки,
....
| ВЫБОР КОГДА ВидыЗапасов.ТипЗапасов = ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.КомиссионныйТовар)
| ИЛИ ВидыЗапасов.ДокументРеализации = НЕОПРЕДЕЛЕНО
| ТОГДА
| - ВидыЗапасов.СуммаСНДСУпр
| ИНАЧЕ
| 0
| КОНЕЦ КАК Себестоимость,
Для удобства сопровождения текст запроса меняется далее в коде, а не в самом запросе, в конструкции вида:
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "... что искать ...",
".. на что заменять...");
Нужно заменить использование ВидыЗапасов.СуммаСНДСУпр так, чтобы СуммаВыручки не изменилась, а Себестоимость изменилась, допустим на число 666 (для гуру-теста).
Это частая задача для УТ11, т.к. там не реализована возможность конкретного указания себестоимости, если возврат осущесвлятся без документа продажи (например, за прошлые периоды, до ввода начальных остатков), в этих случаях УТ11 принимает себестоимость возврата, равную цене продажи, а это не совсем правильно.
В этом случае есть один хитрый трюк, чтобы без использования регулярных выражений добиться замены себестоимости на заданное число. Вопрос - как? Думаем.
Немножко обо мне:
Действующий пикапер. Честно соблазнил 174 женщин и купил 42 феи (на август 2015)
Использует функциональную 5 бальную шкалу оценок женщин.
Известный 1сник с кличкой Гений 1С. Получает от 120 тыщ.
Изобрел фонд «Секс за ваши» - занимаюсь сексом с проститутками за счет пожертвований фанатов.
Изобрел Религию Дембеля.
−97
НачисляетсяВЦеломЗаМесяц = СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ФиксированнойСуммой ИЛИ БазовыйПериодПрошлыйМесяц;
Типовая конфигурация ЗКБУ, увидев такой код немного смутило или лыжи не едут или ...
−98
К стандартным добавили реквизиты
ИНН2
КПП2
записали туда тоже самое что и ИНН и КПП
−97
Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
| РАЗНОСТЬДАТ(&Дата1, &Дата2, МЕСЯЦ) КАК РезультатРазность";
Запрос.УстановитьПараметр("Дата1",СтрТЧ.ДатаНачала);
Запрос.УстановитьПараметр("Дата2",СтрТЧ.ДатаОкончания);
Результат = Запрос.Выполнить().Выгрузить();
КолвоМесяцев = Результат[0].РезультатРазность+1;
Классика жанра. Ходим на сервер, чтобы посчитать разность дат. Ну да, сервер же у нас целыми днями воздух гоняет, заняться ему больше нечем. Давайте 2+2 складывать начнем через сервак.
Причем, б*ть, через сервер приложений, который в свою очередь погонит запрос на сервер MSSQL.
−103
Таб = Документ.ПолучитьОбъект().РаботникиОрганизаций;
Таб.Очистить();
// блабла...
Таб = Документ.ПолучитьОбъект().РаботникиОрганизаций;
Раб = Таб.Добавить();
// Далее идет заполнение строки ТЧ...
Док = Документ.ПолучитьОбъект();
Док.Записать(РежимЗаписиДокумента.Проведение);
"А чо у миня ничо ни записываецца????!!!!1111"
"Ну у миня документ через COM-соединение... наверное изза этово..."
Ну или, проще говоря, стандартная баба с красным дипломом программиста...
−98
ЭтоДокумент = Метаданные.Документы.Содержит(ЭтотОбъект.Метаданные())
Примечательно, что вызывается из модуля формы документа, больше нигде процедура с ЭТИМ не используется.
В документе проверяем, что это документ :/