7.7 Как перебрать записи справочника Номенклатура

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем Chudka, 2 ноя 2009.

  1. TopicStarter Overlay
    Chudka
    Offline

    Chudka Опытный в 1С

    Регистрация:
    8 окт 2009
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    Подскажите пожалуйста, как лучше перебрать записи справочника номенклатура во внешней обработке, чтобы на выходе в таблицу постепенно добавлялись записи с одинаковым штрихкодом, сгруппированные по ШК.
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Теоретически у вас одинаковый ШК не должен быть (если речь идет о ТиС - там стоит проверка на дубль)

    Проще всего запросом к справочнику Единицы (опять же оговорюсь если речь идет о ТиС) - номенклатуру получите используя реквизит Владелец
  3. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Причем для этих целей идеально подойдет Список значений. Более подробно можно говорить после детализации вопроса.
    http://www.1c-pro.ru/index.php?act=announce&id=8
  4. TopicStarter Overlay
    Chudka
    Offline

    Chudka Опытный в 1С

    Регистрация:
    8 окт 2009
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    ТиС. У меня распределенная база данных. при слиянии справочников получаются дублирующиеся записи. Идентификация по коду, а штрихкод просто в карточке.
  5. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    1) Делайте запрос с Единицам
    2) Выгружайте с ТаблицуЗначений
    3) Добавьте в ТЗ новую колонку сумма
    4) Затем:
    Код:
    ТЗ.Заполнить(1,,,"Сумма");
    ТЗ.Свернуть("ШК","Сумма");
    
    
    
    Перебор в цикле ТЗ покажет дубли ШК (<>1)

    Потом уже можно обратиться снова к запросу и выявить владельцев......
  6. TopicStarter Overlay
    Chudka
    Offline

    Chudka Опытный в 1С

    Регистрация:
    8 окт 2009
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    Что значит сделать запрос к ЕДИНИЦАМ?
    Это сгенерировать запрос с переменной основнаяЕдиница?
  7. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Я имел ввиду вот такой запрос:
    Код:
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Без итогов;
    |ШК = Справочник.Единицы.ШтрихКод;
    |Владелец = Справочник.Единицы.Владелец;
    |Группировка ШК;
    |Группировка Владелец без групп;
    |"//}}ЗАПРОС
    ;
    
    
  8. TopicStarter Overlay
    Chudka
    Offline

    Chudka Опытный в 1С

    Регистрация:
    8 окт 2009
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    Запрос не работает(((
    Выдает ошибку:
    Таб.НоваяКолонка("Сумма");
    {D:\СОРТИРОВКАНОМЕНКЛАТУРЫ.ERT(112)}: Значение не представляет агрегатный объект (НоваяКолонка)

    Код:
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(СортНом)
    //    |Период с (НачалоПериодаБИ()) по (КонецПериодаБИ());
    |Обрабатывать НеПомеченныеНаУдаление;
    |Без итогов;
    |ШК = Справочник.Единицы.ШтрихКод;
    |Владелец = Справочник.Единицы.Владелец;
    |Группировка ШК;
    |Группировка Владелец;
    |"//}}ЗАПРОС;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    
    //2) Выгружаем в ТаблицуЗначений  
    Таб = СоздатьОбъект("ТаблицаЗначений");
    //Таб.Загрузить("СортНом");
    Запрос.Выгрузить("Таб");
    
    //3) Добавляем в ТЗ новую колонку сумма 
    Таб.НоваяКолонка("Сумма");
    Таб.Заполнить(1,,,"Сумма");
    Таб.Свернуть("ШК","Сумма");
    
    
    
    В диалоге добавила ЭлУпр "ТаблЗначений" и назвала его "Таб", для наглядности. Запрос начинает обрабатываться. Достаточно долго, ибо много строк - больше 26 тысяч. А потом выдает эту ошибку и Таб не заполняет.
    Ну и еще... я не понимаю, зачем мы делаем запрос по справочнику Единицы? Нельзя ли отбирать записи сразу в номенклатуре? (Я попробовала и так, но что-то у меня не клеется)
  9. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    Запрос = СоздатьОбъект("Запрос");	
    ТекстЗапроса = 	"//{{ЗАПРОС(СортНом)//	
    |Период с (НачалоПериодаБИ()) по (КонецПериодаБИ());	
    |Обрабатывать НеПомеченныеНаУдаление;	
    |Без итогов;	
    |ШК = Справочник.Единицы.ШтрихКод;	
    |Владелец = Справочник.Единицы.Владелец;	
    |Группировка ШК;	
    |Группировка Владелец;	
    |"//}}ЗАПРОС;	
    // Если ошибка в запросе, то выход из процедуры	
    Если Запрос.Выполнить(ТекстЗапроса) = 0 <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/тогда')">Тогда		</span>
    Возврат;	
    КонецЕсли;    
    //2) Выгружаем в ТаблицуЗначений             
    Таб = СоздатьОбъект("ТаблицаЗначений");           
    Запрос.Выгрузить(ТЗ,1,0);
    //3) Добавляем в ТЗ новую колонку сумма            
    Таб.НоваяКолонка("Сумма");           
    Таб.Заполнить(1,,,"Сумма");           
    Таб.Свернуть("ШК","Сумма");
    
    
    Потому что ШК хнанится в справочнике Единицы, а не номенклатура)))))))
  10. TopicStarter Overlay
    Chudka
    Offline

    Chudka Опытный в 1С

    Регистрация:
    8 окт 2009
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    Пришли к тому с чего начали :)
    Изначально у меня выдавалась ошибка:

    Таб.Заполнить(1,,,"Сумма");
    {D:\СОРТИРОВКАНОМЕНКЛАТУРЫ.ERT(111)}: Номер за пределами значения!

    И вот теперь тоже самое.
  11. TopicStarter Overlay
    Chudka
    Offline

    Chudka Опытный в 1С

    Регистрация:
    8 окт 2009
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    В общем, отдельно запрос выдает. А вот Сумму никак не хочет воспринимать. ((
  12. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Выложите обработку - скорее всего вы намудрили с таблицей на форме
  13. TopicStarter Overlay
    Chudka
    Offline

    Chudka Опытный в 1С

    Регистрация:
    8 окт 2009
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    Я проделала всю операцию сначала и у меня все заработало.

    Не пойму, как это сделать.
    Как вытащить из запроса владельца только по тем данным что у меня остались в таблице значений "Табл"?
  14. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    В таб уже нет владельца - вы использовали метод Свернуть соотвественно в ней только ШК и Сумма

    Делаем так:

    Код:
    //получаем спиок значений с дублиющимися ШК
    Фильтр=СоздатьОбъект("СписокЗначений");
    Таб.ВыбратьСтроки();
    Пока Таб.ПолучитьСтроку()=1 Цикл
    Если Таб.Сумма<>1 Тогда
    Фильтр.ДобавитьЗначение(Таб.ШК);
    КонецЕсли;
    КонецЦикла;
    
    //создадим запрос с использованием фильтра
    Запрос = СоздатьОбъект("Запрос");    
    ТекстЗапроса =     "//{{ЗАПРОС(СортНом)//    
    |Период с (НачалоПериодаБИ()) по (КонецПериодаБИ());    
    |Обрабатывать НеПомеченныеНаУдаление;    
    |Без итогов;    
    |ШК = Справочник.Единицы.ШтрихКод;    
    |Владелец = Справочник.Единицы.Владелец;    
    |Группировка ШК;    
    |Группировка Владелец;    
    |Условие (ШК в Фильтр);
    |"//}}ЗАПРОС;    
    
    // Если ошибка в запросе, то выход из процедуры    
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда        
    Возврат;    
    КонецЕсли;    
    
    
    
    В результате у вас получится набор владельцев только с дублирующимися ШК
  15. TopicStarter Overlay
    Chudka
    Offline

    Chudka Опытный в 1С

    Регистрация:
    8 окт 2009
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    Условием (ШК в Фильтр) мы просто редактируем первоначальный запрос?
  16. TopicStarter Overlay
    Chudka
    Offline

    Chudka Опытный в 1С

    Регистрация:
    8 окт 2009
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    А я убрала неповторяющиеся записи таким образом:
    Код:
    Табл.ВыбратьСтроки();
    Пока Табл.НайтиЗначение(1,стр,"Сумма")=1 цикл 
    Табл.ПолучитьСтрокуПоНомеру(стр);
    Табл.УдалитьСтроку(); 
    стр=0;
    КонецЦикла;
    
    Можно в условии обратиться сразу к Табл: Условие (ШК в Табл)?
  17. TopicStarter Overlay
    Chudka
    Offline

    Chudka Опытный в 1С

    Регистрация:
    8 окт 2009
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    В общем, я разобралась! всё работает! :unsure: Огромнейшее спасибо :)

Поделиться этой страницей