Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Подчиненные спавочники  (Прочитано 9081 раз)
0 Пользователей и 1 Гость смотрят эту тему.
l2d808
Интересующийся

ua
Offline Offline

« : 08-04-2011 08:02 » 

Пожалуйста подскажите как автоматически заполнить подчиненный справочник элементами справочника владельца по условию.
Например:
Справочник ТМЦ - владелец
Справочник Состав - подчиненный

элемент справочникаТМЦ(А) состоит с  справочникаТМЦ(Б) и справочникаТМЦ(В)


Выборка проходит по условию: Элемент А является комплектом с Элементов Б и В. В названии элементов А, Б, и В разница в 1 слово. если в названии элемента Б и В одинаковое название с элементом А тогда подчиненному справочнику присвоить значение элементов Б и В.



Помогите пожалуйста с кодом.... Я в 1с очень недавно. Знаю только алгоритмику, а синтаксис 1с токо учу. А код нужно срочно, ПОМОГИТЕ ПЛЗ.
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 08-04-2011 08:14 » 

Попробуй написать примеры, а то по описания что-то не могу разобраться что нужно...
Записан
l2d808
Интересующийся

ua
Offline Offline

« Ответ #2 : 08-04-2011 08:28 » 

Код:
Процедура Сформировать()
    перем переменнаяСостава;
переменнаяКолСоставляющих=колСоставляющих;
ОчиститьОкноСообщений();
КолБитихГарнытур=0;
row=1; //первая строка в БД
cel=0;  //первая строка в Exel
    ДубликатыАртикулов=0;//Данному єлементу будет привсоен текущий єлемент            
ДубликатыАртикулов2=0;
КолДубликатыАртикулов=0;
спр=СоздатьОбъект("Справочник.ТМЦ");//создаем обект справочник

Если ВыбТМЦ.РазмерСписка()>0 Тогда //проверяем, не пустой ли список
Тек=ВыбТМЦ.ПолучитьЗначение(ВыбТМЦ.ТекущаяСтрока());//если не пустой, переменной ТЕК присвоим значние выбраное в списке
КонецЕсли;
спр.ИспользоватьРодителя(Тек);//Используем родителя выбраного в форме выбора
спр.выбратьэлементы();
ВесВст1=0;
Пока спр.ПолучитьЭлемент() = 1 Цикл
сост=3;
Если (пустаястрока(спр.текущийЭлемент().Артикул)<>1) или (пустаястрока(спр.текущийЭлемент().Наименование)<>1)Тогда
составТМЦ = СоздатьОбъект("Справочник.СоставПродукции");
составТМЦ.использоватьВладельца(спр);
составТМЦ.выбратьэлементы();        
cel=cel+1;
   ПраваяЧастьСостава="";
темп="";
счетчик=0;
Пока составТМЦ.ПолучитьЭлемент() = 1 Цикл
           переменнаяСостава=составТМЦ.текущийЭлемент().затрата;
Если счетчик=0 Тогда
ПраваяЧастьСостава=прав(переменнаяСостава,10);
темп=переменнаяСостава;
темпКво=составТМЦ.текущийЭлемент().кво;
счетчик=1;
иначеесли ПраваяЧастьСостава<>прав(переменнаяСостава,10) тогда
КолБитихГарнытур=КолБитихГарнытур+1;


сообщить(КолБитихГарнытур);
сообщить(" ");
сообщить("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
                          сообщить("------------------------" + переменнаяСостава);
сообщить("------------------------" + темп);
сообщить(составТМЦ.текущийЭлемент().кво);
сообщить("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
сообщить(" ");
счетчик=0;
КонецЕсли;
        сост=сост+1;
           Вставка1=составТМЦ.Затрата;
КвоВст1=составТМЦ.Кво;
конеццикла;
ДубликатыАртикулов2=ДубликатыАртикулов;
КонецЕсли;
row=row+1;//переходим на следующую строку
конеццикла;
КоличествоЭлементов=row;
КолЕксель=cel;
сообщить(КолБитихГарнытур);
КонецПроцедуры

правда в коде куча мусора, Это робочий экземпляр.


в средине кода, в месте

Код:
                                                       сообщить(КолБитихГарнытур);
сообщить(" ");
сообщить("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
                          сообщить("------------------------" + переменнаяСостава);
сообщить("------------------------" + темп);
сообщить(составТМЦ.текущийЭлемент().кво);
сообщить("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
сообщить(" ");
Должен быть кусок который поможет зделать то что я просил, а этот код почти бред.... он не делает почти ничего. я под него хотел адптировать Вашу помощь.


« Последнее редактирование: 08-04-2011 08:35 от Kivals » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 08-04-2011 08:36 » 

l2d808, я имел в виду примеры названий элементов справочника: что есть и что нужно получить.
Записан
l2d808
Интересующийся

ua
Offline Offline

« Ответ #4 : 08-04-2011 08:42 » 

Автомобиль "Альфа ромео"
Кузов "Альфа ромео"
Колеса "Альфа ромео"

После запуска кода в ветке автомобиль всем элементам присваевается состав. В состав входят элементы Кузов и элементы Колеса основного справочника.


поиск провести и присвоить... У мну не выходит ((((( Меня одолевают смутные сомнения
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 08-04-2011 10:16 » 

Т.е. если я правильно понял задачу - нужно заполнить состав главного элемента, ориентируясь на наименование элементов, не учитывая первое слово?
Тогда как из списка всех элементов справочника определить какой главный? Установлен какой-то признак или главные выбираем из определенной группы, а состав - из всех остальных?
Записан
l2d808
Интересующийся

ua
Offline Offline

« Ответ #6 : 08-04-2011 11:15 » 

Главній со словом Автомобиль, а также он у меня согтруется в групе автомобили
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 08-04-2011 13:31 » new

Значит логика такая:
создаешь 2 списка значений: основные и состав
список состава будет 2х уровневый, т.е. элементами списка тоже будут списки значений
перебираешь весь справочник ТМЦ, и в зависимости от условий относишь элемент либо в один, либо во второй список,
причем (!):
идентификатором в списке значений у тебя будет не полное наименование элемента, а наименование кроме первого слова (еще желательно привести его к нижнему регистру)
Когда весь справочник прошел - цикл по списку основных с выбором состава из второго списка по идентификатору:
Код:
//======================================================================
Функция ИдентификаторЭлемента(Эл)
Идент = НРег(СокрЛП(Эл.Наименование));
Поз = Найти(Идент, " ");
Если Поз>0 Тогда
Идент = СокрЛ(Сред(Идент, Поз+1));
КонецЕсли;
Возврат Идент;
КонецФункции // ИдентификаторЭлемента

//======================================================================
Функция ДобавитьВОсновные(Сп, Знач Спр)
Спр = Спр.ТекущийЭлемент();
Идент = ИдентификаторЭлемента(Спр);
Сп.ДобавитьЗначение(Спр, Идент);
КонецФункции // ДобавитьВОсновные

//======================================================================
Функция ДобавитьВСостав(Сп, Знач Спр)
Спр = Спр.ТекущийЭлемент();
Идент = ИдентификаторЭлемента(Спр);
спСост = Сп.Получить(Идент);
Если ТипЗначенияСтр(спСост)<>"СписокЗначений" Тогда
спСост = СоздатьОбъект("СписокЗначений");
КонецЕсли;
спСост.ДобавитьЗначение(Спр);
Сп.Установить(Идент, спСост);
КонецФункции // ДобавитьВСостав

//*******************************************
Процедура Сформировать()
спОсн = СоздатьОбъект("СписокЗначений");
спСостав = СоздатьОбъект("СписокЗначений");
Спр=СоздатьОбъект("Справочник.ТМЦ");
Спр.ВыбратьЭлементы(0);
Пока Спр.ПолучитьЭлемент(1)=1 Цикл
Если Спр.ЭтоГруппа()=1 Тогда Продолжить; КонецЕсли; // группы не учитываем
Если Спр.ПометкаУдаления()=1 Тогда Продолжить; КонецЕсли; // удаленные не учитываем
Если Спр.ПринадлежитГруппе(ВыбГруппаАвтомобили)=1 Тогда
ДобавитьВОсновные(спОсн, Спр);
Иначе
ДобавитьВСостав(спСостав, Спр);
КонецЕсли;
КонецЦикла;

// Теперь создаем состав
Идент = "";
Для И1=1 По спОсн.РазмерСписка() Цикл
Зн=спОсн.ПолучитьЗначение(И1, Идент);
спСост = спСостав.Получить(Идент);
Если ТипЗначенияСтр(спСост)<>"СписокЗначений" Тогда Продолжить; КонецЕсли; // Нет состава

// спСост - это состав для Зн
// Дальше делаем что нужно
// ...

КонецЦикла;
КонецПроцедуры
Записан
l2d808
Интересующийся

ua
Offline Offline

« Ответ #8 : 08-04-2011 14:44 » 

Огромное СПАСИБО. Завтра попробую внедрить. Как только заработает обязательно напишу.


Форуму ОГРОМНІЙ РЕСПЕКТ и УВАЖУХА )))) Класс!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines