Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / выборка журналарасчетво / 15 сообщений из 15, страница 1 из 1
04.06.2010, 22:33
    #36670515
AndrewVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка журналарасчетво
Здравствуйте.
Возникта необходирмость выгрузить из ЗИК журнал расчетов.
Версия 7.7. Выгрузку пишу на Дельфи.

сделал такой код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  ole_1C_q:=ole_1C.CreateObject('Запрос');

  if ole_1C_q.выполнить(s) <>  0  then
  begin
        while ole_1C_q.Группировка('Сотрудник') =  1  do
        begin
        // получаю все значения реквизитов запроса
         end;




Есть в запросе реквизит типа
ЖурналРасчетов.Зарплата.ВидРасч

Недопонимаю, как получить текстовое название расчета.


Подскажите :-)

Спасибо
...
Рейтинг: 0 / 0
05.06.2010, 01:20
    #36670682
Last1Cmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка журналарасчетво
любой объект имеет свой синоним который в отдельных случаях автоматически получается а в некоторых необходимо получить либо "Наименование" объекта либо воспользоваться одной из строковых функций она уже и приведёт к строке (как вариант - СокрЛП())

запросом вы получате сам объект а дальше уже решаете что из этого объекта вам использовать для ваших нужд

кстати не рекомендовал бы использовать наименование (хотя видов расчета это не сильно актуально) для любых синхронизаций... необходима уникальность
...
Рейтинг: 0 / 0
05.06.2010, 13:50
    #36670993
AndrewVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка журналарасчетво
Last1Cmen,

Посмотрел, как в конфигурации это делается. Сделал так.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  sp_raschet:= ole_1c.createobject('Справочник.ВидыРасчетов');
  comp:=ole_1c_q.ВидРАсчета;
  if sp_raschet.Найтипореквизиту('РАсчет',comp, 0 ) =  1  then
   begin
         self.caption:=sp_raschet.Наименование;
   end
   else
   begin
         s:=ole_1c.Метаданные.Видрасчета(comp.Код).Представление;
   end

Но в такой констукции все время отрабатывает второй вариант условия и s ничему не равна.
...
Рейтинг: 0 / 0
05.06.2010, 14:29
    #36671014
Last1Cmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка журналарасчетво
оле не работает с объектными (ссылочными) данными т.е. вам в НайтиПоРеквизиту надо передавать текст (проверьте так ли это) плюс в самом объекте (справочнике) в котором ищете должен стоять признак того что по этому реквизиту можно отбирать (галочка в конфигураторе) ну и само собой Код в справочнике (по второй ветке) должен быть согласно номеру вида расчета если уж таким образом (через метаданые) хотите его получить
...
Рейтинг: 0 / 0
05.06.2010, 15:15
    #36671035
AndrewVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка журналарасчетво
Last1Cmen,

в справочнике видов расчета в реквизите РАСЧЕТ стоит галка ОТБОР ПО РЕКВИЗИТУ.
...
Рейтинг: 0 / 0
05.06.2010, 15:16
    #36671036
AndrewVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка журналарасчетво
AndrewVL,
...
Рейтинг: 0 / 0
05.06.2010, 15:17
    #36671037
AndrewVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка журналарасчетво
AndrewVL,

Код: plaintext
1.
2.
3.
comp:=ole_1c_q.видрасч;
self.caption:=comp.код;
self.caption:=comp.наименование;

в self.caption ничего не выводится по всей выборке
...
Рейтинг: 0 / 0
05.06.2010, 15:39
    #36671051
Last1Cmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка журналарасчетво
AndrewVLAndrewVL,

Код: plaintext
1.
2.
3.
comp:=ole_1c_q.видрасч;
self.caption:=comp.код;
self.caption:=comp.наименование;

в self.caption ничего не выводится по всей выборке

что есть результат "ole_1c_q.видрасч" ? ещё раз общая схема такова - получаем запросом текст\число и по этим уже данным ищем в выборке по объекту а если у вас в ole_1c_q.видрасч - ссылка на объект то там ничего и не будет
...
Рейтинг: 0 / 0
05.06.2010, 15:45
    #36671056
Last1Cmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка журналарасчетво
я в дельфи не силен но могу предполагать по 3му посту (если полный код приведен) что вы создали объёкт справочника и не спозиционировавшись на конкретном элементе что-то пытаетесь из него получить для поиска по реквизиту в таком же объекте справочнике

не понятна логика сего действия даше ошибочного

общая схема - получаем текстовый идентификатор (код, наименование, значение реквизита типа число\строка ) и по нему уже ищем в созданном для поиска объекте необходимого вида

т.е. в 3м посте "ole_1c_q.ВидРАсчета" должен содержать текст... проверьте это
...
Рейтинг: 0 / 0
05.06.2010, 16:30
    #36671083
AndrewVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка журналарасчетво
Last1Cmen
что есть результат "ole_1c_q.видрасч" ? ещё раз общая схема такова - получаем запросом текст\число и по этим уже данным ищем в выборке по объекту а если у вас в ole_1c_q.видрасч - ссылка на объект то там ничего и не будет

Видрасч = журналрасчетов.зарплата.видрасч

получается что это ссылка на объект
...
Рейтинг: 0 / 0
05.06.2010, 16:34
    #36671087
AndrewVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка журналарасчетво
Last1Cmenя в дельфи не силен но могу предполагать по 3му посту (если полный код приведен) что вы создали объёкт справочника и не спозиционировавшись на конкретном элементе что-то пытаетесь из него получить для поиска по реквизиту в таком же объекте справочнике

не понятна логика сего действия даше ошибочного

общая схема - получаем текстовый идентификатор (код, наименование, значение реквизита типа число\строка ) и по нему уже ищем в созданном для поиска объекте необходимого вида

т.е. в 3м посте "ole_1c_q.ВидРАсчета" должен содержать текст... проверьте это

текст полный.

т.е до
Код: plaintext
if sp_raschet.Найтипореквизиту('РАсчет',comp, 0 ) =  1  then

что то должно быть?
А что? :-)
...
Рейтинг: 0 / 0
06.06.2010, 01:34
    #36671467
Last1Cmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка журналарасчетво
AndrewVLLast1Cmenя в дельфи не силен но могу предполагать по 3му посту (если полный код приведен) что вы создали объёкт справочника и не спозиционировавшись на конкретном элементе что-то пытаетесь из него получить для поиска по реквизиту в таком же объекте справочнике

не понятна логика сего действия даше ошибочного

общая схема - получаем текстовый идентификатор (код, наименование, значение реквизита типа число\строка ) и по нему уже ищем в созданном для поиска объекте необходимого вида

т.е. в 3м посте "ole_1c_q.ВидРАсчета" должен содержать текст... проверьте это

текст полный.

т.е до
Код: plaintext
if sp_raschet.Найтипореквизиту('РАсчет',comp, 0 ) =  1  then

что то должно быть?
А что? :-)

строкой выше у вас что ? то что в текущей строке это уже потом важно
...
Рейтинг: 0 / 0
06.06.2010, 15:21
    #36671760
AndrewVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка журналарасчетво
Last1Cmen,

написал такую обработку

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
	Запрос = СоздатьОбъект("Запрос");
	ТекстЗапроса = 
	"//{{ЗАПРОС(РасчетныеЛистки)
	|Период с '01.01.2010' по '31.01.2010';
	|Сотрудник				= ЖурналРасчетов.Зарплата.Объект;
    |ФизЛицо				= ЖурналРасчетов.Зарплата.Объект.ОсновнойЭлемент;
|Расчет					= ЖурналРасчетов.Зарплата.ВидРасч;	
|ОсновнойЭлемент		= ЖурналРасчетов.Зарплата.Объект.ОсновнойЭлемент;

|Подразделение			= ЖурналРасчетов.Зарплата.Объект.ОсновнойЭлемент.Подразделение;

|ТекущийДокумент		= ЖурналРасчетов.Зарплата.ТекущийДокумент; 
|Результат				= ЖурналРасчетов.Зарплата.Результат;
|ДниВЖурнале			= ЖурналРасчетов.Зарплата.Дни;
|ЧасыВЖурнале			= ЖурналРасчетов.Зарплата.Часы;  
|Действие               = ЖурналРасчетов.Зарплата.ПериодДействия;
|Функция Сумма				= Сумма(Результат);
|Функция СуммаНачисления	= Сумма(Результат)	когда (Расчет.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления)=1);
|Функция СуммаУдержания		= Сумма(Результат)	когда (Расчет.ВходитВГруппу(ГруппаРасчетов.ВсеУдержания)=1);
|Функция СуммаПрочего		= Сумма(Результат)	когда (Расчет.ВходитВГруппу(ГруппаРасчетов.ДоходыВНатуральнойФорме)=1);
|Функция СуммаВыплаты		= Сумма(Результат)	когда (Расчет = ВидРасчета.ВыплатаЗарплаты);
|Функция СуммаВыплатыШтрафа	= Сумма(Результат)	когда (Расчет = ВидРасчета.КомпенсацияЗаПросрочкуЗарплаты);
|Функция ВозвратВКассу		= Сумма(Результат)	когда (Расчет = ВидРасчета.Возврат);
|Функция ДолгРаботников		= Сумма(Результат)	когда (((Расчет=ВидРасчета.НачальноеСальдоЗадолженность)или(Расчет=ВидРасчета.НачальноеСальдоОкругления)или(Расчет=ВидРасчета.НачальноеСальдоПереплатаНДФЛ)) и (Результат < 0));
|Функция ДолгПредприятия	= Сумма(Результат)	когда (((Расчет=ВидРасчета.НачальноеСальдоЗадолженность)или(Расчет=ВидРасчета.НачальноеСальдоОкругления)или(Расчет=ВидРасчета.НачальноеСальдоПереплатаНДФЛ)) и (Результат > 0));
|Функция ЗадолженностьПредприятия		= Сумма(Результат)	когда ((Расчет=ВидРасчета.НачальноеСальдоЗадолженность) и (Результат > 0));
|Функция СальдоОкругленияРаботников		= Сумма(Результат)	когда ((Расчет=ВидРасчета.НачальноеСальдоОкругления) и (Результат < 0));
|Функция СальдоОкругленияПредприятия	= Сумма(Результат)	когда ((Расчет=ВидРасчета.НачальноеСальдоОкругления) и (Результат > 0));
|Функция ПереплатаНДФЛПредприятия		= Сумма(Результат)	когда ((Расчет=ВидРасчета.НачальноеСальдоПереплатаНДФЛ) и (Результат > 0));
|Функция Дни				= Сумма(ДниВЖурнале);
|Функция Часы				= Сумма(ЧасыВЖурнале);
|Группировка ФизЛицо Без Групп;
	|Группировка Расчет упорядочить по Расчет.Очередность;  
	|Группировка Сотрудник Без Групп;
	|Группировка ТекущийДокумент упорядочить по ТекущийДокумент.ДатаДок;";
	
	
	
	Если Запрос.Выполнить(ТекстЗапроса)= 0  Тогда
		глСтатусСтрока(Контекст,"");
		Возврат;
	КонецЕсли;

Пока Запрос.группировка( 1 )= 1  Цикл	
			Расчет = Запрос.Расчет;
			zzz = глПредставлениеВидаРасчета(Расчет);
			сообщить(запрос.сотрудник);	
			сообщить("Вид расчета = "+zzz);
			сообщить("Код сотрудника = "+запрос.сотрудник.код);
			сообщить("Резальтат = "+запрос.результат);
			сообщить("---------------------------");
	
	конеццикла;


Посмотрел результат.
почему-то поле ФИЗЛИЦО в результате выполнения запроса пустое.
Все данные по челу в ОСНОВНОЙ ЭЛЕМЕНТ.

И нет ивнформации в поле Расчет.

Хотя в первоначальном варианте в поле РАСЧЕТ были данные. но что-то изменил и.....
...
Рейтинг: 0 / 0
07.06.2010, 09:55
    #36672379
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка журналарасчетво
вообще в лучших домах Лондона и Парижа появилась мода
в ЗиК группировать не по ЖурналРасчетов.Зарплата.Объект
а по : ЖурналРасчетов.Зарплата.Объект.ОсновнойЭлемент
хотя конечно смотря что надо ...
...
Рейтинг: 0 / 0
07.06.2010, 11:15
    #36672615
Last1Cmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка журналарасчетво
гм... насколько я понял это речь не про укр. ЗиК, у нас - не основной элемент а ФизическоеЛицо сразу

ну и вид расчета соответсвенно применимо к самому объекту (сотруднику) а не физлицу следовательно если верхний уровень группировок будет физлицом то и возможна ситуация с пустыми видами расчета... не проверял но думаю так и будет
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / выборка журналарасчетво / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]