Имя: Пароль:
1C
1C 7.7
v7: Присвоение номера документа при загрузке
0 Zbim
 
10.11.16
06:55
Есть обработка, которой загружаем накладные в базу, предварительно выгруженные в файл из идентичных конфигураций. Сейчас присваивается порядковый номер из базы в которую загружаем документы. Подскажите что поправить в коде обработки загрузки, чтобы в случае, если в документе из файла указан определённый "Получатель" то номер загружался такой как указан в файле, если другие "Получатель" то присваивать номер порядковый в базе.

Код обработки:

Функция ЗаполнитьСписокЗначений(Стр)
    Сп = СоздатьОбъект("СписокЗначений");
    Пока 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 Тогда
                Получатель = СпрМХ.ТекущийЭлемент();
            Иначе
                Получатель = "";
            КонецЕсли;
          
      
                ДокВН.Новый();
                ДокВН.УстановитьНовыйНомер("Цск");
                ДокВН.ДатаДок = ДатаДок;
                ДокВН.МестоХранения = МестоХранения;
                ДокВН.Получатель = Получатель;
              

          
        ИначеЕсли СпРекв.РазмерСписка()=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 Тогда
                ДокВН.Товар = СпрНом.ТекущийЭлемент();
            Иначе
                ДокВН.Товар = "";
            КонецЕсли;  
          
            ДокВН.Количество         = Количество;
            ДокВН.ЦенаРозничная     = ЦенаРозничная;
            ДокВН.СуммаРозничная     = СуммаРозничная;
            ДокВН.ЦенаОптовая         = ЦенаОптовая;
            ДокВН.СуммаОптовая         = СуммаОптовая;
            ДокВН.Вес                 = Вес;
          
        КонецЕсли;  
    КонецЦикла;
    ДокВН.Записать();
    ДокВН.Провести();
    Если Ответ="Нет" Тогда
        Сообщить("Загрузка отменена пользователем: "+ИмяПользователя());
        Возврат;
    Иначе
        Предупреждение("Загрузка завершена! Загружено: "+СчДок+" документов.");
    КонецЕсли;
  
КонецПроцедуры
1 VladZ
 
10.11.16
07:18
Номер, который передается в файле:  НомерДок = и далее по тексту

Новый номер генерируется в строке ДокВН.УстановитьНовыйНомер("Цск");

Вот и пропиши нужную логику
2 Zbim
 
10.11.16
07:30
Подскажите как
3 Это_mike
 
10.11.16
07:31
(2) лучший вариант - "позвать программиста"©
4 Zbim
 
10.11.16
07:46
Не всегда лучший
5 Zbim
 
10.11.16
07:48
Я понимаю как записать логически, но не знаю как это записать на языке 1С.

Если получатель "Магазин", то присвоить номер из файла
иначе
присвоить порядковый номер
6 Slypower
 
10.11.16
10:40
Если Получатель="Магазин" Тогда
Док.НомерДок=НомерИзФайла;
иначе
Док.НомерДок.УстановитьНовыйНомер();
КонецЕсли
7 Ёпрст
 
10.11.16
10:42
(6) да уж..
8 Zbim
 
10.11.16
11:28
Уменя это выглядит так:

ДокВН.Новый();
ДокВН.ДатаДок = ДатаДок;
ДокВН.Получатель = Получатель;
Если Получатель="Магазин" Тогда
    ДокВН.НомерДок = НомерДок;
иначе
    ДокВН.УстановитьНовыйНомер("ЦСК");
КонецЕсли;        
ДокВН.МестоХранения = МестоХранения;
ДокВН.Получатель = Получатель;

Но не работает, номер присваивает порядковый из базы
9 Ёпрст
 
10.11.16
11:44
(8) Ясен пень. Получатель - это ссылка на элемент справочника, а не строка
10 Ёпрст
 
10.11.16
11:45
поэтому, вот тут у тебя бред(не Пит)
>>>Если Получатель="Магазин" Тогда
11 Zbim
 
10.11.16
11:56
И? Развивайте мысль дальше, чтобы был бред не Пит, то ....
12 Ёпрст
 
10.11.16
11:58
(11) думать за вас - только за деньги.
13 Slypower
 
10.11.16
12:30
(10) Если он из моего наброска и написал Если Получатель="Магазин", то тогда да, логики нет)))) Тут нужно хотя бы понимать разницу написания в "" и без них. А я всего лишь логику написал на языке 1С, а не решение вопроса
14 Это_mike
 
10.11.16
12:38
(11) см (3)
15 Злопчинский
 
10.11.16
12:42
(5) дятловое решение. потому что один считает что "магазин", а другой ищет "гамазин"
16 Злопчинский
 
10.11.16
12:43
(12) много думать - за много денег?
17 Ёпрст
 
10.11.16
12:44
(16) ну ты же знаешь, что дураков учить - только портить
18 Zbim
 
10.11.16
13:02
Всем спасибо, разобрался:

Если СокрЛП(СпРекв.ПолучитьЗначение(6)) = "Магазин" Тогда
19 VladZ
 
10.11.16
13:07
(18) Ага...  А завтра какой-нибудь пользователь решит, что в наименовании "Магазин" не хватает, например, номера.  И твоя стройная система завалится.
20 Ёпрст
 
10.11.16
13:20
(18) Храни свой магазин, или в константе или реквизитом на форме обработки с типом справочник.нужный вид.
Далее просто сравнивай с ним.
Наслаждайся, кушай печенки