Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
23 ноя 2024, 04:10

(Корректировка движений регистров)

Автор GanG031, 23 фев 2016, 13:49

0 Пользователей и 1 гость просматривают эту тему.

GanG031

Доброго времени суток, Уважаемые! Суть в следующем: пишу обработку, на которой размещается 2 таблицы значений, 2 кнопки. В первой таблице значений данные из текстового файла, во второй данные, загруженные из регистра сведений. Реквизиты у обоих тз одинаковые (Период, Сотрудник, Табельный Номер, Составная Часть, Индексируется, Сумма). Суть обработки в том, что мы загружаем данные, выгруженные из одной конфигурации, а именно движения регистра накопления, и сравниваем их с нашими движениями регистра. По полям "Период, сотрудник, табельный номер, составная часть, индексируется" мы однозначно идентифицируем строку, если такое совпадение найдено, но сравниваем сумму, и если она различна, то изменяем ее. На форме 2 кнопки: Загрузить (загружает данные из файла и регистра, и выводит их на форму) и Исправить (исправляем сумму). Начал писать вот такой код(благо, форумчане помогли):

<code>
&НаКлиенте
Процедура Загрузить(Команда)
   ЗагрузитьНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьНаСервере()
       Текст = Новый ТекстовыйДокумент();
Текст.Прочитать("D:\1.txt");
СимволРазделитель = ";";
Для a = 1 По Текст.КоличествоСтрок() Цикл
   Стр = Текст.ПолучитьСтроку(a) ;
   
   ВременнаяСтрока = Стр;
   //найдем разделитель
   НомерСимвола = Найти(ВременнаяСтрока, СимволРазделитель);
   
   Период =           СокрЛП(Лев(ВременнаяСтрока, НомерСимвола -1));
   ВременнаяСтрока =   Сред(ВременнаяСтрока,НомерСимвола + 1);
   
   
   НомерСимвола       = Найти(ВременнаяСтрока,СимволРазделитель);
   Сотрудник =       СокрЛП(  Лев(ВременнаяСтрока,НомерСимвола - 1));
   ВременнаяСтрока =   Сред(ВременнаяСтрока,НомерСимвола + 1);
   
   
      НомерСимвола       = Найти(ВременнаяСтрока,СимволРазделитель);
   ТабельныйНомер =    СокрЛП(  Лев(ВременнаяСтрока,НомерСимвола - 1));
   ВременнаяСтрока =   Сред(ВременнаяСтрока,НомерСимвола + 1);
   
   
      НомерСимвола       = Найти(ВременнаяСтрока,СимволРазделитель);
   СоставнаяЧасть =    СокрЛП(  Лев(ВременнаяСтрока,НомерСимвола - 1));
   ВременнаяСтрока =    Сред(ВременнаяСтрока,НомерСимвола + 1);
   
   
      НомерСимвола   = Найти(ВременнаяСтрока,СимволРазделитель);
   Индексируется =       СокрЛП(  Лев(ВременнаяСтрока,НомерСимвола - 1));
   ВременнаяСтрока =   Сред(ВременнаяСтрока,НомерСимвола + 1);
 
     
   Сумма =  Число (ВременнаяСтрока);
   


   ТаблицаЗначений = Новый ТаблицаЗначений;
   ТаблицаЗначений.Колонки.Добавить("Период");
   ТаблицаЗначений.Колонки.Добавить("Сотрудник");
   ТаблицаЗначений.Колонки.Добавить("ТабельныйНомер");
   ТаблицаЗначений.Колонки.Добавить("СоставнаяЧасть");
   ТаблицаЗначений.Колонки.Добавить("Индексируется");
   ТаблицаЗначений.Колонки.Добавить("Сумма");
    
      Строка = ТаблицаЗначений.Добавить();
      Строка.Сотрудник = ВременнаяСтрока.Сотрудник;
      Строка.ТабельныйНомер = ВременнаяСтрока.ТабельныйНомер;
      Строка.СоставнаяЧасть =ВременнаяСтрока. СоставнаяЧасть;
      Строка.Индексируется = ВременнаяСтрока.Индексируется;
      Строка.Сумма = ВременнаяСтрока.Сумма;
          
    КонецЦикла;
ЗначениеВДанныеФормы(ТаблицаЗначений, Таблица1);   
КонецПроцедуры
</code>

Подскажите пожалуйста дальнейший алгоритм действий. Пока дошел до того, что бы выгрузить Таблицу значений в таблицу значений на форме, но почему то на форме оказывается только последняя строка из таблицы значений( видимо данные по циклу перезаписываются в одну строку, и соответственно последняя строка у нас выводится). Подскажите пожалуйста, в чем ошибка?

GanG031

что то странное, ничего не изменял вроде бы в коде, но начала выскакивать ошибка :
{Форма.Форма.Форма(55)}: Значение не является значением объектного типа (Сотрудник)
      Строка.Сотрудник = ВременнаяСтрока.Сотрудник;

1С-Учебный Центр №3

Цитата: GanG031 от 23 фев 2016, 13:49
Доброго времени суток, Уважаемые! Суть в следующем: пишу обработку, на которой размещается 2 таблицы значений, 2 кнопки. В первой таблице значений данные из текстового файла, во второй данные, загруженные из регистра сведений. Реквизиты у обоих тз одинаковые (Период, Сотрудник, Табельный Номер, Составная Часть, Индексируется, Сумма). Суть обработки в том, что мы загружаем данные, выгруженные из одной конфигурации, а именно движения регистра накопления, и сравниваем их с нашими движениями регистра. По полям "Период, сотрудник, табельный номер, составная часть, индексируется" мы однозначно идентифицируем строку, если такое совпадение найдено, но сравниваем сумму, и если она различна, то изменяем ее. На форме 2 кнопки: Загрузить (загружает данные из файла и регистра, и выводит их на форму) и Исправить (исправляем сумму). Начал писать вот такой код(благо, форумчане помогли):

<code>
&НаКлиенте
Процедура Загрузить(Команда)
   ЗагрузитьНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьНаСервере()
       Текст = Новый ТекстовыйДокумент();
Текст.Прочитать("D:\1.txt");
СимволРазделитель = ";";
Для a = 1 По Текст.КоличествоСтрок() Цикл
   Стр = Текст.ПолучитьСтроку(a) ;
   
   ВременнаяСтрока = Стр;
   //найдем разделитель
   НомерСимвола = Найти(ВременнаяСтрока, СимволРазделитель);
   
   Период =           СокрЛП(Лев(ВременнаяСтрока, НомерСимвола -1));
   ВременнаяСтрока =   Сред(ВременнаяСтрока,НомерСимвола + 1);
   
   
   НомерСимвола       = Найти(ВременнаяСтрока,СимволРазделитель);
   Сотрудник =       СокрЛП(  Лев(ВременнаяСтрока,НомерСимвола - 1));
   ВременнаяСтрока =   Сред(ВременнаяСтрока,НомерСимвола + 1);
   
   
      НомерСимвола       = Найти(ВременнаяСтрока,СимволРазделитель);
   ТабельныйНомер =    СокрЛП(  Лев(ВременнаяСтрока,НомерСимвола - 1));
   ВременнаяСтрока =   Сред(ВременнаяСтрока,НомерСимвола + 1);
   
   
      НомерСимвола       = Найти(ВременнаяСтрока,СимволРазделитель);
   СоставнаяЧасть =    СокрЛП(  Лев(ВременнаяСтрока,НомерСимвола - 1));
   ВременнаяСтрока =    Сред(ВременнаяСтрока,НомерСимвола + 1);
   
   
      НомерСимвола   = Найти(ВременнаяСтрока,СимволРазделитель);
   Индексируется =       СокрЛП(  Лев(ВременнаяСтрока,НомерСимвола - 1));
   ВременнаяСтрока =   Сред(ВременнаяСтрока,НомерСимвола + 1);
 
     
   Сумма =  Число (ВременнаяСтрока);
   


[color=красный ]   ТаблицаЗначений = Новый ТаблицаЗначений;[/color]
   ТаблицаЗначений.Колонки.Добавить("Период");
   ТаблицаЗначений.Колонки.Добавить("Сотрудник");
   ТаблицаЗначений.Колонки.Добавить("ТабельныйНомер");
   ТаблицаЗначений.Колонки.Добавить("СоставнаяЧасть");
   ТаблицаЗначений.Колонки.Добавить("Индексируется");
   ТаблицаЗначений.Колонки.Добавить("Сумма");
    
      Строка = ТаблицаЗначений.Добавить();
      Строка.Сотрудник = ВременнаяСтрока.Сотрудник;
      Строка.ТабельныйНомер = ВременнаяСтрока.ТабельныйНомер;
      Строка.СоставнаяЧасть =ВременнаяСтрока. СоставнаяЧасть;
      Строка.Индексируется = ВременнаяСтрока.Индексируется;
      Строка.Сумма = ВременнаяСтрока.Сумма;
          
    КонецЦикла;
ЗначениеВДанныеФормы(ТаблицаЗначений, Таблица1);   
КонецПроцедуры
</code>

Подскажите пожалуйста дальнейший алгоритм действий. Пока дошел до того, что бы выгрузить Таблицу значений в таблицу значений на форме, но почему то на форме оказывается только последняя строка из таблицы значений( видимо данные по циклу перезаписываются в одну строку, и соответственно последняя строка у нас выводится). Подскажите пожалуйста, в чем ошибка?


Таблица значений создается в цикле (нужная строка выделена цветом), поэтому в ней одна единственная строчка.
Создание таблицы значений нужно делать перед циклом. Далее таблицу значений закидываем во временную таблицу. Проводим сопоставление с объектами ИБ(средствами запроса). Дальше запросом вытаскиваем различающиеся записи между двумя таблицами.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск