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

24.09.15

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Пример получения реквизитов договора
.ert 113,00Kb ver:1.0
2
2 Скачать (1 SM) Купить за 1 850 руб.

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

Процедура ПолучитьРеквизитыДоговора(Знач Договор, НомерДог, ДатаДог)
	// Если название договора пустое, то выход
	Если ПустоеЗначение(Договор) = 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    14505    BorisBelov    11    

6

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

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

1 стартмани

02.01.2012    15041    124    Digo65    19    

12

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

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

04.11.2011    16751    twilight5023    8    

14
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. cargobird 308 25.09.15 08:21 Сейчас в теме
Доброго времени!
На главной странице сайта стоимость скачивания файла 10$m, а внутри публикации 1$m.
Если хотите привести в соответствие - в поле "минимальная стоимость публикации" при редактировании публикации тоже надо указать 1$m...
4. SiAl 76 25.09.15 14:10 Сейчас в теме
(1) cargobird, хорошо, сейчас исправлю. А то уже лет сто ничего тут не выкладывал, тонкостей не знаю / не помню.
2. Доня 288 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 строки это номер и дата.
Оставьте свое сообщение