|
v7: Правильное создание или поиск подчиненного элемента справочника | ☑ | ||
---|---|---|---|---|
0
YaroslavStr
07.03.13
✎
11:37
|
Правильно ли такое решение и будет ли оно работать?
//найдем папку-родителя СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа),0,1); //присвоим родителя Группа = СпрФ.ТекущийЭлемент(); СпрФ.ИспользоватьРодителя(Группа); //найдем папку-родителя СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа2),0,1); //присвоим родителя Группа2 = СпрФ.ТекущийЭлемент(); СпрФ.ИспользоватьРодителя(Группа2); //создадим подпапку СпрФ.НоваяГруппа(); СпрФ.Наименование = СокрЛП(ТЗ_Почта.Группа3); СпрФ.Записать(); ////найдем папку-родителя //СпрФ.НайтиПоНаименованию(СокрЛП(СпрФ.ТекущийЭлемент()),0,1); //добавим новый элемент в текущюю папку-родителя Группа3 = СпрФ.ТекущийЭлемент(); СпрФ.ИспользоватьРодителя(Группа3); СпрФ.Новый(); СпрФ.Код = ТЗ_Почта.Код; СпрФ.Наименование = ТЗ_Почта.Наименование; СпрФ.Длина = ТЗ_Почта.Длина; СпрФ.Ширина = ТЗ_Почта.Ширина; СпрФ.Описание = ТЗ_Почта.Описание; СпрФ.Себестоимость = ТЗ_Почта.Себестоимость; СпрФ.ЦенаПродажи = ТЗ_Почта.ЦенаПродажи; СпрФ.КодТ = ТЗ_Почта.Код; СпрФ.Записать(); //Сообщить(""); |
|||
1
Godofsin
07.03.13
✎
11:40
|
(0) а попробовать не судьба? вроде должен работать
|
|||
2
Mikeware
07.03.13
✎
11:41
|
(1) "мизда - лучший отладчик"©
|
|||
3
YaroslavStr
07.03.13
✎
11:42
|
(1) Там такой кусок кода, что он пока что работать не будет. И проверить сложно. У меня был вопрос: будет ли смещение по иерархии работать. Будет ли 1С искать вторую папку только в первой или во всем справочнике. И так далее: третья папка во второй...
|
|||
4
Godofsin
07.03.13
✎
11:42
|
Ну и наверное группа и группа2 нужно создавать, если они не будут найдены.
|
|||
5
YaroslavStr
07.03.13
✎
11:44
|
Если СокрЛП(ТЗ_Почта.Справочник) = "СправочникМатериаловФурнитура" тогда
//добавим товар, если он находится в первой папке (иерархически) //************************************************************** Если СпрФ.ЭтоГруппа(СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа),0,1)) = 1 Тогда //если у товара есть 2 родитель выше Если ПустоеЗначение(ТЗ_Почта.Группа2) = 0 Тогда //добавим товар, если он находится во второй папке (иерархически) и она существует //******************************************************************************** Если СпрФ.ЭтоГруппа(СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа2),0,1)) = 1 Тогда //если у товара есть 3 родитель выше Если ПустоеЗначение(ТЗ_Почта.Группа3) = 0 Тогда //добавим товар, если он находится в третьей папке (иерархически) и такая папка есть //*************************************************************** Если СпрФ.ЭтоГруппа(СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа3),0,1)) = 1 Тогда //найдем папприодителя СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа3),0,1); //добавим новый элемент в текущюю папку-родителя Группа3 = СпрФ.ТекущийЭлемент(); СпрФ.ИспользоватьРодителя(Группа3); СпрФ.Новый(); СпрФ.Код = ТЗ_Почта.Код; СпрФ.Наименование = ТЗ_Почта.Наименование; СпрФ.Длина = ТЗ_Почта.Длина; СпрФ.Ширина = ТЗ_Почта.Ширина; СпрФ.Описание = ТЗ_Почта.Описание; СпрФ.Себестоимость = ТЗ_Почта.Себестоимость; СпрФ.ЦенаПродажи = ТЗ_Почта.ЦенаПродажи; СпрФ.КодТ = ТЗ_Почта.Код; СпрФ.Записать(); //добавим товар, если он находится в третьей папке (иерархически) и папки нет Иначе //найдем папку-родителя СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа),0,1); //присвоим родителя Группа = СпрФ.ТекущийЭлемент(); СпрФ.ИспользоватьРодителя(Группа); //найдем папку-родителя СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа2),0,1); //присвоим родителя Группа2 = СпрФ.ТекущийЭлемент(); СпрФ.ИспользоватьРодителя(Группа2); //создадим подпапку СпрФ.НоваяГруппа(); СпрФ.Наименование = СокрЛП(ТЗ_Почта.Группа3); СпрФ.Записать(); ////найдем папку-родителя //СпрФ.НайтиПоНаименованию(СокрЛП(СпрФ.ТекущийЭлемент()),0,1); //добавим новый элемент в текущюю папку-родителя Группа3 = СпрФ.ТекущийЭлемент(); СпрФ.ИспользоватьРодителя(Группа3); СпрФ.Новый(); СпрФ.Код = ТЗ_Почта.Код; СпрФ.Наименование = ТЗ_Почта.Наименование; СпрФ.Длина = ТЗ_Почта.Длина; СпрФ.Ширина = ТЗ_Почта.Ширина; СпрФ.Описание = ТЗ_Почта.Описание; СпрФ.Себестоимость = ТЗ_Почта.Себестоимость; СпрФ.ЦенаПродажи = ТЗ_Почта.ЦенаПродажи; СпрФ.КодТ = ТЗ_Почта.Код; СпрФ.Записать(); //Сообщить(""); КонецЕсли; //если вторая папка для этого товара есть и больше родителей нет //************************************************************** Иначе //найдем папку-родителя СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа2),0,1); //добавим новый элемент в текущюю папку-родителя Группа2 = СпрФ.ТекущийЭлемент(); СпрФ.ИспользоватьРодителя(Группа2); СпрФ.Новый(); СпрФ.Код = ТЗ_Почта.Код; СпрФ.Наименование = ТЗ_Почта.Наименование; СпрФ.Длина = ТЗ_Почта.Длина; СпрФ.Ширина = ТЗ_Почта.Ширина; СпрФ.Описание = ТЗ_Почта.Описание; СпрФ.Себестоимость = ТЗ_Почта.Себестоимость; СпрФ.ЦенаПродажи = ТЗ_Почта.ЦенаПродажи; СпрФ.КодТ = ТЗ_Почта.Код; СпрФ.Записать(); Сообщить("если вторая папка для этого товара есть и больше родителей нет"); КонецЕсли; //если товар должен быть во второй не существующей папке справочника и больше родителей у него нет //************************************************************************************************ Иначе //найдем папку-родителя СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа),0,1); //добавим новый элемент в текущею папку-родителя Группа = СпрФ.ТекущийЭлемент(); СпрФ.ИспользоватьРодителя(Группа); //создадим подпапку СпрФ.НоваяГруппа(); СпрФ.Наименование = СокрЛП(ТЗ_Почта.Группа2); СпрФ.Записать(); //найдем папку-родителя СпрФ.НайтиПоНаименованию(СокрЛП(СпрФ.ТекущийЭлемент()),0,1); //добавим новый элемент в текущюю папку-родителя Группа2 = СпрФ.ТекущийЭлемент(); СпрФ.ИспользоватьРодителя(Группа2); СпрФ.Новый(); СпрФ.Код = ТЗ_Почта.Код; СпрФ.Наименование = ТЗ_Почта.Наименование; СпрФ.Длина = ТЗ_Почта.Длина; СпрФ.Ширина = ТЗ_Почта.Ширина; СпрФ.Описание = ТЗ_Почта.Описание; СпрФ.Себестоимость = ТЗ_Почта.Себестоимость; СпрФ.ЦенаПродажи = ТЗ_Почта.ЦенаПродажи; СпрФ.КодТ = ТЗ_Почта.Код; СпрФ.Записать(); Сообщить("если товар должен быть во второй не существующей папке справочника и больше родителей у него нет"); КонецЕсли; //если товар должен быть в первой папке и у него нет больше родителей кроме первой папки //************************************************************************************** Иначе //найдем папку-родителя СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа),0,1); //добавим новый элемент в текущюю папку-родителя Группа = СпрФ.ТекущийЭлемент(); СпрФ.ИспользоватьРодителя(Группа); СпрФ.Новый(); СпрФ.Код = ТЗ_Почта.Код; СпрФ.Наименование = ТЗ_Почта.Наименование; СпрФ.Длина = ТЗ_Почта.Длина; СпрФ.Ширина = ТЗ_Почта.Ширина; СпрФ.Описание = ТЗ_Почта.Описание; СпрФ.Себестоимость = ТЗ_Почта.Себестоимость; СпрФ.ЦенаПродажи = ТЗ_Почта.ЦенаПродажи; СпрФ.КодТ = ТЗ_Почта.Код; СпрФ.Записать(); Сообщить("если товар должен быть в первой папке и у него нет больше родителей кроме первой папки"); КонецЕсли;//если найдена вторая папка //если товар должен быть в первой папке справочника и папки нет //************************************************************* Иначе //если папки для этого товара нет, тогда создадим её СпрФ.НоваяГруппа(); СпрФ.Наименование = СокрЛП(ТЗ_Почта.Группа); СпрФ.Записать(); //найдем папку-родителя СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа),0,1); //добавим новый элемент в текущюю папку-родителя Группа = СпрФ.ТекущийЭлемент(); СпрФ.ИспользоватьРодителя(Группа); СпрФ.Новый(); СпрФ.Код = ТЗ_Почта.Код; СпрФ.Наименование = ТЗ_Почта.Наименование; СпрФ.Длина = ТЗ_Почта.Длина; СпрФ.Ширина = ТЗ_Почта.Ширина; СпрФ.Описание = ТЗ_Почта.Описание; СпрФ.Себестоимость = ТЗ_Почта.Себестоимость; СпрФ.ЦенаПродажи = ТЗ_Почта.ЦенаПродажи; СпрФ.КодТ = ТЗ_Почта.Код; СпрФ.Записать(); Сообщить("если товар должен быть в первой папке справочника и папки нет"); КонецЕсли; Таб.ВывестиСекцию("СпрМат"); Но = Но + 1; КонецЦикла; |
|||
6
YaroslavStr
07.03.13
✎
11:44
|
Если СокрЛП(ТЗ_Почта.Справочник) = "СправочникМатериаловФурнитура" тогда
//добавим товар, если он находится в первой папке (иерархически) //************************************************************** Если СпрФ.ЭтоГруппа(СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа),0,1)) = 1 Тогда //если у товара есть 2 родитель выше Если ПустоеЗначение(ТЗ_Почта.Группа2) = 0 Тогда //добавим товар, если он находится во второй папке (иерархически) и она существует //******************************************************************************** Если СпрФ.ЭтоГруппа(СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа2),0,1)) = 1 Тогда //если у товара есть 3 родитель выше Если ПустоеЗначение(ТЗ_Почта.Группа3) = 0 Тогда //добавим товар, если он находится в третьей папке (иерархически) и такая папка есть //*************************************************************** Если СпрФ.ЭтоГруппа(СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа3),0,1)) = 1 Тогда //найдем папприодителя СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа3),0,1); //добавим новый элемент в текущюю папку-родителя Группа3 = СпрФ.ТекущийЭлемент(); СпрФ.ИспользоватьРодителя(Группа3); СпрФ.Новый(); СпрФ.Код = ТЗ_Почта.Код; СпрФ.Наименование = ТЗ_Почта.Наименование; СпрФ.Длина = ТЗ_Почта.Длина; СпрФ.Ширина = ТЗ_Почта.Ширина; СпрФ.Описание = ТЗ_Почта.Описание; СпрФ.Себестоимость = ТЗ_Почта.Себестоимость; СпрФ.ЦенаПродажи = ТЗ_Почта.ЦенаПродажи; СпрФ.КодТ = ТЗ_Почта.Код; СпрФ.Записать(); //добавим товар, если он находится в третьей папке (иерархически) и папки нет Иначе //найдем папку-родителя СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа),0,1); //присвоим родителя Группа = СпрФ.ТекущийЭлемент(); СпрФ.ИспользоватьРодителя(Группа); //найдем папку-родителя СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа2),0,1); //присвоим родителя Группа2 = СпрФ.ТекущийЭлемент(); СпрФ.ИспользоватьРодителя(Группа2); //создадим подпапку СпрФ.НоваяГруппа(); СпрФ.Наименование = СокрЛП(ТЗ_Почта.Группа3); СпрФ.Записать(); ////найдем папку-родителя //СпрФ.НайтиПоНаименованию(СокрЛП(СпрФ.ТекущийЭлемент()),0,1); //добавим новый элемент в текущюю папку-родителя Группа3 = СпрФ.ТекущийЭлемент(); СпрФ.ИспользоватьРодителя(Группа3); СпрФ.Новый(); СпрФ.Код = ТЗ_Почта.Код; СпрФ.Наименование = ТЗ_Почта.Наименование; СпрФ.Длина = ТЗ_Почта.Длина; СпрФ.Ширина = ТЗ_Почта.Ширина; СпрФ.Описание = ТЗ_Почта.Описание; СпрФ.Себестоимость = ТЗ_Почта.Себестоимость; СпрФ.ЦенаПродажи = ТЗ_Почта.ЦенаПродажи; СпрФ.КодТ = ТЗ_Почта.Код; СпрФ.Записать(); //Сообщить(""); КонецЕсли; //если вторая папка для этого товара есть и больше родителей нет //************************************************************** Иначе //найдем папку-родителя СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа2),0,1); //добавим новый элемент в текущюю папку-родителя Группа2 = СпрФ.ТекущийЭлемент(); СпрФ.ИспользоватьРодителя(Группа2); СпрФ.Новый(); СпрФ.Код = ТЗ_Почта.Код; СпрФ.Наименование = ТЗ_Почта.Наименование; СпрФ.Длина = ТЗ_Почта.Длина; СпрФ.Ширина = ТЗ_Почта.Ширина; СпрФ.Описание = ТЗ_Почта.Описание; СпрФ.Себестоимость = ТЗ_Почта.Себестоимость; СпрФ.ЦенаПродажи = ТЗ_Почта.ЦенаПродажи; СпрФ.КодТ = ТЗ_Почта.Код; СпрФ.Записать(); Сообщить("если вторая папка для этого товара есть и больше родителей нет"); КонецЕсли; //если товар должен быть во второй не существующей папке справочника и больше родителей у него нет //************************************************************************************************ Иначе //найдем папку-родителя СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа),0,1); //добавим новый элемент в текущею папку-родителя Группа = СпрФ.ТекущийЭлемент(); СпрФ.ИспользоватьРодителя(Группа); //создадим подпапку СпрФ.НоваяГруппа(); СпрФ.Наименование = СокрЛП(ТЗ_Почта.Группа2); СпрФ.Записать(); //найдем папку-родителя СпрФ.НайтиПоНаименованию(СокрЛП(СпрФ.ТекущийЭлемент()),0,1); //добавим новый элемент в текущюю папку-родителя Группа2 = СпрФ.ТекущийЭлемент(); СпрФ.ИспользоватьРодителя(Группа2); СпрФ.Новый(); СпрФ.Код = ТЗ_Почта.Код; СпрФ.Наименование = ТЗ_Почта.Наименование; СпрФ.Длина = ТЗ_Почта.Длина; СпрФ.Ширина = ТЗ_Почта.Ширина; СпрФ.Описание = ТЗ_Почта.Описание; СпрФ.Себестоимость = ТЗ_Почта.Себестоимость; СпрФ.ЦенаПродажи = ТЗ_Почта.ЦенаПродажи; СпрФ.КодТ = ТЗ_Почта.Код; СпрФ.Записать(); Сообщить("если товар должен быть во второй не существующей папке справочника и больше родителей у него нет"); КонецЕсли; //если товар должен быть в первой папке и у него нет больше родителей кроме первой папки //************************************************************************************** Иначе //найдем папку-родителя СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа),0,1); //добавим новый элемент в текущюю папку-родителя Группа = СпрФ.ТекущийЭлемент(); СпрФ.ИспользоватьРодителя(Группа); СпрФ.Новый(); СпрФ.Код = ТЗ_Почта.Код; СпрФ.Наименование = ТЗ_Почта.Наименование; СпрФ.Длина = ТЗ_Почта.Длина; СпрФ.Ширина = ТЗ_Почта.Ширина; СпрФ.Описание = ТЗ_Почта.Описание; СпрФ.Себестоимость = ТЗ_Почта.Себестоимость; СпрФ.ЦенаПродажи = ТЗ_Почта.ЦенаПродажи; СпрФ.КодТ = ТЗ_Почта.Код; СпрФ.Записать(); Сообщить("если товар должен быть в первой папке и у него нет больше родителей кроме первой папки"); КонецЕсли;//если найдена вторая папка //если товар должен быть в первой папке справочника и папки нет //************************************************************* Иначе //если папки для этого товара нет, тогда создадим её СпрФ.НоваяГруппа(); СпрФ.Наименование = СокрЛП(ТЗ_Почта.Группа); СпрФ.Записать(); //найдем папку-родителя СпрФ.НайтиПоНаименованию(СокрЛП(ТЗ_Почта.Группа),0,1); //добавим новый элемент в текущюю папку-родителя Группа = СпрФ.ТекущийЭлемент(); СпрФ.ИспользоватьРодителя(Группа); СпрФ.Новый(); СпрФ.Код = ТЗ_Почта.Код; СпрФ.Наименование = ТЗ_Почта.Наименование; СпрФ.Длина = ТЗ_Почта.Длина; СпрФ.Ширина = ТЗ_Почта.Ширина; СпрФ.Описание = ТЗ_Почта.Описание; СпрФ.Себестоимость = ТЗ_Почта.Себестоимость; СпрФ.ЦенаПродажи = ТЗ_Почта.ЦенаПродажи; СпрФ.КодТ = ТЗ_Почта.Код; СпрФ.Записать(); Сообщить("если товар должен быть в первой папке справочника и папки нет"); КонецЕсли; Таб.ВывестиСекцию("СпрМат"); Но = Но + 1; КонецЦикла; |
|||
7
VladZ
07.03.13
✎
11:45
|
(0) Я бы не стал привязываться к наименованию... Достаточно одного пробела, одной точки - и вся твоя система рушится как карточный домик..
|
|||
8
VladZ
07.03.13
✎
11:47
|
(6) Гов-нокод.
|
|||
9
YaroslavStr
07.03.13
✎
11:48
|
Задача была таковой для старого программиста: он сделал выгрузку по почте, в котором один файл *.txt. В нем выгрузка ТЗ. В ней записаны товары, которые есть на офисе, но нет на филиалах. При приеме такого файла 1С автоматом формирует новые каталоги, и добавляет в них товары. Если каталога нет, тогда создает. В офисе и на филиале не могут быть одинаковые кода групп, есть только названия - они формируются автоматом и не содержат не уникальных наименований. Где-то так...
|
|||
10
VladZ
07.03.13
✎
11:48
|
Настоящий программист должен быть достаточно ленив, чтобы не писать каждый раз:
СпрФ.Новый(); СпрФ.Код = ТЗ_Почта.Код; СпрФ.Наименование = ТЗ_Почта.Наименование; СпрФ.Длина = ТЗ_Почта.Длина; СпрФ.Ширина = ТЗ_Почта.Ширина; СпрФ.Описание = ТЗ_Почта.Описание; СпрФ.Себестоимость = ТЗ_Почта.Себестоимость; СпрФ.ЦенаПродажи = ТЗ_Почта.ЦенаПродажи; СпрФ.КодТ = ТЗ_Почта.Код; СпрФ.Записать(); |
|||
11
YaroslavStr
07.03.13
✎
11:50
|
(10) Я не пишу это вручную :) Это автозаполнение OpenConf.
|
|||
12
YaroslavStr
07.03.13
✎
11:50
|
А как Вы пишите такой участок кода?
|
|||
13
VladZ
07.03.13
✎
11:52
|
(12) Повторяющийся код - в отдельную процедуру. Но это только для ленивых. Для тех, кто рубит бабло за количество строк кода - код ИДЕАЛЕН!!!
|
|||
14
VladZ
07.03.13
✎
11:54
|
И что за хня?
Сообщить("если ...")? Человек, который в конечном итоге видит окно сообщений должен понимать, что происходит. И что делать, если что-то не так. Вот представь, ты - обычная "лопата с глазами". И компьютер выдает тебе "если товар должен быть в первой папке справочника и папки нет". Твои дальнейшие действия??? |
|||
15
YaroslavStr
07.03.13
✎
11:56
|
(13) Рассмешили :). По правде говоря, сам понимаю, что это некрасиво. Все что можно я тоже храню в глобальном. Но здесь другое: код, который внутри писал не я, Я уже запарился исправлять все там написанное. Был момент, когда один участок кода грузил сервер на 25%. Переписав его таким "г-кодом" упала до 4%. За то, как там было заумно написано...
(14) Это для себя писал. |
|||
16
YaroslavStr
07.03.13
✎
11:59
|
(15) По правде, я не ахти умею пользоваться отладчиком. И мен такими комментами легче отследить где именно находится ошибка.
Может кто знает в Инете статьи (толковые!) где можно было бы ознакомится и подтянуть знания про отладчик и работу с ним? |
|||
17
orefkov
07.03.13
✎
12:16
|
(13)
Ну-ну-ну. Часто ли у вас есть нужда во многих местах конфигурации создавать программно элемент конкретного справочника, что бы выносить это в ГМ ? А в разовых внешних обработках смысла нет выносить в отдельную процедуру, ибо 1. создание происходит один раз в одном месте. 2. интеллисенс сразу все вписывает. как-то так. |
|||
18
VladZ
07.03.13
✎
12:32
|
(17) Про ГМ я ни слова не сказал. Речь шла про отдельную процедуру.
|
|||
19
VladZ
07.03.13
✎
12:36
|
Пройдет какое-то время... В справочнике появится несколько реквизитов... И кому-то придется выискивать в километрах кода место, куда еще нужно "воткнуться".
|
|||
20
Godofsin
07.03.13
✎
12:43
|
(19) +1
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |