Модераторы: stron

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Можно ли в одной обработке создать 3 таблицы значе 
:(
    Опции темы
roalang
Дата 2.4.2008, 04:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 30.3.2008

Репутация: нет
Всего: нет



У меня есть две базы: за 07 и 08 года. Мне надо получить отчет по материалам который пролежал без движения. Т.е. создать отчет, который показывал материалы без движения по двум этим базам. Они разные. 

Вопрос: можно ли в одной обработке создать 3 ТЗ, 1 для 07 года, 2-ая для 08 года, а в 3-ей сравнить первые две таблицы?????
 
 


PM MAIL   Вверх
SaschaL
Дата 2.4.2008, 05:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 880
Регистрация: 13.12.2006
Где: Челябинская обл г .Нязепетровcк

Репутация: 8
Всего: 9



Да такое возможно!
С точки зрения 1С каких либо технических проблем нет!
и тем более сравнить Таблицы Значений между собой, самый простой способ это когда все нужные для этого таблицы значений будут приведены к одной структуре и все!


PM MAIL ICQ   Вверх
Itsys
Дата 2.4.2008, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 7
Всего: 34



Проще выбираешь данные из одной базы - хочешь клади их в ТЗ, хочешь проверяй динамически, подключаемся к другой базе по OLE и проверяем там если сходится - выводим куда надо.
PM MAIL WWW Skype   Вверх
roalang
Дата 3.4.2008, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 30.3.2008

Репутация: нет
Всего: нет



Itsys  скажи как  по OLE я не разу с этим не работала??? Знаю только ТЗ.

По структуре все таблицы одинаковы..

PM MAIL   Вверх
SaschaL
Дата 3.4.2008, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 880
Регистрация: 13.12.2006
Где: Челябинская обл г .Нязепетровcк

Репутация: 8
Всего: 9



ТЗ это таблица значений. А через OLE ты должен подключиться к другой базе данных что бы получить аналогичную информацию из другой базы данных.
Команды для работы с OLE Automation описываются в главе 40 справочника по встроенному языку.
вот пример, взятый с сайта www.mista.ru, там же еще есть другие примеры, которые показывают работу с OLE Automation:
Цитата

Пример 1. Присоединение к базе 1С через OLE.
БазаОле=СоздатьОбъект("V77.Application"); // Получаем доступ к OLE объекту 1С
Локальная версия (на одного пользователя):  V77L.Application
Сетевая версия:  V77.Application
Версия SQL:  V77S.Application

Далее вместо термина "вызываемая база" будет написано просто "база OLE", а вместо термина "вызывающая база" - "местная база"

Теперь, мы должны знать несколько параметров для запуска базы OLE: Каталог базы, имя пользователя и пароль. Ну, наверное, еще и желание запустить 1С в монопольном режиме smile
КаталогБазыОЛе  = "C:\program files\1cv77\МояБаза\";
ПользовательОле = "Администратор";
ПарольОле       = "qwerty";
МонопольныйРежимOLE = " /m"; // для немонопольного запуска указать пустую строку!
ЗапускБезЗаставки = 1;       // для появления заставки (например, чтобы наблюдать
                             // процесс запуска базы OLE визуально) поставьте здесь "0"
РезультатПодключения = БазаОле.Initialize ( БазаОле.RMTrade , "/d" +
                       СокрЛП(КаталогБазыОле) + " /n" + СокрЛП(ПользовательОле)+
                       " /p" + СокрЛП(ПарольОле) + МонопольныйРежимOLE,
                       ?(ЗапускБезЗаставки = 1,"NO_SPLASH_SHOW",""));
Если РезультатПодключения = 0 Тогда
     Предупреждение("Не удалось подключится к указанной базе - проверьте вводные!");
КонецЕсли;

Комментарий: функции СокрЛП() стоят в примере на случай, если пользователь захочет указанные выше переменные сделать в форме диалога, а проблема при этом состоит в том, что в алгоритм программа передаст полное значение реквизита (т.е. допишет в конце значения то количество пробелов, которое необходимо для получения полной длины строки (указана в свойствах реквизита диалога)). 


PM MAIL ICQ   Вверх
roalang
Дата 3.4.2008, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 30.3.2008

Репутация: нет
Всего: нет



У меня на данный момент вот такая бредовая идея (сроки поджимают наших снабженцев, аж меня вызвали из декретного).
Процедура Сформировать()
    
Ит = СоздатьОбъект("БухгалтерскиеИтоги");  

    // Первая таблица
    
    Тз.новаяКолонка("Наименование");
    Тз.новаяКолонка("Код");
    Тз.новаяколонка("МестаХранения"); 
    Тз.новаяКолонка("Субсчет10");
    Тз.новаяколонка("Количество");
    Тз.новаяколонка("Снд");
    Тз.новаяколонка("Скд");    
        
    Ит.ИспользоватьСубконто(ВидыСубконто.Материалы,, 1);
    Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,, 1);  
    ВыбСчет="10.01;10.02;10.03;10.04;10.05;10.06;10.08;10.09;10.10.01;10.10.02;10.14";  
    Ит.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, ВыбСчет,,, 1,,);       
    
    Таб.ВывестиСекцию("Шапка");
    Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);   
    
    Ит.ВыбратьСубконто(ВидыСубконто.Материалы);
    Пока Ит.ПолучитьСубконто(ВидыСубконто.Материалы) = 1 Цикл  
        кол=ИТ.СКД(3); 
        цена=кол*ИТ.СКД(); 
    если Ит.Скд()=0 тогда
        продолжить
    иначе
    если Ит.Снд()=Ит.СКД() тогда
        
    Тз.НоваяСтрока();
    Тз.Наименование=Ит.Субконто(ВидыСубконто.материалы).Наименование;
    Тз.Код=Ит.Субконто(ВидыСубконто.материалы).код;
    Тз.МестаХранения=Ит.Субконто(2);
    Тз.Субсчет10=Ит.Субконто(ВидыСубконто.материалы).Субсчет10;
    Тз.Количество=число(Кол);
    Тз.Снд=Ит.СНД();
    Тз.Скд=Ит.СКД();
     
    конецесли    
    конецесли;                       

    КонецЦикла;
значениевфайл("C:\остатки.txt", Тз);
сообщить("Ура")

КонецПроцедуры   

Процедура сохран()   
    
    Ит = СоздатьОбъект("БухгалтерскиеИтоги"); 
      
// Вторая таблица
    
    Тз1.новаяКолонка("Наименование");
    Тз1.новаяКолонка("Код");
    Тз1.новаяколонка("МестаХранения"); 
    Тз1.новаяКолонка("Субсчет10");
    Тз1.новаяколонка("Количество");
    Тз1.новаяколонка("Снд");
    Тз1.новаяколонка("Скд");
    
        
    Ит.ИспользоватьСубконто(ВидыСубконто.Материалы,, 1);
    Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,, 1);  
    ВыбСчет="10.01;10.02;10.03;10.04;10.05;10.06;10.08;10.09;10.10.01;10.10.02;10.14";  
    Ит.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, ВыбСчет,,, 1,,);       
    Ит.ВыбратьСубконто(ВидыСубконто.Материалы);
    Пока Ит.ПолучитьСубконто(ВидыСубконто.Материалы) = 1 Цикл  
        кол=ИТ.СКД(3); 
        цена=кол*ИТ.СКД(); 
    если Ит.Скд()=0 тогда
        продолжить
    иначе
    если Ит.Снд()=Ит.СКД() тогда    
    Тз1.НоваяСтрока();
    Тз1.Наименование=Ит.Субконто(ВидыСубконто.материалы).Наименование;
    Тз1.Код=Ит.Субконто(ВидыСубконто.материалы).код;
    Тз1.МестаХранения=Ит.Субконто(2);
    Тз1.Субсчет10=Ит.Субконто(ВидыСубконто.материалы).Субсчет10;
    Тз1.Количество=Кол;
    Тз1.Снд=Ит.СНД();
    Тз1.Скд=Ит.СКД();    
    конецесли    
    конецесли;                       
    КонецЦикла;    
    
КонецПроцедуры       

процедура Выгрузить()                      
    
Перем Тз3;    

тз3=создатьобъект("ТаблицаЗначений");
 
Тз3.новаяКолонка("Наименование");
Тз3.новаяКолонка("Код");
Тз3.новаяколонка("МестаХранения"); 
Тз3.новаяКолонка("Субсчет10");
Тз3.новаяколонка("Количество");
Тз3.новаяколонка("Снд");
Тз3.новаяколонка("Скд");                   
    
ЗначениеИзФайла("C:\остатки.txt",Тз); 

тз3.новаястрока();
Тз3.Наименование=Тз.Наименование;
Тз3.Код=Тз.Код  ;
Тз3.МестаХранения=Тз.МестаХранения;
Тз3.Субсчет10=Тз.Субсчет10;
Тз3.Количество=Тз.Количество;
Тз3.Снд=    Тз.Снд;
Тз3.Скд=Тз.Скд;                      
конецпроцедуры    

Процедура сравнить() 
перем тз1,тз3;    
    
Выгрузить();
сохран();

если тз3.код=тз1.код тогда
сообщить("ура");        
 
конецесли;
    
конецпроцедуры

знаю, что ерунда smile , но подругому мозги не работают smile 
PM MAIL   Вверх
SaschaL
Дата 3.4.2008, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 880
Регистрация: 13.12.2006
Где: Челябинская обл г .Нязепетровcк

Репутация: 8
Всего: 9



ТАК это все замечательно, но для того чтобы сравнить однотипную информацию с двух одинаковых баз нужно её получить.
Допустим создали вы отчет или обработку не важно, создали на форме 3 таблицы значений с разными идентификаторами. Но обработку то вы сможете в одной базе, допустим вы написали алгоритм по получению информации из базы, и поместили эту инфу в ТЗ, но для анализа то вам понадобиться и вторую ТЗ заполнить информацией только уже из другой базы, вот как раз для этого вам и нужно использовать OLE а иначе просто ни  чего не получится. 
Тот вариант что у вас описан с использование файла формата txt в принципе тоже приемлемый вариант если создать вначале обработку по получению информации в одной базе и выгрузить её в другой. Но главное в этом случае не запутаться.

Судя по внезапному окончанию кода дальше у вас дело не пошло...

В данной ситуации какого рода совет вам нужен?

Добавлено через 2 минуты и 7 секунд
Если у вас это сделано внешней обработкой можете  скинуть на [email protected] я посмотрю может что и посоветую или помогу доработать если конфигурация конечно у вас стандартная.
PM MAIL ICQ   Вверх
Itsys
Дата 3.4.2008, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 7
Всего: 34



Здесь все не так просто, как кажется.

Вопрос зачем тебе такая огромная таблица значений, если при сверке ты используешь только ТЗ.Код - в этом случае проще запихнуть все в СписокЗначений, дальше ты это список сохраняешь ЗначениеВФайл(), в другой конфигурации ты его загружешь из ЗначениеИзФайла, и при проходе итогов проверяешь вхождение нужного кода в список Принадлежит().

Добавлено через 1 минуту и 50 секунд
Цитата(SaschaL @  3.4.2008,  12:25 Найти цитируемый пост)
конфигурация конечно у вас стандартная

Конфигурация нестандартная в стандартной конфе нет таких счетов учета материалов  smile 

ЗЫ Если время ждет, то могу сегодня-завра вечером накидать 2 обработки для первой и второй базы, но сейчас времени нет.
PM MAIL WWW Skype   Вверх
roalang
Дата 3.4.2008, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 30.3.2008

Репутация: нет
Всего: нет



SaschaL :
OLE  не использовала.  Обработку послала. Да, но и предприятие у нас не стандартное..... электростанция.

Добавлено через 1 минуту и 8 секунд
время ждет, за один день все равно ниче не сделаю.....
PM MAIL   Вверх
SaschaL
Дата 3.4.2008, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 880
Регистрация: 13.12.2006
Где: Челябинская обл г .Нязепетровcк

Репутация: 8
Всего: 9



Обработку получил, завтра с утра на свежую голову взгляну.
И предложу свой вариант
PM MAIL ICQ   Вверх
roalang
Дата 4.4.2008, 03:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 30.3.2008

Репутация: нет
Всего: нет



OK smile 
PM MAIL   Вверх
roalang
Дата 4.4.2008, 03:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 30.3.2008

Репутация: нет
Всего: нет



как сделать заполнение (инициализация) Тз отдельной функцией
PM MAIL   Вверх
SaschaL
Дата 4.4.2008, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 880
Регистрация: 13.12.2006
Где: Челябинская обл г .Нязепетровcк

Репутация: 8
Всего: 9



Вы наверное это имели ввиду:
Код

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


Вот такой примерно принцип заполнения.

Теперь встречный вопрос в обработке которые вы прислали нужно создать третью ТЗ?
 Я так понимаю что в ней должны попасть только те элементы которых не оказалось в одной из таблиц.
PM MAIL ICQ   Вверх
roalang
Дата 4.4.2008, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 30.3.2008

Репутация: нет
Всего: нет



SaschaL, 
наооборот как я с коллегой поддумав пришла к выводу если значения в Тз1 и  Тз2 равны,   то переносить в 3 Тз
PM MAIL   Вверх
Itsys
Дата 5.4.2008, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 7
Всего: 34



Ну вот, как обещал, собственно ничего сложного
Код для обработки из первой базы:
Код

    Спис = СоздатьОбъект("СписокЗначений");
    БИ = СоздатьОбъект("БухгалтерскиеИтоги");
    БИ.ИспользоватьСубконто(ВидыСубконто.Материалы);
    БИ.ВыполнитьЗапрос(НачДата, КонДата);
    БИ.ВыбратьСубконто(ВидыСубконто.Материалы);
    Пока БИ.ПолучитьСубконто(ВидыСубконто.Материалы) = 1 Цикл
        Если (БИ.ДО(3) = 0) И (БИ.КО(3) = 0) Тогда
            Спис.ДобавитьЗначение(БИ.Субконто(ВидыСубконто.Материалы).Код);
        КонецЕсли;
    КонецЦикла;
    
    ЗначениеВФайл("C:\temp\mat.txt", Спис);


Теперь для второй, в которой и будет формироваться ТЗ со всеми не используемыми материалами:
Код

    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    ТЗ.новаяКолонка("Наименование");
    ТЗ.новаяКолонка("Код");
    ТЗ.новаяколонка("МестаХранения"); 
    ТЗ.новаяКолонка("Субсчет10");
    ТЗ.новаяколонка("Количество");
    ТЗ.новаяколонка("Снд");
    ТЗ.новаяколонка("Скд");    
    
    Ит = СоздатьОбъект("БухгалтерскиеИтоги");  
    Ит.ИспользоватьСубконто(ВидыСубконто.Материалы,, 1);
    Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения,, 1);  
    //ВыбСчет="10.01;10.02;10.03;10.04;10.05;10.06;10.08;10.09;10.10.01;10.10.02;10.14";//Это не обязательно  
    //Ит.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, ВыбСчет,,, 1,,);
    //Достаточно так 
    Ит.ВыполнитьЗапрос(НачДата, КонДата);
    
    
    Спис = СоздатьОбъект("СписокЗначений");
    ЗначениеИзФайла("C:\temp\mat.txt", Спис);
    
    //Таб.ВывестиСекцию("Шапка");
    //Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);   
    
    Ит.ВыбратьСубконто(ВидыСубконто.Материалы);
    Пока Ит.ПолучитьСубконто(ВидыСубконто.Материалы) = 1 Цикл
        //А где выборка втрого субконто?
        Ит.ВыбратьСубконто(ВидыСубконто.МестаХранения);
        Пока Ит.ПолучитьСубконто(ВидыСубконто.МестаХранения) = 1 Цикл
        //кол=ИТ.СКД(3); 
        //цена=кол*ИТ.СКД();//А это что за цена такая? количество материала умноженное на его остаточную стоимость (прям цена в квадрате) интересно где Вы дальше собираетесь ее использовать
        //если Ит.Скд()=0 тогда Проверять надо не СКД, а отсутсвие оборотов по дебету и кредиту если Вам нужен материал без движения
            Если (Ит.ДО(3) = 0) И (Ит.КО(3) = 0) Тогда
                Если Спис.Принадлежит(Ит.Субконто(ВидыСубконто.Материалы).Код) = 1 Тогда
                    ТЗ.НоваяСтрока();
                    ТЗ.Наименование = Ит.Субконто(ВидыСубконто.Материалы).Наименование;
                    ТЗ.Код = Ит.Субконто(ВидыСубконто.Материалы).Код;
                    ТЗ.МестаХранения = Ит.Субконто(2);
                    ТЗ.Субсчет10 = Ит.Субконто(ВидыСубконто.Материалы).Субсчет10;
                    ТЗ.Количество = Число(Ит.СКД(3));
                    //А эти заначения будут заполняться только при снятии у субконто МестаХранения признака только количественного учета
                    ТЗ.Снд = Ит.СНД();
                    ТЗ.Скд = Ит.СКД();
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    Тз.ВыбратьСтроку();


И одно замечание: учитесь писать код красиво и понятно.

ЗЫ "Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям." (Мартин Фаулер. Рефакторинг)
PM MAIL WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "1C: Предприятие, SAP, ERP и учётные системы"
stron

Запрещается!

1. Обсуждение крэков, кейгенов и других подобных программ

Пробуйте искать сами или обращайтесь в приват к участникам форума.

Темы с подобными вещами будут немедленно удаляться, а нарушители - получать предупреждения.

Также запрещается обсуждение проблем работы этих программ (что куда вписать, куда что скопировать и т.п...)

2. Давать ссылки на взломанные продукты

  • Пожалуйста, пользуйтесь поиском перед тем, как задать вопрос - возможно ответ уже есть на форуме.
  • Название темы должно отражать её суть
  • Действия модераторов можно обсудить здесь

С уважением, stron, Pegas.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | 1C: Предприятие, SAP, ERP и учётные системы | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.