Почему может на работать НайтиПоНомеру()?
Здравствуйте.
Покажу кусочек из Табло отладки:
ИщемНомер = "ТИ003965"
ИщемДату = '24.09.21'
объект.НайтиПоНомеру(ИщемНомер, ИщемДату) = 0
объект.НайтиПоНомеру( "ТИ003965", '24.09.21') = 1
Почему когда в метод поставляется переменные - документ не находится, а если подставить значения переменных - то находится?
Я не понимать :(
Покажу кусочек из Табло отладки:
ИщемНомер = "ТИ003965"
ИщемДату = '24.09.21'
объект.НайтиПоНомеру(ИщемНомер, ИщемДату) = 0
объект.НайтиПоНомеру( "ТИ003965", '24.09.21') = 1
Почему когда в метод поставляется переменные - документ не находится, а если подставить значения переменных - то находится?
Я не понимать :(
По теме из базы знаний
- FAQ или платформа 8 для чайников :)
- Типовая борьба - личный опыт работы с типовыми конфигурациями 1С:8
- О времени и 1С
- Как автоматически заполнить обработкой табличную часть документа "Ввод начальных остатков" (Тип операции = "Расчеты с партнерами"). 1С: ERP
- Базовые вещи БСП, которые облегчат жизнь программисту 1С
Найденные решения
(4)
(4)
Год получается 21, а не 2021. Сделайте проверку на количество цифр в году и если только 2, то добавьте до полного значения года.
Код разбирает текстовую строку типа "Оплата за товар (чайники) по сч.№ТИ003965 от 24.09.21"
(4)
Год = Сред(Месяц_Год, ПозицияТочки + 1);
ИщемДату = Дата(Число(Год), Число(Месяц), Число(День));
ИщемДату = Дата(Число(Год), Число(Месяц), Число(День));
Год получается 21, а не 2021. Сделайте проверку на количество цифр в году и если только 2, то добавьте до полного значения года.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3) Не совсем так, эти переменные вычисляются
Самое интересное что некоторые документы таки находятся!
Код разбирает текстовую строку типа "Оплата за товар (чайники) по сч.№ТИ003965 от 24.09.21" из платёжного поручения для вычленения документа по которому пришла оплата
Вот полный код:
Самое интересное что некоторые документы таки находятся!
Код разбирает текстовую строку типа "Оплата за товар (чайники) по сч.№ТИ003965 от 24.09.21" из платёжного поручения для вычленения документа по которому пришла оплата
Вот полный код:
//{Поиск документа
ИщемНомер = "";
ИщемДату = "";
спсМесяцыСтрокой = СоздатьОбъект("СписокЗначений");
спсМесяцыСтрокой.ДобавитьЗначение(1, "янв");
спсМесяцыСтрокой.ДобавитьЗначение(2, "фев");
спсМесяцыСтрокой.ДобавитьЗначение(3, "мар");
спсМесяцыСтрокой.ДобавитьЗначение(4, "апр");
спсМесяцыСтрокой.ДобавитьЗначение(5, "мая");
спсМесяцыСтрокой.ДобавитьЗначение(6, "июн");
спсМесяцыСтрокой.ДобавитьЗначение(7, "июл");
спсМесяцыСтрокой.ДобавитьЗначение(8, "авг");
спсМесяцыСтрокой.ДобавитьЗначение(9, "сен");
спсМесяцыСтрокой.ДобавитьЗначение(10, "окт");
спсМесяцыСтрокой.ДобавитьЗначение(11, "ноя");
спсМесяцыСтрокой.ДобавитьЗначение(12, "дек");
ПозицияНомера = Найти(Назначение, "№");
Позиция_от_ = Найти(Назначение, " от ");
Если ПозицияНомера <> 0 Тогда
ИщемНомер = СокрЛП(Сред(Назначение, ПозицияНомера + 1, Позиция_от_ - ПозицияНомера));
КонецЕсли;
Если Позиция_от_ <> 0 Тогда
ИщемДату = Сред(Назначение, Позиция_от_ + 4, 16); //максимум 16 символов, если месяц строкой "сентября"
ИщемДату = СтрЗаменить(ИщемДату, " ", "."); //заменяем возможные пробелы на "."
ПозицияТочки = Найти(ИщемДату, ".");
День = Лев(ИщемДату, ПозицияТочки - 1);
Месяц_Год = Сред(ИщемДату, ПозицияТочки + 1);
ПозицияТочки = Найти(Месяц_Год, ".");
Месяц = Лев(Месяц_Год, ПозицияТочки - 1);
Если Число(Месяц) = 0 Тогда //значит месяц прописью
Месяц = спсМесяцыСтрокой.Получить(Нрег(Лев(Месяц, 3)));
КонецЕсли;
Год = Сред(Месяц_Год, ПозицияТочки + 1);
ИщемДату = Дата(Число(Год), Число(Месяц), Число(День));
КонецЕсли;
Если Найти(Нрег(Назначение), "фактур") > 0 Тогда
//ищем фактуру
объект = СоздатьОбъект("Документ.СчетФактураН");
Сообщить("Ищем " + объект.Вид() + " №" + ИщемНомер + " от " + ИщемДату);
Если объект.НайтиПоНомеру(ИщемНомер, ИщемДату) = 1 Тогда
Сообщить("..найден!");
Конт.ДокументПоставки = объект.ДокументОснование;
Договор = объект.ДокументОснование.Договор;
Иначе
Сообщить("..не найден!", "!");
КонецЕсли;
ИначеЕсли Найти(Нрег(Назначение), "накладн") > 0 Тогда
//ищем накладную
объект = СоздатьОбъект("Документ.РасходнаяНакладная");
Сообщить("Ищем " + объект.Вид() + " №" + ИщемНомер + " от " + ИщемДату);
Если объект.НайтиПоНомеру(ИщемНомер, ИщемДату) = 1 Тогда
Сообщить("..найден!");
Конт.ДокументПоставки = объект.ТекущийДокумент();
Договор = объект.Договор;
Иначе
Сообщить("..не найден!", "!");
КонецЕсли;
ИначеЕсли (Найти(Нрег(Назначение), "счет") > 0) или (Найти(Нрег(Назначение), "сч.") > 0) Тогда
//ищем счет
объект = СоздатьОбъект("Документ.Счет");
Сообщить("Ищем " + объект.Вид() + " №" + ИщемНомер + " от " + ИщемДату);
Если объект.НайтиПоНомеру(ИщемНомер, ИщемДату) = 1 Тогда
Сообщить("..найден!");
Конт.ДокументПоставки = объект.ТекущийДокумент();
Договор = объект.Договор;
Иначе
Сообщить("..не найден!", "!");
КонецЕсли;
КонецЕсли;
Показать
(4)
(4)
Год получается 21, а не 2021. Сделайте проверку на количество цифр в году и если только 2, то добавьте до полного значения года.
Код разбирает текстовую строку типа "Оплата за товар (чайники) по сч.№ТИ003965 от 24.09.21"
(4)
Год = Сред(Месяц_Год, ПозицияТочки + 1);
ИщемДату = Дата(Число(Год), Число(Месяц), Число(День));
ИщемДату = Дата(Число(Год), Число(Месяц), Число(День));
Год получается 21, а не 2021. Сделайте проверку на количество цифр в году и если только 2, то добавьте до полного значения года.
(5) Если в данной строке дата со времене ( если мне память не изменяет, то формат у нее должен быть такой 24.09.2021 0:00:00), а в документе дата без времени стоит, то не найдет документы.Вам нужно будет тогда вот эту часть кода закомментить
Так как она теряет смысл, а уже в полученном результате искать символ ":" и вычетать 3 символа
ИщемДату = Сред(Назначение, Позиция_от_ + 4, 16); //максимум 16 символов, если месяц строкой "сентября"
ИщемДату = СтрЗаменить(ИщемДату, " ", "."); //заменяем возможные пробелы на "."
ПозицияТочки = Найти(ИщемДату, ".");
День = Лев(ИщемДату, ПозицияТочки - 1);
Месяц_Год = Сред(ИщемДату, ПозицияТочки + 1);
ПозицияТочки = Найти(Месяц_Год, ".");
Месяц = Лев(Месяц_Год, ПозицияТочки - 1);
Если Число(Месяц) = 0 Тогда //значит месяц прописью
Месяц = спсМесяцыСтрокой.Получить(Нрег(Лев(Месяц, 3)));
КонецЕсли;
ПоказатьТак как она теряет смысл, а уже в полученном результате искать символ ":" и вычетать 3 символа
ДатаВремя = Дата(Число(Год), Число(Месяц), Число(День));
Символ = Найти(ДатаВремя, ":");
ИщемДату = Лев(ДатаВремя, Символ-3) ;
(18)Ну вообще то говоря наверное какая то маска есть - большинство клиентов готовит платёжные документы в какой-нибудь 1С-ке, где эта строка более-менее формализована, но не у всех же 1С, так что пришлось извращаться - вон в итоге попались строки в которых перед номером документа не оказалось символа "№" - пришлось определять слово с номером документа по префиксу...
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот