1с не соответствует шаблону
При выгрузке РСВ-1 программа пишет ошибку:Регион не соответствует шаблону (Название Сокрашение), город и улица тоже не соответствуют этому шаблону. Не выгружает.<br>Если открыть файл по АДВ и СЗВ, то в тексте стоит почему-то 1 квартал. Надо ли на двойку менять или это в файле сделать не реально?<br> Релиз 25. Восьмёрка. Помогите пожалуйста.
Загрузите новый КЛАДР, обновите адрес организации с названиями через классификатор, обновите отчет.
Простите, поискала в программе и не нашла, где КЛАДР находиться, чтобы его загрузить?
Нашла-это Адресные сокращения? А как их обновить или загрузить?
КЛАДР-это адресный классификатор. Последнюю версию можно скачать с сайта http://www.gnivc.ru , а загрузите через ввод адреса (когда адрес вводите, наверху есть кнопочка "классификатор".щелкнув нв котрую, вы выйдете в "загрузку адресного классификатора").
По порядку: я открываю предприятие-организации-ооо"ромашка", далее редактирую адрес нажав КЛАДР и попутно обновляя каталоги. Указываю путь через только что загруженый каталог ПФР(там отдельно от проги идёт КЛАДР в отдельной папке). Адрес загружается как нужно, каталог обновляется. При открытии РСВ-1: заполнить-ничего не меняется, обновить сведения об организации-опять ничего не меняется. Что делать-то? До обновления, за 1-й квартал всё отлично было!
Добрый день<br><br>Как выглядит ошибка:<br>В РСВ-1 на титульном листе<br>Район: Москва<br>Улица: Маленковская<br><br>Как нужно:<br>Район: Москва г<br>Улица: Маленковская ул<br><br>Что помогло:<br>Очищаем классификатор:<br>----------------------<br>1. Операции - Регистры сведений - Адресный классификатор<br>2. Очистить классификатор<br>3. Загрузить классификатор <br><br>Ввод информации о компании<br>--------------------------<br>1. Предприятие - Организации - - Адреса и телефоны - Фактический адрес<br>2. Выбираем через справочник, появляется в полях<br>Район: Москва г<br>Улица: Маленковская ул<br><br>Далее при формировании РСВ1 появляется уже в нужном виде. <br>Вероятнее всего, если в адресе компании указать в таком же шаблоне вручную, то все выгрузится и без возни с КЛАДРом.<br><br>--<br>Олег Пашинин<br>[промодерировано]
Дабы не затягивать, сразу приведу код. Кто хочет разобраться, в чем тут, собственно, дело, пусть читает статьи по XDTO. О регулярных выражениях расскажу ниже, но статей на эту тему и так масса.
Для тех, кому мало.
Итак, лет этак эндцать назад программисты решили упростить поиск, замену и проверку на соответвие различных строк, т.к. им, полагаю, надоело каждый раз писать что-то типа:
В итоге во всех нормальных языках программирования были реализованы библиотеки, содержащие процедуры и функции для работы с регулярными выражениями, и жизнь разработчиков качественно улучшилась, ибо тот монструозный код можно было заменить на куда более простой:
Да, грамотным разработчикам стало ой как просто. Но что делать остальным? Правилный ответ, конечно, - учиться, учиться и еще раз учиться! )))
Итак, самое простое, что нужно, чтобы освоить шаблоны проверки:
+ - один или более раз , пример ".+" - один или более любой символ.
* - ноль или более раз , пример ".*" - любое количество любых символов (даже ни одного).
[n-m] - символ от m до n, пример: "7+" - одна или более цифр(а).
\d - цифра, пример \d+ - одна или более цифр(а).
\s - пробельный символ - ТАБ, пробел, перенос строки, возврат каретки и т.п.
\S - непробельный символ.
\w - буква, цифра, подчеркивание.
\W - не буква, не цифра и не подчеркивание соответственно.
^ - начало текста, например "^\d+" - строка начинается с цифры.
$ - конец текста, например "\D+$" - строка заканчивается НЕ цифрой.
- шаблон для от m до n символов, например "\d" - от двух до четырех цифр. Можно указать одну и всего цифру для строгого соответвия.
\ - экранирует спецсимволы. Например, "\." - символ точки.
Специальные предложения
При использовании данным способом шаблона:
: Ошибка при вызове метода контекста (ПрочитатьXML)
Модель = ФабрикаXDTO.ПрочитатьXML(Чтение);
по причине:
Ошибка разбора XML: - [4,38]
Фатальная ошибка:
xmlParseEntityRef: no name
Не подскажете как быть в данной ситуации? Подозреваю что причина может быть в символе "&"
(63) 1C, на сколько я помню, не умеет "$" и "^", т.к. для проверки шаблона эти символы не нужны. Попробуйте убрать их из строки.
По поводу "&" - то это символ? На сколько я знаю (и вики - тоже) - амперсанд - это обычный символ, на него ничто ругаться не должно.
ЗЫ: также, возможно Вы зря заэкранировали "!". Т.е. не нужно писать "\!" - нужно просто "!".
Да спасибо.
Действительно, убрал "$" и "^" а вместо "&" использовал '& amp;' и теперь работает.
Заранее спасибо! (68) просто добавьте в функцию параметр "test", а в коде функции строки с созданием объекта оберните в блок Если-Тогда-КонецЕсли, в котором проверяйте условие "test = неопределено". Перед первым вызовом напишите "test = Неопределено" (перед циклом проверки). В итоге у Вас функция будет вызываться только первый раз с пустым объектом XDTO, а в следующий раз уже с заполненным, что приведет к использованию уже созданного объекта, а не созданию нового. Прекрасно!
От себя могу только добавить, что есть еще объекты для работы с XPath, это тоже регулярные выражения, но для уже языков разметки, типа html и xml.
Если добавите и их, будет совсем хорошо!
Роман Цованян. Оригинально. Интересно, как оно будет работать в цикле.
(4) Поручик, предположу, что если сохранять объект XDTO, то и в цикле будет быстро. Если же каждый раз фабрикой создавать пакет, то. полагаю, при множественном использовании производительность будет не очень.
(3) pfihr, здесь используется встроенная в 1С проверка типа по фасету для значения поля XDTO-объекта, так что, полагаю, добавить сюда ХPath совсем не получится )))
Круто %)А какой язык регулярок используется в фасетах?
(6) AlX0id, ИМХО тот же, что и в RegExp от M$.
(7) Xershi, ниже я привел часть синтаксиса с примерами. В коде есть пример для проверки даты: ПроверитьСтроку("01.01.2012","\d\.\d\.\d") - сравните с описанием регулярных выражений ниже по тексту и попробуйте разобрать данный пример. Я сам с регулярками раза с третьего только разобрался, а первые два подхода вызвали лишь мысли о том, что пока мне это не сильно надо, но выглядит как-то сложно и времени потратить надо будет немало, а его, типа, у меня нет. Но когда действительно появилась необходимость в их освоении, то оказалось, что достаточно дня, чтобы разобраться.
(8) поэтому и говорю. Было бы не плохо чтобы эту тему разжевали более подробно. Так было бы быстрее освоить материал! (9) Xershi, быстрее освоить материал - это взять и написать регулярки для тестирования каких-то реальных вещей. Например, даты, e-mail, адреса сайта, имени переменной, числа, почтового адреса с индексом, . - вот реализуйте каждый из них - и Вы сразу же станете специалистом. Описанной в статье информации для этого уже должно хватить. А если что-то непонятно - всегда есть гугл, он куда терпеливей иных учителей и никогда не отказывает пытливому уму в предоставлении ссылок на искомое. Было бы не плохо добавить блок, который бы описывал как на практике это использовать.А то после прочтения не стало понятнее как это употреблять. (7)Пробегите хотя бы бегло Дж.Фридл - Регулярные выражения. Уйдут все вопросы. (12) webester, если будет задача, я просто погуглю, а пока просто хотел, чтобы улучшили статью, чтобы начинающим не пришлось гуглить) Кстати, господа, в notepad++ есть поиск и замена на основе регулярных выражений. Я так иногда на работе что-то искал и менял, чтобы потом в консоль запросов вставить, как список. Вот там как раз непочатый край для экспериментов с регулярными выражениями. Например, попробуйте все даты в тексте заменить на какую-то конкретную дату - уже расширите горизонты своего познания и огребете достаточно экспы для очередного левелапа ))) (13)
Ну уж тогда Regex Buddy можно поставить, для полноты ощущений :)
А не подскажете почему в конфигураторе при определении XTDO пакета визуально свойства pattern не видно? (17) в определении типа тоже не увидел свойства pattern, хотя есть другие свойства фасета (максим. , миним. длины)
Регулярки это найс. Спасибо огромное автору за хорошую альтернативу внешним компонентам.
А теперь тестирование. За основу взял проверку адреса электронной почты:
Регулярка: "\w+@\w+\.\w+"
Текст проверки 1С:
На 100000 итераций код 1С отработал за 2сек, а регулярные выражения 63с
(18) karapuzzzz, а Вы кешировали объект XDTO или выполняли процедуру целиком? У Вас в коде правильным адресом будет и "%;№!@:?*!.", ибо вы не проверяете на "букву, цифру и подчеркивание" - реальный адрес куда сложнее. при том валидный "[email protected]" не пройдет проверку по регулярке, ибо валидная "." приведет к ошибке. Т.е. не все так просто в действительности )))(18) karapuzzzz, попробовал с кешем объекта XDTO и паттерном "[0-z]+@[0-z]+\.[0-z]+":
Время начала: 63 593 123 364 131
Длительность: 999 мс
Истинных: 100 000
Время начала: 63 593 123 365 130
Длительность: 280 мс
Код какой-то такой получился:
Класс! Просто фантастика. Круть неимоверная, зачёт однозначный.
Совершенно шикарная идея, и ведь правда работает. Неистово плюсую.
Если не секрет, как до такого додумались? Что натолкнуло?
(23) Yashazz, ну как бы тут было два момента: выгрузка отчета по схеме XSD, любезно предосиавленная ПФР, которая отказалась грузиться в пакет и вынудила исследовать механизм XDTO. Потом была статья на ИС, в которой кто-то реализовал алгоритм регулярок. Я было подумал, а не выгрузить ли мне пакет в модель с прикрученным типом и менять паттерн проверки у этого типа. И, в итоге, сработало как видите.
ЗЫ: про XDTO еще месяц назад ничего толком не знал, а теперь знаю о нем весьма много.
ЗЫ: про XDTO еще месяц назад ничего толком не знал, а теперь знаю о нем весьма много.Если не секрет, что изучали для познания дзен XDTO? Сам толком не вкурил эту тему, но очень хочется досконально в этом разбираться.
"Чтобы в чем-то разобраться нужна задача и сержант с сапогом, периодически пинающим под зад" (Я)
Исходя из вышесказанного могу порекомендовать статьи "ХДТО - это просто" на Инфостарте (серия из трех статей, если не ошибаюсь - оттуда, в частности, почерпнута идея о сериализации модели). Ну и сержанта Вам с сапогом ))))
Кстати, у меня друг один все заставлял меня с регулярками разобраться - я болт забивал после прочтения пары строк из Вики. Но когда внезапно появилась задача, то я не только за день с ними вполне себе разобрался, но и написал механизм преобразования 1С-ной маски поля в регулярное выражение. правда тогда проверка была реализована на мелкософтовское регэкспе, но бывали случаи, когда СОМ тупо отваливался (баги нескольких платформ) и при инициализации любого СОМ-объекта система валилась с ошибкой. Исходя из этого мысль о реализации теста регулярок средствами платформы постоянно висела в голове. И как только я узнал, что в типах ХДТО есть возможность использовать паттерны проверки, то это сразу же материализовалось в вышеприведенный код.
Оператор «ПОДОБНО», в языке запросов 1С 8.3, предназначен для сравнения строковых выражений с заданным шаблоном. Результатом такой проверки будет «Ложь» или «Истина». Отличие от оператора « = », заключается в возможности использования спецсимволов.
Синтаксис:
Следует понимать, что спецсимволы оператора ПОДОБНО несут служебный характер и их смысл (назначение) отличается от обычных символов.
Пояснение спецсимволов:
Рассмотрим работу такого оператора на примерах.
Оператор «ПОДОБНО» в полях выборки запроса
Результат:
В данном примере проверяем каждую строку, начинается ли она на «Мол», для наглядности выводим такое же поле без применения оператора «ПОДОБНО».
Оператор «ПОДОБНО» в конструкции условного оператора «Где»
Получите понятные самоучители по 1С бесплатно:
Результат:
Из результата запроса понятно, что были отобраны поля, у которых вторая буква « о », а после неё любые произвольные символы.
Оператор «ПОДОБНО» в конструкции условного оператора «ВЫБОР»
Результат:
В таком примере помечаем поля, в которых не содержится буква « л ».
Как сравнивать текст по спецсимволу (%. )
Для реализации таких задач требуется пользоваться ключевым словом СПЕЦСИМВОЛ. Указав любой символ после такого ключевого слова, система, в шаблоне конструкции ПОДОБНО, будет воспринимать следующий символ за ним как обычный.
В таком примере были выбраны все поля содержащие знак « % » в конце.
Использование параметров в конструкции «ПОДОБНО»
Результат:
Установив параметр запроса в значение «М%», отбираем все поля, которые начинаются на символ « М ».
Возможные ошибки
Следует учитывать, что шаблон из конструкции оператора «ПОДОБНО» должен иметь исключительно строковый тип данных так же недопустимо формировать шаблон путём сложений строк.
Особенности использования механизма шаблонов в 1С:Предприятии 8 и отличия от версии 7.7
Шаблоны хранятся в виде файлов с расширением st. Подключение шаблонов осуществляется в окне "Шаблоны текста", с помощью "Сервис" – "Шаблоны текста" – "Действия" – " Настройка шаблонов . ". В появившемся диалоге можно выбрать любое множество файлов шаблонов, которые будут подключены.
Если включить флажок "Использовать стандартные шаблоны", в список используемых файлов шаблонов при каждом запуске 1С:Предприятия будут автоматически добавляться файлы, находящиеся в каталоге с исполняемыми файлами 1С:Предприятия. В списке файлов шаблонов вновь добавленные файлы будут идти первыми. При этом удалить такие файлы из списка используемых файлов будет нельзя до тех пор, пока этот флажок включен. После отключения флажка "Использовать стандартные шаблоны", автоматически найденные файлы можно будет из списка удалить.
Каждый из файлов можно перемещать внутри списка файлов шаблонов, указывая, таким образом, его приоритет. Этот приоритет будет использоваться при формировании общего дерева шаблонов из всех подключенных файлов.
Файл шаблонов можно открыть в конфигураторе для просмотра и редактирования с помощью диалога открытия файла. Каждый файл шаблонов представляет собой информацию, организованную в виде дерева. Элемент дерева состоит из следующих полей:
- Название шаблона.
- Строка автозамены для шаблона.
- Признак включения шаблона в контекстное меню.
- Текст шаблона.
Рассмотрим подробно назначение каждого элемента шаблона.
Название – хранит название элемента файла шаблонов, которое будет отображаться в дереве шаблонов в окне "Шаблоны текста" и при выборе шаблона из контекстного меню.
Автоматически заменять строку – строка, по которой механизм автозамены будет подбирать подходящий шаблон. Эта строка также используется для подбора шаблона с помощью команды "Подобрать шаблон…" (Ctrl + Q). Например, если строка автозамены содержит текст "ABC", находясь в текстовом редакторе справа от этого слова и нажав Space или Enter , будет выполнена автозамена текста "ABC" (если механизм автозамены включен).
Включать в контекстное меню – определяет, нужно ли сделать шаблон доступным в контекстном меню текстового редактора.
Текст шаблона – текст, который будет вставлен в редактируемый документ при выполнении шаблона.
Если в системе подключены несколько файлов шаблонов, в окне "Шаблоны текста" будет отображаться единое дерево шаблонов, у которого корневой элемент отсутствует, а ветви дерева совпадают со структурой шаблонов в подключенных файлах. Порядок следования ветвей в корне дерева шаблонов определяется тем порядком, в котором расположены подключенные файлы шаблонов в списке используемых файлов шаблонов из диалога "Настройка шаблонов".
2. Использование шаблонов
В 1С:Предприятии 8 расширен набор вариантов выбора шаблона для вставки его содержимого в текст. Рассмотрим эти варианты:
1. Из окна "Шаблоны текста" с помощью мыши, перетаскивая выбранный шаблон в текст.
2. Из окна "Шаблоны текста" путем копирования в буфер обмена выбранного шаблона и вставки его в тексте.
3. С помощью контекстного меню текстового редактора. В него попадут те шаблоны, у которых отмечен флажок "Включать в контекстное меню".
4. С помощью механизма автозамены текстового редактора. Механизм автозамены должен быть активизирован с помощью настройки редактора текста (редактора модулей): нужно указать, что автозамена включена или включена с подсказкой. Это можно сделать так: "Сервис" – "Параметры" – Тексты" ("Тексты модулей") – "Автозамена": выбрать из списка "Включить" или "Включить с подсказкой". После нажатия клавиш Space или Enter система попытается подобрать шаблон по слову, стоящему слева от курсора.
5. С помощью команды "Подобрать шаблон…" (Ctrl + Q).
Если в процессе подбора шаблона их найдено несколько, появится список подобранных шаблонов. Из этого списка можно выбрать нужный шаблон.
3 . Файл шаблонов, поставляемый с 1С:Предприятием
В поставку 1С:Предприятия 8 входит файл шаблонов GenTempl.st . В него включены шаблоны для часто используемых конструкций. Это и шаблоны для написания управляющих конструкций, шаблоны, связанные с использованием прикладных объектов, а так же некоторые другие.
Поскольку в будущем файл шаблонов GenTempl.st , поставляемый вместе с 1С:Предприятием 8, может изменяться и дополняться, он будет перезаписываться заново при установке очередных релизов 1С:Предприятия 8. После установки 1С:Предприятия 8 файл GenTempl.st доступен только для чтения.
Если в процессе работы возникает необходимость расширения состава поставляемых шаблонов или их изменения, рекомендуется скопировать файл GenTempl.st под новым именем, сделать его доступным для редактирования и внести в него необходимые изменения. Можно также для создания новых шаблонов создать новый файл шаблонов и подключить его. Шаблоны начнут использоваться только после того, как файлы шаблонов будут подключены.
4. Правила формирования строки автозамены
Как уже говорилось ранее, строка автозамены – это строка, по которой механизм автозамены будет подбирать подходящий шаблон. Простейшим случаем является пример, когда на клавиатуре в процессе редактирования текста набрано "Слово1", которое есть и в строке автозамены некоторого шаблона. В такой ситуации после активизации механизма автозамены любым из способов, набранное "Слово1" заменится на текст шаблона.
Однако это не всегда удобно. Так, например, если пользователь хочет заменить слово "Проц" на "Процедура…", то набрав на клавиатуре слово "Проце" и активизировав механизм автозамены, ничего не произойдет, поскольку в строках автозамены в шаблонах слова "Проце" обнаружено не будет.
Механизм шаблонов в 1С:Предприятии 8 предоставляет возможность сделать один шаблон, который будет описывать несколько строк автозамены:
Строка автозамены | Текст шаблона |
---|---|
Проц | Процедура. |
Проце | Процедура. |
Процед | Процедура. |
Процеду | Процедура. |
Процедур | Процедура. |
Процедура | Процедура. |
Это обеспечивается использованием постоянной и вариантной части строки автозамены. Постоянная часть– это то, что мы обычно привыкли писать в строке автозамены и рассматривали на примерах ранее. Вариантная часть – часть строки автозамены, которая может участвовать в строке автозамены любым подходящим количеством своих символов слева направо.
Запись строки автозамены с использованием постоянной и вариантной частей выглядит следующим образом:
Рассмотрим пример со словом "Процедура". Очевидно, что во всех строках автозамены строка "Проц" является постоянной частью строки автозамены, а текст правее – некоторой переменной частью, имеющей в каждом случае разное число символов. Решением для рассматриваемого примера будет один шаблон со строкой автозамены "проц[едур a ]".
5. Основные отличия от 1С:Предприятия 7.7:
1. Можно использовать несколько файлов шаблонов.
2. Подключение шаблонов осуществляется с помощью выбора соответствующих файлов шаблонов и подключения их список файлов. Порядок следования файлов в списке можно менять.
3. Дерево шаблонов отображается в отдельном окне "Шаблоны текста".
4. Расширился набор вариантов для выбора нужного шаблона.
5. Строка автозамены может иметь постоянную и вариантную части.
6. При установке системы активизация механизма автозамены при вводе текста отключена , поскольку не всегда удобно в процессе набора текста делать автозамену одной строки на другую. Более удобным будет использовать команду "Подобрать шаблон…" (Ctrl + Q).
7. В шаблонах появилась возможность выбора из нескольких вариантов с помощью управляющей конструкции "Выбор варианта".
Читайте также: