Как получить номер и дату договора из наименования справочника договоров?

24.09.15

Разработка - Механизмы типовых конфигураций

В типовых конфигурациях платформы "1С:Предприятие 7.7" часто номер и дата договора указаны в самом наименовании договора. Что создает сложности в тех случаях, когда эти реквизиты надо знать, например, при конвертации данных в конфигурации платформы "1С:Предприятие 8", где номер и дата договора - отдельные реквизиты.

Скачать файлы

Наименование Файл Версия Размер
Пример получения реквизитов договора
.ert 113,00Kb
2
.ert 1.0 113,00Kb 2 Скачать

Дарю всем процедуру "выпиливания" номера и даты договора из наименования договора.

Процедура ПолучитьРеквизитыДоговора(Знач Договор, НомерДог, ДатаДог)
	// Если название договора пустое, то выход
	Если ПустоеЗначение(Договор) = 1 Тогда
		Возврат;
	КонецЕсли;
	Гг = 0; Мм = 0; Дд = 0;
	// Создадим объект для использования регулярных выражений
	RegExp = CreateObject("VBScript.RegExp");
	// Найдем в наименовании договора нужные нам значения
	RegExp.Pattern = "(№\s*(\S+))?\s*от\s*(\d{1,2})\D(\d{1,2})\D(\d{1,4})";
	RegExp.IgnoreCase = -1;
	Matches = RegExp.Execute(Договор);
	Если Matches.Count = 1 Тогда
		// Подстрока поиска в названии договора найдена
		Match = Matches.Item(0);
		Если Match.SubMatches.Count = 5 Тогда
			// Получим номер договора
			НомерДог = СокрЛП(Match.SubMatches.Item(1));
		КонецЕсли;
		// Найдем значения года, месяца и дня в цифровом виде
		Дд = Число(Match.SubMatches.Item(Match.SubMatches.Count - 3));
		Мм = Число(Match.SubMatches.Item(Match.SubMatches.Count - 2));
		Гг = Число(Match.SubMatches.Item(Match.SubMatches.Count - 1));
	КонецЕсли;
	// Если не указано столетие, то укажем текущее
	Если (Гг > 0) И (Гг < 100)  Тогда
		Гг = Гг + Цел(ДатаГод(ТекущаяДата()) / 100) * 100;
	КонецЕсли;
	// Проверим и преобразуем нужные нам значения
	ДатаДог = Дата(Гг, Мм, Дд);
	Если ПустоеЗначение(НомерДог) = 1 Тогда
		// Для ненайденного номера договора устанавливаем значение "без номера"
		НомерДог = "б/н";
	КонецЕсли;
КонецПроцедуры // ПолучитьРеквизитыДоговора

Поиск осуществляется с помощью встроенной в ОС Microsoft Windows компоненты RegExp. Шаблон поиска реквизитов подразумевает следущий шаблон:

№[Номер]от[Дата]

, где между ключевыми словами "№" и "от" и значениями реквизитов могут быть любое количество пробелов. Поиск осуществляется вне зависимости от регистра ключевого слова "от" ("ОТ", "От", "оТ").

Для использования процедуры перед ее вызовом надо задать переменные для получемых значений номера и даты договора:

НомерДоговора = ""; ДатаДоговора = Дата(0);
ПолучитьРеквизитыДоговора(НаименованиеДоговора, НомерДоговора, ДатаДоговора);

Попробовать процедуру можно в тестовой обработке.

Договоры регулярные выражения конвертация данных

См. также

Исправление и проведение документов

Универсальные функции Механизмы типовых конфигураций Бухгалтерский учет 7.7 1С:Производство+Услуги+Бухгалтерия Россия Бесплатно (free)

Исправление и проведение документов, например, счетов-фактур, введенных на основании документов реализации, можно организовать многими способами. Описан сравнительно простой подход, реализованный и работающий несколько лет в реальной бухгалтерии 1Cv7.7. Без внешних компонентов.

23.07.2012    14243    BorisBelov    11    

6

Взаимозачет по партиям для регистра "ПартииНаличие"

Логистика, склад и ТМЦ Механизмы типовых конфигураций Оперативный учет 7.7 1С:Торговля и склад 7.7 Россия Бухгалтерский учет Абонемент ($m)

В процессе работы с конфигурацией ТИС, в разрезе одной номенклатуры могут накапливаться как положительные так и отрицательные остатки по различным партиям. Данная обработка содержит модуль проведения регламентного документа, который можно было бы создать в конфигурации и условно назвать "КорректировкаПартий", посредством которого можно провести взаимозачёт таких партий.

1 стартмани

02.01.2012    14813    124    Digo65    19    

12

1С:Торговля и Склад - ошибка во всех релизах, При использовании нескольких фирм и префиксов номеров документов.

Механизмы типовых конфигураций Оперативный учет 7.7 1С:Торговля и склад 7.7 Россия Бесплатно (free)

Собственно сегодня обнаружил ошибку, которая присутствует во всех релизах конфигурации Торговля и Склад 7.7 вплоть до текущего 7.70.969, при использовании нескольких фирм и префиксов документов для некоторых из них.

04.11.2011    16450    twilight5023    8    

14
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. cargobird 306 25.09.15 08:21 Сейчас в теме
Доброго времени!
На главной странице сайта стоимость скачивания файла 10$m, а внутри публикации 1$m.
Если хотите привести в соответствие - в поле "минимальная стоимость публикации" при редактировании публикации тоже надо указать 1$m...
4. SiAl 76 25.09.15 14:10 Сейчас в теме
(1) cargobird, хорошо, сейчас исправлю. А то уже лет сто ничего тут не выкладывал, тонкостей не знаю / не помню.
2. Доня 284 25.09.15 12:34 Сейчас в теме
а если номер сложный: с буквами и цифрами ?
3. SiAl 76 25.09.15 14:07 Сейчас в теме
(2) Доня, без разницы. Все что между "№" и "от" считается номером (конечно без окружающих пробелов). И в описании забыл написать, что если "№" в наименовании был не найден, то тогда считается, что номера нет. Пришлось на это пойти, чтобы в номер не "пихалась" всякая лабуда.
5. Leja 01.10.15 11:04 Сейчас в теме
найти "№" и "от" в строке уже не катит?
6. SiAl 76 02.10.15 15:10 Сейчас в теме
(5) Leja, катит. Только в моем случае, одной строкой регулярного выражения я могу найти номер, или не найти - при его отсутствии, а также у меня может быть число символов числа и месяца от одного до двух, а для года - от одного до четырех, с любыми нечисловыми разделителями: хоть точка, хоть запятая, хоть слэш, да что угодно.
Сколько бы кода, используя функцию Найти(), пришлось бы писать? А еще бы было пришлось писать кучу условий Если ... Тогда и функций Сред(), Лев() и Прав().
7. sp18s 17.07.22 12:35 Сейчас в теме
Решается в 1 строку кода.
МассивСтрок = СтрРазделить(Договор, "№от", Ложь);
В итоге будет массив, где последние 2 строки это номер и дата.
Оставьте свое сообщение