|
v7: ТЗ.ПолучитьЗначение(1,"Документ") = <Объект не найден>(2109/КПД) | ☑ | ||
---|---|---|---|---|
0
а кому щас легко
28.09.11
✎
08:10
|
Вот кусок кода.
Когда в этой строке (ТЗ.Документ = Опер.Документ;) меняется документ при переходе на следующую проводку, то значение этого документа меняется во всех строках таблицы значений на текущий документ. Когда выходит из цикла, то объект не найден (как в сабже). Что за глюк? В остальной части все отрабатывает нормально. ////////////////////////////////////////////////////////////////////// Процедура СобратьДанныеПосчету(счетВыплаты) Сч70 = СчетПоКоду("70"); Опер = СоздатьОбъект("Операция"); Опер.ВыбратьОперацииСПроводками (НачДата, КонДата, Сч70, СчетВыплаты); Пока Опер.ПолучитьПроводку()=1 Цикл ТЗ.НоваяСтрока(); ТЗ.Сотрудник = Опер.Дебет.Сотрудники; ТЗ.СчетВыплаты = счетВыплаты; ТЗ.Документ = Опер.Документ; ТЗ.ДатаДок = Опер.Документ.ДатаДок; ТЗ.Сумма = Опер.Сумма; КонецЦикла; КонецПроцедуры ///////////////////////////////////////////////////////////////////////////////////////////// Процедура СобратьДанныеОВыплатах() СчетВыплаты = СчетПоКоду("50"); СобратьДанныеПоСчету(СчетВыплаты); СчетВыплаты = СчетПоКоду("51"); СобратьДанныеПоСчету(СчетВыплаты); ТЗ.Сортировать("Сотрудник,СчетВыплаты,ДатаДок"); КонецПроцедуры //******************************************* |
|||
2
а кому щас легко
28.09.11
✎
08:18
|
ТЗ.Документ = Опер.Документ заменил на:
ТЗ.Документ = Строка(Опер.Документ); Теперь заработало. Почему ТЗ.Документ = Опер.Документ не работает? |
|||
3
andrewks
28.09.11
✎
08:19
|
как типизируешь колонку ТЗ.Документ ?
|
|||
4
Lepochkin
28.09.11
✎
08:22
|
Опер.Документ.ТекущийДокумент() попробуй. Хотя вряд ли поможет, но и времени много не займет.
|
|||
5
1Сергей
28.09.11
✎
08:23
|
(3)+ как создается и заполняется ТЗ?
|
|||
6
а кому щас легко
28.09.11
✎
08:26
|
(3) никак не типизирую, там могут быть документы разных типов (в 1с77 давно не был, сильно не пинать)
Вот весь код: Перем ТЗ; ///////////////////////////////////////////////////////////////////////////////////////////// Процедура СобратьДанныеПосчету(счетВыплаты) Сч70 = СчетПоКоду("70"); Опер = СоздатьОбъект("Операция"); Опер.ВыбратьОперацииСПроводками (НачДата, КонДата, Сч70, СчетВыплаты); Пока Опер.ПолучитьПроводку()=1 Цикл ТЗ.НоваяСтрока(); ТЗ.Сотрудник = Опер.Дебет.Сотрудники; ТЗ.СчетВыплаты = счетВыплаты; ТЗ.Документ = Строка(Опер.Документ); ТЗ.ДатаДок = Опер.Документ.ДатаДок; ТЗ.Сумма = Опер.Сумма; КонецЦикла; КонецПроцедуры ///////////////////////////////////////////////////////////////////////////////////////////// Процедура СобратьДанныеОВыплатах() СчетВыплаты = СчетПоКоду("50"); СобратьДанныеПоСчету(СчетВыплаты); СчетВыплаты = СчетПоКоду("51"); СобратьДанныеПоСчету(СчетВыплаты); ТЗ.Сортировать("Сотрудник,СчетВыплаты,ДатаДок"); КонецПроцедуры //******************************************* Функция ПолучитьСписокСотрудников() СЗ = СоздатьОбъект ("СписокЗначений"); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл Если СЗ.НайтиЗначение(ТЗ.Сотрудник) = 0 Тогда СЗ.ДобавитьЗначение(ТЗ.Сотрудник); КонецЕсли; КонецЦикла; Возврат СЗ; КонецФункции //******************************************* Функция ПолучитьСуммуВыплатПоСотруднику(ТекСотрудник) ИтСумма = 0; ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл Если ТЗ.Сотрудник <> ТекСотрудник Тогда Продолжить; КонецЕсли; ИтСумма = ИтСумма + ТЗ.Сумма; КонецЦикла; Возврат ИтСумма; КонецФункции //******************************************* Процедура ВывестиВТаблицу() ном = 0; Таб = СоздатьОбъект ("Таблица"); Таб.ВывестиСекцию ("Секция_Шапка"); СписокСотрудников = ПолучитьСписокСотрудников(); Для н = 1 По СписокСотрудников.РазмерСписка() Цикл ТекСотрудник = СписокСотрудников.ПолучитьЗначение(н); СуммаВыплатПоСотруднику = ПолучитьСуммуВыплатПоСотруднику(ТекСотрудник); Таб.ВывестиСекцию("Секция_ИтогоПоСотруднику"); ///////////////////////////////////////////// //Выведем строки выплат по сотруднику ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл Если ТЗ.Сотрудник <> ТекСотрудник Тогда Продолжить; КонецЕсли; ном = ном + 1; Сотрудник = ТЗ.Сотрудник; ДатаДок = ТЗ.ДатаДок; Документ = ТЗ.Документ; Сумма = ТЗ.Сумма; Таб.ВывестиСекцию("Секция_Строка"); КонецЦикла; КонецЦикла; ВсегоСумма = ТЗ.Итог("Сумма"); Таб.ВывестиСекцию("Секция_Итого"); Таб.Показать(); КонецПроцедуры //******************************************* Процедура Сформировать() Если (ПустоеЗначение(НачДата) = 1) или (ПустоеЗначение(КонДата) = 1) Тогда Предупреждение ("Не выбрана дата"); Возврат; КонецЕсли; ТЗ = СоздатьОбъект ("ТаблицаЗначений"); ТЗ.НоваяКолонка("Сотрудник"); ТЗ.НоваяКолонка("СчетВыплаты"); ТЗ.НоваяКолонка("Документ"); ТЗ.НоваяКолонка("ДатаДок"); ТЗ.НоваяКолонка("Сумма"); СобратьДанныеОВыплатах(); ВывестиВТаблицу(); КонецПроцедуры |
|||
7
а кому щас легко
28.09.11
✎
08:29
|
(4) так работает :)
|
|||
8
andrewks
28.09.11
✎
08:44
|
(7)ДокументОбъект и ДокументСсылка
Тип значения Опер.Документ = "Документ", однако, видимо, инициируется он типа как СоздатьОбъект("Документ.Операция"), при выходе из функции и, соответственно, уничтожении выборки, эти объекты разрушаются |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |