Имя: Пароль:
1C
1С v8
Сравнение двух ТЗ
, ,
0 Смертник
 
16.07.14
14:36
БазаИсточник = V82.Connect(СтрокаПодключения);
    
    Запрос = БазаИсточник.newObject("Запрос");
    ЭлементыФормы.ТабПолеОтчет.Очистить();
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ТоварыНаСкладахОстатки.Номенклатура.Наименование КАК Номенклатура,
    |    ТоварыНаСкладахОстатки.СерияНоменклатуры.Наименование КАК СерияНоменклатуры,
    |    СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК Количество_Рабочая
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Склад = &Склад) КАК ТоварыНаСкладахОстатки
    |
    |СГРУППИРОВАТЬ ПО
    |    ТоварыНаСкладахОстатки.СерияНоменклатуры.Наименование,
    |    ТоварыНаСкладахОстатки.Номенклатура.Наименование";
    
    Запрос.УстановитьПараметр("Склад", БазаИсточник.Справочники.Склады.НайтиПоКоду(ПолеСклад.Код));
    Запрос.УстановитьПараметр("Дата", КонецДня(Дата1));
    
    ВыборкаРабочая = Запрос.Выполнить().Выгрузить();
    
    Макет = ЭтотОбъект.ПолучитьМакет("СравнениеРасхода");
    
    Область = Макет.ПолучитьОбласть("СтрШапка");
    ЭлементыФормы.ТабПолеОтчет.Вывести(Область);
    
    ОбластьСтр = Макет.ПолучитьОбласть("Стр");
    РазницаИтого = 0;
    
    ТЗДанные = ЗапросФактическогоКоличестваПоОтборам().Выгрузить();
    Для Каждого Стр ИЗ ТЗДанные Цикл
        
        Номенклатура = Стр.Номенклатура;
        СерияНоменклатуры = Стр.СерияНоменклатуры;
        НайденнаяНоменклатура = ВыборкаРабочая.Найти(Номенклатура);
        НайденнаяСерияНоменклатуры = ВыборкаРабочая.Найти(СерияНоменклатуры);
        //Номенклатура = ВыборкаРабочая.Найти("Стр.Номенклатура", Номенклатура);
        //СерияНоменклатуры = ВыборкаРабочая.Найти("Стр.СерияНоменклатуры", СерияНоменклатуры);
        
    КонецЦикла;

Вопрос вот в чем - НайденнаяНоменклатура - получает значение COM объект, а не значение самой номенклатуры. Почему?
1 mikecool
 
16.07.14
14:36
тема не соответствует содержимому
то, что получил - такой тип и имеет
2 Смертник
 
16.07.14
14:38
Поставлю вопрос по другому, как из COM объект получить ТЗ?
3 Михаил Козлов
 
16.07.14
14:43
(2) Создать ТЗ, из COM перенести данные. Если речь про то, как в текущей БД найти номенклатуру (COM), то:
- либо по коду;
- либо по наименованию;
- либо по реквизиту (Артикул);
- либо получить УИД,
в зависимости от того, как синхронизированы справочники.
4 Kamas
 
16.07.14
14:45
(2) а давайте зададим вопрос что такое COM объект ?? понимание ответа на этот вопрос даст вам ответ на ваш.
5 hhhh
 
16.07.14
14:45
(2) там ведь наименования у вас. Пятница, что ли?

        НайденнаяНоменклатура = ВыборкаРабочая.Найти(Номенклатура);
        НайденнаяСерияНоменклатуры = ВыборкаРабочая.Найти(СерияНоменклатуры);

это же строки тз у вас получаются
6 Смертник
 
16.07.14
14:59
COM объект - ТЗ, полученная из другой базы
7 Irbis
 
16.07.14
15:01
(6) Сравнивать напрямую можно только простые типы: строки, числа, даты
8 Kamas
 
16.07.14
15:01
(6) не а COM объект - ТЗ, в  другой базе
9 Kamas
 
16.07.14
15:02
(8) что согласитесь слегка не одно и тоже
10 Смертник
 
16.07.14
15:12
(8,9) Согласен не одно и тоже. А подскажите как COM объект преобразовать в ТЗ?
11 Wobland
 
16.07.14
15:14
(10) значение в строку внутр и обратнго
12 hhhh
 
16.07.14
15:17
(10) в цикле переписать в ТЗ этой базы, построчно.
13 Wobland
 
16.07.14
15:19
(12) ну фу же ;)
14 Смертник
 
16.07.14
15:21
Выб = БазаИсточник.ЗначениеВСтрокуВнутр(ВыборкаРабочая);// COM объект

    ТЗ_рабочая = ЗначениеИзСтрокиВнутр(Выб);
Вот так сделал
15 Wobland
 
16.07.14
15:21
(14) не за что
16 Kamas
 
16.07.14
15:24
(15) ага а если в запросе не строка а ссылка будет??
17 Wobland
 
16.07.14
15:26
(16) ком-объект такой ком-объект... у меня не бывало, я не в курсе
18 Смертник
 
16.07.14
15:41
Вот как теперь в Цикле найти СериюНоменклатуры понять бы
НайденнаяСерияНоменклатуры = ТЗ_рабочая.НайтиСтроки(СерияНоменклатуры);

Вот так пишет что недостаточно параметров
19 Wobland
 
16.07.14
15:45
(18) а что пишет СП?
20 hhhh
 
16.07.14
15:45
(18) а переменная СерияНоменклатуры? Там у вас точно-точно структура?
21 Wobland
 
16.07.14
15:46
(20) а ТЗ не подойдёт?
22 catena
 
16.07.14
15:47
(18)Недостаточно параметров или все-таки несоответствие типов?
23 hhhh
 
16.07.14
15:54
(21) поиск одной ТЗ внутри другой? Ну на такое даже гений 1с не решался.
24 Wobland
 
16.07.14
15:54
(22) поврать человеку не дашь..
(23) фигню ляпнул, согласен
25 Смертник
 
16.07.14
16:08
Вообщем задача такая - в одной базе наоприходованно номенклатуры больше чем в другой. И необходимо пройтись по ТЗ ТЗДанные и сравнить с ТЗ_рабочая и там где количество будет разное загрузить в документ Инвентаризация
26 Wobland
 
16.07.14
16:09
(25) хвастаешься?
27 Смертник
 
16.07.14
16:09
Для Каждого Стр ИЗ ТЗДанные Цикл
И вот тут необходимо сравнить и выявить номенлатуру и количество по ней
КонецЦикла
28 Смертник
 
16.07.14
16:10
чем? вроде не хвастаюсь, а спрашиваю совета
29 Wobland
 
16.07.14
16:11
(28) а вроде хвастаешься, а не спрашиваешь

у меня есть РС СоответствиеОбъектовДляОбмена, но я его не отдам никому
30 Смертник
 
16.07.14
16:18
Отбор = Новый Структура();
        Отбор.Вставить("Номенклатура", Номенклатура);
        Отбор.Вставить("СерияНоменклатуры", СерияНоменклатуры);
        НайденныеСтр = ТЗ_рабочая.НайтиСтроки(Отбор);
31 Wobland
 
16.07.14
16:21
(30) бывает
32 Kamas
 
16.07.14
16:24
(27) может я глупость скажу но  можно просто получить тз из com передать ее во второй запрос и сразу получить результат чем творить 100500 тз и искать в них соответствие
33 Kamas
 
16.07.14
16:25
(32) просто будет слегка побыстрее и не так заморочено
34 Смертник
 
16.07.14
16:30
(32) подскажите как это сделать - точнее наведите на мысль
35 Wobland
 
16.07.14
16:31
(34) я в соседней базе все ссылки конвертировал в уид, а потом отдавал получившуюся ТЗ в запрос местной базы
36 Kamas
 
16.07.14
16:33
(34) как сделать что передачу тз в запрос, нахождение нужной номенклатуры, или нахождение не соответствия по количеству??
37 Смертник
 
16.07.14
16:35
Передачу ТЗ в запрос - остальное я и сам нарисую
38 Wobland
 
16.07.14
16:36
(37) УстановитьПараметр
39 Kamas
 
16.07.14
16:36
40 Wobland
 
16.07.14
16:37
(39) мало запятых. мало МВТ
41 Kamas
 
16.07.14
16:40
(40) ))
42 Фокусник
 
16.07.14
16:40
(39) ИМХО, не самый наглядный способ, лучше так:
http://programmist1s.ru/kak-pomestit-tablitsu-v-zapros-1s/
43 Wobland
 
16.07.14
16:41
(42) вот тут с МВТ порядок ;)
44 Kamas
 
16.07.14
16:41
(42) Зато первая ссылка в яндексе))
45 Kamas
 
16.07.14
16:44
(43) неа  это не интересно нужно сразу заниматься опфукацией своего кода тем самым  компенсируя открытость кода поэтому в (32) я сказал глупость))
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс