powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / Перейти к следующему результату поиска 1с 7.7
16 сообщений из 16, страница 1 из 1
Перейти к следующему результату поиска 1с 7.7
    #39614226
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения, целый день ломаю голову сегодня над какой-то фигней и никак не могу найти ответа!
Есть такой код

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Сер = СоздатьОбъект("Справочник.Серии"); 
...
ПокаСер.НайтиПоНаименованию(Докум.Серия, 0) = 1 Цикл 
      Цен = Сер.ЦенаПоставщика.Получить(Докум.ДатаДок);
      Если Цен = Докум.ЦенаПост Тогда 
              Сер.Поставщик.Установить(Докум.ДатаДок,Докум.Контрагент); 
              Сер.Записать(); 
              Прервать;
      Иначе 
              Продолжить;
       КонецЕсли;
КонецЦикла; 



То есть в справочнике есть множество элементов с одинаковыми именами, но разными ценами поставщика.
Надо сделать простой перебор - ищем по имени, дальше сравниваем цену. Если совпадает то записываем, если нет, движемся дальше
Так вот, движения дальше не происходит, каждый раз берется только первый результат поиска
Может какое-то ключевое слово должно быть типа NEXT или в в общем как двинутся дальше к следующему элементы с таким же именем в справочнике???
...
Рейтинг: 0 / 0
Перейти к следующему результату поиска 1с 7.7
    #39614237
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или другая постановка вопроса - как мне выбрать из справочника все элементы с одинаковыми именами и организовать по ним цикл с последующим изменением реквизита у одного из этих элементов?
...
Рейтинг: 0 / 0
Перейти к следующему результату поиска 1с 7.7
    #39614381
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт2010Или другая постановка вопроса - как мне выбрать из справочника все элементы с одинаковыми именами и организовать по ним цикл с последующим изменением реквизита у одного из этих элементов?
Использовать Запрос. Хотя, может у вас уже в документе все есть и вы рвете гланды через совсем другое место.
...
Рейтинг: 0 / 0
Перейти к следующему результату поиска 1с 7.7
    #39614406
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, ничего особо нет. Задача такая: расставить в каждой серии новый реквизит (Поставщик). Поставщики указаны в доках "приходная накладная". Вот я и прохожусь по всем этим докам, чтобы выцепить оттуда поставщиков и расставить для каждой серии по ее имени и по цене поставщика как однозначному ключу.
...
Рейтинг: 0 / 0
Перейти к следующему результату поиска 1с 7.7
    #39614528
sWinTyz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не зацикливается?
...
Рейтинг: 0 / 0
Перейти к следующему результату поиска 1с 7.7
    #39614604
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас проблема в следующем - если запросом действовать, то я потом буду работать с результатом запроса, а не непосредственно со справочником Серии? Тогда возникает вопрос: как мне получить РЕАЛЬНЫЙ код элемента справочника, чтобы однозначно его идентифицировать и изменить у него реквизит?
Сейчас в поле Код коды все повторяются (см. скриншот)
Может есть какой-то внутренний код уникальный? Как его получить?
Либо второй вариант: непосредственно делать цикл по справочнику и перебирать элементы с нужным именем (первый параметр) пока не совпадет и второй параметр - Цена поставщика.
Это можно как-нибудь сделать? Причем не тупо перебором, потому что справочник Серии гигантский и получается, что чтобы расставить каждому его элементу реквизит мне надо будет его перебрать примерно n * n раз где - n - его размерность в десятки тысяч элементов! А сначала скажем так сделать фильтрацию элементов справочника по наименованию, чтобы искать только среди них и потом уже искать элемент с нужной ценой поставщика. Накидайте кто может пожалуйста пример как это сделать примерно!
Не нашел вообще ничего похожего в сети в качестве примера.
...
Рейтинг: 0 / 0
Перейти к следующему результату поиска 1с 7.7
    #39614616
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я думаю второй вариант более доступный. К тому же сомневаюсь по первому варианту, что есть уникальный код элемента справочника, по которому его можно однозначно идентифицировать. Поэтому что мне сейчас нужно:
1. У меня есть Имя серии (на скриншоте это столбец "Наименование"), Цена поставщика и Название поставщика (из строки документа).
2. Мне нужно как то включить фильтрацию в справочнике Серии (именно в нем самом, а не на копии), чтобы в нем остались только серии с искомым именем.
3. Нужно организовать цикл по всем отфильтрованным элементам, пока не найду элемент с искомой ценой поставщика.
Дальше дело техники. Скажите пожалуйста, реализуемо ли это и есть да, то дайте пожалуйста пример кода!
...
Рейтинг: 0 / 0
Перейти к следующему результату поиска 1с 7.7
    #39614666
можно сделать через Спр.ВыбратьЭлементы()...тупо перебирать в цикле записи и уже в переборке ставить условия отбора...когда найдете косяк тогда уже условия точные в запросе ставить
...
Рейтинг: 0 / 0
Перейти к следующему результату поиска 1с 7.7
    #39615383
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт2010К тому же сомневаюсь ..., что есть уникальный код элемента справочника, по которому его можно однозначно идентифицировать.
Есть. Вопрос в том есть ли достаточно данных в документе.

арт2010Задача такая: расставить в каждой серии новый реквизит (Поставщик). Поставщики указаны в доках "приходная накладная". Вот я и прохожусь по всем этим докам, чтобы выцепить оттуда поставщиков и расставить для каждой серии по ее имени и по цене поставщика как однозначному ключу.
Может добавить в модуле документа одну строку на запись поставщика? Перепровсти и получишь желаемое. Тем более я так понимаю всеравно нужно менять код модуля.
...
Рейтинг: 0 / 0
Перейти к следующему результату поиска 1с 7.7
    #39615400
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Злой Бобр, данные в доках все есть. Добавлять в док инфу о поставщике незачем. Она там и так есть, оттуда я ее как раз беру. А задача - проставить задним числом поставщиков по всем элементам справочника Серии. Поэтому добавлять в док колонку поставщик тем более нет смысла - мне то надо расставить задним числом!
Вот тут запилил аналогичную тему, помогли, дело осталось за малым - разобраться как работают ссылки в 1С 7.7
...
Рейтинг: 0 / 0
Перейти к следующему результату поиска 1с 7.7
    #39615401
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Перейти к следующему результату поиска 1с 7.7
    #39615409
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот тут надо понять как работают ссылки?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
Процедура ПриОткрытии()
    Дата1 = НачалоПериодаБИ();
    Дата2 = КонецПериодаБИ();
КонецПроцедуры


//*******************************************

Процедура ФайлЗакупок()
    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Наименование");
    ТЗ.НоваяКолонка("ЦенаПост");
    ТЗ.НоваяКолонка("Ссылка");

    Сер = СоздатьОбъект("Справочник.Серии");
    Сер.ВыбратьЭлементы(0);
    Пока Сер.ПолучитьЭлемент() = 1 Цикл
            ТЗ.НоваяСтрока();          
            ТЗ.Наименование = Сер.Наименование;                         
            ТЗ.ЦенаПост = Сер.ЦенаПоставщика.Получить(ТекущаяДата());
            ТЗ.Ссылка = Сер.ТекущийЭлемент();  //Вот тут правильно ли я сохраняю ссылку? 
      КонецЦикла;

    ТЗ.Сортировать("Наименование");                                       

    Докум = СоздатьОбъект( "Документ" );

    Докум.ВыбратьДокументы( Дата1, Дата2 );

    Пока Докум.ПолучитьДокумент() = 1 Цикл
          Если (Докум.Вид() = "ПриходнаяНакладная") Тогда             
                Докум.ВыбратьСтроки();
                Пока Докум.ПолучитьСтроку()=1 Цикл
              
                    ТекЗначение = Докум.Серия;
                    Поз=1;
                    ТЗ.НайтиЗначение(ТекЗначение,Поз,"Наименование");             
                       Для ПозТЗ=Поз По (ТЗ.КоличествоСтрок()) Цикл
                           ТЗ.ПолучитьСтрокуПоНомеру(ПозТЗ);
                           Если СокрЛП(ТЗ.Наименование)<>СокрЛП(ТекЗначение) Тогда
                                      прервать;
                               КонецЕсли;
                    //тут сравниваем цены. Если совпало - тоже прервать чтобы ограничить цикл
                       Если ТЗ.ЦенаПост = Докум.ЦенаПост Тогда
                               Сер.ТекущееЗначение() = ТЗ.Ссылка;  // Вот тут как мне перейти к элементу по ссылке?
                               Сер.Поставщик.Установить(Докум.ДатаДок,Докум.Контрагент);
                               Сер.Записать();
                               Прервать;
                       КонецЕсли;
                       КонецЦикла;                                
                КонецЦикла;
           КонецЕсли;
    КонецЦикла;
КонецПроцедуры
...
Рейтинг: 0 / 0
Перейти к следующему результату поиска 1с 7.7
    #39615430
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт2010... проставить задним числом поставщиков по всем элементам справочника Серии.
В модуле документа добавь кусок кода что б серии заполнялись. Аналогично партиям. Я ж так понимаю это приходная у тебя?..
...
Рейтинг: 0 / 0
Перейти к следующему результату поиска 1с 7.7
    #39615436
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Злой Бобр, серии там и так заполняются, только не из справочника, а из приходные накладных, которые присылают поставщики на почту в dbf и xls. Поэтому они там не в виде ссылки на справочник, а просто как строка. В общем это все уже неважно, решение найдено, мне нужно только разобраться как в 1с 7.7 работать с ссылками (см. комментарии в коде выше). Остальное все уже готово!
...
Рейтинг: 0 / 0
Перейти к следующему результату поиска 1с 7.7
    #39620384
Фотография Владимир Лазурко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт2010,

Вот этот код мне не нравится:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
Процедура ПриОткрытии()
    Дата1 = НачалоПериодаБИ();
    Дата2 = КонецПериодаБИ();
КонецПроцедуры
...

Докум = СоздатьОбъект( "Документ" );
Докум.ВыбратьДокументы( Дата1, Дата2 );


Получается, если бухпериод сменился, старые документы/партии/серии не видны
...
Рейтинг: 0 / 0
Перейти к следующему результату поиска 1с 7.7
    #39620388
Фотография Владимир Лазурко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт2010
Код: sql
1.
Сер.ТекущееЗначение() = ТЗ.Ссылка;  // Вот тут как мне перейти к элементу по ссылке?

Если мне не изменяет склероз, в 7.7 будет так:
Код: sql
1.
Сер.ТекущееЗначение() = ТЗ.Ссылка.ТекущийЭлемент();
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Перейти к следующему результату поиска 1с 7.7
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]