NCC: Анализ несоответствия цен в табличной части документа с ценами в справочнике

Опубликовал Павел Кучеренко (NCCSOFT) в раздел Обработки - Ценообразование, прайсы

Анализируется два типа документов: "Реализация", "Поступление ТМЦ". Отчет находит несоответствие цен в документе с ценой (на дату документа) в справочнике (тип цены выбранный в документе или выбранный как основной у контрагента текущего документа) - то этот документ и позиция попадают в результат отчета. Результаты отчета можно сгруппировать: по контрагенту, по фирме, по дате.

 

Скачать файлы

Наименование Файл Версия Размер
СравнительныйАнализЦен-2010.ert
.ert 202,00Kb
19.11.10
74
.ert 202,00Kb 74 Скачать

См. также

Комментарии
1. Ёпрст (Ёпрст) 1018 03.11.09 08:28 Сейчас в теме
Да уж..
За создание объектов в цикле, за приведение строки к строке и последующее её сравнение нужно ставить минус..
За не знание метода УстановитьФильтр тоже..
2. Ёпрст (Ёпрст) 1018 03.11.09 08:31 Сейчас в теме
>>> ПечЦенаДок = Док.Цена / 1; А это что?
3. Евгений Мартыненков (JohnyDeath) 290 03.11.09 09:40 Сейчас в теме
да, такое очень быстро и красиво пишется прямым запросом
4. Павел Кучеренко (NCCSOFT) 100 03.11.09 10:26 Сейчас в теме
Прямые запросы писал и для MS SQL и через LiteSQL (в режиме DBF), например процедура для ускорения "Подбор" в Номенклатуре.
//***************************************************************
Процедура ЗаполнитьКЭШ()

ЕСЛИ глДБФ=0 ТОГДА //Режим SQL

//SQL
Запрос = СоздатьОбъект("ODBCRecordset");
ТекстЗапроса = "
|SELECT ОстаткиТМЦОстатки.Номенклатура [Номенклатура $Справочник.Номенклатура]
| , ОстаткиТМЦОстатки.КоличествоОстаток
| , РезервыТМЦОстатки.КоличествоОстаток РезервыТМЦОстаткиКоличествоОстаток
| , ОстаткиТМЦОстатки1.КоличествоОстаток ОстаткиТМЦОстатки1КоличествоОстаток
|FROM $РегистрОстатки.ОстаткиТМЦ(,,
| (Склад = :ВыбСклад),
| (Склад, Номенклатура),) AS ОстаткиТМЦОстатки
| FULL OUTER JOIN $РегистрОстатки.РезервыТМЦ(,,
| (Склад = :ВыбСклад),
| (Склад, Номенклатура),) AS РезервыТМЦОстатки ON РезервыТМЦОстатки.Номенклатура = ОстаткиТМЦОстатки.Номенклатура
| FULL OUTER JOIN $РегистрОстатки.ОстаткиТМЦ(,,
| (Склад = :ВыбСкладВПути),
| (Склад, Номенклатура),) AS ОстаткиТМЦОстатки1 ON ОстаткиТМЦОстатки1.Номенклатура = ОстаткиТМЦОстатки.Номенклатура";
Запрос.УстановитьТекстовыйПараметр("ВыбСклад", Складик);
Запрос.УстановитьТекстовыйПараметр("ВыбСкладВПути", Константа.СкладВПути);
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
//SQL

ИНАЧЕ //Режим DBF

//DBF
Попытка
База = СоздатьОбъект("SQLiteBase");
Исключение
ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
База = СоздатьОбъект("SQLiteBase");
КонецПопытки;

База = СоздатьОбъект("SQLiteBase");
База.Открыть(":memory:");
Запрос = База.НовыйЗапрос();
Запрос.ВыполнитьЗапрос("PRAGMA journal_mode = OFF");
Запрос.ВыполнитьЗапрос("CREATE VIRTUAL TABLE ОстаткиИтоги USING DBENG(РегистрИтоги.ОстаткиТМЦ)");
Запрос.ВыполнитьЗапрос("CREATE VIRTUAL TABLE РезервыИтоги USING DBENG(РегистрИтоги.РезервыТМЦ)");
Запрос.Подставлять("ДатаТА", НачМесяца( ПолучитьДатуТА() ));
Запрос.Подготовить("
|SELECT
|Рез.Номенклатура [Номенклатура :Справочник.Номенклатура],
|SUM(Рез.Остаток),
|SUM(Рез.Резерв),
|SUM(Рез.ВПути)
|FROM (
|SELECT
|ОстаткиИтоги.Номенклатура Номенклатура,
|ОстаткиИтоги.Количество Остаток,
|0 Резерв,
|0 ВПути
|FROM ОстаткиИтоги
|WHERE (ОстаткиИтоги.Period = :ДатаТА) AND (ОстаткиИтоги.Склад = @ВыбСклад)
|
|UNION ALL
|
|SELECT
|ОстаткиИтоги.Номенклатура Номенклатура,
|0 Остаток,
|0 Резерв,
|ОстаткиИтоги.Количество ВПути
|FROM ОстаткиИтоги
|WHERE (ОстаткиИтоги.Period = :ДатаТА) AND (ОстаткиИтоги.Склад = @ВыбСкладВПути)
|
|UNION ALL
|
|SELECT
|РезервыИтоги.Номенклатура Номенклатура,
|0 Остаток,
|РезервыИтоги.Количество Резерв,
|0 ВПути
|FROM РезервыИтоги
|WHERE (РезервыИтоги.Period = :ДатаТА) AND (РезервыИтоги.Склад = @ВыбСклад)
|
|) Рез
|GROUP BY Рез.Номенклатура
|");
Запрос.УстановитьПараметр("@ВыбСклад", Складик);
Запрос.УстановитьПараметр("@ВыбСкладВПути", Константа.СкладВПути);
ТЗ = Запрос.Выполнить();
//DBF

КОНЕЦЕСЛИ;
ОстаткиТоваров.Загрузить(ТЗ);
КонецПроцедуры

Ёпрст по поводу чистоты кода :-) Именно эту обработку писали мои два студента-практиканта, а я им выдал рыбу самого отчета - поэтому твои замечания правильные и им как студентам 3-му курсу можно поставить "4-", поскольку делали первые шаги, но никак не мне :-)
5. Алексей Иванов (Lexus) 03.11.09 11:31 Сейчас в теме
(4)
Ёпрст по поводу чистоты кода smile:-) Именно эту обработку писали мои два студента-практиканта, а я им выдал рыбу самого отчета - поэтому твои замечания правильные и им как студентам 3-му курсу можно поставить "4-", поскольку делали первые шаги, но никак не мне smile:-)

это не повод не указать ученикам на ошибки и не повод добиться от них их исправления!
6. Ёпрст (Ёпрст) 1018 03.11.09 11:49 Сейчас в теме
(4) Моветон кидать залипухи ...
Кому это всё надо ?
JohnyDeath; venger; +2 Ответить
7. Ёпрст (Ёпрст) 1018 03.11.09 11:50 Сейчас в теме
+6 причем еще и не свои.. а каких-то там студентов..
8. Павел Кучеренко (NCCSOFT) 100 03.11.09 12:36 Сейчас в теме
Основная часть обработки написана мною!!! Про студентов, это по поводу корявого кода.... Кароче, на этом сайте одни программеры сидят, которым делать нефиг как находить ошибки в чужом коде. Я считаю что обработку оценивать нужно с точки зрения конечного пользователя!! Тем более что она применяется не часто и не требует оптимального кода исполнения. Вы лучше о другом задумайтесь, господа программисты 1С-ники. Вообще, если честно мне этот 1С за 10 лет программирования в нем изрядно надоел, и особенно потому что он интерпретатор.
9. Альтаир (Altair777) 633 04.11.09 12:38 Сейчас в теме
(8) ага... плохое написали студенты, а хорошее их преподователь :)

По мому скромному мнению, дело не в том, как часто применяется обработка и критично ли время ее работы, а в самом стиле программирования.
И не надо так относиться к критике. Тем более, от самого Ёпрста! :D
10. Павел Кучеренко (NCCSOFT) 100 04.11.09 12:43 Сейчас в теме
ладно, согласен со всеми :-)
11. Павел Кучеренко (NCCSOFT) 100 19.11.10 09:34 Сейчас в теме
Сделал новую версию!!! Добавил группировки: по контрагентам, по фирмам, по дате. И выбор типа цены, которая сравнивается с содержимым "Реализация / Поступление ТМЦ" - из документа или из справочника контрагента (его основой тип цен)
12. Марина Смирнова (vasamase) 22.09.11 12:09 Сейчас в теме
Однажды надо было проверить менеджера на правильность цен (отгружал по заниженным, разницу получал налом), так эта обработка помогла оперативно посчитать его долг фирме. Спасибо, полезная обработка.
13. Павел Кучеренко (NCCSOFT) 100 22.09.11 13:43 Сейчас в теме
(12) Спасибо, Vasamase! Рад, что моя обработка оказалась вам полезной, для такой неожиданной задачи :-)))