Подскажите, кто знает... Как работать с Макс(знач1,...,значN)

1. sanderssanders 15.07.08 14:25 Сейчас в теме
Финансисты с утра над душой стоят. Подскажите, пожалуйста, как можно сделать: запрос по приходу денежных средств СтрокиВыпискиПриход и ПКО. Формируется таблица:

№ / ПКО или СтрокаВыпискиПриход / Сумма прихода ДС / Товар / сумма по счету

1 / ПКО № 1 / 5700 / принтер / 5000
2 / ПКО № 1 / 5700 / бумага / 500
3 / ПКО № 1 / 5700 / крыса / 200

1 / СтрокаВыпискиПриход № 3 / 2000 / картридж / 3500
2 / СтрокаВыпискиПриход № 3 / 2000 / монитор / 9000


Если по счету оплата 100% (ПКО № 1), то нужно, чтобы сумма по счету была равна сумме прихода ДС, а не так, как получилось - общая сумма прихода ставится напротив каждого товара. А если оплата не 100% (СтрокаВыпискиПриход № 3), то нужно, чтобы сумма прихода ДС делилась на количество товара по этому приходнику, то есть на наше значение "№" и пропорционально распределялась напротив наших товаров.

А у меня получается так, что когда я делю общую сумму по счету на Макс(н1, н2,... нN) - у меня пишет, что знач1 и т.д. переменая не определена. "Н" - это первый столбец "№", т.е. номер товара в документе прихода. Если делю просто на Макс(н), то он мне делит так: где первая номенклатура - на один; где вторая - на два; где третья - на три и т.д., а не на максимально число № товара.

А вот так должно быть должно быть:

№ / ПКО или СтрокаВыпискиПриход / сумма прихода ДС / товар / сумма по счету

1 / ПКО № 1 / 5000 / принтер / 5000
2 / ПКО № 1 / 500 / бумага / 500
3 / ПКО № 1 / 200 / крыса / 200

1 / СтрокаВыпискиПриход № 3 / 1000 / картридж / 3500
2 / СтрокаВыпискиПриход № 3 / 1000 / монитор / 9000

то есть в СтрокеВпискиПриход общая сумма прихода была 2000, мы поделили ее на кол-во наших товаров и поделили пропорционально между ними.


подскажите, как здесь можно сделать?


Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
14. sanderssanders 16.07.08 15:40 Сейчас в теме
Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|Док = Документ.ПКО.ТекущийДокумент, Документ.СтрокаВыпискиПриход.ТекущийДокумент;
|ДатаДок = Документ.ПКО.ДатаДок, Документ.СтрокаВыпискиПриход.ДатаДок;
|сумма = Документ.ПКО.сумма, Документ.СтрокаВыпискиПриход.сумма;
|НазваниеДокумента = Документ.ПКО.ТекущийДокумент, Документ.СтрокаВыпискиПриход.ТекущийДокумент;
|ДокОснование = Документ.ПКО.ДокОснование.ТекущийДокумент, Документ.СтрокаВыпискиПриход.ДокОснование.ТекущийДокумент;
|Автор = Документ.СтрокаВыпискиПриход.ДокОснование.Автор, Документ.ПКО.ДокОснование.Автор;
|НомерСтроки = Документ.СтрокаВыпискиПриход.ДокОснование.НомерСтроки, Документ.ПКО.ДокОснование.НомерСтроки;
|Группировка ДокОснование;
|Группировка Автор;
|Группировка Док;
|Условие(Автор в ВыбАвтор);
|"//}}ЗАПРОС;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("копия");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Шапка");
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
Пока (Запрос.Группировка(1) = 1) Цикл
н = 0;
Док1=Запрос.ДокОснование;
Док1.ВыбратьСтроки();
Пока Док1.ПолучитьСтроку()=1 цикл
товар=Док1.Номенклатура;
количество = Док1.Количество;
цена = Док1.Цена;
комментарий = Док1.Комментарий;
контрагент = Док1.Контрагент;
автор = Док1.Автор;
итого = цена * количество;
НЗ = Док1.НомерЗаказа;
ВыбПользователи = Док1.ВыбПользователи;

ДатаД = Запрос.ДатаДок;
СуммаД = Запрос.сумма;
НазваниеД = Запрос.НазваниеДокумента;
Н=н+1;
Если ?(ПустоеЗначение(Запрос.ДокОСнование)=0,Запрос.ДокОснование.СуммаВзаиморасчетов,"") = суммаД тогда
СуммаД = Итого/1;
иначе
Сообщить(?(ПустоеЗначение(Запрос.ДокОСнование)=0,Запрос.ДокОснование.СуммаВзаиморасчетов,""));
СуммаД = Запрос.Сумма;
// МаксН = Макс(н);
КонецЕсли;
Таб.ВывестиСекцию("ДокОснование");
КонецЦикла;
КонецЦикла;
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры
2. sanderssanders 15.07.08 14:50 Сейчас в теме
или если проще, то как можно выдернуть из таблицы общее количество товара по каждому приходнику?
3. Vitek 15.07.08 16:10 Сейчас в теме
4. sanderssanders 15.07.08 16:13 Сейчас в теме
5. Vitek 15.07.08 16:16 Сейчас в теме
можно свернуть по приходнику, суммируя количество.
6. sanderssanders 15.07.08 16:16 Сейчас в теме
на счет оплаты 100% я уже решила вопрос, а вот на счет не стопроцентной оплаты - ступор. Он делит на ту цифру, под которой идут товар. Первый - на единицу, второй по счету - на двойку, третий - на тройку и т.д. А мне бы деление на максимальное число этих товаров.
7. sanderssanders 15.07.08 16:17 Сейчас в теме
Lomok 15.07.2008 16:16:05
можно свернуть по приходнику, суммируя количество.

Как это?
8. Vitek 15.07.08 16:22 Сейчас в теме
колонки какие у таблицы, и что ты хочешь получить в итоге.

З.Ы. метод Свернуть()
9. sanderssanders 15.07.08 16:30 Сейчас в теме
мне нужно, чтобы в колонке "Сумма прихода ДС" ставилась такая сумма напротив каждого товара:

сумма по счету/количество товара = ............ руб. - вот она и нужна
10. PeRom 51 15.07.08 16:58 Сейчас в теме
Выгружаешь таблицу в другую(копию).
Сворачиваешь копию по счёту тзКопия.Свернуть("СЧЕТ","КОЛ-ВО ")
При переборе строк таблицы ищешь в копии строку со СЧЕТом и делишь сумму на КОЛ-ВО.

Если в исходной таблице нет колонки с количеством и подразумевается одна строка - одна единица, так введи её (ДобавитьСтроку("КОЛ-ВО")) и заполни её единичками Заполнить(1,,,"КОЛ-ВО")
11. sanderssanders 16.07.08 08:53 Сейчас в теме
12. PeRom 51 16.07.08 10:28 Сейчас в теме
Что именно не получается? Покажи код...
13. vovan519 276 16.07.08 11:40 Сейчас в теме
Не смешивай товар и оплаты за него.
В общем случае подобная задача не имеет решения.
Какой бы не был алгоритм распределения денег между товарами, без проблем можно подобрать ситуацию при которой этот механизм не будет работать.
1. Нет ДокОснование у Заявки(Счета) (не по чему распределять)
2. Предоплата (без счета - нет товара для распределения)
3. Переплата (нет товара для распределения на сумму переплаты)
4. Несколько оплатат по одному счету при пропорциональном распределении дадут погрешность округления.
5. Возвраты товаров. (Сумма возврата ведь должна уменьшить долг по оплате за какой-нибудь Счет)
6. Взаимозачеты.
7. Оплата нескольких счетов одной суммой.
8. Оплата частями Счет1 - 100р Счет2 - 100р ПКО1 - 70р ПКО2 - 80р ПКО3 - 50р
Можно конечно и продолжить этот список ... Но стоит ли?
15. vovan519 276 16.07.08 15:59 Сейчас в теме
Не хочу никого обидеть ... и не обижу.
16. PeRom 51 16.07.08 16:15 Сейчас в теме
Если я правильно понял, вы хотите по Иначе разделить Запрос.Сумма по строкам Док1.
Но вот как разделить я не совсем понял.
Если делить пропорционально стоимости товаров - один алгоритм (нужно предварительно посчитать в цикле или в запросе общую сумму по Док1, а если есть колонка с суммой - Итог("Сумма")),
а если делить пропорционально количеству товаров - тогда так и делать Запрос.Сумма/количество.

ПС: И конечно стоит обратить внимание на предупреждение vovan519, концы потом сложно найти будет.
17. Vitek 16.07.08 16:17 Сейчас в теме
вроде как речь шла о таблице значений?

Имхо автору нужно покуривать ЖКК на ночь...
18. sanderssanders 17.07.08 07:55 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот