Имя: Пароль:
1C
1С v8
Странное поведение программы
,
0 inmortal203
 
17.09.12
10:03
Делаю обработку, которая вытаскивает данные из эксэля, затем записывает их в документ. Судя по логике все должно работать правильно, но происходят какие то чудеса. То есть все отлично заполняется, только в какой то определенный момент перестают рассчитываться цены. Пробовал разные таблички обработать, и каждый раз в новом месте цикл в котором подставляется цена перестает работать.


Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    ЦеныНоменклатурыСрезПоследних.Номенклатура,
       |    ЦеныНоменклатурыСрезПоследних.Цена
       |ИЗ
       |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних";

   ВыборкаЦен = Запрос.Выполнить().Выбрать();
   
   //Заполнение табличной части документа
   Если не отказ Тогда
       Для Каждого Строка из Товары Цикл
               НоваяСтрокаТовары=ДокументОбъект.Товары.Добавить();
               НоваяСтрокаТовары.Номенклатура = Строка.Номенклатура;
               
               Проверка=НЕ ПустаяСтрока(НоваяСтрокаТовары.Номенклатура);
               
               Если Проверка Тогда
               Пока ВыборкаЦен.Следующий() Цикл
                   Если НоваяСтрокаТовары.Номенклатура=ВыборкаЦен.Номенклатура Тогда
                        НоваяСтрокаТовары.Цена=ВыборкаЦен.Цена;
                        Прервать;
                   КонецЕсли;
               КонецЦикла;
               КонецЕсли;
                               
               НоваяСтрокаТовары.ЕдиницаИзмерения = Строка.Номенклатура.ЕдиницаХраненияОстатков;
               НоваяСтрокаТовары.Коэффициент = 1;
               НоваяСтрокаТовары.Количество = Строка.Количество;
               НоваяСтрокаТовары.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
               
               ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(НоваяСтрокаТовары, ЭтотОбъект);
               ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(НоваяСтрокаТовары, ЭтотОбъект);
       КонецЦикла;
   КонецЕсли;    
   
   ДокументОбъект.Записать();
1 Нуф-Нуф
 
17.09.12
10:05
отладчик не спасет?
2 inmortal203
 
17.09.12
10:05
Номенклатура вся заполняется на ура, но цены нет... в некоторых случаях может заполнить половину, иногда вообще 1-3 первых элемента.
3 Maxus43
 
17.09.12
10:05
>>только в какой то определенный момент
скорей всего в экселе где-то сбился тип в ячейке, и не заполняет нужные данные
4 Reset
 
17.09.12
10:07
Для Каждого Строка из Товары Цикл
                НоваяСтрокаТовары=ДокументОбъект.Товары.Добавить();

ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(НоваяСтрокаТовары, ЭтотОбъект);

Феерично
5 inmortal203
 
17.09.12
10:07
секунду) я кое что проверю и проору с себя скорее всего))
6 Reset
 
17.09.12
10:08
Это феерично даже если "Товары" - это ТЗ, сформированная по экселю
7 unregistered
 
17.09.12
10:08
(0) А кто будет делать сброс выборки?

Перед циклом Пока ВыборкаЦен.Следующий() Цикл надо сделать ВыборкаЦен.Сбросить()



А вообще код в (0) - редкостный бред.
8 МишКа
 
17.09.12
10:09
Я бы вместо цикла по выборке запроса использовал НайтиСледующее(). И уж во всяком случае Сбросить() перед циклом.
10 inmortal203
 
17.09.12
10:11
нет, не проору) все норм...
обьясню поподробней.
дело в том что у нас есть 2 филиала, наш (ГЛАВНЫЙ) и киевский. У нас свой сервер и база и у них так же.
они присылают заказ поставщику в экселе и мы его вручную вбиваем. обработка - чтобы ускорить процесс.
номенклатура по наименованию совпадает процентов на 90-95, поэтому пустые строки в выходной табл - это нормально.
11 Reset
 
17.09.12
10:12
Все норм :\
Да нет там не единой "норм" строчки
12 Reset
 
17.09.12
10:12
Даже на ошибки бессмысленно указывать
13 unregistered
 
17.09.12
10:13
Я не понял

Строка.Номенклатура - это строка, а не ссылка?....

А как тогда вообще там что-то работает?
14 inmortal203
 
17.09.12
10:13
Сейчас попробую так... Я пока только учусь, так что пинок под зад не помешает)
код пока пишу как умею, эффективность и быстродействие в этом случае - не главное. главное чтоб был результат
15 Axel2009
 
17.09.12
10:15
(0) сбрасывать надо выборку. если уж по другому не умеешь
16 Alex S D
 
17.09.12
10:16
а сколько у вас типов цен?
17 Chin
 
17.09.12
10:16
(0) Способ поиска цен "оригинальный"... смтр. (7) и (8).
Лично я бы запихнул ТЗ в запрос и там левым соединением получил для каждой строчки цену, а результат сразу бы забросил в ТЧ документа.
18 Бледно Золотистый
 
17.09.12
10:16
(0) А ТипЦен только один?
19 Reset
 
17.09.12
10:17
(14) Ты напиши хотя бы, что такое "Товары","ДокументОбъект". Понять хотя бы, что происходит
20 Alex S D
 
17.09.12
10:17
где отбор в запросе? и че за дурацкий перебор цен в цикле? типа присвоить хоть какую-нибудь.. бред полный
21 unregistered
 
17.09.12
10:19
(17) >> я бы запихнул ТЗ в запрос и там левым соединением получил для каждой строчки цену, а результат сразу бы забросил в ТЧ документа.

Метод хорош, когда известен тип цены. А если цен на одну номенклатуру несколько, то получим по несколько строк для каждой номенклатуры.

Автор же выгребает первую попавшуюся цену. Что есть бред.
22 k1us181b
 
17.09.12
10:19
Для Каждого Строка из Товары Цикл - Товары переименуй для начала
23 Бледно Золотистый
 
17.09.12
10:19
(21)Таки последнюю цену гребет
24 Бледно Золотистый
 
17.09.12
10:20
(23)Туплю, первую попавшуюся
25 Reset
 
17.09.12
10:20
(23) Произвольного типа
26 pessok
 
17.09.12
10:23
сделай запрос по-человечески, человек. каждый раз полностью обходить типы цен и искать совпадение - это аллес... ну и сбрасывать выборку, если уж так. а вообще - пакетным запросом, пихай своб ТЗ из экселя в ВТ, потом соединяй слева с ценами и выгружай в ТЧ
27 unregistered
 
17.09.12
10:23
(24) >> первую попавшуюся + "в выборке".

А какая она там реально в регистре - фиг его знает.
Если на номенклатуру устанавливалось пять типов цен, то на каком месте в выборе будет каждая из них в таблице среза последних однозначно не определено.
28 Chin
 
17.09.12
10:25
(21) Судя по всему у него один тип цены... Хотя я и не телепат...
29 inmortal203
 
17.09.12
10:32
Сброс однозначно помог, спасибо) Теперь буду хоть это знать.
Тип цен один - поэтому над этим замарачиваться не стоит. Пока оставлю все так, а как подымусь на новый уровень, все что сделал буду конечно совершенствовать.
30 Axel2009
 
17.09.12
10:34
(29) если успеешь =)
31 Нуф-Нуф
 
17.09.12
10:35
отладчик уже предлагали?
32 unregistered
 
17.09.12
10:38
(29) >> как подымусь на новый уровень, все что сделал буду конечно совершенствовать.

Все так думают.

А по факту ни когда ни кто ни чего не переделывает до тех пор, пока в этом не возникнет насущная необходимость (что-то надо будет изменить/переделать или вдруг возникают ошибки - в твоем случае, например, добавится второй тип цен и обработка начнет косячить).
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn