Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
26 ноя 2024, 05:41

Розница,не могу придумать алгоритм Новичек), треб помощь в понимании логики проц

Автор trad, 22 ноя 2010, 19:07

0 Пользователей и 6 гостей просматривают эту тему.

trad

теперь, можно глядя на кофиг. прикинуть и посоветовать текст
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
для продаж))?

progmikon

Цитата: trad от 23 ноя 2010, 22:55
теперь, можно глядя на кофиг. прикинуть и посоветовать текст
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
для продаж))?
А зачем вам вообще нужно двигать этот документ? Ведь по текущей логике мы остатки и так получим. Исходя из вашей формулы. По идее мы должны написать заполнение ТЧ  документа Продажи и все.

trad

дело в том что отчетность именно по продажам нужна для анализа , остатки меня ни в какой мере не интересуют, я конечно понимаю что сложно перескакивать с одного на другое теряется нить)))
я свожу задачу к описанной в учебниках)))) да  вот и нужно записать заполнение0))))))))))))))))))))))))))))))))))))
ну туплю я)

trad

все что мне на данный момент нужно это и есть как заполнить документ продажи с датами начало периода и окончанием периода

progmikon


trad


progmikon

Я прикинул. Контрольный пример сошелся :).

Я приведу весь код модуля формы документа "ПродажиТовара". На форме я добавил кнопку и назначил ей команду.


&НаКлиенте
Процедура Заполнить(Команда)
ПолучитьРеализацию();
КонецПроцедуры
&НаСервере
Процедура ПолучитьРеализацию()
//получим последний документ остатков
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 2
| Остаток.Ссылка,
| Остаток.Дата КАК Дата
|ИЗ
| Документ.Остаток КАК Остаток
|ГДЕ
| Остаток.Дата < &Дата
|
|УПОРЯДОЧИТЬ ПО
| Дата УБЫВ";
Запрос.УстановитьПараметр("Дата", Объект.Дата);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
ДатаПервойИнвентаризации = '00010101000000';
ДатаВторойИнвентаризации = '00010101000000';
СсылкаНаВторуюИнвентаризацию = Документы.Остаток.ПустаяСсылка();
СсылкаНаПервуюИнвентаризацию = Документы.Остаток.ПустаяСсылка();
Если ВыборкаДетальныеЗаписи.Количество() Тогда
ВыборкаДетальныеЗаписи.Следующий();
ДатаВторойИнвентаризации = ВыборкаДетальныеЗаписи.Дата;
СсылкаНаВторуюИнвентаризацию = ВыборкаДетальныеЗаписи.Ссылка;
ВыборкаДетальныеЗаписи.Следующий();
ДатаПервойИнвентаризации = ВыборкаДетальныеЗаписи.Дата;
СсылкаНаПервуюИнвентаризацию = ВыборкаДетальныеЗаписи.Ссылка;
КонецЕсли;
//теперь получаем приход-расход и собственно, итоговую таблицу
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПриходнаяНакладнаяТовары.Товар,
| СУММА(ПриходнаяНакладнаяТовары.Количество) КАК Количество
|ПОМЕСТИТЬ Приход
|ИЗ
| Документ.ПриходнаяНакладная.Товары КАК ПриходнаяНакладнаяТовары
|ГДЕ
| ПриходнаяНакладнаяТовары.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2
|
|СГРУППИРОВАТЬ ПО
| ПриходнаяНакладнаяТовары.Товар
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВозвратТовараПоставщикуТовары.Товар,
| СУММА(ВозвратТовараПоставщикуТовары.Количество) КАК Количество
|ПОМЕСТИТЬ Возврат
|ИЗ
| Документ.ВозвратТовараПоставщику.Товары КАК ВозвратТовараПоставщикуТовары
|ГДЕ
| ВозвратТовараПоставщикуТовары.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2
|
|СГРУППИРОВАТЬ ПО
| ВозвратТовараПоставщикуТовары.Товар
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| СписаниеТовараТовары.Товар,
| СУММА(СписаниеТовараТовары.Количество) КАК Количество
|ПОМЕСТИТЬ Списание
|ИЗ
| Документ.СписаниеТовара.Товары КАК СписаниеТовараТовары
|ГДЕ
| СписаниеТовараТовары.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2
|
|СГРУППИРОВАТЬ ПО
| СписаниеТовараТовары.Товар
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ОстатокТовары.Товар,
| СУММА(ОстатокТовары.Количество) КАК Количество
|ПОМЕСТИТЬ ВтораяИнвентаризация
|ИЗ
| Документ.Остаток.Товары КАК ОстатокТовары
|ГДЕ
| ОстатокТовары.Ссылка.Ссылка = &ВтораяИнвентаризация
|
|СГРУППИРОВАТЬ ПО
| ОстатокТовары.Товар
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ОстатокТовары.Товар,
| СУММА(ОстатокТовары.Количество) КАК Количество
|ПОМЕСТИТЬ ПерваяИнвентаризация
|ИЗ
| Документ.Остаток.Товары КАК ОстатокТовары
|ГДЕ
| ОстатокТовары.Ссылка.Ссылка = &ПерваяИнвентаризация
|
|СГРУППИРОВАТЬ ПО
| ОстатокТовары.Товар
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЕСТЬNULL(ОстатокТовары.Товар, ЕСТЬNULL(Приход.Товар, ЕСТЬNULL(Возврат.Товар, ЕСТЬNULL(Списание.Товар, ПерваяИнвентаризация.Товар)))) КАК Товар,
| ЕСТЬNULL(ПерваяИнвентаризация.Количество, 0) + ЕСТЬNULL(Приход.Количество, 0) - ЕСТЬNULL(Возврат.Количество, 0) - ЕСТЬNULL(Списание.Количество, 0) - ЕСТЬNULL(ОстатокТовары.Количество, 0) КАК Продажи
|ИЗ
| ВтораяИнвентаризация КАК ОстатокТовары
| ПОЛНОЕ СОЕДИНЕНИЕ Приход КАК Приход
| ПО ОстатокТовары.Товар = Приход.Товар
| ПОЛНОЕ СОЕДИНЕНИЕ Возврат КАК Возврат
| ПО ОстатокТовары.Товар = Возврат.Товар
| ПОЛНОЕ СОЕДИНЕНИЕ Списание КАК Списание
| ПО ОстатокТовары.Товар = Списание.Товар
| ПОЛНОЕ СОЕДИНЕНИЕ ПерваяИнвентаризация КАК ПерваяИнвентаризация
| ПО ОстатокТовары.Товар = ПерваяИнвентаризация.Товар";

Запрос.УстановитьПараметр("Дата1", ДатаПервойИнвентаризации);
Запрос.УстановитьПараметр("Дата2", ДатаВторойИнвентаризации);
Запрос.УстановитьПараметр("ПерваяИнвентаризация", СсылкаНаПервуюИнвентаризацию);
Запрос.УстановитьПараметр("ВтораяИнвентаризация", СсылкаНаВторуюИнвентаризацию);

Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Объект.Товары.Очистить();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
НС = Объект.Товары.Добавить();
НС.Товар = ВыборкаДетальныеЗаписи.Товар;
НС.Количество = ВыборкаДетальныеЗаписи.Продажи;
КонецЦикла;
КонецПроцедуры



Я специально использовал виртуальные таблицы. Надеюсь так будет понятнее. Но в любом случае, если будут вопросы - обращайтесь. Здесь есть ряд допущений, но они не препятствуют пониманию сути. Кроме того, я получал данные по Товару и Количеству. Без цен, сумм. Если вы найдете время и разберетесь с этим, получить другие данные не составит труда.

П.С. На сегодня моя скромная миссия выполнена и я иду спать. Если будут вопросы ко мне - пообщаемся завтра :). Удачи



progmikon

Да. этот пример позволяет получить продажи без использования регистров. Безусловно, ввод регистров облегчит получение продаж.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск