"Поле ввода" - це не реквізит документа!!!! при збереженні документа дані з цого поля вводу не зберігаються.
Точно зробив його реквізитом і все проканало.
Я може вже й достав когось але в мене, ще є проблемка та запитання. На цій формі окрім кнопки "Відрити останні набрані Акцизи" є ще декілька кнопок як зробити так аби вони при натисненні цієї змінювали свій стан тобто ставали неактивними????
Пробував до і після рядка з кодом
ОткрытьФорму(Док.ТекущийДокумент(),"проба")
змінити статус кнопки таким рядком
Форма.КнЗаписати.Доступность(0);
де "КнЗаписати" ідентифікатор кнопки статус якої треба змінити і нажаль не вийшло, що тут порадите?
Процедура ОткрДок() Док=СоздатьОбъект("Документ.акциз"); Если Док.НайтиПономеру("0000001038",ТекущаяДата())=1 тогда // ТекущийДок=Док.ТекущийДокумент(); ОткрытьФорму(Док.ТекущийДокумент(),"проба"); КонецЕсли; КонецПроцедуры
і майже все проканало я про те, що потрібну форму воно мені відкриває і в табличній частині всі останні збереження є але на формі в мене також є "Поле Ввода" яке не заповнюється тими даними які були попередньо туди внесені як з цим бути????????
1. Користувач заходить в 1С 1.1 На панелі інструментів тисне на іконку "Акцизи", з'являється форма документу "Новий" для її заповнення (створює первинний документ чи за потреби абсолютно новий, що при натиснені кнопки "Зберегти", на цій формі записується з індивідуальним номером) 1.2 Аби не вводити Акцизи зпочатку а використати останній документ на цій же формі є кнопка "Відрити останні набрані Акцизи" і провести його редагування знову при натисненні кнопки "Зберегти" записати його але вже з наступним індивідуальним номером
виходить що останній номер збереженого документу я можу отримати програмно а ось відкрити по ньому цей документ незнаю як
що за форма списку у документі, можливо, ви мали на увазі табличну частину цього документу? Скріншоти документу можна глянути?
ВИБАЧАЮСЬ я дійсно некоректно написав по суті користувачу для роботи надається таблична частина что в Диалоге идентифицируется как Многострочная часть.
Доброго дня Шановні користувачі 1С. Маю проблемку і водночас надію на те, що саме тут з Вашою допомогою зможу її позбутися. Суть проблеми полягає у тому, що в мене є документ "Акцизи" при відкритті даного документу мені потрібно аби на екрані користувача, не просто з'являлася форма списку, а вже заповнена форма та сама з якою останній раз працювали і зберегли з усіма внесеними даними та змынами. Я думав, що по номеру "Документ.Акцизи" можна буде "ПриОткрытии()" використати метод "ОткрытьФорму()" але щось нічого не виходить. Плюсуватиму повідомлення які реально несуть в собі корисну інформацію, а не заумні посилання в бібліотеку, дякую за розуміння.
вибиває помилку XMLКорневойРаздел.Записать(ИмяФайлаXML); {Документ.РасходнаяНакладная.Форма.Модуль(76)}: : xsi:nil attribute on element 'LINKED_DOCS' is invalid. [<LINKED_DOCS xsi:nil="true"/></DECLARHEAD> (error position = 31)] а як тільки прибираю дві крапки в имені Атрибута "xsi:nil" попилки не має і все прописується як книжка пише????????
Взагалі, я не користуюсь інструментами v7plus.dll для запису хмл-файлів (використовую їх тільки для читання таких файлів). Для себе відкрив об'єкт DomDocument для запису хмл-файлів (читати він звісно також може ), там все логічно і зрозуміло як для мене.
Дякую за пораду але це не вирішує моєї проблеми яка є основою цієї теми.
XMLКорневойРаздел.Записать(ИмяФайлаXML); {Документ.РасходнаяНакладная.Форма.Модуль(76)}: : xsi:nil attribute on element 'LINKED_DOCS' is invalid. [<LINKED_DOCS xsi:nil="true"/></DECLARHEAD> (error position = 31)]
Дякую та плюсую Вам за ":" рядок в XML формується без проблем. Але залишається відкритим питання, що до того яким чином в XML файлі зробити перехід на наступний рядок, бо весь файл формується в один рядок
Доброго дня шановні програмісти. Маю намір полегшити своє життя з тим аби створити модуль для експорту даних типу XML для подальшої загрузки його в Медок структура файлу приблизно така:
почитав деяку літературу і вирішив, що для цієї справи буду використовувати зовнішню компоненту V7Plus почав писати код і ступор в мене вийшов на зовсім здавалосяб смішному місці а саме зі знаком ":" і переходами на іншу сторінку, якщо бути більш точним то код я пишу приблизно ось так
Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "v7plus.dll") <> 1 Тогда Предупреждение("Компонента v7plus.dll не найдена!"); Возврат; КонецЕсли;
XMLАнализатор = СоздатьОбъект("AddIn.XMLParser"); XMLКорневойРаздел = XMLАнализатор.СоздатьДокумент(); // структура самого документа XML ДанныеXML = XMLКорневойРаздел.СоздатьПодчиненныйЭлемент("DECLAR"); ДанныеXML.УстановитьАтрибут("xmlns" + "-" + "xsi", "http" + "-" + "//www.w3.org/2001/XMLSchema-instance"); ДанныеXML.УстановитьАтрибут("xsi" + "-" + "noNamespaceSchemaLocation", "F1203001.XSD");
Ветка_1 = ДанныеXML.СоздатьПодчиненныйЭлемент("DECLARHEAD"); Элемент = Ветка_1.СоздатьПодчиненныйЭлемент("TIN"); Элемент.Значение = "2617602835";
XMLКорневойРаздел.Записать(ИмяФайлаXML);
Предупреждение("ОК");
КонецПроцедуры
туту замість ":" я поставив "-" щоб сконструювати хоча б якийсь файл бо інакше буде вибивати помилку ": Ошибка исполнения метода" в результаті отрумаю код структура якого пишеться в один рядок
Ну велосипед то не сложный получается, встроенной в платформу такой функции нет Функция ПолучитьПрошлуюДату(ТекДата) Возврат НачалоДня(ТекДата) - 24*60*60; КонецФункции
В 7.7 наверное этот фокус не работает потомучно при дате 04.01.2014 получаэтся дата 15.06.1780
Так получится точно, но может это не оптимально: Перебираете таблицу 1, при получении каждой строки тб1 перебираете тб2, и если (пар1тб1 = пар1тб2) И (пар2тб1 = пар2тб2) суммируете значения. Это так, по быстрому, что в голову сразу пришло, но 100% можно оптимизировать, нужно подумать.
Да действительно перебором можно добится нужного результатат вот как в этом варианте решения
Сообщить ("------Варіант рішення №1------");
Список_1.ВыбратьСтроки(); Список_1.Свернуть("Пар1_Сп_1, Пар2_Сп_1","ЗначСп_1"); Список_1.ВыбратьСтроки(); Пока Список_1.ПолучитьСтроку() = 1 Цикл СвСписок_1.НоваяСтрока(); СвСписок_1.Пар1 = Список_1.Пар1_Сп_1; СвСписок_1.Пар2 = Список_1.Пар2_Сп_1; СвСписок_1.Значение = Список_1.ЗначСп_1; //Сообщить(Шаблон("[СвСписок_1.Пар1] Х [СвСписок_1.Пар2] Х [СвСписок_1.Значение]")); КонецЦикла;
Список_2.ВыбратьСтроки(); Список_2.Свернуть("Пар1_Сп_2, Пар2_Сп_2","ЗначСп_2"); Список_2.ВыбратьСтроки(); Пока Список_2.ПолучитьСтроку() = 1 Цикл СвСписок_2.НоваяСтрока(); СвСписок_2.Пар1 = Список_2.Пар1_Сп_2; СвСписок_2.Пар2 = Список_2.Пар2_Сп_2; СвСписок_2.Значение = Список_2.ЗначСп_2; //Сообщить(Шаблон("[СвСписок_2.Пар1] Х [СвСписок_2.Пар2] Х [СвСписок_2.Значение]")); КонецЦикла;
СвСписок_1.ВыбратьСтроки(); СвСписок_2.ВыбратьСтроки(); к = 0; ном = 0; кк = 0; КолСтрокСвСп_1 = СвСписок_1.КоличествоСтрок(); КолСтрокСвСп_2 = СвСписок_2.КоличествоСтрок(); // здесь нужно применить метод возврата кол.строк в таблице ззначений Пока КолСтрокСвСп_1 > к Цикл к = к + 1; сч = 0; СвСписок_1.ПолучитьСтрокуПоНомеру(к); //Сообщить("Цикл_1." + к); Пока КолСтрокСвСп_2 > сч Цикл сч = сч + 1; СвСписок_2.ПолучитьСтрокуПоНомеру(сч); //Сообщить ("Цикл_2." + сч); //Сообщить(Шаблон("[СвСписок_1.Пар1] Х [СвСписок_1.Пар2] Х [СвСписок_1.Значение]")); //Сообщить(Шаблон("[СвСписок_2.Пар1] Х [СвСписок_2.Пар2] Х [СвСписок_2.Значение]")); Если (СвСписок_1.Пар1 = СвСписок_2.Пар1) и (СвСписок_1.Пар2 = СвСписок_2.Пар2) Тогда //Сообщить("параметры спосков одинаовы нада соединять в одну сточку"); ном = ном + 1; СпРезПредвар.НоваяСтрока(ном); СпРезПредвар.Пар1 = СвСписок_1.Пар1; СпРезПредвар.Пар2 = СвСписок_1.Пар2; СпРезПредвар.Значение_1 = СвСписок_1.Значение; СпРезПредвар.Значение_2 = СвСписок_2.Значение; // здесь нужно изменить список2 убрать с нево выбраную стоку СвСписок_2.УдалитьСтроку(сч); КолСтрокСвСп_2 = КолСтрокСвСп_2 - 1; Прервать; КонецЕсли; Если КолСтрокСвСп_2 = сч Тогда ном = ном + 1; СпРезПредвар.НоваяСтрока(ном); СпРезПредвар.Пар1 = СвСписок_1.Пар1; СпРезПредвар.Пар2 = СвСписок_1.Пар2; СпРезПредвар.Значение_1 = СвСписок_1.Значение; СпРезПредвар.Значение_2 = ""; //Сообщить("Запосной результат_1"); КонецЕсли; КонецЦикла; //Сообщить(Шаблон(ном + "." + "[СпРезПредвар.Пар1] Х [СпРезПредвар.Пар2] Х [СпРезПредвар.Значение_1] Х [СпРезПредвар.Значение_2]")); КонецЦикла; КолСтрокСвСп_2 = СвСписок_2.КоличествоСтрок(); Пока КолСтрокСвСп_2 > 0 Цикл кк = кк + 1; СвСписок_2.ПолучитьСтрокуПоНомеру(кк); ном = ном + кк; СпРезПредвар.НоваяСтрока(ном); СпРезПредвар.Пар1 = СвСписок_2.Пар1; СпРезПредвар.Пар2 = СвСписок_2.Пар2; СпРезПредвар.Значение_1 = ""; СпРезПредвар.Значение_2 = СвСписок_2.Значение; КолСтрокСвСп_2 = КолСтрокСвСп_2 - 1; КонеЦцикла;
СпРезПредвар.ВыбратьСтроки(); Для Н = 1 По ном Цикл СпРезПредвар.ПолучитьСтрокуПоНомеру(Н); //Сообщить(Шаблон("[СпРезПредвар.Пар1] Х [СпРезПредвар.Пар2] Х [СпРезПредвар.Значение_1] Х [СпРезПредвар.Значение_2]")); КонецЦикла;
СпРезПредвар.ВыбратьСтроки(); Пока СпРезПредвар.ПолучитьСтроку() = 1 Цикл СпРезультат.НоваяСтрока(); СпРезультат.Пар1 = СпРезПредвар.Пар1; СпРезультат.Пар2 = СпРезПредвар.Пар2; СпРезультат.Значение = СпРезПредвар.Значение_1 + СпРезПредвар.Значение_2; Сообщить(Шаблон("[СпРезультат.Пар1] Х [СпРезультат.Пар2] Х [СпРезультат.Значение]")); КонецЦикла;
но это далеко не оптимально а вот volodya1122 как всегда прав ну вопервых в том что я доконца так и не розобрался с методом свернуть и стем что этот вариант проще вот он
Список_1.ВыбратьСтроки(); Список_1.Свернуть("Пар1_Сп_1, Пар2_Сп_1","ЗначСп_1"); Список_1.ВыбратьСтроки(); Ном = Список_1.КоличествоСтрок(); Для Н = 1 По Ном Цикл Список_1.ПолучитьСтрокуПоНомеру(Н); Сообщить(Шаблон("[Список_1.Пар1_Сп_1] Х [Список_1.Пар2_Сп_1] Х [Список_1.ЗначСп_1]")); КонецЦикла;
К сожалению я уже давно не программирую на 7.7 поэтому подсказать как реализовать эту задачу запросом не смогу.
Спосибо за чесный ответ.
Цитата(volodya1122 @ 31.03.17, 14:22)
Ви ж робили подібну задачу для списку значень. Тут можна зробити аналогічно. а вкінці застосувати метод Сортировать, а потім Свернуть (почитайте в справці як працює метод "свернуть". В першім параметері вказуються реквізити по яких потрібно згорнути список, а в другому список реквізитів значення яких сумуються).
Так дійсно я вже будував одну таблицю на основі двух але її формат як на мене не дозволяє згорнути ту таблицю до потрібного вигляду бо там привязка по даті а мені тепер потрібно привязатися до параметрів і основна проблема в тому, що таблиці мають різну кількість рядків відповідно одному рядку з першої таблиці можуть відповідати три чотири рядки з другої таблиці.
Всё нет так. 1. Что это? Цитата Запрос = СоздатьОбъект("ВЫБРАТЬ"); 2. Мы ж о 7.7 ? Текст запроса написан под 1С 8
3. Что этим хотели сделать (если отталкиваться от текста запроса)? Цитата Запрос.УстановитьПараметр("СпРезультат",Параметры.СпРезультат);
Я ж не спорю что малоумный посему и нахомутал. Пытался слепить нужный для себя запрос на примерах других задач вот и вышел бред сывой кобылы. Для того чтобы розобратся я и прошу Вашей помощи.
Цитата(Batchir @ 31.03.17, 12:16)
3. Что этим хотели сделать (если отталкиваться от текста запроса)? Цитата Запрос.УстановитьПараметр("СпРезультат",Параметры.СпРезультат);
этим думал будет создана промежуточная таблица с чотырмя полями Пар_1, Пар_2, Значение_1, Значение_2 но глубоко в душе понимаю что это тоже не то
Тока закончил с одной таблицей как сразу стало ясно что мне для анализа нужна еще одна суть проблемы изложу на примере, и так есть у меня две таблицы значений Список_1 и Список_2 со следующими полями дата, параметр1, параметр2, значение. По сути таблица будет иметь вид:
Мне нужно объединить эти две таблицы таким образом что бы при одинаковых параметрах сумировать их значения тоесть результат будет следующим:
------------------СпРезультат------------ -----Пар1----|-----Пар2-----|-Значение------------------| если все значения будут равны 10 то ------АА-------|------БА-------|ЗН_1.1+ЗН_1.2----------|------=20 ------АБ-------|------БА-------|ЗН_2.1-------------------|------=10 ------АБ-------|------БВ-------|ЗН_1.3+ ЗН_2.2----------|------=20 ------АВ-------|------БВ-------|ЗН_1.4+ ЗН_1.5+ЗН_2.3-|------=30
Первым шагом думаю надо Список_1 и Список_2 свернуть по значению относительно параметров вот что вышло
НомСп_1 = 5; Для Н = 1 По НомСп_1 Цикл Список_1.ПолучитьСтрокуПоНомеру(Н); //Сообщить(Шаблон("[Список_1.ДатаСп_1] Х [Список_1.Значение_1]")); КонецЦикла;
Для Н = 1 По НомСп_2 Цикл Список_2.ПолучитьСтрокуПоНомеру(Н); //Сообщить(Шаблон("[Список_2.ДатаСп_2] Х [Список_2.Значение_2]")); КонецЦикла;
Список_1.ВыбратьСтроки(); Список_1.Свернуть("Пар1_Сп_1, Пар2_Сп_1","ЗначСп_1"); Список_1.ВыбратьСтроки(); Пока Список_1.ПолучитьСтроку() = 1 Цикл СвСписок_1.НоваяСтрока(); СвСписок_1.Пар1 = Список_1.Пар1_Сп_1; СвСписок_1.Пар2 = Список_1.Пар2_Сп_1; СвСписок_1.Значение = Список_1.ЗначСп_1; Сообщить(Шаблон("[СвСписок_1.Пар1] Х [СвСписок_1.Пар2] Х [СвСписок_1.Значение]")); КонецЦикла;
Список_2.ВыбратьСтроки(); Список_2.Свернуть("Пар1_Сп_2, Пар2_Сп_2","ЗначСп_2"); Список_2.ВыбратьСтроки(); Пока Список_2.ПолучитьСтроку() = 1 Цикл СвСписок_2.НоваяСтрока(); СвСписок_2.Пар1 = Список_2.Пар1_Сп_2; СвСписок_2.Пар2 = Список_2.Пар2_Сп_2; СвСписок_2.Значение = Список_1.ЗначСп_1; Сообщить(Шаблон("[СвСписок_2.Пар1] Х [СвСписок_2.Пар2] Х [СвСписок_2.Значение]")); КонецЦикла;
А вот вторым шагом при объединении низнаю как лутше поступить циклом перепроверять одни данные с другими на примере это просто а в реальности там куча значений и параметров что в одной таблице так и в другой по этому думаю лутше зделать объдинение через запрос на основании полученых (свернутых таблиц значений) . И вот тут то я заплутался подскажите что не так с етим запросом.
Для Н = 1 По НомСп_2 Цикл Список_2.ПолучитьСтрокуПоНомеру(Н); Сообщить(Шаблон("[Список_2.ДатаСп_2] Х [Список_2.Значение_2]")); КонецЦикла; //-------------ЧТО ЗДЕСЬ НЕ ТАК --------------- СписокРезультат = СоздатьОбъект("ТаблицаЗначений"); СписокРезультат.НоваяКолонка("Дата", "Дата"); СписокРезультат.НоваяКолонка ("Значение_1", "Строка"); СписокРезультат.НоваяКолонка ("Значение_2", "Строка"); СписокРезультат.Заполнить(Список_1, 1, 2, "Дата, Значение_1"); СписокРезультат.Заполнить(Список_2, 3, 4, "Дата, Значение_2");
Для Н = 1 По 4 Цикл СписокРезультат.ПолучитьСтрокуПоНомеру(Н); Сообщить(Шаблон("[СписокРезультат.Дата] Х [СписокРезультат.Значение_1] Х [СписокРезультат.Значение_2]")); КонецЦикла;
сори но я вас не понял можете черкануть пару строчек кода чтобы было понятней
leo10k10 @ Сегодня, 11:12
,
Я так понимаю нада зделать цикл по строкам Списка_1, потом вложенный цикл по Списку_2 с заполнением колонок значения, а потом какимто методом упорядочить все это по дате но токо начинаю писать получаэтся бред .
Подскажите пожалуйста как лутше организовать объединение двух списков относительно дати????? Суть токова "Список_1" имеет поля "ДатаСп_1" и "Значение_1", а "Список_2" свои поля "ДатаСп_2" и "Значение_2" в результате объединения должен выйти "СписокРезультат" с полями "Дата", "Значение_1","Значение_2" при этом всем список надо упорядочить по дате возростания тоесть для ниже приведенных случаях должно получится:
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!