7.7 Запись обьекта 1С 7,7

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем djyarilo, 27 май 2011.

  1. TopicStarter Overlay
    djyarilo
    Offline

    djyarilo Опытный в 1С

    Регистрация:
    18 апр 2011
    Сообщения:
    435
    Симпатии:
    0
    Баллы:
    26
    В 8.2 есть штука ПолучитьОбъект(), и объекту можно присвоить определенное значение.
    пошарил по инету и реализую это в 1с 7.7
    Код:
    докЗаказа = СоздатьОбъект("Документ.ЗаказПоставщику");
    спрном = СоздатьОбъект("Справочник.Номенклатура");
    спрном.ВыбратьЭлементы();
    Пока спрном.ПолучитьЭлемент() = 1 Цикл
    поиск = Найти(спрном.Наименование, з1);
    Если поиск = 1 Тогда
    а = спрном.Наименование;
    б = спрном.БазоваяЕдиница.ОКЕИ;
    КонецЕсли;
    КонецЦикла;
    докЗаказа.Новый();
    докЗаказа.Комментарий = "я";
    докЗаказа.ВыбратьСтроки();
    Пока докЗаказа.ПолучитьСтроку() = 1 Цикл
    докзаказа.УстановитьАтрибут("Номенклатура", а);
    докЗаказа.установитьатрибут("Единицы", б)
    КонецЦикла;
    
    
    докЗаказа.Записать();
    Сообщить(докЗаказа.Фирма);
    докЗаказа.ВыбратьДокументы(ТекущаяДата());
    Пока докЗаказа.ПолучитьДокумент() = 1 Цикл
    Если (докЗаказа.Проведен() = 0 )и (докзаказа.ПометкаУдаления() = 0 )Тогда
    
    поиск = Найти(докЗаказа.Комментарий, "я");
    если поиск = 1 Тогда
    нажми = ОткрытьФорму(докЗаказа.ТекущийДокумент());
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    
    
    Документ открывается но почему то значения полей номенклатура и единица пустые(((
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    //....
    поиск = Найти(спрном.Наименование, з1);        
    Если поиск = 1 Тогда            
    а = спрном.ТекущийЭлемент()
    б = спрном.БазоваяЕдиница.ОКЕИ;        
    КонецЕсли;
    //.....
    докЗаказа.Новый();
    докЗаказа.Комментарий = "я";    
    докЗаказа.НоваяСтрока();    
    докзаказа.Номенклатура=а;    
    докзаказа.Записать();
    
    
    
    
  3. TopicStarter Overlay
    djyarilo
    Offline

    djyarilo Опытный в 1С

    Регистрация:
    18 апр 2011
    Сообщения:
    435
    Симпатии:
    0
    Баллы:
    26
  4. TopicStarter Overlay
    djyarilo
    Offline

    djyarilo Опытный в 1С

    Регистрация:
    18 апр 2011
    Сообщения:
    435
    Симпатии:
    0
    Баллы:
    26
    Есть 2 печатные таблицы.
    Когда пользователь нажимает в 1 печатной таблице на номенклатуру, эта номенклатура записывается в переменную з1. и по этой номенклатуре во вторую печатную таблицу высвечиваются документы в которых учавствует эта номенклатура.
    Во 2 печатной таблице, есть поле Нажми. когда я на него нажимаю срабатывает второе условие и вот ломаю себе мозг, как передать туда значение переменной з1 :angry:
    Код:
    Если тип="СписокЗначений" тогда //убедились, что это списокЗначений
    фл=0;
    з1=Список.ПолучитьЗначение(1);
    Запрос.Выполнить(текстзапроса);
    
    пока Запрос.Группировка(1) = 1 Цикл
    поиск = Найти(Запрос.Номенклатура, з1);
    Если поиск = 1 Тогда
    НачОстаток = Запрос.КоличествоНачОст;
    Приход = Запрос.КоличествоПриход;
    Расход = Запрос.КоличествоРасход;
    КонОстаток = Запрос.КоличествоКонОст;
    если НачОстаток = 0 Тогда
    НачОстаток = " ";
    КонецЕсли;
    Если Приход = 0 Тогда
    Приход = " ";
    КонецЕсли; 
    Если Расход = 0 Тогда
    Расход = " ";
    КонецЕсли;
    ТабДок.ВывестиСекцию("Номенклатура");
    
    Пока Запрос.Группировка(2) = 1 Цикл
    
    Док = глПредставлениеДокумента(Запрос.Док);
    ПриходДок = Запрос.КоличествоПриход;
    РасходДок = Запрос.КоличествоРасход;
    Если ПриходДок = 0 Тогда
    ПриходДок = "";
    КонецЕсли;
    Если РасходДок = 0 Тогда
    РасходДок = "";
    КонецЕсли;
    общийостаток = "";
    если док = "" Тогда
    док = "Итого по документам";
    ПриходДок = Приход;
    РасходДок = Расход;
    ОбщийОстаток = Запрос.КоличествоКонОст;
    
    КонецЕсли;
    
    ТабДок.ВывестиСекцию("Док");
    //	Сообщить(" название документа " + Запрос.Док + " остаток " + Запрос.КоличествоКонОст + " Приход " + Запрос.КоличествоПриход + " Расход " + Запрос.КоличествоРасход);
    конеццикла;
    КонецЕсли;
    конеццикла;
    
    ТабДок.ТолькоПросмотр(1);
    ТабДок.Показать();
    
    
    ИначеЕсли ТипЗначения(100) = 1 Тогда
    ном = з1;
    
    спрном = СоздатьОбъект("Справочник.Фирмы");
    докЗаказа = СоздатьОбъект("Документ.ЗаказПоставщику");
    спрном.ВыбратьЭлементы();
    Пока спрном.ПолучитьЭлемент() = 1 Цикл
    поиск = Найти(спрном.Наименование, "Аксинья");
    Если поиск = 1 Тогда
    Фирма = спрном.ТекущийЭлемент();
    КонецЕсли;
    КонецЦикла;
    докЗаказа.Новый();
    докЗаказа.Комментарий = "я";
    докЗаказа.НоваяСтрока();
    докзаказа.Фирма =Фирма;
    
    
    
    докЗаказа.Записать();
    
    докЗаказа.ВыбратьДокументы(ТекущаяДата());
    Пока докЗаказа.ПолучитьДокумент() = 1 Цикл
    Если (докЗаказа.Проведен() = 0 )и (докзаказа.ПометкаУдаления() = 0 )Тогда
    
    поиск = Найти(докЗаказа.Комментарий, "я");
    если поиск = 1 Тогда
    нажми = ОткрытьФорму(докЗаказа.ТекущийДокумент());
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    конецЕсли;
    
    
  5. TopicStarter Overlay
    djyarilo
    Offline

    djyarilo Опытный в 1С

    Регистрация:
    18 апр 2011
    Сообщения:
    435
    Симпатии:
    0
    Баллы:
    26
    С выше указанным я потом разберусь, проблема вот в следующем не могу обратиться к табличной части документа.
    Код:
    спрноменклатура = СоздатьОбъект("Справочник.Номенклатура");
    спрноменклатура.ВыбратьЭлементы();
    Пока спрноменклатура.ПолучитьЭлемент() = 1 Цикл
    ищу = Найти(спрноменклатура.Наименование, з1);
    если ищу = 1 Тогда
    номенклатура = спрноменклатура.ТекущийЭлемент();
    единица = спрноменклатура.ТекущийЭлемент().БазоваяЕдиница;
    КонецЕсли;
    КонецЦикла;
    Конт = "";
    нажми = ОткрытьФорму("Документ.ЗаказПоставщику", Конт);
    Конт.Фирма = Фирма;
    Конт.НоваяСтрока();
    Конт.номенклатура = номенклатура;
    Сообщить("ном "+ номенклатура+" Единица " + единица);
    
    
    Номенклатуру единицу все сообщает, при обращении к табличной части, ТЧ вообще не видна :angry: и поэтому не могу в нее передать значения(((
  6. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Не нравится мне перебор в цикле по элементам справочника...
    Есть же метод:

    НайтиПоНаименованию(<Наименование>,<Режим>,<ФлагПоиска>)

    Назначение:
    Найти элемент справочника по наименованию.
    Возвращает: 1 - если действие выполнено;
    0 - если действие не выполнено (элемент не найден).
    Параметры:
    <Наименование> - строка с наименованием искомого элемента справочника,
    <Режим> - необязательный параметр. Число: 1 - поиск внутри установленного подчинения (родителя); 0 - поиск во всем справочнике вне зависимости от родителя. Значение по умолчанию - 1.
    <ФлагПоиска> - необязательный параметр. Число: 1 - найти точное соответствие наименования; 0 - найти наименование по первым символам. Значение по умолчанию - 0.


    + нет НИКАКОЙ проверки на то что действительно НАШЛИ элемент.
    Код:
    Наименование="";
    Пока спрноменклатура.ПолучитьЭлемент() = 1 Цикл    
    ищу = Найти(спрноменклатура.Наименование, з1);  //не проверяется значение регистра: "ПЛюшка" не найдет "Плюшка"  
    если ищу = 1 Тогда        
    номенклатура = спрноменклатура.ТекущийЭлемент();
    единица = спрноменклатура.ТекущийЭлемент().БазоваяЕдиница;
    прервать; //хоть так на худой конец....
    КонецЕсли;
    КонецЦикла;
    Если ПустоеЗначение(номенклатура )=1 Тогда
    Сообщить("Не найден в справочнике "+з1);
    возврат;
    КонецЕсли;
    
    
    
    
    
    Что же касается добавления строки - код ПРАВИЛЬНЫЙ Все должно работать
  7. TopicStarter Overlay
    djyarilo
    Offline

    djyarilo Опытный в 1С

    Регистрация:
    18 апр 2011
    Сообщения:
    435
    Симпатии:
    0
    Баллы:
    26
    Да не в этом прикол, короче я лазил по инету, там было написано что через Контекст формы, стандартным языком ТЧ не заполнить, нужно обязательно какой то 1cpp.dll. А Стандартным образом можно, при одном условии, если документ заранее записать(( либо:
    Код:
    Док = СоздатьОбъект("Документ.Инвентаризация");
    Док.Новый();
    Док.НоваяСтрока();
    Док.Товар = Товар;
    НачатьТранзакцию();
    Док.Записать();
    ОткрытьФорму(Док.ТекущийДокумент());
    ОтменитьТранзакцию()
    
    
    
    но так документ не провести(((
    а в том цикле что я привел, номенклатура находится))
  8. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Почему не провести?
    Код:
    Док.Провести()
    
    
    
    если уж на то пошло....

    После окрытия формы идет отмена транзакции (ОтменитьТранзакцию()) - значит все действия с ее начала будут ОТМЕНЫ (хоть 10 запишите и прведите).
  9. TopicStarter Overlay
    djyarilo
    Offline

    djyarilo Опытный в 1С

    Регистрация:
    18 апр 2011
    Сообщения:
    435
    Симпатии:
    0
    Баллы:
    26
    Возможно ли сохранение переменной так чтобы оно не обнулялосЬ?
    На 1 печатной форме я получаю список значений, в который записывается номенклатура. О
    Код:
    	
    Если тип="СписокЗначений" тогда //убедились, что это списокЗначений
    фл=0;
    з1=Список.ПолучитьЗначение(1);
    на вторую печатную форму я передаю документы по этой номенклатуре
    конецЕсли;
    
    
    2 печатная форма. при нажатии на поле должен открыться документ с уже заполненными полями. и во второй форме не могу узнать значение з1. оно обнуляется, пробовал, как только не пробовал все равно туда передается пустым. Где его сохранить можно чтобы оно не обнулялось или каким нибуть другим методом написать?
    Код:
    Если тип = "" Тогда
    
    спрном = СоздатьОбъект("Справочник.Фирмы");
    спрном.ВыбратьЭлементы();
    Пока спрном.ПолучитьЭлемент() = 1 Цикл
    поиск = Найти(спрном.Наименование, "Аксинья");
    Если поиск = 1 Тогда
    Если поиск = 1 Тогда
    Фирма = спрном.ТекущийЭлемент();
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    
    спрноменклатура = СоздатьОбъект("Справочник.Номенклатура");
    спрноменклатура.ВыбратьЭлементы();
    Пока спрноменклатура.ПолучитьЭлемент() = 1 Цикл
    ищу = Найти(спрноменклатура.Наименование, з1);
    если ищу = 1 Тогда
    номенклатура = спрноменклатура.ТекущийЭлемент();
    единица = спрноменклатура.ТекущийЭлемент().БазоваяЕдиница;
    КонецЕсли;
    КонецЦикла;
    
    Док = СоздатьОбъект("Документ.ЗаказПоставщику");
    Док.Новый();
    Док.Фирма = Фирма;
    Док.НоваяСтрока();
    Док.Номенклатура = номенклатура;
    Док.Единица = единица;
    
    Док.Записать();
    нажми = ОткрытьФорму(док.ТекущийДокумент());
    КонецЕсли;
    
    
  10. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
  11. TopicStarter Overlay
    djyarilo
    Offline

    djyarilo Опытный в 1С

    Регистрация:
    18 апр 2011
    Сообщения:
    435
    Симпатии:
    0
    Баллы:
    26
    Короче как получается! Что в переменную з1 записывается, номенклатура которую я нажал на 1 печатной форме из списка значений.
    2 печатная форма печатается на основе значений з1. то есть там выводятся название номенклатуры на которую я нажал и документы в которых учавствует номенклатура. КОгда я нажимаю на определенное поле которое отвечает за открытие документа, з1 уже пустое.((( вот
  12. Бухгалтерский угодник
    Offline

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

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

    djyarilo Опытный в 1С

    Регистрация:
    18 апр 2011
    Сообщения:
    435
    Симпатии:
    0
    Баллы:
    26
    вот

    Вложения:

  14. TopicStarter Overlay
    djyarilo
    Offline

    djyarilo Опытный в 1С

    Регистрация:
    18 апр 2011
    Сообщения:
    435
    Симпатии:
    0
    Баллы:
    26
    весь код обработки который я приводил написан в процедуре обработка ячейки таблицы
  15. TopicStarter Overlay
    djyarilo
    Offline

    djyarilo Опытный в 1С

    Регистрация:
    18 апр 2011
    Сообщения:
    435
    Симпатии:
    0
    Баллы:
    26
    Усе я сделал DDDDDDD, написал в модуле формы в самом верху, экспорт и усе)))

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