Имя: Пароль:
1C
1C 7.7
v7: Проблемы с отчетом
,
0 kambar93
 
01.05.12
16:10
не получается переделать на другую базу....


Процедура Посчитать(НачДата, КонДата, Счет, КорСчет, мСчет, зСчет, НаклРасходы)

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

  Ит = СоздатьОбъект("БухгалтерскиеИтоги");
  Ит.ИспользоватьСубконто(ВидыСубконто.Номенклатура);
  Ит.ВыполнитьЗапрос(НачДата, КонДата, КорСчет, Счет, , 2, , );
 
  Ит.ВыбратьСубконто();
 
  Пока Ит.ПолучитьСубконто() = 1 Цикл
     ГП = Ит.Субконто();
     Стр = 0;
     Если табНом.НайтиЗначение(ГП, Стр, "ГП") = 1 Тогда
        ГС = табНом.ПолучитьЗначение(Стр, "ГС");
        ГК = Ит.ДО(3);
        СС = ГС / ГК;
        табНом.УстановитьЗначение(Стр, "ГК", ГК);
        табНом.УстановитьЗначение(Стр, "СС", СС);
     Иначе                
        Сообщить("Не нашел 1 !! "+ГП);
     КонецЕсли;
  КонецЦикла;

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

  Ит = СоздатьОбъект("БухгалтерскиеИтоги");
  Ит.ИспользоватьСубконто(ВидыСубконто.Номенклатура);
  Ит.ВыполнитьЗапрос(НачДата, КонДата, Счет, зСчет, , 2, , );
  Ит.ВыбратьСубконто();

  Пока Ит.ПолучитьСубконто() = 1 Цикл
     ГП = Ит.Субконто();
     Стр = 0;
     Если табНом.НайтиЗначение(ГП, Стр, "ГП") = 1 Тогда
        табКор = Ит.ДО();
        табНом.УстановитьЗначение(Стр, "ЗТ", табКор);
     Иначе                
        Сообщить("Не нашел 2 !! "+ГП);
     КонецЕсли;
  КонецЦикла;
 
  //
  Т = СоздатьОбъект("Таблица");
  табНом.ВыбратьСтроки();            
  ИтогоПрибыльОтПроизводства = 0;  
  Пока табНом.ПолучитьСтроку() = 1 Цикл
     Номен = табНом.ГП;    
     Т.ВывестиСекцию("Шапка");
     
     ВыпускБезПолуф = табНом.ГК;
     //СуммаВыпускБезПолуф = табНом.ГС;
     СуммаВыпускБезПолуф = Номен.Цена.Получить(НачДата) * ВыпускБезПолуф;
     Т.ВывестиСекцию("ВыпускБезПолуф");
     Т.ВывестиСекцию("ШапкаМатериалы");
     
     вт = табНом.МТ;
     вт.ВыбратьСтроки();
     
     Пока вт.ПолучитьСтроку() = 1 Цикл                          
        Матер = вт.К;
        МатериалНаПрод = вт.С;
        МатериалНа1Прод = вт.С / табНом.ГК;
        Т.ВывестиСекцию("Материалы");  
     КонецЦикла;
     
     ВсегоМатериаловНаПрод = вт.Итог("С");
     ВсегоМатериаловНа1Прод = ВсегоМатериаловНаПрод / табНом.ГК;
     Т.ВывестиСекцию("ВсегоМат");
     Т.ВывестиСекцию("ШапкаНакладныеРасходы");
     РасходыНаПрод = табНом.ЗТ;
     РасходыНа1Прод = табНом.ЗТ / табНом.ГК;
     Т.ВывестиСекцию("НакладныеРасходы");
     ЗатратыНаСС = ВсегоМатериаловНаПрод + РасходыНаПрод;
     Себестоимость1Бут = ЗатратыНаСС / табНом.ГК;
     Т.ВывестиСекцию("Затраты");
     ПрибыльОтПроизводства = СуммаВыпускБезПолуф - ЗатратыНаСС;
     Т.ВывестиСекцию("Прибыль");
     ИтогоПрибыльОтПроизводства = ИтогоПрибыльОтПроизводства + ПрибыльОтПроизводства;
  КонецЦикла;
               
  Т.ВывестиСекцию("ИтогБезПолуф");
  Т.Показать();
  //
КонецПроцедуры  

Процедура ПерепровестиДокументы(НачДата, КонДата)
  Если Отчет = 0 Тогда
     Сообщить("Перепроводим документы");
     Док = СоздатьОбъект("Документ");
     Док.ВыбратьДокументы(НачДата, КонДата);
     
     Пока Док.ПолучитьДокумент() = 1 Цикл
        Если Док.ПометкаУдаления() = 0 Тогда
           Если Док.Проведен() = 1 Тогда
              Если
                 (Док.Вид() = "_03_АктСписанияМатериаловВодка") ИЛИ
                 (Док.Вид() = "_03_АктСписанияВодки") ИЛИ
                 (Док.Вид() = "_03_АктСписанияМатериаловСпирт") ИЛИ
                 (Док.Вид() = "_03_АктСписанияСпирта") ИЛИ
                 (Док.Вид() = "_03_АктСписанияНаВыпускМакарон")
              Тогда
                 Сообщить(Док.ТекущийДокумент());
                 Док.Провести(0, 2);
                 Док.Записать();                
              КонецЕсли;
           КонецЕсли;
        КонецЕсли;  
     КонецЦикла;
     
     Сообщить("Перепроведение завершено");
  КонецЕсли;
 
КонецПроцедуры

//*******************************************
Процедура Сформировать()  
  НачДата = НачМесяца(ДатаОт);
  КонДата = КонМесяца(ДатаОт);
 
  Посчитать(НачДата, КонДата, "900.0", "221.0", "207.0", "900.5", "Затраты для водки");
  Посчитать(НачДата, КонДата, "900.1", "221.1", "207.1", "900.5", "Спирт");
  Посчитать(НачДата, КонДата, "900.2", "221.2", "207.2", "900.5", "Макар");
 
  ПерепровестиДокументы(НачДата, КонДата);
КонецПроцедуры
1 kambar93
 
01.05.12
16:10
вот от сюда дальше не идет....

вт = табНом.МТ;
 вт.ВыбратьСтроки();
 Пока вт.ПолучитьСтроку() = 1 Цикл                
  Матер = вт.К;
  МатериалНаПрод = вт.С;
  МатериалНа1Прод = вт.С / табНом.ГК;
  Т.ВывестиСекцию("Материалы");
 КонецЦикла;
2 kambar93
 
01.05.12
16:11
что б установить значение МТ

  Пока Ит.ПолучитьСубконто() = 1 Цикл
     ГП = Ит.Субконто();
     Стр = 0;
     Если табНом.НайтиЗначение(ГП, Стр, "ГП") = 1 Тогда
        табКор = СоздатьОбъект("ТаблицаЗначений");
        табКор.НоваяКолонка("К");
        табКор.НоваяКолонка("С");
       
        Ит.ВыбратьКорСубконто();
        Пока Ит.ПолучитьКорСубконто() = 1 Цикл
           табКор.НоваяСтрока();
           табКор.К = Ит.КорСубконто();
           табКор.С = Ит.КорДО();
        КонецЦикла;
        табНом.УстановитьЗначение(Стр, "МТ", табКор);
     Иначе                
        Сообщить("Не нашел 2 !! "+ГП);
     КонецЕсли;
  КонецЦикла;

вот тут не присваивается!
3 kambar93
 
01.05.12
16:11
вт.ВыбратьСтроки();
{Отчет.РасчетСебестоимостиПродукции.Форма.Модуль{118}}: Значение не представляет агрегатный объект(ВыбратьСтроки)
4 aka AMIGO
 
01.05.12
16:23
(1)вт = СоздатьОбъект("ТаблицаЗначений"); //где у тебя присвоение? что-то не видно, чтоб это была ТЗ
5 kambar93
 
01.05.12
16:24
вт = табНом.МТ;
6 aka AMIGO
 
01.05.12
16:25
(3)ты открой отладчик, поставь точку останова на вт.Выбрать, и посмотри в окне табло ТипЗначенияСтр(вт)
7 aka AMIGO
 
01.05.12
16:27
(5)во,  тут надо ставить точку останова!
8 aka AMIGO
 
01.05.12
16:28
+7 и посмотри до присвоения и сразу-же после неё
интересно, что там покажется :)
9 Сияющий Асинхраль
 
01.05.12
16:30
Когда присваиваешь значение ТабНом.МТ лучше пользовать не установить значение, а Выгрузить
10 kambar93
 
01.05.12
16:31
вт = табНом.МТ; вт = (пусто)
тамНом = нормально все показывает!
МТ = ошибка в выр
11 aka AMIGO
 
01.05.12
16:31
+8 и посмотри, во всех-ли табНом.МТ присвоено значение.
колонка МТ у тебя не определена, и пытаться выбрать из неё строки - неудачная идея
12 Сияющий Асинхраль
 
01.05.12
16:32
Т.е. не стоит присваивать таблицы значений обычным присвоением и установкой значений
13 aka AMIGO
 
01.05.12
16:32
(10)вот она, твоя ошибка.. Это не ТЗ, а пустота
14 kambar93
 
01.05.12
16:33
что мне делать :(?
15 aka AMIGO
 
01.05.12
16:33
(14)см (9) и (12)
16 kambar93
 
01.05.12
16:37
значит во всех местах "УстановитьЗначение" переделать на "Выгрузить"
17 kambar93
 
01.05.12
16:41
табНом.Выгрузить(Стр, "ГК", ГК);
{Отчет.РасчетСебестоимостиПродукцииМК.Форма.Модуль(40)}: Номер за пределами значения!
18 aka AMIGO
 
01.05.12
16:43
(17)найди в СП, как делается Выгрузить()
19 aka AMIGO
 
01.05.12
16:44
(16)УстановитьЗначение - указываешь строку и колонку
Выгрузить() - указываешь ТЗ, куда выгружаешь..
почитай СП..
20 НикДляЗапросов
 
01.05.12
16:45
обратись к тому кто этот код написал...
21 aka AMIGO
 
01.05.12
16:47
(20)вряд-ли найдет автора..
22 kambar93
 
01.05.12
17:02
МТ не присваивается
23 kambar93
 
01.05.12
17:06
табНом.УстановитьЗначение(Стр, "МТ" , табКор);
табНом.Выгрузить("ЗТ",,,);
24 kambar93
 
01.05.12
17:07
ой

табНом.УстановитьЗначение(Стр, "МТ" , табКор);
табНом.Выгрузить("МТ",,,);
25 zak555
 
01.05.12
17:07
что такое : мСчет, зСчет ?
26 kambar93
 
01.05.12
17:11
суб счета! думаю в кореспондирующих субконто проблдемы!
27 kambar93
 
01.05.12
17:29
табКор.НоваяСтрока();
табКор.К=Ит.КорСубконто();
табКор.С=Ит.КорДО();

вот тут проблемки....
28 GreyK
 
01.05.12
17:54
Чёй-то я даже не нашел создания колонки ВТ и тем более присвоения ей значения.
29 kambar93
 
01.05.12
17:57
Нету колонки ВТ!
30 kambar93
 
01.05.12
17:57
МТ
табНом.НоваяКолонка("МТ");
31 GreyK
 
01.05.12
18:13
(29) Вместо:
табНом.УстановитьЗначение(Стр, "МТ", табКор);
Сделай:
табНом.МТ = СоздатьОбъект("ТаблицаЗначений");
табКор.Выгрузить(табНом.МТ);
32 kambar93
 
01.05.12
18:56
Блин не присваивает.... и так и так... :(
33 GreyK
 
01.05.12
19:06
Сегодня "Умри труд изы_маю_щий здоровье", т.ч завтра ты научишься отладчиком пользоваться :)
34 aka AMIGO
 
01.05.12
19:13
Ит.ВыбратьСубконто();
  вт = создатьОбъект("ТаблицаЗначений");
вт.НоваяКолонка("Ы"); //на всякий случай
  Пока Ит.ПолучитьСубконто() = 1 Цикл
     ГП = Ит.Субконто();
     ГС = Ит.ДО();
     
     табНом.НоваяСтрока();
     табНом.ГП = ГП;
     табНом.ГС = ГС;
табНом.МТ = вт; //присваивание пустой ТЗ
  КонецЦикла;


// следующая замена в тексте:
    Т.ВывестиСекцию("ШапкаМатериалы");
     
     //вт = табНом.МТ;
ТабНом.МТ.Выгрузить(вт); //попробовать такой вариант..
     вт.ВыбратьСтроки();

будет работать, или нет - не могу сказать.
у тебя большое преимущество перед всеми: есть работающая БД, в которой можно посмотреть в отладчике.
35 kambar93
 
01.05.12
19:42
вот ёё. у меня даже ГК не присваивало оказ-ся....