Имя: Пароль:
1C
1C 7.7
v7: Итог оборотного регистра в табличную часть
0 Gangar
 
24.10.12
02:41
Доброго дня, уважаемые.
Дано - ТиС Украина, доработанная база.
В данной конфигурации изъявили желание сделать еще и зарплатный модуль.
Т.к. оплата сдельно-премиальная в зарплатную ведомость надо передать итог регистра за указанный период.
В регистре есть измерение Отдел и ресурс Доход (именно его и надо передать, но так, что бы он соответствовал отделу сотрудника).
ТЧ вида
ФИО . Отдел . Оборот . Ставка . Премия . Итого .
Вопрос - как?
Запросом, последующей выгрузкой в ТЗ и заполнением табличной части из ТЗ?
Прямым запросом?
...
1 zladenuw
 
24.10.12
02:43
а чего сразу в ТЧ не пихать. а ты знаешь прямые запросы ?
2 Gangar
 
24.10.12
02:48
(1) не знаю прямых - но есть время и вдохновение.
3 zladenuw
 
24.10.12
02:49
прямые только тогда когда обычными долго и уныло. пока попробуй сделать так. попробуй формех. а потом уже лезь в рпямые
4 zladenuw
 
24.10.12
02:50
остальное понятно или мрак ?
5 Изучаю1С8
 
24.10.12
02:50
(3) И на кой тут формекс?
6 Gangar
 
24.10.12
02:52
(4) судя по времени на часах - мрак.
попробую на свежую голову завтра утром еще раз осмыслить =)
но, если можешь указать направление - буду благодарен.
7 zladenuw
 
24.10.12
02:53
(5) человек пишет про прямые запросы. может и слухом не знает про формех. а тебе только обгадить
8 zladenuw
 
24.10.12
02:55
(6) ты думай, пробуй, если че форум будет :)
9 Изучаю1С8
 
24.10.12
02:57
Прямые гораздо нужнее формекса если уж на то пошло.
10 zladenuw
 
24.10.12
03:01
(9) а ты по теме ТС. ответ не даешь. я ему про общие развитие. что надо будет для клюшки.
11 Gangar
 
24.10.12
03:01
(9) вот и я подумываю, что их изучение мне в дальнейшем пригодиться.
12 Gangar
 
24.10.12
03:02
не ругайтесь, все будет хорошо. не подскажете направление поиска - найду сам, пусть и позже.
13 zladenuw
 
24.10.12
03:03
(11) ты вообще где работаешь ?
формех, прямые запросы. для задротов.
а вообще 1с8.х учи !
14 zladenuw
 
24.10.12
03:06
а вообще пробовать, читать. форум так. иногда совет. иногда сомнение по поводу решения. ты же програмер у тебя 1 млн вариантов решения. и все будут верные. если клиент видеть то что ему надо, пофиг как оно сделано. только со своим опытом, будешь понимать. какой ты был раньше нуб
15 Gangar
 
24.10.12
03:32
(13) прошу пощения, 1С начал учить 3 месяца назад. с написания отчетов.
в данный момент облазив многие форумы не увидел примеров с возможностью отбора Дохода по Отделу.
есть предположение, что должно быть как то так:

Функция Заполнить()    
   Перем Запрос, ТекстЗапроса;    
   УдалитьСтроки();
   Спр = СоздатьОбъект("Справочник.Сотрудники");
   Таб = СоздатьОбъект("ТаблицаЗначений");
   Рег = СоздатьОбъект("Регистр.Продажи");
   Таб.НоваяКолонка("ФИО");
   Таб.НоваяКолонка("Отдел", "Справочник.Отделы");
   Таб.НоваяКолонка("Ставка");
   Таб.НоваяКолонка("Оборот");
   Спр.ИспользоватьДату(ДатаДок);
   Спр.ВыбратьЭлементы();    
   Пока Спр.ПолучитьЭлемент() = 1 Цикл
       Таб.УдалитьСтроки();
       Рег.ИспользоватьПериод(ДатаГод(ДатаДок), ДатаМесяц(ДатаДок));
       Таб.НоваяСтрока();
       Таб.ФИО = Спр.ТекущийЭлемент();
       Таб.Отдел = Спр.Отдел;
       Таб.Ставка = Спр.Ставка;
       Таб.Оборот = Рег.СводныйИтог(Таб.Отдел, "Доход");
       Таб.ВыбратьСтроки();
       Пока Таб.ПолучитьСтроку() = 1 Цикл
           НоваяСтрока();
           Сотрудник = Таб.ФИО;
           Отдел = Таб.Отдел;
           Ставка = Таб.Ставка;
           Оборот = Таб.Оборот;
       КонецЦикла;
   КонецЦикла;
КонецФункции

Но на данном этапе ругается, что
Таб.Оборот = Рег.СводныйИтог(Таб.Отдел, "Доход"): Неверный идентификатор ресурса!
16 Изучаю1С8
 
24.10.12
03:34
17 Gangar
 
24.10.12
03:34
(15) ой, переменные там не нужны, игрался с запросами.
18 zladenuw
 
24.10.12
03:34
а просто запрос
19 Gangar
 
24.10.12
03:54
Функция Заполнить()
   
   УдалитьСтроки();
   Спр = СоздатьОбъект("Справочник.Сотрудники");
   Таб = СоздатьОбъект("ТаблицаЗначений");
   Рег = СоздатьОбъект("Регистр.Продажи");
   Рег.ИспользоватьПериод(ДатаГод(ДатаДок), ДатаМесяц(ДатаДок));
   Таб.НоваяКолонка("ФИО");
   Таб.НоваяКолонка("Отдел");
   Таб.НоваяКолонка("Ставка");
   Таб.НоваяКолонка("Оборот");
   Спр.ИспользоватьДату(ДатаДок);
   Спр.ВыбратьЭлементы();    
   Пока Спр.ПолучитьЭлемент() = 1 Цикл
       Таб.УдалитьСтроки();        
       Таб.НоваяСтрока();
       Таб.ФИО = Спр.ТекущийЭлемент();
       Таб.Отдел = Спр.Отдел;
       Таб.Ставка = Спр.Ставка;
       Таб.ВыбратьСтроки();
       Пока Таб.ПолучитьСтроку() = 1 Цикл
           НоваяСтрока();
           Сотрудник = Таб.ФИО;
           Отдел = Таб.Отдел;            
           Рег.СводныеИтоги(Отдел);
           Оборот = Рег.Доход;
           Ставка = Таб.Ставка;
       КонецЦикла;
   КонецЦикла;
   
КонецФункции

в таком варианте начало заполнять ТЧ, но совсем не теми цифрами, которые я получаю если делаю запрос.
а из запроса не могу передать значение в ТЧ.
20 zladenuw
 
24.10.12
03:55
читай про запрос. получай все что тебе надо. ты тут просто берешь обороты за период. по этому бред
21 zladenuw
 
24.10.12
03:58
ну или так
Фильтрация движений и итогов

РегТовары = СоздатьОбъект("Регистр.Товары");

1. Метод УстановитьФильтр

Пример:
//выбрать все движения по данному складу за период
РегТовары.УстановитьФильтр(,ТекСклад);
РегТовары.ВыбратьДвижения(ДатаНач, ДатаКон);
Пока РегТовары.ПолучитьДвижение()=1 Цикл
22 zladenuw
 
24.10.12
03:59
(16) смотри ссылку
23 Gangar
 
24.10.12
04:01
(16),(22) за ссылку спасибо, читал.
24 zladenuw
 
24.10.12
04:02
25 zladenuw
 
24.10.12
04:03
и тут чепуха
 Спр.ИспользоватьДату(ДатаДок);
   Спр.ВыбратьЭлементы();    
   Пока Спр.ПолучитьЭлемент() = 1 Цикл
       Таб.УдалитьСтроки();        
       Таб.НоваяСтрока();
       Таб.ФИО = Спр.ТекущийЭлемент();
       Таб.Отдел = Спр.Отдел;
       Таб.Ставка = Спр.Ставка;
       Таб.ВыбратьСтроки();
       Пока Таб.ПолучитьСтроку() = 1 Цикл
           НоваяСтрока();
           Сотрудник = Таб.ФИО;
           Отдел = Таб.Отдел;            
           Рег.СводныеИтоги(Отдел);
           Оборот = Рег.Доход;
           Ставка = Таб.Ставка;
       КонецЦикла;
   КонецЦикла;
26 zladenuw
 
24.10.12
04:04
получаешь сначала всех сотрудников. загоняешь в список. а не в выборке. это раз.
27 zladenuw
 
24.10.12
04:04
так в регистре расчет на отдел или з.п. для сотрудника хранится в отделе ?
28 zladenuw
 
24.10.12
04:05
(0) и ты вообще откуда, город ?
29 Gangar
 
24.10.12
04:11
(27) в документе вручную должно устанавливаться значение премии. формат ТЧ я в начале привел.
грубо говоря по кнопке идет заполнение ТЧ - ФИО, Отдел, Ставка, Оборот. все, кроме оборота получаю. оборот - странные цифры, которые никак не стыкуются с тем что есть на самом деле.
далее СамыйБольшойНачальник проставляет значение премии в % и идет списание с регистра Деньги на регистр Зарплата, откуда в дальнейшем списываются деньги выданные на руки.
(28) Днепропетровск
30 zladenuw
 
24.10.12
04:12
оборот. это то что было за период. может тебе остаток нужно. или скинь конфу гляну. я уже не трезвый. туплю где то
31 zladenuw
 
24.10.12
04:12
(29) если в отчете видишь то что нужно. тогда смотри там.
32 zladenuw
 
24.10.12
04:13
(29) в карточку добавь. а то инкогнито. типо боишься чето
33 Gangar
 
24.10.12
04:14
(27) во всех Расходных есть реквизит Отдел - по ним идет заполнение значение регистра Доход.
отчет по работе отдела я уже сделал, а вот тут что-то затупил.
если делать запросом, то как должна выглядеть передача значения в ТЧ?
Оборот = Запрос.СуммаДоход ?
34 zladenuw
 
24.10.12
04:15
ну так то что он должен получить. если подставить доход то оно ? уже начала 4. с утра на работу. спи иди!
35 Gangar
 
24.10.12
04:15
(32) Спасибо за напоминание, добавил. Как то сразу забыл это сделать.
36 Gangar
 
24.10.12
04:17
(34) Да, таки вы правы. На свежую голову быстрее прийдёт осознание ошибки. Спасибо.
37 zladenuw
 
24.10.12
04:18
точнее осознаешь все что было за сегодня. так лучше. а то Ёбе...шся. сегодня, а завтра тю ты. куйня и за час
38 ADirks
 
24.10.12
08:39
> прямые только тогда когда обычными долго и уныло.

Т.е. всегда. Кто знает SQL, тому дико смотреть на 1С-ные запросы и прочие извращения.
39 Gangar
 
25.10.12
04:07
В конечном итоге получилось так

Функция Заполнить()

Если ПустоеЗначение(выбОтдел) = 1 Тогда
 Предупреждение("Выберите отдел для расчета ЗП.")
 СтатусВозврата(0);
Иначе

 УдалитьСтроки();
 ТОб = СоздатьОбъект("ТаблицаЗначений");
 Запрос = СоздатьОбъект("Запрос");
 ТекстЗапроса = "
 |Период с ВыбНачПериода по ВыбКонецПериода;
 |Фирма = Регистр.Продажи.Фирма;
 |Отдел = Регистр.Продажи.Отдел;
 |Доход = Регистр.Продажи.Доход;
 |Функция ДоходСумма = Сумма(Дохохд);
 |Группировка Отдел;
 |Условие (Отдел в выбОтдел);
 |Условие (Фирма = ФирмОтбора);
 |";
 Запрос.Выполнить(ТекстЗапроса);
 Запрос.Выгрузить(ТОб);
 ТОб.Свернуть("Отдел", "ДоходСумма")
//ТОб.ВыбратьСтроку(); //Проверка
 ТОб.ВыбратьСтроки();
 ТОб.ПолучитьСтроку();
 ДоходОтдел = ТОб.ДоходСумма;

 Спр = СоздатьОбъект("Справочник.Сотрудники");
 Спр.ИспользоватьДату(ДатаДок);
 Спр.ВыбратьЭлементы();
 Пока Спр.ПолучитьЭлемент() = 1 Цикл
  Если Спр.Отдел = выбОтдел Тогда
   НоваяСтрока();
   Сотрудник = Спр.ТекущийЭлемент();
   Ставка = Спр.Ставка;
   Отдел = выбОтдел;
   Оборот = ДоходОтдел;
  КонецЕсли;
 КонецЦикла;
КонецЕсли;

КонецФункции
40 Karambol
 
25.10.12
05:53
ЗагрузитьТабличнуюЧасть может попробовать использовать?
41 Gangar
 
25.10.12
12:40
(40) а разве для этого не надо будет заполнять еще одну ТЗ, в которой будут записи из справочника?
42 Ёпрст
 
25.10.12
12:44
(39) группировка Отдел в тексте запроса не нужна, это раз, выгрузка в тз и свертка этой тз - тем более, это два.
43 Gangar
 
25.10.12
13:19
(42) Спасибо, лишнее убрал.