Имя: Пароль:
1C
1C 7.7
v7: 7.7, Номенклатура, нужно вывести задвоенные единицы измерения
,
0 Zombi
 
26.12.16
12:50
В 7.7 есть справочник "Номенклатура", есть подчиненный справочник "Единицы". Нужно вывести, хотя бы через Сообщить(), Наименования элементов номенклатуры, у которых более 1 единицы с одинаковым реквизитом "Единица". Суть - есть номенклатура, у которой задвоены единицы измерений. Щас данные переношу в 8 и лезут ошибки. Можете набросать код обработки, которая выведет САБЖ?
1 Чужой
 
26.12.16
12:54
Как вариант - загоняешь в таблицу значений, сворачиваешь и смотришь
2 Это_mike
 
26.12.16
12:55
прямым?
3 oslokot
 
26.12.16
12:56
(2) рано
4 Zombi
 
26.12.16
12:56
(1) Ну лет 5 назад я этот код написал бы минут за 5. Щас 7.7 ломает мой мозг.
5 Zombi
 
26.12.16
12:57
(2) База файловая.
6 Лефмихалыч
 
26.12.16
12:58
а с какого слова начинаются запросы в 7.7, кто помнит?
7 oslokot
 
26.12.16
12:58
(4) ведь можно же пройтись циклом по номенклатуре, а внутри цикла пройтись циклом по единицам
8 Лефмихалыч
 
26.12.16
12:59
или там - сразу поля перечисляются?..
ой, да ну ее в жопу!
9 Джинн
 
26.12.16
12:59
(6) Период с по
10 Это_mike
 
26.12.16
12:59
(6) select, или Выбрать
11 MSOliver
 
26.12.16
13:00
Условие на счетчик в выборке
12 Мимохожий Однако
 
26.12.16
13:00
есть универсальная обработка печати справочников, в которой можно вывести единицы измерения и владельцев. Printref или refprint. На любой ИТС посмотри
13 Чужой
 
26.12.16
13:01
Какая конфигурация то?
14 Базис
 
naïve
26.12.16
13:04
Процедура Сформировать()

    
    Ном = СоздатьОбъект("Справочник.Номенклатура");
    ЕдИзм = СоздатьОбъект("Справочник.Единицы");
    Ном.ВыбратьЭлементы();
    Пока Ном.ПолучитьЭлемент() = 1 Цикл
        Если Ном.ЭтоГруппа() = 0 Тогда

            Сообщить("   " + Ном.Наименование + ":" + Ном.Код;

            ЕдИзм.ИспользоватьВладельца(Ном.ТекущийЭлемент(),0);
            ЕдИзм.ВыбратьЭлементы();
            Пока ЕдИзм.ПолучитьЭлемент() = 1 Цикл
                
                Сообщить("   " + ЕдИзм..ОКЕИ + ":" + ЕдИзм.Коэффициент = ;
            КонецЦикла;
        КонецЕсли;    
    КонецЦикла;
КонецПроцедуры
15 Это_mike
 
26.12.16
13:06
select
спрНоменклатура.id [Номенклатура $Справочник.Номенклатура]
,count( спрЕдиницы.ОКЕИ) [всегоj]
,count(distinct спрЕдиницы.ОКЕИ) [различные]
from Справочник.Номенклатура СпрНоменклатура
inner join Справочник.Единицы СпрЕдиницы on  СпрНоменклатура.id=СпрЕдиницы.ParentExt
group by спрНоменклатура.id
having count( спрЕдиницы.ОКЕИ) <> count(distinct спрЕдиницы.ОКЕИ)
16 Zombi
 
26.12.16
13:07
(13) Общепит.
(14) Это просто выведет все подряд. Но попробую с этим что нибудь сделаю. Спасибо, уже проще.
17 Zmich
 
26.12.16
13:07
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Номенклатура", "Справочник.Номенклатура");
ТЗ.НоваяКолонка("Единица", "Строка", 20);
ТЗ.НоваяКолонка("Количество", "Число", 15, 0);
Спр = СоздатьОбъект("Справочник.Номенклатура");
СпрЕдиницы = СоздатьОбъект("Справочник.Единицы");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
    Если Спр.ЭтоГруппа() = 1 Тогда
        Продолжить;
    КонецЕсли;
    СпрЕдиницы.ИспользоватьВладельца(Спр.ТекущийЭлемент());
    СпрЕдиницы.ВыбратьЭлементы();
    Пока СпрЕдиницы.ПолучитьЭлемент() = 1 Цикл
        ТЗ.НоваяСтрока();
        ТЗ.Номенклатура = Спр.ТекущийЭлемент();
        ТЗ.Единица = СокрЛП(СпрЕдиницы.Наименование);
        ТЗ.Количество = 1;
    КонецЦикла;    
КонецЦикла;
ТЗ.Свернуть("Номенклатура, Единица", "Количество");
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку() = 1 Цикл
    Если ТЗ.Количество > 1 Тогда
        Сообщить(ТЗ.Номенклатура);
    КонецЕсли;
КонецЦикла;
18 Это_mike
 
26.12.16
13:08
(17) прще перебирать все единицы, а уж от единицы брать владельца и океи
19 Zombi
 
26.12.16
13:08
(17) О! Спасибо!
20 Базис
 
naïve
26.12.16
13:08
Да, я дал типовую (зачёркнуто) прототип. Просто выведи те, где большое 1 ЕдИзм, и в эксель его.
Независимо от того, куда вы едете — это в гору и против ветра!