Присвоение номера документа при загрузке
Показывать по
10
20
40
сообщений
- 1
- 2
03.11.2016
13:58
#1
Есть обработка, которой загружаем накладные в базу, предварительно выгруженные в файл из идентичных конфигураций, подскажите что поправить в коде обработки загрузки, чтобы номер загружаемого документа был не указанный в файле, а присваивался следующий по порядку в текущей базе.
Ниже код
Ниже код
| Код |
|---|
Функция ЗаполнитьСписокЗначений(Стр)
Сп = СоздатьОбъект("СписокЗначений");
Пока 1=1 Цикл
ПозЗпт = Найти(Стр,",");
Если ПозЗпт>0 Тогда
Сп.ДобавитьЗначение(Лев(Стр,ПозЗпт-1));
Стр = Сред(Стр,ПозЗпт+1);
Иначе
Сп.ДобавитьЗначение(Стр);
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Сп;
КонецФункции
//*******************************************
Процедура ВыбратьФайл()
Перем Каталог;
ИмяФайла = СокрЛП(ФайлЗагрузки);
Каталог = "C:\";
Если ФС.ВыбратьФайл(0, ИмяФайла, Каталог, "Выберите файл", "Текстовые (*.txt) |*.txt|Все файлы (*.*) |*.*")=1 Тогда
ФайлЗагрузки=Каталог+ИмяФайла;
КонецЕсли;
КонецПроцедуры
//*******************************************
Процедура ОткрытьФайл()
ИмяФайла = СокрЛП(ФайлЗагрузки);
Текст=СоздатьОбъект("Текст");
Текст.КодоваяСтраница<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=0" target="_blank" title="Комментарий 0" class="comment-ref">(0)</a>
Если ФС.СуществуетФайл(ИмяФайла) = 1 Тогда
Текст.Открыть(ИмяФайла);
Текст.Показать("Файл",ИмяФайла);
Иначе
Предупреждение("Указанный файл не существует");
КонецЕсли;
КонецПроцедуры
//*******************************************
Процедура Загрузить()
ДокВН = СоздатьОбъект("Документ.РасходнаяНакладнаяВнутр");
СпрМХ = СоздатьОбъект("Справочник.МестаХранения");
СпрНом = СоздатьОбъект("Справочник.Номенклатура");
СпРекв = СоздатьОбъект("СписокЗначений");
Текст = СоздатьОбъект("Текст");
Текст.КодоваяСтраница<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=0" target="_blank" title="Комментарий 0" class="comment-ref">(0)</a>
Если ФС.СуществуетФайл(СокрЛП(ФайлЗагрузки)) = 1 Тогда
Текст.Открыть(СокрЛП(ФайлЗагрузки));
Иначе
Предупреждение("Указанный файл не существует");
КонецЕсли;
СчДок = 0;
Сч = 0;
Стр = "";
Для Сч=1 По Текст.КоличествоСтрок() Цикл
Стр = Текст.ПолучитьСтроку(Сч);
Стр = СтрЗаменить(Стр,",","$");
Стр = СтрЗаменить(Стр,"|",",");
СпРекв = ЗаполнитьСписокЗначений(Стр);
Если (СпРекв.РазмерСписка()=5) И (Лев(СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=1" target="_blank" title="Комментарий 1" class="comment-ref">(1)</a>,1)="#") Тогда
Ответ = Вопрос("Файл: "+ФайлЗагрузки+" включает документы: "+СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=2" target="_blank" title="Комментарий 2" class="comment-ref">(2)</a>+" за период с: "+СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=3" target="_blank" title="Комментарий 3" class="comment-ref">(3)</a>+"-"+СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=4" target="_blank" title="Комментарий 4" class="comment-ref">(4)</a>+" по месту отгрузки: "+СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=5" target="_blank" title="Комментарий 5" class="comment-ref">(5)</a>+". Загрузить?","Да+Нет");
Если Ответ="Нет" Тогда
Прервать;
КонецЕсли;
ИначеЕсли (СпРекв.РазмерСписка()=7) И (Лев(СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=1" target="_blank" title="Комментарий 1" class="comment-ref">(1)</a>,1)="*") Тогда
Если Сч>2 Тогда // т.е. если текущий док-т не первый - записываем и проводим предшествующий документ
ДокВН.Записать();
ДокВН.Провести();
СчДок = СчДок + 1;
КонецЕсли;
НомерДок = СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=2" target="_blank" title="Комментарий 2" class="comment-ref">(2)</a>
ДатаДок = Дата(СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=3" target="_blank" title="Комментарий 3" class="comment-ref">(3)</a>);
Если СпрМХ.НайтиПоНаименованию(СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=4" target="_blank" title="Комментарий 4" class="comment-ref">(4)</a>,0,1)=1 Тогда
МестоХранения = СпрМХ.ТекущийЭлемент();
Иначе
МестоХранения = "";
КонецЕсли;
Если СпрМХ.НайтиПоНаименованию(СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=6" target="_blank" title="Комментарий 6" class="comment-ref">(6)</a>,0,1)=1 Тогда
Получатель = СпрМХ.ТекущийЭлемент();
Иначе
Получатель = "";
КонецЕсли;
Если ДокВН.НайтиПоНомеру(НомерДок,ДатаДок)=1 Тогда
ДокВН.СделатьНеПроведенным();
ДокВН.НомерДок = НомерДок;
ДокВН.ДатаДок = ДатаДок;
ДокВН.МестоХранения = МестоХранения;
ДокВН.Получатель = Получатель;
ДокВН.УдалитьСтроки();
Иначе
ДокВН.Новый();
ДокВН.НомерДок = НомерДок;
ДокВН.ДатаДок = ДатаДок;
ДокВН.МестоХранения = МестоХранения;
ДокВН.Получатель = Получатель;
КонецЕсли;
ИначеЕсли СпРекв.РазмерСписка()=8 Тогда
КодТовара = СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=1" target="_blank" title="Комментарий 1" class="comment-ref">(1)</a>
НаимТовара = СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=2" target="_blank" title="Комментарий 2" class="comment-ref">(2)</a>
Количество = СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=3" target="_blank" title="Комментарий 3" class="comment-ref">(3)</a>
ЦенаРозничная = СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=4" target="_blank" title="Комментарий 4" class="comment-ref">(4)</a>
СуммаРозничная = СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=5" target="_blank" title="Комментарий 5" class="comment-ref">(5)</a>
ЦенаОптовая = СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=6" target="_blank" title="Комментарий 6" class="comment-ref">(6)</a>
СуммаОптовая = СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=7" target="_blank" title="Комментарий 7" class="comment-ref">(7)</a>
Вес = СпРекв.ПолучитьЗначение<a rel="noindex,nofollow" href="/ajax/comment_pub.php?t=161038&c=8" target="_blank" title="Комментарий 8" class="comment-ref">(8)</a>
ДокВН.НоваяСтрока();
Если СпрНом.НайтиПоКоду(КодТовара,0)=1 Тогда
ДокВН.Товар = СпрНом.ТекущийЭлемент();
ИначеЕсли СпрНом.НайтиПоКоду(НаимТовара,0)=1 Тогда
ДокВН.Товар = СпрНом.ТекущийЭлемент();
Иначе
ДокВН.Товар = "";
КонецЕсли;
ДокВН.Количество = Количество;
ДокВН.ЦенаРозничная = ЦенаРозничная;
ДокВН.СуммаРозничная = СуммаРозничная;
ДокВН.ЦенаОптовая = ЦенаОптовая;
ДокВН.СуммаОптовая = СуммаОптовая;
ДокВН.Вес = Вес;
КонецЕсли;
КонецЦикла;
ДокВН.Записать();
ДокВН.Провести();
Если Ответ="Нет" Тогда
Сообщить("Загрузка отменена пользователем: "+ИмяПользователя());
Возврат;
Иначе
Предупреждение("Загрузка завершена! Загружено: "+СчДок+" документов.");
КонецЕсли;
КонецПроцедуры
|
Ответили:
пост #3
03.11.2016
21:53
#2
Antares пишет:
вместо этого поставить:
но проблема в том, что перед этим выполняется поиск по номеру документа, а т.к. исходного номера документа уже нет, то при повторной загрузке не найдет уже созданный документ и создаст новый.
| Цитата |
|---|
ДокВН.НомерДок = НомерДок; |
| Код |
|---|
ДокВН.НомерДок = УстановитьНовыйНомер(); |
но проблема в том, что перед этим выполняется поиск по номеру документа, а т.к. исходного номера документа уже нет, то при повторной загрузке не найдет уже созданный документ и создаст новый.
03.11.2016
22:09
#3
Ответ на
пост №1
Antares, и еще в:| Код |
|---|
ДокВН.Записать(); ДокВН.Провести(); Если Ответ="Нет" Тогда |
| Код |
|---|
Если Сч>2 Тогда ДокВН.Записать(); ДокВН.Провести(); КонецЕсли; |
| Код |
|---|
чтобы не записывался пустой документ, если строк < 2. |
07.11.2016
08:58
#4
Спасибо за помощь. Если написать:
сообщает что синтаксические ошибки функция не обнаружена. Я просто закоментировал эту строку и вуаля, присваивает следующий порядковый номер, что меня вполне устраивает. Есть ещё вопрос по этой обработке, всегда сообщает что загружено 0 документов.
| Код |
|---|
ДокВН.НомерДок = УстановитьНовыйНомер(); |
сообщает что синтаксические ошибки функция не обнаружена. Я просто закоментировал эту строку и вуаля, присваивает следующий порядковый номер, что меня вполне устраивает. Есть ещё вопрос по этой обработке, всегда сообщает что загружено 0 документов.
Ответили:
пост #5
07.11.2016
09:06
#5
Ответ на
пост №4
Antares, еще надо добавить после цикла после записи:СчДок = СчДок + 1;
07.11.2016
10:39
#6
Что-то мистика какая-то, в копии базы работает правильно, в рабочей базе присваивает тот номер который в файле выгрузки.
Ответили:
пост #7
07.11.2016
10:42
#7
Ответ на
пост №6
Antares, значит в рабочей базе лежит старая версия обработки. Ответили:
пост #8
07.11.2016
10:51
#8
Ответ на
пост №7
Вьюн,Кажется понял почему. Сейчас почему-то присваивается следующий порядковый номер с префиксом из файла, мне нужен следующий порядковый номер с префиксом Цск. И ещё заметил, если в базе есть такой документ с таким же номером как в файле, то обработка документ в базе просто заменяет документом из файла.
07.11.2016
12:14
#9
Antares пишет:
ДокВН.УстановитьНовыйНомер("Цск");
и убрать поиск по номеру документа, всегда создавать новый.
| Цитата |
|---|
Кажется понял почему. Сейчас почему-то присваивается следующий порядковый номер с префиксом из файла, мне нужен следующий порядковый номер с префиксом Цск. И ещё заметил, если в базе есть такой документ с таким же номером как в файле, то обработка документ в базе просто заменяет документом из файла. |
и убрать поиск по номеру документа, всегда создавать новый.
Ответили:
пост #10
- 1
- 2
Читают тему
(гостей: 1)