28.07.11 — 09:30
Пытаюсь мутировать на 8.2.14. Решил сделать задачу по УТ на упр. формах.
Ставлю отбор на форме при открытии.
&НаКлиенте
Процедура ПриОткрытии(Отказ)
//Вставить содержимое обработчика
ВыбНоменклатураСсылка = Серверный.ПолучитьВсеДокументы(«РасходнаяНакладная»);
Список.Параметры.УстановитьЗначениеПараметра(«ВыбНоменклатураСсылка»,ВыбНоменклатураСсылка);
КонецПроцедуры
«Серверный» — общий модуль. Стоят галки «Сервер» и «Вызов сервера». При открытии заданной формы вываливает:
{Документ.РасходнаяНакладная.Форма.ФормаСписка.Форма(20)}: Ошибка при вызове метода контекста (ПолучитьВсеДокументы)
ВыбНоменклатураСсылка = Серверный.ПолучитьВсеДокументы(«РасходнаяНакладная»);
по причине:
Ошибка при вызове серверного метода.
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: ret Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘{http://v8.1c.ru/8.1/data/core}ValueTable’
Как лечить ?
1 — 28.07.11 — 09:32
Перенеси этот код в ПриСозданииНаСервере(
Клиентские методы формы могут вызывать только методы этой формы
2 — 28.07.11 — 09:33
на форме из клиентского метода нельзя напрямую вызывать серверные объекты, надо передать управление в серверный метод формы и оттуда все делать
почему так они решили? политика партии
ща куча набежит и скажет, что это правильно ))
3 — 28.07.11 — 09:36
(2) еси чо, меня тоже выбешивает писать методы СделатьЧтоТо и СделатьЧтоТо_Сервер( только изза того, что напрямую сервер нельзя позвать из обработчика команды
4 — 28.07.11 — 09:37
(1) сделал так как ты сказал, убрал из ПриОткрытии():
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//Вставить содержимое обработчика
ВыбНоменклатураСсылка = Серверный.ПолучитьВсеДокументы(«РасходнаяНакладная»);
Список.Параметры.УстановитьЗначениеПараметра(«ВыбНоменклатураСсылка»,ВыбНоменклатураСсылка);
КонецПроцедуры
та же самая ошибка ((
5 — 28.07.11 — 09:38
(3) ну значит есть братья по разуму ))
6 — 28.07.11 — 09:39
(4) ВыбНоменклатураСсылка не список значений случаем?
7 — 28.07.11 — 09:41
(6) таблица значений
8 — 28.07.11 — 09:43
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: v Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: QueryParam Форма: Элемент Тип: {http://v8.1c.ru/8.1/data-composition-system/core}ParameterValue
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: value Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘{http://v8.1c.ru/8.1/data/core}ValueTable’
9 — 28.07.11 — 09:45
ты в дин. список таблицу суешь??? я бы тоже огорчился
10 — 28.07.11 — 09:46
(1)(2) Чего курили?
(7) Молодец.
11 — 28.07.11 — 09:47
(9) ну да, отбор запросом дин списка
ВЫБРАТЬ
ДокументРасходнаяНакладная.Ссылка,
ДокументРасходнаяНакладная.ПометкаУдаления,
ДокументРасходнаяНакладная.Номер,
ДокументРасходнаяНакладная.Дата,
ДокументРасходнаяНакладная.Проведен,
ДокументРасходнаяНакладная.Контрагент,
ДокументРасходнаяНакладная.Проект,
ДокументРасходнаяНакладная.Товары.(
Ссылка,
НомерСтроки,
Номенклатура
),
ДокументРасходнаяНакладная.МоментВремени
ИЗ
Документ.РасходнаяНакладная КАК ДокументРасходнаяНакладная
ГДЕ
ДокументРасходнаяНакладная.Товары.Ссылка В(&ВыбНоменклатураСсылка)
12 — 28.07.11 — 09:47
(9)(10) а как правильно ?
13 — 28.07.11 — 09:48
(10) свое надо иметь…
(11) массивом передавай, и есть подозрение, что в ТЗ лежит что то мутабельное
14 — 28.07.11 — 09:48
Список значений туда передавай, а не таблицу значений.
15 — 28.07.11 — 09:49
Да ещё табличную часть зачем выбираешь в запросе?
16 — 28.07.11 — 09:49
(14) периодически вылезает гемор со списком, лично я его между методами не передаю
17 — 28.07.11 — 09:50
Делай запрос по табличной части, а не по таблице расходной накладной.
18 — 28.07.11 — 09:51
(13) Не, у тебя лучше. Это, ять, ТаблицаЗначений! Ты знаешь такой тип в тонком клиенте? Я — нет.
19 — 28.07.11 — 09:51
(13) ппц, ок ща попробую. Что означает «мутабельное» ?
(15) это как бы сам 1 с софрмировал такой запрос, я только условие поставил в запрос
20 — 28.07.11 — 09:54
ВЫБРАТЬ
Товары.Ссылка.Ссылка,
Товары.Ссылка.Номер,
Товары.Ссылка.Дата,
Товары.Ссылка.ПометкаУдаления,
Товары.Ссылка.Проведен,
Товары.Ссылка.СуммаПоДокументу,
Товары.Ссылка.МоментВремени
ИЗ
Документ.РасходнаяНакладная.Товары КАК Товары
ГДЕ
Товары.Номенклатура В (&СписокЗначений)
примерно так …
21 — 28.07.11 — 09:54
(19) мутабельное, грубо говоря это то, что нельзя с сервера на клиент передавать и обратно… подробнее в гугле
ТЧ порежь лучше, и для таких отборов лучше критерий отбора заюзать
22 — 28.07.11 — 09:55
(13) передал массивом стало работать ! спасибо ! Где об этом написано что таблица значений недоступна в запросе по динсписку формы клиента ?
23 — 28.07.11 — 09:57
(21) ща попробую через критерий отбора
24 — 28.07.11 — 10:00
(10) почему?
25 — 28.07.11 — 10:00
Между клиентом и сервером нельзя передавать таблицу значений.
Когда делаете Список.Параметры.УстановитьЗначениеПараметра(«ВыбНоменклатураСсылка»,ТаблицаЗначений);
метод развалится, но не сразу, а при передаче формы на клиента.
26 — 28.07.11 — 10:04
(24) Вот транслятор свой напишешь, сразу догадаешься.
27 — 28.07.11 — 10:06
(26) вообще он прав, нельзя на тонком клиенте работать с северными объектами. Например, ДокументОбъект на клиенте не существует, таблица значений на тонком клиенте не существует.
28 — 28.07.11 — 10:07
(27) так и не надо, достаточно в тонком клиенте хранить только ссылки на них, а пусть они живут на далеком сервере
29 — 28.07.11 — 10:11
(28) Так так и сделано
30 — 28.07.11 — 10:12
ну… не обязательно ссылки, часть данных хранится в сериализуемых типах самой формы (данныеформыструктура, данныеформыколлеция).
31 — 28.07.11 — 10:12
(28) Ссылки и так есть. ТЗ на формах тоже нормально хранятся в коллециях. Чо не нравится-то? То что нельзя на клиенте Ссылка.реквизит написать? Дай такую возможность, сейчас бы 1Сники такого г0внокода написали, все бы от УФ крутили носом.
32 — 28.07.11 — 10:14
ладно, пошел писать свою платформу
33 — 28.07.11 — 10:15
(32) Блэк джек не забудь впилить. И шлюх.
34 — 28.07.11 — 10:17
(33) главное Неопределено выпилить, оставить только NULL
35 — 28.07.11 — 10:17
Как я понимаю через критерий отбора (опять же в серверном модуле через вызов сервера с уф) будет примерно так:
Функция ОтборСерверная()
МассивСсылок = КритерииОтбора.ПоНоменклатуре.Найти(ВыбНоменклатура);
Для Каждого Ссылка Из МассивСсылок Цикл
Сообщить(Ссылка);
КонецЦикла;
Возврат МассивСсылок;
КонецФункции
36 — 28.07.11 — 10:17
(32) good speed
37 — 28.07.11 — 10:17
Функция ОтборСерверная(ВыбНоменклатура) конечно же
38 — 28.07.11 — 10:19
(35) вообще то я предлагал прям в запросе обращение к критерию сделать и передавать туда номенклатуру… тока не уверен, что в дин. списке это нормально выглядеть будет
39 — 28.07.11 — 10:23
(38)
запрос к дин.списку
ВЫБРАТЬ
ДокументРасходнаяНакладная.Ссылка,
ДокументРасходнаяНакладная.ПометкаУдаления,
ДокументРасходнаяНакладная.Номер,
ДокументРасходнаяНакладная.Дата,
ДокументРасходнаяНакладная.Проведен,
ДокументРасходнаяНакладная.Контрагент,
ДокументРасходнаяНакладная.Проект,
ДокументРасходнаяНакладная.Товары.(
Ссылка,
НомерСтроки,
Номенклатура
),
ДокументРасходнаяНакладная.МоментВремени
ИЗ
Документ.РасходнаяНакладная КАК ДокументРасходнаяНакладная
ГДЕ
ДокументРасходнаяНакладная.Товары.Номенклатура В(&ВыбНоменклатураСсылка)
И после еще (по нажатию на кнопку ОтборПоНоменклатуре на форме списка)
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
//Вставить содержимое обработчика
Список.Параметры.УстановитьЗначениеПараметра(«ВыбНоменклатураСсылка»,КритерииОтбора.ПоНоменклатуре.Найти(ВыбНоменклатура));
КонецПроцедуры
40 — 28.07.11 — 10:23
Если подходить к коду грамотно, практически никогда не возникает конструкций СделатьЧтоТо и СделатьЧтоТо_Сервер
41 — 28.07.11 — 10:25
(38) фиг там, критерий отбора не живет на клиенте (
все равно опять тот же гемор к его получению через серверный модуль
42 — 28.07.11 — 10:31
(40) если у меня есть метод в серверном модуле, который делает то, что мне надо, как мне «Грамотно» написать команду, которая его вызывает?
43 — 28.07.11 — 10:33
(42) ВызватьСерверныйМетод(Параметры)
а ещё лучше, по возможности
ВызватьСерверныйМетодБезКонтекста(Параметры)
44 — 28.07.11 — 10:34
(43) а вот (40) говорит, что так не грамотно
45 — 28.07.11 — 10:36
(44) честно говоря не понял о чем (4) говорил
46 — 28.07.11 — 10:36
(44) честно говоря не понял о чем (40) говорил
47 — 28.07.11 — 10:39
(44) Да, так не грамотно. Имя функции должно отражать ЧТО она делает, а не где.
48 — 28.07.11 — 10:39
С «ГДЕ» прекрасно справляются директивы.
49 — 28.07.11 — 10:41
есть серверный модуль Серверный и там процедура СоздатьПодчиненныйДокумент(пОсновнойДокумент)
Добавляя кнопку на форму хочу написать:
&НаКлиенте
Процедура СоздатьПодчиненныйДокумент()
Если Не Объект.Ссылка.Пустая() Тогда
Серверный.СоздатьПодчиненныйДокумент(Объект.Ссылка);
КонецЕсли;
КонецПроцедуры
а приходится писать так:
&НаКлиенте
Процедура СоздатьПодчиненныйДокумент()
СоздатьПодчиненныйДокумент_Сервер(Объект.Ссылка);
КонецПроцедуры
&НаСервере
Процедура СоздатьПодчиненныйДокумент_Сервер()
Если Не Объект.Ссылка.Пустая() Тогда
Серверный.СоздатьПодчиненныйДокумент(Объект.Ссылка);
КонецЕсли;
КонецПроцедуры
если я правильно понял (40), то он утверждает, что при грамотной разработке проксирующий метод не нужен… вот мне и интересно как тут грамотно?
50 — 28.07.11 — 10:43
(49) Да, грамотно поставить галку «Вызов сервера» на модуль.
51 — 28.07.11 — 10:44
А ссылку на пустое значение проверять, например, методом ЗначениеЗаполнено()
52 — 28.07.11 — 10:44
+(49) Условия можно избежать, если сделать командой на объекте, а не на форме, тем более что в тонком клиенте она отвалится с ошибкой
53 — 28.07.11 — 10:44
(49) а вот это уже странно, я всегда писал по первому варианту. Можете объяснить, почему он не работает? Казалось бы Объект.Ссылка имеет ссылочный тип и нормально сериализуется.
54 — 28.07.11 — 10:45
(50) у кого? клиентские методы не видят экспортные серверные методы ни с галочкой ни без
55 — 28.07.11 — 10:46
(53) Тонкий и веб не видят модуля Серверный
56 — 28.07.11 — 10:46
(49) а потому что не хочешь ты думать.
Если ЗначениеЗаполнено(Объект.Ссылка) Тогда Серверный.СоздатьПодчиненныйДокумент(Объект.Ссылка); КонецЕсли;
57 — 28.07.11 — 10:47
(55) А галку «вызов сервера»-то ты поставил?
58 — 28.07.11 — 10:49
(34) я вижу у тебя особая страсть к 2м типам «Неопределено» и «Null» =))
59 — 28.07.11 — 10:49
(56) да даже если без условия, то все равно падает (падало во всяком случае), условие тут не главное
(57) да
60 — 28.07.11 — 10:51
(59) а процедуру экспортной сделал? )
61 — 28.07.11 — 11:01
(58) и пустым ссылкам ))
62 — 28.07.11 — 11:03
(61) кста вопрос порой задают на собеседованиях чем отличается NULL от Неопределено.
63 — 28.07.11 — 11:08
(59) У меня не падает. ЧЯДНТ?
64 — 28.07.11 — 11:10
(63) тонкий клиент клиент-сервера? и какая версия платформы
Pro-tone
65 — 28.07.11 — 11:15
(61) и неизвестному объекту еще тогда ))
Доброго дня всем
1с 8.3 Работаю с бизнес -процессами. Возникла сложность при завершении.
Есть ТЗ: При завершении задачи «Ознакомится с результатом» завершить комплексный бизнес процесс и все незавершенные задачи по нему.
В форме ЗадачиИсполнителя есть кнопка. Команда на кнопке выполняется наКлиенте. В конце выполнения я и решила подпихнуть свою обработку. Которая выполняется в общем модуле.
Вот как я это делаю. Вызов общего (клиент) из команды формы (Параметр: форма задачи)
Вызов
1C | ||
|
В общем модуле — клиенте переход на Общий (сервер, вызов сервера)
1C | ||
|
Ну и в общем модуле я работаю уже непосредственно с задачей, ищу по ней бизнес-процесс, завершаю задачи.
Так вот теперь суть всего вопроса:
После завершения работы на сервере когда уже отладчик стоит на КонецФункции у меня неожиданно все сваливается в ошибку
1C | ||
|
Я не могу понять в чем она заключается. Я вроде бы никакие данные не передаю. Задача — ссылку которой я беру уже завершена и я ее не изменяю.
ЧТо не так то?? Почитала кучу форумов и справок, но не нашла ответа на вопрос. Может кто поможет и опишет корректность выполнения процедур Клиент-Сервер-Клиент. Буду очень признательна за любую информацию по этому вопросу
ИСТОЧНИК ОШИБОК:
Ситуации, когда возможно появление этой проблемы:
— Обмен в распределенной базе данных.
— Обновление конфигурации 1С.
— Импорт из внешних источников в 1С.
ПРОБЛЕМА:
{Форма.Управляемая.Форма(1000)}: Ошибка при вызове метода контекста (ПолучитьСписокНаСервере)
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘v’:
форма: Элемент
имя: {http://v8.1c.ru/8.2/uobjects}v
по причине:
Текст XML содержит недопустимый символ в позиции 5 :
?{?{?U
ВАРИАНТЫ РЕШЕНИЯ:
&НаСервере
Перем RegExp;
&НаКлиенте
Процедура Старт(Команда)
АнализируемыйТекст = «§ | §§ «» | a86;a87;♥♦♣♠•88;
75;89;a92;b34;b35;a88;
58;68;U97;R52;¶§
44;V16;↑↓→←W35;↔50;
60; !
| ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
| АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя
| ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω
| 0123456789
| ~!@#$%^&*(){}[]_-=+|/*:;.<>?,№ !
| ' | © | ® | µ | «» | ¤¢€£¥ | § | ½¼¾ | ¹²³ | °±×÷؃§ µ";
ТекстРезультат = СтартНаСервере(АнализируемыйТекст);
Сообщить(""+АнализируемыйТекст+"
|"+ТекстРезультат);
КонецПроцедуры
&НаСервере
Функция СтартНаСервере(Знач Текст)
RegEXP_Инициализация();
Если RegExp = Неопределено Тогда
Value = ИсключитьНеЧитаемыеСимволыИзСтроки(Текст); // Вариант "НЕТИПОВОЙ 1С".
Иначе
Value = ИсключитьНеЧитаемыеСимволыИзСтроки_REGEXP(Текст); // Вариант "НЕТИПОВОЙ RegExp".
КонецЕсли;
//Value = ЗаменитьНедопустимыеСимволыXML(Value); // Вариант "ТИПОВОЙ 1С".
Возврат Value;
КонецФункции
ВАРИАНТ РЕШЕНИЯ "ТИПОВОЙ 1С":
// Функция (ТИПОВАЯ 1С), оставляющая в строке только допустимые для XML символы и цифры.
//
// Возвращаемое значение:
// Строка.
//
&НаСервере
Функция ЗаменитьНедопустимыеСимволыXML(Знач Текст, СимволЗамены = " ")
Позиция = НайтиНедопустимыеСимволыXML(Текст);
Пока Позиция > 0 Цикл
ТекущийСимвол = Сред(Текст, Позиция, 1);
Если КодСимвола(ТекущийСимвол) = 21 Тогда // Параграф.
Текст = СтрЗаменить(Текст, ТекущийСимвол, Символ(167));
Позиция = НайтиНедопустимыеСимволыXML(Текст);
Продолжить;
КонецЕсли;
Текст = СтрЗаменить(Текст, ТекущийСимвол, СимволЗамены);
Позиция = НайтиНедопустимыеСимволыXML(Текст);
КонецЦикла;
Возврат Текст;
КонецФункции
Достоинства:
- Максимально возможное сохранение содержимого исходной строки.
Исключаются только недопустимые для XML символы.
- Самая быстрая функция.
Недостатки:
- В итоговой строке могут присутствовать нечитаемье символы ("аброказаябры").
ВАРИАНТ РЕШЕНИЯ "НЕТИПОВОЙ RegExp":
// Функция (RegExp), инициализация.
//
// Возвращаемое значение:
// Строка.
//
&НаСервере
Функция RegEXP_Инициализация()
// Читаемые символы.
!@#$%^&*(){}[]_-=+|/*:;.<>?,№«» «;
// Латиница = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
// Кирилица = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
// Греческие = "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω";
// Цифры = "0123456789";
// СпециальныеСимволы = "~
ДвойнаяКавычка = «^»»»;
ОдинарнаяКавычка = «^’»;
АпострофОбратный = «^» + Символ(769); // КодСимвола 769. Обратный для символа на букве «Ё».
АвторскоеПраво = «^©»; // КодСимвола 169. «Copyright» — латинская буква C в окружности — авторское право.
Зарезервировано = «^®»; // КодСимвола 174. «Registered» — латинская буква R в окружности — товарный знак.
ТоварныйЗнак = «^™»; // Верхний индекс ТМ.
ШирокоеТире = «^—»; // КодСимвола 8212.
ДенежныеСимволы = «^¤^¢^€^£^¥»; // Денежная единица, Цент, Евро, Фунт стерлингов, Иена или юань.
ДробныеСимволы = «^½^¼^¾»; // Дроби: 1/2, 1/4, 3/4.
СимволыСтепени = «^¹^²^³»; // Степени: 1, 2, 3.
ПрочиеСимволы = «^°^±^×^÷^Ø^ƒ^µ^»+Символ(167); // Градус, Плюс/Минус, Знак умножения, Знак деления, Диаметр, Знак функции, Микро, Параграф.
ЧитаемыеСимволы = «[«;
ЧитаемыеСимволы = ЧитаемыеСимволы + «^a-z^A-Z^а-я^А-Я^0-9^Ё^ё^Α-Ω^α-ω»; // Латиница + Кирилица + Цифры + Греческие.
ЧитаемыеСимволы = ЧитаемыеСимволы + «^~^^!^@^#^$^%^^^&^*^(^)^{^}^[^]^_^-^=^+^^|^/^*^:^;^.^^?^,^№^«^»^ "; // СпециальныеСимволы.
ЧитаемыеСимволы = ЧитаемыеСимволы + ДвойнаяКавычка + ОдинарнаяКавычка + АпострофОбратный + АвторскоеПраво + Зарезервировано +ТоварныйЗнак;
ЧитаемыеСимволы = ЧитаемыеСимволы + ШирокоеТире + ДенежныеСимволы + ДробныеСимволы + СимволыСтепени + ПрочиеСимволы;
ЧитаемыеСимволы = ЧитаемыеСимволы + "]";
ПолучитьCOMОбъектREGEXP(ЧитаемыеСимволы, Ложь, Истина, Ложь);
КонецФункции
// СПАСИБО Evg-Lylyk: http://infostart.ru/public/64222/
//
&НаСервере
Процедура ПолучитьCOMОбъектREGEXP(Шаблон, ИскатьДоПервогоСовпадения = Истина, МногоСтрок = Истина, ИгнорироватьРегистр = Истина)
Если RegExp = Неопределено Тогда // Нужна инициализация.
Попытка
RegExp = Новый COMОбъект("VBScript.RegExp"); // Создаем объект для работы с регулярными выражениями.
Исключение
RegExp = Неопределено;
Возврат;
КонецПопытки;
КонецЕсли;
// Заполняем данные.
RegExp.MultiLine = МногоСтрок; // Истина — текст многострочный, Ложь — одна строка.
RegExp.Global = НЕ ИскатьДоПервогоСовпадения; // Истина — поиск по всей строке, Ложь — до первого совпадения.
RegExp.IgnoreCase = ИгнорироватьРегистр; // Истина — игнорировать регистр строки при поиске.
RegExp.Pattern = Шаблон; // Шаблон (регулярное выражение).
КонецПроцедуры
// Функция (НЕТИПОВАЯ REGEXP), оставляющая в строке только читаемые(допустимые) для XML символы и цифры.
//
// Возвращаемое значение:
// Строка.
//
&НаСервере
Функция ИсключитьНеЧитаемыеСимволыИзСтроки_REGEXP(Знач АнализируемыйТекст, ЗаменятьСимволы = Истина, СимволЗамены = " ")
Если НЕ RegExp.Test(АнализируемыйТекст) Тогда
Возврат АнализируемыйТекст;
КонецЕсли;
// Формирование результирующей строки.
ИтоговаяСтрока = АнализируемыйТекст;
РезультатАнализаСтроки = RegExp.Execute(АнализируемыйТекст);
Для Каждого Результат ИЗ РезультатАнализаСтроки Цикл
ТекущийСимвол = Результат.Value;
Если КодСимвола(ТекущийСимвол) = 21 Тогда // Параграф.
ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, ТекущийСимвол, Символ(167));
Продолжить;
КонецЕсли;
Если ЗаменятьСимволы Тогда
// Замена символа в строке.
ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, ТекущийСимвол, СимволЗамены);
Иначе
// Сокращение строки на символ.
ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, ТекущийСимвол, "");
КонецЕсли;
КонецЦикла;
Возврат ИтоговаяСтрока;
КонецФункции
Достоинства:
- Остаются только визуализируемые, понятно читаемые допустимые для XML символы.
- Сопоставима по скорости с функцией ЗаменитьНедопустимыеСимволыXML (~ 0.5%).
Недостатки:
- Отдельные, возможно, необходимые символы могут исключаться.
(необходимо дополнить переменную ЧитаемыеСимволы).
ВАРИАНТ РЕШЕНИЯ "НЕТИПОВОЙ 1С":
// Функция (НЕТИПОВАЯ 1С), оставляющая в строке только читаемые(допустимые) для XML символы и цифры.
//
// Возвращаемое значение:
// Строка.
//
&НаСервере
Функция ИсключитьНеЧитаемыеСимволыИзСтроки(Знач АнализируемыйТекст, ЗаменятьСимволы = Истина, СимволЗамены = " ")
// Читаемые символы.
!@#$%^&*(){}[]_-=+|/*:;.<>?,№«» «;
Латиница = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
Кирилица = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
Греческие = "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω";
Цифры = "0123456789";
СпециальныеСимволы = "~
ДвойнаяКавычка = «»»»;
ОдинарнаяКавычка = «‘»;
АпострофОбратный = «L9;»; // КодСимвола 769. Обратный для символа на букве «Ё».
АвторскоеПраво = «©»; // КодСимвола 169. «Copyright» — латинская буква C в окружности — авторское право.
Зарезервировано = «®»; // КодСимвола 174. «Registered» — латинская буква R в окружности — товарный знак.
ТоварныйЗнак = «™»; // Верхний индекс ТМ.
ШирокоеТире = «—»; // КодСимвола 8212.
ДенежныеСимволы = «¤¢€£¥»; // Денежная единица, Цент, Евро, Фунт стерлингов, Иена или юань.
ДробныеСимволы = «½¼¾»; // Дроби: 1/2, 1/4, 3/4.
СимволыСтепени = «¹²³»; // Степени: 1, 2, 3
ПрочиеСимволы = «°±×÷؃µ»+Символ(167); // Градус, Плюс/Минус, Знак умножения, Знак деления, Диаметр, Знак функции, Микро, Параграф.
ЧитаемыеСимволы = Латиница + Кирилица + Греческие + Цифры + СпециальныеСимволы + ШирокоеТире
+ ДвойнаяКавычка + ОдинарнаяКавычка + АпострофОбратный + АвторскоеПраво + Зарезервировано + ТоварныйЗнак
+ ДенежныеСимволы + ДробныеСимволы + СимволыСтепени + ПрочиеСимволы;
// Формирование результирующей строки.
ИтоговаяСтрока = «»;
Для НомерСимвола = 1 ПО СтрДлина(АнализируемыйТекст) Цикл
ТекущийСимвол = Сред(АнализируемыйТекст, НомерСимвола, 1);
// Заменяемые символы. Системный набор значений: «Символы»:
Если ТекущийСимвол = Символы.ВК ИЛИ ТекущийСимвол = Символы.ВТаб ИЛИ ТекущийСимвол = Символы.НПП
ИЛИ ТекущийСимвол = Символы.ПС ИЛИ ТекущийСимвол = Символы.ПФ ИЛИ ТекущийСимвол = Символы.Таб Тогда
ТекущийСимвол = СимволЗамены;
КонецЕсли;
Если КодСимвола(ТекущийСимвол) = 21 Тогда // Параграф.
ТекущийСимвол = Символ(167);
КонецЕсли;
Если Найти(ЧитаемыеСимволы, ТекущийСимвол) > 0 Тогда
ИтоговаяСтрока = ИтоговаяСтрока + ТекущийСимвол;
Иначе
Если ЗаменятьСимволы Тогда
ИтоговаяСтрока = ИтоговаяСтрока + СимволЗамены;
Иначе
// Сокращение строки на символ.
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат ИтоговаяСтрока;
КонецФункции
Достоинства:
— Остаются только визуализируемые, понятно читаемые допустимые для XML символы.
Недостатки:
— Отдельные, возможно, необходимые символы могут исключаться.
(необходимо дополнить переменную ЧитаемыеСимволы).
— Медленнее предыдущих на 30 %.
В целях недопущения искажений текста в ссылках на скачивание находится обработка с текстом функций.
Вчера обновлял бухгалтерские базы, в частности 2 базы Бухгалтерия предприятия 3.0.
Базы стандартные, без изменений.
Обновление происходило на версию 3.0.34.13, платформа 8.3.4.437, базы серверные (Microsoft SQL Server 2008 R2).
После обновления все было нормально, сам запускал базу, пользователи не жаловались.
Но на следующий день, сегодня, у всех пользователей этих баз при попытке запуска в режиме 1С:Предприятие возникает ошибка:
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://v8.1c.ru/8.2/managed-application/modules}cli Форма: Элемент Тип:
{http://v8.1c.ru/8.1/data/core}FixedStructure
Детальное описание ошибки:
{ОбщийМодуль.СтандартныеПодсистемыКлиентПовтИсп.Модуль(56)}: Ошибка при вызове метода контекста
(ПараметрыРаботыКлиентаПриЗапуске)
ПараметрыКлиента = СтандартныеПодсистемыВызовСервера.ПараметрыРаботыКлиентаПриЗапуске(Параметры);
по причине:
Ошибка при вызове серверного метода.
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://v8.1c.ru/8.2/managed-application/modules}cli Форма: Элемент Тип:
{http://v8.1c.ru/8.1/data/core}FixedStructure
При выводе ошибки возможно либо «Завершить работу», либо «Перезапустить».
Если пользователь щелкает «Перезапустить», то со второго раза ему удается войти в программу, где он нормально работает.
Дополнительные сложности возникли у пользователей, который включили себе интерфейс Такси, у них при нажатии «Перезапустить» не получалось входить в 1с, появлялась еще одна ошибка.
Чистка кэша не помогает.
Способы решения:
1) Для быстрого временного решения проблемы можно в настройках базы в списке баз 1с установить основной режим запуска «Толстый клиент» вместо «Выбирать автоматически» (пользователю с включенный интерфейсом Такси это не помогло).
2) Включить возможность изменения конфигурации базы и добавить пустую строку в любой общий модуль (взято здесь: http://forum-mista.pro/topic.php?id=713977).
Второй способ решил проблему полностью.
Ошибка, похоже, связана с платформой, исходя из моей ситуации (платформа 8.3.4.437), из того, что пишут здесь: http://forum-mista.pro/topic.php?id=713977 (платформа 8.3.4.365) и из комментариев к данной публикации (платформа 8.3.4.496 и 8.3.5).
&НаСервере Функция ПодключитьВнешнююОбработку(Знач стрАдрес) Выдается ошибка: {ОбщийМодуль.УниверсальныеМеханизмы.Модуль(790,11)}: Процедура или функция с указанным именем не определена (ПодключитьВнешнююОбработку)
Попробуй ее выше клиентской процедуры воткнуть.
А кстати, в каком модуле у тебя этот код?
В общем модуле. Галочки в свойствах стоят 4 штуки.
Поменял местами, то же самое
Разноси по разным модулям.
и вновь продолжается бой..
разносил. Не работает. Метод не обнаружен пишет.
Галка «вызов сервера» стоит в свойствах модуля?
Поставил, никакой разницы Писал: &НаСервере Функция ПодключитьВнешнююОбработку(Знач стрАдрес) Экспорт &НаКлиенте Ошибка: Метод объекта не обнаружен (ПодключитьВнешнююОбработку)
&НаСервере Функция ПодключитьВнешнююОбработку(Знач стрАдрес) Экспорт КонецФункции В отдельный модуль с галками Сервер и Вызов с севрера
директивы компиляции работают только в модуле формы и в модуле команды (в СП написано, что и в общем модуле, но у меня ни разу нормально не получилось заюзать их и не вижу смысла их там использовать). Если нужно разделить работу методов на клиентские и на серверные, то надо или юзать инструкции препроцессору или (что правильнее) разнести по разным модулям
потому что архитекторы 1С такие
Не ври. А ты читай документацию внимательно и вдумчиво. Если у общего модуля стоят галки и «клиент» и «сервер», то будет скомпилировано 2(!) экземпляра этого модуля — один на стороне сервера, другой на стороне клиента. — В серверный экземпляр попадут все процедуры и функции объявленные с директивой &НаСервере, а так же без дериктив(что равнозначно &НаСервере) — В клиентский — те что объявлены &НаКлиенте. Если при этом у модуля стоит галка «вызов сервера», то вызов процедур серверного модуля доступен с клиента. При вызове процедуры, работает правило «ближнего вызова», т.е. если вызов идет с клиента то вызывается процедура из КЛИЕНТСКОГО экземпляра модуля, если с сервера — то СЕРВЕРНОГО. Улавливаешь в чем твоя ошибка ? &НаКлиенте Это вызов функции из КЛИЕНТСКОГО экземпляра модуля(!), а её там нет )) Потому что она объявлена с директивой &НаСервере и находится разумеется в СЕРВЕРНОМ экземпляре модуля.
И что? Есть возможность вызвать серверный экземпляр модуля из клиентского экземпляра того же модуля?
А? А то пришлось сделать копию общего модуля с другим именем.
(18, 19) Нет, нельзя. Но ты можешь вызвать метод серверного модуля из формы Пример: // В общем клиент-серверном модуле с галкой вызов сервера
+ точнее процедура объявленная без директив &наклиенте или &насервере будет скомпилирована и тат и там
А сервер то есть? Или ты пытаешься отладить на локальной?
чиать — думать. хватит переливать их пустого в порожнее, думал уже все поменяли психологию со времен корявой 7.7
Конечно есть. На локальном бы такой проблемы не возникало. это ты кому?
в общих модулях нельзя использовать директивы, учи матчасть студент
Проверка синтаксиса однако звисит от директив в общих модулях!
Вот блин… Ты это разработчикам типовых расскажи, и тем кто документацию пишет, а то они видимо не в курсе …
где ты в типовых это видел?
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям