Форумы » Вопросы и ответы по интеграции »
Можно ли немножко поучавствовать в проекте?
Добавил(а) Алексей Диркс больше 6 лет назад
В некоторых случаях очень хочется подправить интерфейс. Немножко.
Например, в обработке ГО_Реализации спрятать колонки раскраски, и сделать автоширину таблички с документами.
Обработку взял последнюю, с гитхаба. Дата 25.06.18 16:00
Ответы (24)
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) кб99 Синявский Филипп больше 6 лет назад
Спасибо, табличная часть групповых обработок будет переделываться на табличное поле в ближайшее время
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) Алексей Диркс больше 6 лет назад
В таком случае тем более привязки понадобятся. Могу класс предоставить.
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) кб99 Синявский Филипп больше 6 лет назад
Отлично, очень рады такой инициативе
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) Алексей Диркс больше 6 лет назад
Люблю, чтобы красиво было :)
а без привязок как-то не получается красиво.
Обратите внимание на содержимое Mercury.prm - я там с путями поигрался, чтобы класс МеркурийИнтеграция лежал в отдельной папке.
А то каждый раз при обновлении надо помнить, что его не затереть
чуть-чуть описания:
(вообще-то оно в .prm д.б., но почему-то ошибки полезли)
/// После создания экземпляра класса обязаельно д.б. вызван метод Инит() /// оПривязки = СоздатьОбъект("Меркурий.Привязки"); /// оПривязки.Инит(Контекст); ///Для функционирования привязок в управляющий объект должны транслироваться следующие события FormEx /// - ПослеОткрытия() /// - ПриИзмененииРазмераОкна() ///Метод Добавить(ИмяАтр, ...) ///<Описание>Привязывает атрибут формы к другим атрибутам. Параметры привязок должны передаваться после имени атрибута, и составлять пары (ТипПривязки, ИмяБазовогоАтрибута). ///Все привязки - это привязки края атрибута (верх, низ, лево, право) к краю другого атрибута. Вид привязки может задаваться как в виде строки, так и константой самого класса. ///Возможные виды привязок: /// - ЛЛ (привЛево) - левый край к левому краю; /// - ЛП (привЛевоКПраво) - левый край к правому; /// - ПЛ (привПраво) - правый край к левому; /// - ПП (привПравоКПраво) - правый край к правому; /// - ВВ (привВерх) - верхний край к верхнему; /// - ВН (привВерхКНизу) - верхний край к нижнему; /// - НВ (привНиз) - нижний край к верхнему; /// - НН (привНизКНизу) - нижний край к нижнему. ///В качестве базового атрибута (т.е. того, к которому осуществляется привязка) может использоваться любой атрибут формы, и сама форма.</Описание> ///<returns type = "Число">1 - атрибут добавлен в привязки, 0 - ошибка.</returns> Пример инициализации Перем оПривязки; //:Меркурий.Привязки Процедура Привязки_Инит() оПривязки = СоздатьОбъект("Меркурий.Привязки"); оПривязки.Инит(Контекст); оПривязки.Добавить("СписокДокументов, грпПартии, тзНеобходимыеПартии", "ПП", "Форма", "НН", "Форма"); //оПривязки.Добавить("кнОК, кнЗаписать, кнЗакрыть", "ВН", "Форма"); оПривязки.Добавить("текстВерсия", "ВН", "Форма"); КонецПроцедуры Процедура ПриОткрытии() Привязки_Инит(); КонецПроцедуры
ExtForms.rar (41,8 КБ) ExtForms.rar |
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) Алексей Диркс больше 6 лет назад
и ещё немаловажное замечание:
если в форме используются привязки, то лучше в свойствах формы выключить галку "Изменять размер", во избежание конкуренции
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) кб99 Синявский Филипп больше 6 лет назад
Начал проверять - у меня ругается в классе класс_Меркурий_Привязки.ert на НайтиСтрокуТЗ и Функция СтрокуВСписок(Стр)
Если НайтиСтрокуТЗ<<?>>(тзСплиттеры, "Идентификатор", итНастройки.Идентификатор) = 0 Тогда {C:\1C\PRIOSKOL\COMPLEX\EXTFORMS\TEST\КЛАСС_МЕРКУРИЙ_ПРИВЯЗКИ.ERT(1024)}: Функция не обнаружена (НайтиСтрокуТЗ)
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) кб99 Синявский Филипп больше 6 лет назад
А так работа впечатляет...
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) Алексей Диркс больше 6 лет назад
Как обычно, забыл проверить без ГМ.
Отправляю версию с этими методам в классе.
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) кб99 Синявский Филипп больше 6 лет назад
Спасибо, здорово!
закомитил https://github.com/phsin/vetrf
будем тестировать
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) Алексей Диркс больше 6 лет назад
По поводу ТП.
Зря вы функционал, относящийся к ТП, помещаете в глобалный модуль. Лучше сделать отдельный класс, унаследовав его от ТабличноеПоле.
Таким образом можно отрабатывать события в классе, и прикручивать туда общий функционал.
В приложенном примере создаётся иерархия из 2-х классов:
Меркурий.ТабличноеПоле : ТабличноеПоле
Меркурий.ТабличноеПоле.ТЗ : Меркурий.ТабличноеПоле
и пример их использования
Можете его использовать как есть, или в качестве примера. Ну или не использовать
Контекстное меню работать не будет, т.к. для него используется ещё один класс и ВК.
Для сохранения/восстановления настроек тоже надо что-то сделать, т.к. у нас этот функционал привязан к БД.
см. глПользователь.СохранитьНастройку(...) и глПользователь.СчитатьНастройку(...)
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) Алексей Диркс больше 6 лет назад
Ещё небольшая поправочка в ГМ::НайтиХозСубъект(ВыбКлиент)
когда создаём ХС, логично было бы попытаться заполнить ИНН и ОГРН
СпрХС.ИНН = ПолучитьИНН(ВыбКлиент);
СпрХС.ОГРН = ПолучитьОГРН(ВыбКлиент);
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) Алексей Диркс больше 6 лет назад
Ошибочка:
1) ГМ::ПолучитьТзРеализаций()
вместо
|Left join | $Документ.ВСД_транзакция as ДокВСД | ON SUBSTRING($ДокВСД.ДокОснование, 5, 8) = Жур.IDDoc
надо писать
|Left join | $Документ.ВСД_транзакция as ДокВСД | ON SUBSTRING($ДокВСД.ДокОснование, 5, 9) = Жур.IDDoc
т.к. длина IDDoc - 9 символов. Оно работало конечно, но лучше писать правильно
2) там же (ГМ::ПолучитьТзРеализаций())
вместо
$ДокВСД.Статус <> 'Аннулирова'
надо писать
IsNull($ДокВСД.Статус, '') <> 'Аннулирова'
т.к. если $ДокВСД не приджойнился, то результатом проверки будет Null, и реализации в результат не попадут
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) кб99 Синявский Филипп больше 6 лет назад
Алексей Диркс писал(а):
Ошибочка:
1) ГМ::ПолучитьТзРеализаций()вместо
[...]
надо писать
[...]т.к. длина IDDoc - 9 символов. Оно работало конечно, но лучше писать правильно
Почему вы так думаете?
структура таблиц следующая
2) там же (ГМ::ПолучитьТзРеализаций())
вместо
[...]
надо писать
[...]т.к. если $ДокВСД не приджойнился, то результатом проверки будет Null, и реализации в результат не попадут
у меня выходят Реализации и с ВСД и без ВСД / с джойном и без джойна ...
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) кб99 Синявский Филипп больше 6 лет назад
другой вопрос как обойтись без вложенного запроса
ТекстЗапроса = " |SELECT | Жур.IDDoc as [Док $Документ], | Жур.IDDocDef as Док_вид, | ДокВСД.IDDoc as [ДокВСД $Документ.ВСД_транзакция], | Жур.DocNo as [НомерДок], | $ДокР.Контрагент as [Контрагент $Справочник.Контрагенты], | $ДокР."+ НазваниеРеквизитаГрузополучатель +" as [Грузополучатель $Справочник."+ ВидГрузополучателя +"], | SUM($ДокСтроки."+ НазваниеРеквизитаКоличество +") [Количество], | SUM($ДокСтроки."+ НазваниеРеквизитаКоличествоМест +") [КоличествоМест] |FROM | _1SJourn Жур |INNER JOIN | $ДокументСтроки."+ НазваниеВидаДокументаРеализация +" as ДокСтроки | ON Жур.IDDoc = ДокСтроки.IDDoc |INNER JOIN | $Документ."+ НазваниеВидаДокументаРеализация +" as ДокР | ON Жур.IDDoc = ДокР.IDDoc // очень некрасиво, но как убрать удаленные ВСД с минимальными потерями ? // сейчас мы убираем только аннулированные | LEFT JOIN (SELECT ВСД.IDDOC as IDDOC | , SUBSTRING($ВСД.ДокОснование, 5, 8) as Реал | FROM $Документ.ВСД_транзакция as ВСД | INNER JOIN _1SJourn Жур2 | ON Жур2.IDDoc = ВСД.IDDoc | AND Жур2.ismark = 0 | ) as ДокВСД ON ДокВСД.Реал = Жур.IDDoc |"; Если ПропускатьПустыеСвойства =1 Тогда ТекстЗапроса=ТекстЗапроса+" | inner join $Справочник.Номенклатура as Ном | on $ДокСтроки.Номенклатура= Ном.ID | and $Ном.ВСД_Продукция_Элемент <> $ПустойИД |"; КонецЕсли; ТекстЗапроса=ТекстЗапроса+" |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND | Жур.IDDocDef = $ВидДокумента."+ НазваниеВидаДокументаРеализация +" | and Жур.Closed & 1 = 1 | and $ДокВСД.Статус <> 'Аннулирова' |"; ТекстЗапроса=ТекстЗапроса+" | %УсловиеПоГрузополучателю% | %УсловиеПоФирме% | |GROUP BY | Жур.IDDoc, | Жур.IDDocDef, | Жур.DocNo, | $ДокР.Контрагент, | $ДокР."+ НазваниеРеквизитаГрузополучатель +", | ДокВСД.IDDoc | |order by Жур.DocNo |";
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) Алексей Диркс больше 6 лет назад
1) Описание таблиц для SQL можно посмотреть здесь http://www.script-coding.com/v77tables.html
п. 1.1.1. Хранение ID объекта
Этот формат используется во всех таблицах. В нашем случае ДокОснование - документ неопределенного вида - char(13)
а IdDoc - всегда char(9)
чтобы из char(13) получить char(9) надо либо Right(..., 9) либо Substring(..., 5, 9)
2) Поведение зависит от настроек (SET ANSI_NULLS ON/OFF)
MSDN: https://msdn.microsoft.com/ru-ru/library/ms188048(v=sql.120)
По умолчанию оно ON, а у вас судя по всему OFF.
У меня как раз без IsNull() выводятся только уже сформированные транзакции.
Лучше подстраховаться, чтобы не зависеть от настроек сервера.
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) Алексей Диркс больше 6 лет назад
Фильтр помеченных на удаление
|SELECT | Жур.IDDoc as [Док $Документ], | Жур.IDDocDef as Док_вид, | ДокВСД.IDDoc as [ДокВСД $Документ.ВСД_транзакция], | Жур.DocNo as [НомерДок], | $ДокР.Контрагент as [Контрагент $Справочник.Контрагенты], | $ДокР."+ НазваниеРеквизитаГрузополучатель +" as [Грузополучатель $Справочник."+ ВидГрузополучателя +"], | SUM($ДокСтроки."+ НазваниеРеквизитаКоличество +") [Количество], | SUM($ДокСтроки."+ НазваниеРеквизитаКоличествоМест +") [КоличествоМест] |FROM | _1SJourn Жур | INNER JOIN $ДокументСтроки."+ НазваниеВидаДокументаРеализация +" as ДокСтроки ON Жур.IDDoc = ДокСтроки.IDDoc | INNER JOIN $Документ."+ НазваниеВидаДокументаРеализация +" as ДокР ON Жур.IDDoc = ДокР.IDDoc | Left join $Документ.ВСД_транзакция as ДокВСД ON SUBSTRING($ДокВСД.ДокОснование, 5, 9) = Жур.IDDoc | // Джойн для журнала ВСД | LEFT JOIN _1SJourn жДокВСД With(NoLock) ON жДокВСД.IDDoc = ДокВСД.IDDoc |"; Если ПропускатьПустыеСвойства =1 Тогда ТекстЗапроса=ТекстЗапроса+" | inner join $Справочник.Номенклатура as Ном | on $ДокСтроки.Номенклатура= Ном.ID | and $Ном.ВСД_Продукция_Элемент <> $ПустойИД |"; КонецЕсли; ТекстЗапроса=ТекстЗапроса+" |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND | Жур.IDDocDef = $ВидДокумента."+ НазваниеВидаДокументаРеализация +" | and Жур.Closed & 1 = 1 | and IsNull($ДокВСД.Статус, '') <> 'Аннулирова' | //Фильтр помеченных на удаление | AND IsNull(жДокВСД.IsMark, -1) != 1
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) Алексей Диркс больше 6 лет назад
ой... что-то пошло не так
ТекстЗапроса = "
|SELECT
| Жур.IDDoc as [Док $Документ],
| Жур.IDDocDef as Док_вид,
| ДокВСД.IDDoc as [ДокВСД $Документ.ВСД_транзакция],
| Жур.DocNo as [НомерДок],
| $ДокР.Контрагент as [Контрагент $Справочник.Контрагенты],
| $ДокР."+ НазваниеРеквизитаГрузополучатель +" as [Грузополучатель $Справочник."+ ВидГрузополучателя +"],
| SUM($ДокСтроки."+ НазваниеРеквизитаКоличество +") [Количество],
| SUM($ДокСтроки."+ НазваниеРеквизитаКоличествоМест +") [КоличествоМест]
|FROM
| _1SJourn Жур
| INNER JOIN $ДокументСтроки."+ НазваниеВидаДокументаРеализация +" as ДокСтроки ON Жур.IDDoc = ДокСтроки.IDDoc
| INNER JOIN $Документ."+ НазваниеВидаДокументаРеализация +" as ДокР ON Жур.IDDoc = ДокР.IDDoc
| Left join $Документ.ВСД_транзакция as ДокВСД ON SUBSTRING($ДокВСД.ДокОснование, 5, 9) = Жур.IDDoc
|
// Джойн для журнала ВСД
| LEFT JOIN _1SJourn жДокВСД With(NoLock) ON жДокВСД.IDDoc = ДокВСД.IDDoc
|";
Если ПропускатьПустыеСвойства =1 Тогда
ТекстЗапроса=ТекстЗапроса+"
| inner join $Справочник.Номенклатура as Ном
| on $ДокСтроки.Номенклатура= Ном.ID
| and $Ном.ВСД_Продукция_Элемент <> $ПустойИД
|";
КонецЕсли;
ТекстЗапроса=ТекстЗапроса+"
|WHERE
| Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
| Жур.IDDocDef = $ВидДокумента."+ НазваниеВидаДокументаРеализация +"
| and Жур.Closed & 1 = 1
| and IsNull($ДокВСД.Статус, '') <> 'Аннулирова'
|
//Фильтр помеченных на удаление
| AND IsNull(жДокВСД.IsMark, -1) != 1
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) Алексей Диркс больше 6 лет назад
можно ещё по-другому условие написать, даже наверное более правильно
AND (
ДокВСД.sp10200 Is Null
OR ДокВСД.sp10200 != 'Аннулирова'
OR жДокВСД.IsMark != 1
)
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) кб99 Синявский Филипп больше 6 лет назад
всё же не работает - задваивает Реализации, если ВСД помечены на удаление
+на SQL2000 выдает ошибку
State 42000, native 156, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'WITH'.
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) Алексей Диркс больше 6 лет назад
тогда чёрт с ним, с NoLock'ом
джойн:
LEFT JOIN _1SJourn жДокВСД ON жДокВСД.IDDoc = ДокВСД.IDDoc
с условием я конечно напутал. Надо так:
| AND (
| $ДокВСД.Статус Is Null
| OR (
| $ДокВСД.Статус != 'Аннулирова'
| AND жДокВСД.ISMark != 1
| )
| )
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) Владимир Сергей больше 6 лет назад
Обновился, теперь получаю:
оПривязки.Привязка("ТЗВСД", "H", "Форма", "W", "Форма");
{D:\BASE\DB\EXTFORMS\МЕРКУРИЙ_ГАШЕНИЕ_ВСД2.ERT}: Значение не представляет агрегатный объект (Привязка)
оПривязки.УстановитьФорму(Форма);
{D:\BASE\DB\EXTFORMS\МЕРКУРИЙ_ГО_РЕАЛИЗАЦИИ_ТРАНЗАКЦИИ_2.ERT}: Значение не представляет агрегатный объект (УстановитьФорму)
оПривязки.Привязка("ВыбНоменклатура", "H", "Форма", "W", "Форма");
{D:\BASE\DB\EXTFORMS\ВСД_СОЗДАТЬПРОДУКЦИЯ_ЭЛЕМЕНТ.ERT}: Значение не представляет агрегатный объект (Привязка)
в defcls.prm добавил:
class Меркурий.Привязки = .\ExtForms\Меркурий\класс_Меркурий_Привязки.ert : РасширениеФормы
{
void Привязка(Строка ИДЭлемента, Строка ТипВ="", Строка ИДЭлементаВ="", Строка ТипГ="", Строка ИДЭлементаГ="");
void УстановитьФорму(РасширяемаяФорма);
void ПриИзмененииРазмераОкна(ТипСобытия, ШиринаФормы, ВысотаФормы);
void ПослеОткрытия();
void Сбросить();
void Выровнять(ИДЭлемента, Граница, ИДЭлементаЦель, ГраницаЦель, Отступ);
void Привязать();
};
класс Меркурий.ТабличноеПоле = .\ExtForms\Меркурий\класс_Меркурий_ТабличноеПоле.ert : ТабличноеПоле
{
};
класс Меркурий.ТабличноеПоле.ТЗ = .\ExtForms\Меркурий\класс_Меркурий_ТабличноеПоле_ТЗ.ert : Меркурий.ТабличноеПоле
{
};
Что может быть не так?
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) Тувин Александр больше 6 лет назад
А что за классы Меркурий.ТабличноеПоле, Меркурий.ТабличноеПоле.ТЗ?
Может попробуем через anydesk связаться?
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) Владимир Сергей больше 6 лет назад
Писал вам в личку - тишина. Конечно, можно связаться, вопрос, как?
RE: Можно ли немножко поучавствовать в проекте? - Добавил(а) кб99 Синявский Филипп больше 6 лет назад
Ответил на ваше письмо.
связаться можно по телефону 8(846)2312339 или 8(846)2053080