Процедура Сформировать()
Перем НомСтр;
Перем Сумма;
Дата1=Дата(2001,01,01);
Граница1 =ПолучитьДокументТА();
Рег=СоздатьОбъект("Регистр.ОстаткиТоваров");
Рег.ВременныйРасчет();
РассчитатьРегистрыПо (Граница1);
СпрНом= СоздатьОбъект ("Справочник.Номенклатура");
// ТабРасх= СоздатьОбъект ("ТаблицаЗначений");
ТабРасх.НоваяКолонка("Товар",,,,"Товар",15);
ТабРасх.НоваяКолонка("КолВо",,,,"КолВо",15);
ТабРасх.НоваяКолонка("Цена",,,,"Цена",15);
ТабРасх.НоваяКолонка("Документ",,,,"Документ",15);
ТабРасх.НоваяКолонка("ЦенаБезСк",,,,"ЦенаБезСк",15);
СпЗнач= СоздатьОбъект ("СписокЗначений");
//Продажи в учетный период
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с Дата3 по Дата4;
|Товар = Документ.РасходнаяНакладная.Товар, Документ.ЗаказНаряд.Товар, Документ.ЗаказНаРемонт.Товар;
|КолВо = Документ.РасходнаяНакладная.Количество, Документ.ЗаказНаряд.Количество, Документ.ЗаказНаРемонт.Количество;
|ЦенаПоз = Документ.РасходнаяНакладная.Цена, Документ.ЗаказНаряд.Цена, Документ.ЗаказНаРемонт.Цена;
|ЦенаБезСкидки = Документ.ЗаказНаряд.ИсходнаяЦена, Документ.РасходнаяНакладная.ЦенаБезСкидки;
|Дата = Документ.РасходнаяНакладная.ДатаДок, Документ.ЗаказНаряд.ДатаДок, Документ.ЗаказНаРемонт.ДатаДок;
|Менеджер=Документ.РасходнаяНакладная.Продавец, Документ.ЗаказНаряд.Продавец;
|ТекущийДокумент = Документ.РасходнаяНакладная.ТекущийДокумент, Документ.ЗаказНаряд.ТекущийДокумент, Документ.ЗаказНаРемонт.ТекущийДокумент;
|Группировка Товар Упорядочить по Товар.Код, Товар.Наименование;
|Группировка Дата;
|Группировка ТекущийДокумент;
|Группировка СтрокаДокумента;
|Группировка Менеджер;
|Группировка КолВо;
|Группировка ЦенаПоз;
|Группировка ЦенаБезСкидки;
|Условие (Менеджер в ВыбМенеджер);
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Пока Запрос.Группировка(1)=1 Цикл
Код=Запрос.ЗначениеУпорядочивания(1,1);
Количество=0;
Наименование=Запрос.ЗначениеУпорядочивания(1,2);
Пока Запрос.Группировка(2)=1 Цикл
Пока Запрос.Группировка(3)=1 Цикл
Документ=Запрос.ТекущийДокумент;
Пока Запрос.Группировка(4)=1 Цикл
Пока Запрос.Группировка(5)=1 Цикл
Пока Запрос.Группировка(6)=1 Цикл
Пока Запрос.Группировка(7)=1 Цикл
Кол=Запрос.КолВо;
//Количество=Количество+Кол;
ЦенаПозиции=Запрос.ЦенаПоз;
Если Документ.Вид()="ЗаказНаряд" Тогда
Пока Запрос.Группировка(8)=1 Цикл
ЦенаБезСкидки=Запрос.ЦенаБезСкидки;
КонецЦикла;
ИначеЕсли Документ.Вид()="РасходнаяНакладная" Тогда
Пока Запрос.Группировка(8)=1 Цикл
ЦенаБезСкидки=Запрос.ЦенаБезСкидки;
КонецЦикла;
Иначе ЦенаБезСкидки=0;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Если СокрЛП(Наименование)="Работа" Тогда
Иначе
ТабРасх.НоваяСтрока();
ТабРасх.Товар=СокрЛП(Строка(Код));
ТабРасх.КолВо=Кол;
ТабРасх.Цена=ЦенаПозиции;
ТабРасх.Документ=Документ;
ТабРасх.ЦенаБезСк=ЦенаБезСкидки;
Тов=Запрос.Товар;
СпЗнач.ДобавитьЗначение(Тов);
КонецЕсли;
//Сообщить (Наименование);
КонецЦикла;
КонецЦикла;
КонецЦикла;
ТабРасх.Свернуть("1,3,4,5","2");
//Приход в учетный период
//ТабПрих= СоздатьОбъект ("ТаблицаЗначений");
ТабПрих.НоваяКолонка("Товар",,,,"Товар",15);
ТабПрих.НоваяКолонка("СредИзТрех",,,,"СредИзТрех",15);
ТабПрих.НоваяКолонка("Послед",,,,"Послед",15);
ТабПрих.НоваяКолонка("МаксЗак",,,,"МаксЗак",15);
ТабПрих.НоваяКолонка("Примечание",,,,"Примечание",15);
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с Дата1 по Дата4;
|Товар = Документ.ПриходнаяНакладная.Товар, Документ.ВводОстатковТоваров.Товар, Документ.ЗаказНаРемонт.Деталь;
|КолВо = Документ.ПриходнаяНакладная.Количество, Документ.ВводОстатковТоваров.Количество, Документ.ЗаказНаРемонт.КолВо;
|Дата = Документ.ПриходнаяНакладная.ДатаДок, Документ.ВводОстатковТоваров.ДатаДок, Документ.ЗаказНаРемонт.ДатаДок;
|ТекущийДокумент = Документ.ПриходнаяНакладная.ТекущийДокумент, Документ.ВводОстатковТоваров.ТекущийДокумент, Документ.ЗаказНаРемонт.ТекущийДокумент;
|Цена = Документ.ПриходнаяНакладная.Цена, Документ.ВводОстатковТоваров.Сумма, Документ.ЗаказНаРемонт.ТекущийДокумент.Сумма;
|Группировка Товар Упорядочить по Товар.Код, Товар.Наименование без групп;
|Группировка Дата;
|Группировка ТекущийДокумент;
|Группировка СтрокаДокумента;
|Группировка КолВо;
|Группировка Цена;
|Условие (СпЗнач.НайтиЗначение(Товар)<>0);
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Таб.ВывестиСекцию("Заголовок");
Пока Запрос.Группировка(1)=1 Цикл
//НомСтр=0;
Товар=Запрос.Товар;
Код=Запрос.ЗначениеУпорядочивания(1,1);
СпрНом.НайтиПоКоду(Код);
Примечание=СпрНом.Примечание;
Наименование=Запрос.ЗначениеУпорядочивания(1,2);
ЕТК=Товар.КаталНомер;
Производитель= Товар.Производитель;
РекЦена=Товар.РекомендованнаяЦена;
РознЦена=Товар.РозничнаяЦена;
КолПродаж=0;
МаксЦена=0;
Цена=0;
Ост=СпрНом.ТекущийЭлемент();
ТекОстаток= Рег.СводныйОстаток(Ост,,,"Количество");
ТабРасх.НайтиЗначение(СокрЛП(Строка(Код)),НомСтр,1);
//Сообщить ("Номер строки "+НомСтр);
Если НомСтр>0 Тогда
КолПродаж=ТабРасх.ПолучитьЗначение(НомСтр,2);
КонецЕсли;
НомСтр="";
Цена3=0;
Цена2=0;
Цена1=0;
Пока Запрос.Группировка(2)=1 Цикл
Пока Запрос.Группировка(3)=1 Цикл
Пока Запрос.Группировка(4)=1 Цикл
Пока Запрос.Группировка(5)=1 Цикл
Пока Запрос.Группировка(6)=1 Цикл
ТипДокумента=Запрос.ТекущийДокумент;
Цена=0;
Если ТипДокумента.Вид()="ПриходнаяНакладная" Тогда
Цена=Запрос.Цена;
Если ПустоеЗначение(Цена)=0 Тогда
Себестоимость=0;
КонецЕсли;
ИначеЕсли ТипДокумента.Вид()="ВводОстатковТоваров" Тогда
Количество=Запрос.КолВо;
Если ПустоеЗначение(Количество)=0 Тогда
Цена=(Запрос.Цена)/Количество;
Иначе Цена=Запрос.Цена;
КонецЕсли;
//Сообщить ("ВводОстатковТоваров");
ИначеЕсли ТипДокумента.Вид()="ЗаказНаРемонт" Тогда
Сумма=Запрос.Цена;
Цена=Цена+Сумма;
КонецЕсли;
Если Цена>0 Тогда
Цена3=Цена2;
Цена2=Цена1;
Цена1=Цена;
КонецЕсли;
// Цена=Запрос.Цена;
//Сообщить (Цена);
Если МаксЦена<Цена Тогда
МаксЦена=Цена;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Кол=3;
Если Цена3=0 Тогда
Кол=Кол-1;
КонецЕсли;
Если Цена2=0 Тогда
Кол=Кол-1;
КонецЕсли;
Если Цена1=0 Тогда
Кол=Кол-1;
КонецЕсли;
Если Кол>0 Тогда
СреднЦена=(Цена1+Цена2+Цена3)/Кол;
Иначе СреднЦена=0;
КонецЕсли;
ТабПрих.НоваяСтрока();
ТабПрих.Товар=СокрЛП(Строка(Код));
ТабПрих.СредИзТрех=СреднЦена;
ТабПрих.Послед=Цена1;
ТабПрих.МаксЗак=МаксЦена;
ТабПрих.Примечание=Примечание;
СреднЦена=0;
Цена1=0;
МаксЦена=0;
Примечание=0;
//Таб.ВывестиСекцию("Строка");
КонецЦикла;
//Таб.Показать();
//Таб=СоздатьОбъект("ТаблицаЗначений");
//Формирование результативной таблицы
Для НомерСтроки = 1 По ТабРасх.КоличествоСтрок() Цикл
ЦенаБезСкидкиИтог="";
ТабРасх.ПолучитьСтрокуПоНомеру(НомерСтроки);
Код=ТабРасх.Товар;
КолВо=ТабРасх.КолВо;
Цена=ТабРасх.Цена;
Документ=ТабРасх.Документ;
ЦенаБезСкидкиИтог=ТабРасх.ЦенаБезСк;
НомСтр="";
ТабПрих.НайтиЗначение(СокрЛП(Строка(Код)),НомСтр,1);
//Сообщить ("Номер строки "+НомСтр);
СредИзТрехЦена=0;
ПослЦена=0;
МаксЦена=0;
Если НомСтр>0 Тогда
СредИзТрехЦена=ТабПрих.ПолучитьЗначение(НомСтр,2);
ПослЦена=ТабПрих.ПолучитьЗначение(НомСтр,3);
МаксЦена=ТабПрих.ПолучитьЗначение(НомСтр,4);
ТабПримечание=ТабПрих.ПолучитьЗначение(НомСтр,5);
КонецЕсли;
НомСтр="";
СпрНом.НайтиПоКоду(Код);
Наименование=СпрНом.Наименование;
ЕТК=СпрНом.КаталНомер;
Производитель=СпрНом.Производитель;
РекЦена=СпрНом.РекомендованнаяЦена;
РознЦена = ГлПолучитьЦенуНоменклатуры(СпрНом.ТекущийЭлемент(),,Граница1);
Сумм1=КолВо*Цена;
Себ1=КолВо*ПослЦена;
СуммБезСк1=КолВо*ЦенаБезСкидкиИтог;
Если ПустоеЗначение(Себ1)=0 Тогда
Наценка=Сумм1/Себ1;
НацБезСк=СуммБезСк1/Себ1;
Иначе
Наценка=100;
НацБезСк=100;
КонецЕсли;
Таб.ВывестиСекцию("Строка");
//Реквизит1 = ТабличнаяЧасть.ИТОГ("НаименованиеСтолбца");
//ТЗ=СоздатьОбъект("ТаблицаЗначений");
//Номерстр=0;
//ТЗ.ВыбратьСтроки();
//Пока КолВо=ТЗ.Итог() Цикл
// Номерстр=Номерстр+1;
//КонецЦикла;
Таб.ВывестиСекцию("Подвал");
КонецЦикла;
Таб.Показать();
КонецПроцедуры
Показать
Вот собственно код, выводить дополнительную строку для итога получилось, а вписывать сумму по столбцу уже не получается... пишет либо неверный идентивифкатор или Номер за пределами ....
1. Вручную с помощью калькулятора или счет , сверится с бумажкой и записать итог.
2. Скопировать чиселки в EXCEL и там сложить,результат записать - проверить с п.1
3. Написать ПОНЯТНО и ДОСТУПНО всем - в каком столбце нужно проссумировать числа и в КАКОЙ ячейке это нужно вывести.
ОТВЕТ : ПРОГРАММНО (но почему то я думаю, что легче Вам не стало от моего ответа)
Необходимо для отчетности.
Вообще количество обрабатываемой информации очень большое, а перенос данных в эксель для получения результата порой занимает много времени, вот и пришли к тому чтоб выводить итог программно, быстро и удобно)
Собственно в обработке нужно прописать суммирование по каждому столбцу, что пока у меня не получается...
Я так думаю, что в отчете у тебя есть цикл вывода строк отчета - вот там и накапливай суммы по нужным столбцам. Если в отчет выводятся данные из ТЗ - сразу коммандой суммы по колонке ТЗ.
А вообще-то доступ к ЖКК еще никому не забанили...
Я пишу внешнюю обработку, не документ,
вывел строку "подвал", все хорошо, дальше нужно под каждый столбцом вывести его сумму, у меня вываливаются ошибки либо о "Номер за пределами значения!", либо неверный идентификатор колонки...
Мне необходим сам алгоритм написания каким образом произвести это суммирование
надо смотреть какой там алгоритм - если это просто ТЗ без итогов то можно воспользоваться методом Итог("idКолонки"), это если автоматически, а если чтото более сложное то надо простым обычным накоплением, с различными условиями суммирования в зависимости уровней вложенности и пр.
а еще лучше попробовать все таки собрать все запросом и использовать его функционал для суммирования (помощь при построении запросов)