[Logo] Форум ПАРУС
Создание отчетов  XML
Индекс форума » Разработка на платформе Парус-Торнадо
Автор Сообщение
DENNERV
Новичок

Зарегистрирован: 30.09.2013 10:22:48
Сообщений: 7
От:
Оффлайн

Спасибо, попробую

Это сообщение было изменено 4 раз. Последнее изменение было в 03.10.2013 13:17:33

[Email]
SARGEANT
Опытный пользователь

Зарегистрирован: 01.02.2013 14:12:25
Сообщений: 1980
Оффлайн

http://support.parus.ru/forum/posts/list/101645.page#460936

NADEZHDA_K wrote:
ROMAN3912 wrote:не смог сдвинуть именованное поле должность влево, как тяжело после отпуска головой работать. Слово в должности сдвинул а поле ну никак


Формулы => Диспетчер имён => Для поля меняем "Диапазон" либо кликом мыши либо "руками"))) мышью неудобно.
В крайнем случае можно удалить IText-компонент для должности и добавить его на другую ячейку в Excel.

Вы про это спрашивали?



А разве не дает просто мышью перетащить ячейку на листе в нужное место? при этом и имя перетаскивается в новое место.
В точности как в Парус7.
собственно, в точности как всю жизнь в Excelе оно и делалось.

или о чем речь-то была?

Это сообщение было изменено 1 раз. Последнее изменение было в 26.10.2013 18:37:19

SARGEANT
Опытный пользователь

Зарегистрирован: 01.02.2013 14:12:25
Сообщений: 1980
Оффлайн

В коде источника данных отчета «ПЮ-05 Сертификаты сотрудников.xml» есть строка
и т.д.

В файле parus.chm и в файле MedicinePersonnel.chm нету описания класса FilterSQLParser. Очевидно, описание отстает от разработки. Предположим, так оно всегда и будет. В таком случае где можно посмотреть исходный код этого класса, чтобы узнать точно, как его использовать? В Парус8 в таком случае шли да смотрели соответствующую процедуру в Оракле. Насчет Парус10 в «Меморандуме о Парус10», или где-то в этом роде, было написано что-то типа «система тоже открытая» и что «программные коды, как правило, хорошо читаемы», из чего я подумал, что дело обстоит примерно как в Парус8.

Так вот где посмотреть исходный код класса ParusYug.Business.Library.FilterSQLParser
?
куда идти, что открывать, чтобы до него добраться?
Нигде в документации по Парус10 этого не говорится. В документации по Visual Studio тоже вроде нигде не говорится, что исходные коды в распространяемом решении где-то обязаны быть доступны. Все dll-ки представляют собой нечто обычное компилированное, никаких исходных кодов там не видно

1) Что же тогда означала фраза «программные коды, как правило, хорошо читаемы»?

2) После некоторых поисков нашел описание этого класса в дистрибутиве Парус10 в файле packages\MedicinePers.zip\Library.pkg\Library.Interface.xml (только описание, а не исходный код). Судя по всему, этот xml-ный файл в пакете содержит ту самую информацию, что пишут в файлах типа parus.chm и MedicinePersonnel.chm. То есть вся эта информация на момент сборки релиза — есть в стандартизированном виде. Что же мешает генерить файлы parus.chm и MedicinePersonnel.chm в момент сборки релиза?! то есть почему же тогда они в релизе устаревшие или вообще отсутствуют, на момент выкладки дистрибутива на FTP?

Это сообщение было изменено 2 раз. Последнее изменение было в 03.11.2013 16:43:37

SARGEANT
Опытный пользователь

Зарегистрирован: 01.02.2013 14:12:25
Сообщений: 1980
Оффлайн

просим дать ответ.
вопросы для внедренцев весьма актуальные

и, надеюсь, не риторические. То есть имеют решение

Вот, нашел где было про читаемость программных кодов:
http://www.parus.com/tornado/node/51
(цитата)- - - - - - - - - - - -
Что в Торнадо с «открытостью»?
Прикладные решения, создаваемые Корпорацией на платформе Торнадо, изначально содержат обширное техническое описание. Применяемая технология разработки обеспечивает хорошую читаемость исходных текстов. Все публичные программные интерфейсы в обязательном порядке документированы. Для участников партнерской программы доступны техническая документация и исходные тексты прикладных решений.
- - - - - - - - - - - -(конец цитаты)
DUKHNOV
Новичок

Зарегистрирован: 30.10.2013 12:06:59
Сообщений: 133
Оффлайн

Подскажите, на верном ли я пути в своих размышлениях.

Получил задание сделать Сводную расчетную ведомость "как в восьмерке". То есть чтобы можно было формировать итоги например по категориям персонала и/или по подразделениям.
Разбираясь с этой проблемой пришел к выводам и вопросам (но хочу узнать верны ли эти выводы или нет):
1. Отчет формируется декларативно, значит "Сводная расчетная ведомость с итогами по подразделениям" и "Сводная расчетная ведомость с итогами по категориям персонала" - это будут два разных отчета, так как будут формироваться из разных наборов данных, иметь разные заголовки столбцов и т.д. или я перемудрил?
2. Я не имею доступа к БД напрямую из клиента, и все данные получаю через объекты сервера приложений. Как мне узнать через какой объект(класс), я могу получить к примеру зарплаты сотрудников за период?
3. Придется ли мне лезть в сборку и пытаться писать новый бизнес-класс, который будет готовить данные для выгрузки в эти отчеты? (громко звучит, я пока ещё представления не имею, как это реализовать)
M_USHAKOV
Пользователь
[Avatar]

Зарегистрирован: 14.01.2013 15:49:52
Сообщений: 678
От: Парус
Оффлайн

DUKHNOV wrote:Подскажите, на верном ли я пути в своих размышлениях.

Получил задание сделать Сводную расчетную ведомость "как в восьмерке". То есть чтобы можно было формировать итоги например по категориям персонала и/или по подразделениям.
Разбираясь с этой проблемой пришел к выводам и вопросам (но хочу узнать верны ли эти выводы или нет):
1. Отчет формируется декларативно, значит "Сводная расчетная ведомость с итогами по подразделениям" и "Сводная расчетная ведомость с итогами по категориям персонала" - это будут два разных отчета, так как будут формироваться из разных наборов данных, иметь разные заголовки столбцов и т.д. или я перемудрил?

Скорее всего да но надо внимательно смотреть состав данных, Ничто не мешает определить в шаблоне отчета несколько представлений и показывать/скрывать их в зависимости от параметров или еще чего нибудь.
DUKHNOV wrote:
2. Я не имею доступа к БД напрямую из клиента, и все данные получаю через объекты сервера приложений. Как мне узнать через какой объект(класс), я могу получить к примеру зарплаты сотрудников за период?

Тут ничем не могу помочь - свяжитесь с разработчиками зарплаты.
DUKHNOV wrote:
3. Придется ли мне лезть в сборку и пытаться писать новый бизнес-класс, который будет готовить данные для выгрузки в эти отчеты? (громко звучит, я пока ещё представления не имею, как это реализовать)

Нет не придется. Процедуру подготовки данных пишите прямо в шаблоне отчета.

Это сообщение было изменено 1 раз. Последнее изменение было в 07.11.2013 18:44:39

SARGEANT
Опытный пользователь

Зарегистрирован: 01.02.2013 14:12:25
Сообщений: 1980
Оффлайн

по прежнему просим дать ответ на вопрос, прозвучавший уже 2 раза:
http://support.parus.ru/forum/posts/list/30/101645.page#509714
ORLOV_A_B
Новичок
[Avatar]

Зарегистрирован: 06.07.2011 02:35:04
Сообщений: 47
От: Алексей Орлов
Оффлайн

SARGEANT wrote:просим дать ответ.
вопросы для внедренцев весьма актуальные

и, надеюсь, не риторические. То есть имеют решение

Вот, нашел где было про читаемость программных кодов:
http://www.parus.com/tornado/node/51
(цитата)- - - - - - - - - - - -
Что в Торнадо с «открытостью»?
Прикладные решения, создаваемые Корпорацией на платформе Торнадо, изначально содержат обширное техническое описание. Применяемая технология разработки обеспечивает хорошую читаемость исходных текстов. Все публичные программные интерфейсы в обязательном порядке документированы. Для участников партнерской программы доступны техническая документация и исходные тексты прикладных решений.
- - - - - - - - - - - -(конец цитаты)


Вступайте в программу, пройдите обучение, получите доступ к исходным кодам и другим ресурасам.

Это сообщение было изменено 1 раз. Последнее изменение было в 07.11.2013 20:56:28

DUKHNOV
Новичок

Зарегистрирован: 30.10.2013 12:06:59
Сообщений: 133
Оффлайн

ORLOV_A_B wrote:
...
Вступайте в программу, пройдите обучение, получите доступ к исходным кодам и другим ресурасам.


А если я уже работаю на компанию-партнера, то каким образом возможно получить этот доступ к документации?
Обучения не проходил и пока не планируется.

Это сообщение было изменено 2 раз. Последнее изменение было в 07.11.2013 21:06:24

SARGEANT
Опытный пользователь

Зарегистрирован: 01.02.2013 14:12:25
Сообщений: 1980
Оффлайн

вот и я о том же
SARGEANT
Опытный пользователь

Зарегистрирован: 01.02.2013 14:12:25
Сообщений: 1980
Оффлайн

просим всё же ответить и на вторую часть вопроса:
http://support.parus.ru/forum/posts/list/30/101645.page#501118

о том, что не дает генерить parus.chm, MedicinePersonnel.chm и т.п. сразу в момент сборки релиза. То есть почему эти файлы в дистрибутиве бывает что устаревшие или отсутствуют?
DUKHNOV
Новичок

Зарегистрирован: 30.10.2013 12:06:59
Сообщений: 133
Оффлайн

И снова поднимаю тему.

Есть задача: изменить отчет и добавить поле КБК.

Добавил я в функцию GenerateDataSet:

var tableMain = ds.Tables.Add("Main");
tableMain.Columns.Add("MyField", typeof(string)); // хочу сюда КБК выводить, перед этим конечно добавил CellGroup, туда добавил компонент Text

Начал писать свою функцию GetKBK, и тут возникает вопрос: откуда мне его взять? в смысле из какого поля какого класса? в файлике parus.chm я вижу пространсва имен и иерархию классов. но как мне опять же найти КБК?
Эмпирически, методом тыка, выгружая готовые отчеты, нашел свойство "BC" класса Parus.Business.Budget.CalculationsBases. Замечательно.
Сейчас буду разбираться как по этой ссылке получить сам КБК.
Но меня смущает перспектива написания целиком моего отчета, не модернизация, а написание с нуля.

Кто какую методологию использует, для быстрого поиска и ориентирования в классах Торнадо?
DUKHNOV
Новичок

Зарегистрирован: 30.10.2013 12:06:59
Сообщений: 133
Оффлайн

Тогда более конкретный вопрос.
В одном из отчетов есть функция GenerateDataSet, в её коде есть строка:
var document = Parameters["Document"] as Parus.Business.Budget.ICalculationsBases;

Далее, в другой функции GetKpp вижу следующее:

var kpp = document.Organization.With(x => x.Counteragent).With(x => (string)x.KPP);

Её вызов выглядит так: rowTableSample["KPP"] = GetKpp(document);
И тут вопросы:
1. Под x понимается var document = Parameters["Document"] as Parus.Business.Budget.ICalculationsBases;?
2. В файле справки докопался до того, что у класса Parus.Business.Budget.ICalculationsBases есть свойства Organization (ссылка на объект Parus.Business.ServedOrganization, у которого есть свойство Counteragent - ссылка на объект и т.д.).

Вопрос в следующем: как именно работает With?

Если x - это document, то (x => x.Counteragent) - это и есть свойство класса Parus.Business.Budget.ICalculationsBases?
В LINQ на MSDN похожего не нахожу.
SARGEANT
Опытный пользователь

Зарегистрирован: 01.02.2013 14:12:25
Сообщений: 1980
Оффлайн

DUKHNOV wrote:Кто какую методологию использует, для быстрого поиска и ориентирования в классах Торнадо?


похоже, что никто никакую не использует, раз все молчат. В Москве в проекте Торнадо, представляете, даже утверждают, что внедрение Торнадо возможно и без программиста. Похоже, они правы?
))

Что касается как быстро найти нужный класс Торнадо – то очевидно по файлу parus.chm. Пользуясь всеми классическими возможностями справки Windows – а именно вкладками Указатель и Поиск (а не только Содержание). Для этого, конечно, требуется немного понимать по-английски, поскольку все наименования на английском языке.

Например, бюджетную классификацию банально ищем на вкладке Указатель, по алфавиту. И достаточно быстро находим пункт:
BudgetClassification Namespace
а там вроде всё и написано. В том числе и про сам класс BudgetClassification

То есть написано что у класса этого есть мнемокод — поле Code. Вам именно мнемокод выцепить ведь надо? Откуда выцепить – Вы тоже уже вроде бы нашли. То есть из оснований расчетов Parus.Business.Budget.CalculationsBases

Кроме того, найти все (ну насколько конечно можно ручаться за полноту справки) места, ссылающиеся на класс BudgetClassification, если вдруг надо станет, можно на вкладке Поиск. Искать, естественно, на строку BudgetClassification. Оно там выдает под сотню мест. В том числе и CalculationsBases

Это сообщение было изменено 1 раз. Последнее изменение было в 22.11.2013 15:18:59

DUKHNOV
Новичок

Зарегистрирован: 30.10.2013 12:06:59
Сообщений: 133
Оффлайн

SARGEANT wrote:
DUKHNOV wrote:Кто какую методологию использует, для быстрого поиска и ориентирования в классах Торнадо?

...
Что касается как быстро найти нужный класс Торнадо – то очевидно по файлу parus.chm. Пользуясь всеми классическими возможностями справки Windows – а именно вкладками Указатель и Поиск (а не только Содержание). Для этого, конечно, требуется немного понимать по-английски, поскольку все наименования на английском языке.
...
Кроме того, найти все (ну насколько конечно можно ручаться за полноту справки) места, ссылающиеся на класс BudgetClassification, если вдруг надо станет, можно на вкладке Поиск. Искать, естественно, на строку BudgetClassification. Оно там выдает под сотню мест. В том числе и CalculationsBases


Вот так и ищем)))
Благо ковыряясь в отчете нашел класс, и уже в его свойствах увидел этот КБК, который означен как BC (видимо BudgetClassification, вот попробуй догадайся), случайно. Не повезло бы мне, не фигурировал бы там в функции подготовки данных этот класс (а какой нибудь другой), так попробуй сыщи.
О том и говорю: преобразовать - полбеды, написать с нуля - от этих мыслей немного потряхивает

Это сообщение было изменено 1 раз. Последнее изменение было в 22.11.2013 15:41:15

SARGEANT
Опытный пользователь

Зарегистрирован: 01.02.2013 14:12:25
Сообщений: 1980
Оффлайн

DUKHNOV wrote:1. Под x понимается var document = Parameters["Document"] as Parus.Business.Budget.ICalculationsBases;?

точнее, под x понимается Parus.Business.Budget.ICalculationsBases.Organization. Написано же:
document.Organization.With(x

DUKHNOV wrote:Вопрос в следующем: как именно работает With?
В LINQ на MSDN похожего не нахожу.

надо же, действительно!
не только в LINQ, а вообще во всей справке MSDN 2008, если судить по её Указателю.
Родной 2008й MSDN, очевидно, фактически не соответствует релизу Visual Studio, с которым он поставляется. Имеет смысл поставить рядом еще MSDN от 2010й студии, наверно.

Судя по коду, With — это метод, который берет первый попавшийся по иерархии вниз член с таким именем. Нельзя было просто написать
var kpp = (string) document.Organization.Counteragent.KPP;
, потому что у Counteragent, судя по parus.chm, нет свойства KPP. Свойство KPP находится ниже:
Counteragent.JuridicalPerson.KPP;
, поэтому для совместимости с будущими версиями , видимо, пишут не просто
var kpp = (string) document.Organization.Counteragent.JuridicalPerson.KPP;
, а пишут через With, без JuridicalPerson

Это сообщение было изменено 1 раз. Последнее изменение было в 22.11.2013 16:24:55

SARGEANT
Опытный пользователь

Зарегистрирован: 01.02.2013 14:12:25
Сообщений: 1980
Оффлайн

или вернее не для совместимости с будущими версиями, а чтобы не падало, если Counteragent не юридическое лицо, а физическое
SHIBANOV
Пользователь

Зарегистрирован: 06.11.2012 10:30:16
Сообщений: 513
От: Алексей Шибанов
Оффлайн

With - метод расширения для всех ссылочных типов, используется для проверки свойств объектов на равенство null
Без него, если в вашем примере document.Organization.Counteragent.JuridicalPerson.KPP свойство JuridicalPerson равно null, то во время выполнения возникнет NullReferenceException.
Что-то подобное делает NVL в VFP.

Это сообщение было изменено 1 раз. Последнее изменение было в 22.11.2013 20:27:29

[Email] [ICQ]
SARGEANT
Опытный пользователь

Зарегистрирован: 01.02.2013 14:12:25
Сообщений: 1980
Оффлайн

то есть With - это не родной метод, а парусный.
круто
так похож на родной

и опять недокументированный. То есть в документе "Прикладное программирование в системе торнадо.docx" про него нету

ну вот как без исходников работать с такими делами, а?
SARGEANT
Опытный пользователь

Зарегистрирован: 01.02.2013 14:12:25
Сообщений: 1980
Оффлайн

стоп. Этот метод по-прежнему не понятен. Как так можно писать
var kpp = document.Organization.With(x => x.Counteragent).With(x => (string)x.KPP);

, если у Counteragent нет свойства KPP?
То есть здесь нигде не поминается JuridicalPerson. Откуда же оно понимает, что свойство KPP - это свойство свойства JuridicalPerson?
SHIBANOV
Пользователь

Зарегистрирован: 06.11.2012 10:30:16
Сообщений: 513
От: Алексей Шибанов
Оффлайн

SARGEANT wrote:то есть With - это не родной метод, а парусный.
круто
так похож на родной

и опять недокументированный. То есть в документе "Прикладное программирование в системе торнадо.docx" про него нету

ну вот как без исходников работать с такими делами, а?


Задать вопрос на форуме, например..

Это сообщение было изменено 1 раз. Последнее изменение было в 23.11.2013 20:29:10

[Email] [ICQ]
SHIBANOV
Пользователь

Зарегистрирован: 06.11.2012 10:30:16
Сообщений: 513
От: Алексей Шибанов
Оффлайн

SARGEANT wrote:стоп. Этот метод по-прежнему не понятен. Как так можно писать
var kpp = document.Organization.With(x => x.Counteragent).With(x => (string)x.KPP);

, если у Counteragent нет свойства KPP?
То есть здесь нигде не поминается JuridicalPerson. Откуда же оно понимает, что свойство KPP - это свойство свойства JuridicalPerson?


У бизнес-класса контрагента есть вычисляемый атрибут KPP, который берет КПП, если конрагент - юридическое лицо, иначе пусто.

Это сообщение было изменено 1 раз. Последнее изменение было в 23.11.2013 20:31:01

[Email] [ICQ]
SARGEANT
Опытный пользователь

Зарегистрирован: 01.02.2013 14:12:25
Сообщений: 1980
Оффлайн

Спасибо!
SHIBANOV wrote:У бизнес-класса контрагента есть вычисляемый атрибут KPP

кстати, про него опять-таки нигде не написано. В parus.chm про него нету. Согласно parus.chm, у этого класса всего 4 атрибута: Mnemo, Catalog, Person и JuridicalPerson

1) вычисляемые атрибуты принято не писать в parus.chm?
2) можно ли рассчитывать, что все атрибуты классов Person и JuridicalPerson являются также и вычисляемыми атрибутами класса Counteragent?

http://support.parus.ru/forum/posts/list/40/101645.page#575314
SHIBANOV wrote:если в вашем примере document.Organization.Counteragent.JuridicalPerson.KPP свойство JuridicalPerson равно null, то во время выполнения возникнет NullReferenceException

Так ведь авторы шаблона и не пишут через JuridicalPerson.
Как мы теперь поняли, именно потому, что у Counteragent есть нужный вычисляемый атрибут

Но почему же тогда авторы шаблона не написали безо всяких With, просто:
var kpp = (string) document.Organization.Counteragent.KPP;

?

Это сообщение было изменено 1 раз. Последнее изменение было в 25.11.2013 11:21:46

SHIBANOV
Пользователь

Зарегистрирован: 06.11.2012 10:30:16
Сообщений: 513
От: Алексей Шибанов
Оффлайн

SARGEANT wrote:
Так ведь авторы шаблона и не пишут через JuridicalPerson.
Как мы теперь поняли, именно потому, что у Counteragent есть нужный вычисляемый атрибут

Но почему же тогда авторы шаблона не написали безо всяких With, просто:
var kpp = (string) document.Organization.Counteragent.KPP;

?

Потому что любая из ссылок в цепочке document.Organization.Counteragent.KPP теоретически может иметь значение null. И в этом случае без With получим исключение времени выполнения.

Это сообщение было изменено 1 раз. Последнее изменение было в 25.11.2013 11:26:19

[Email] [ICQ]
SHIBANOV
Пользователь

Зарегистрирован: 06.11.2012 10:30:16
Сообщений: 513
От: Алексей Шибанов
Оффлайн

SARGEANT wrote:
1) вычисляемые атрибуты принято не писать в parus.chm?
2) можно ли рассчитывать, что все атрибуты классов Person и JuridicalPerson являются также и вычисляемыми атрибутами класса Counteragent?

Про что принято писать в parus.chm ответить не могу, не знаю.
Нет, нельзя рассчитывать, что все атрибуты классов Person и JuridicalPerson являются вычисляемыми атрибутами класса Counteragent. На текущий момент описаны: Name, FullName, FullNameShort, INN, KPP, INNKPP, OKATO.

В Visual Studio есть Object Browser, позволяет просматривать свойства и методы классов из любой dll.

Это сообщение было изменено 2 раз. Последнее изменение было в 25.11.2013 11:40:26

[Email] [ICQ]
DUKHNOV
Новичок

Зарегистрирован: 30.10.2013 12:06:59
Сообщений: 133
Оффлайн

Немного мне мозг покоробило.

Из того же отчета, как работает вот такая конструкция?
Сколько параметров может принимать метод With:
rowTableSample["INN"] = "ИНН " + document.Organization.With(x => x.Counteragent).With(x => (string)x.INN, string.Empty);

вопрос относится к ... .With(x => (string)x.INN, string.Empty);

Можно подробнее про синтаксис этой прелести?

Это сообщение было изменено 1 раз. Последнее изменение было в 25.11.2013 16:49:50

DUKHNOV
Новичок

Зарегистрирован: 30.10.2013 12:06:59
Сообщений: 133
Оффлайн

И сразу второй вопрос. Отчего может возникнуть ошибка:
Can not create nested control in existed m_Text28 that is non container?

Добавил в отчет компонент CellGroup, выделив строку ячеек. Потом пытаюсь добавить компонент Text для диапазона ячеек этой строки. Вылетает эта ошибка. Что делать?
SHIBANOV
Пользователь

Зарегистрирован: 06.11.2012 10:30:16
Сообщений: 513
От: Алексей Шибанов
Оффлайн

DUKHNOV wrote:Немного мне мозг покоробило.

Из того же отчета, как работает вот такая конструкция?
Сколько параметров может принимать метод With:
rowTableSample["INN"] = "ИНН " + document.Organization.With(x => x.Counteragent).With(x => (string)x.INN, string.Empty);

вопрос относится к ... .With(x => (string)x.INN, string.Empty);

Можно подробнее про синтаксис этой прелести?


Есть две перегрузки метода With. Если указан второй параметр метода, он возвращается когда параметр лямбда-выражения равен null. В случае, когда второй параметр метода не указан и параметр лямбда-выражения равен null, возвращается дефолтное значение типа результата лямбда-выражения.

Т.е. на Вашем примере
With(x => (string)x.INN, string.Empty), если x == null, выражение вернет string.Empty;
With(x => (string)x.INN), если x == null, выражение вернет null.
В обоих случаях, если x != null, вернется строка ИНН.

Это сообщение было изменено 4 раз. Последнее изменение было в 26.11.2013 08:53:48

[Email] [ICQ]
SHIBANOV
Пользователь

Зарегистрирован: 06.11.2012 10:30:16
Сообщений: 513
От: Алексей Шибанов
Оффлайн

DUKHNOV wrote:И сразу второй вопрос. Отчего может возникнуть ошибка:
Can not create nested control in existed m_Text28 that is non container?

Добавил в отчет компонент CellGroup, выделив строку ячеек. Потом пытаюсь добавить компонент Text для диапазона ячеек этой строки. Вылетает эта ошибка. Что делать?

Очевидно, что на том месте, куда Вы пытаетесь вставить текстовый компонент, уже есть другой текстовый компонент, и он не может являться контейнером. Попробуйте сначала удалить компонент m_Text28.

Это сообщение было изменено 1 раз. Последнее изменение было в 25.11.2013 21:43:35

[Email] [ICQ]
SARGEANT
Опытный пользователь

Зарегистрирован: 01.02.2013 14:12:25
Сообщений: 1980
Оффлайн

а мне нравится

по функциональному программированию мы 1Сов теперь обошли. И это скорее хорошо, чем плохо

В целом, конечно, идем в прежнем направлении — требования к квалификации программиста Парус в разы выше, чем к программисту 1С. Это может и хорошо для программиста Парус
но хорошо ли для корпорации Парус?

SHIBANOV wrote:Потому что любая из ссылок в цепочке document.Organization.Counteragent.KPP теоретически может иметь значение null. И в этом случае без With получим исключение времени выполнения.

Вообще-то в parus.chm написано, что и атрибут Organization, и атрибут Counteragent — обязательные. Каким образом может оказаться, что они окажутся незаполненными?

SHIBANOV wrote:В Visual Studio есть Object Browser, позволяет просматривать свойства и методы классов из любой dll.

хорошо,
но как узнать в какой dll находится класс Parus.Business.Counteragent,
и где ее взять, эту dll?

в parus.chm это не написано

методом научного тыка пока вижу, что в базе MSSQL есть таблицы classes и packages, по которым с некоторым напрягом можно вычислить эту энигму. Но попрямее метод есть?

SHIBANOV wrote:rowTableSample["INN"] = "ИНН " + document.Organization.With(x => x.Counteragent).With(x => (string)x.INN, string.Empty);
Есть две перегрузки метода With. Если указан второй параметр метода, он возвращается когда параметр лямбда-выражения равен null. В случае, когда второй параметр метода не указан и параметр лямбда-выражения равен null, возвращается дефолтное значение результата лямбда-выражения.

спасибо, вроде бы понятно
но почему здесь вдруг второй параметр авторы шаблона написали, а в ранее приведенном примере, при всём точно том же — не написали:
http://support.parus.ru/forum/posts/list/30/101645.page#572914
var kpp = document.Organization.With(x => x.Counteragent).With(x => (string)x.KPP);

DUKHNOV wrote:Добавил в отчет компонент CellGroup, выделив строку ячеек. Потом пытаюсь добавить компонент Text для диапазона ячеек этой строки. Вылетает эта ошибка. Что делать?

может выложить шаблон сюда?
воспроизвести проблему — это ж половина решения

Это сообщение было изменено 1 раз. Последнее изменение было в 25.11.2013 22:12:20

 
Индекс форума » Разработка на платформе Парус-Торнадо
Перейти: