7.7 Выгрузка проводок в 1С бух. Прошу помощи!

Тема в разделе "Обмен данными в "1С:Предприятие 7.7"", создана пользователем egorkin, 29 июл 2011.

  1. TopicStarter Overlay
    egorkin
    Offline

    egorkin Опытный в 1С

    Регистрация:
    28 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Баллы:
    26
    Добрый день, уважаемые знатоки 1С! Уже второю неделю борюсь с проблемой, решения не видно, поэтому прошу помощи.
    Расскажу по порядку:
    0. Движение товара в программе (рис.0)
    Посмотреть вложение 8108
    1. Из 1С е-фарма, выгружаю проводки (рис.1)
    Посмотреть вложение 8109
    2. При загрузке в 1С бух 7.7 видим следующие в проводках (рис.2)
    Посмотреть вложение 8110

    ВИДИМ СУТЬ ПРОБЛЕМЫ на рис.2:
    На последней операции Кт должен быть 41.29 (Склад наркотики), а идет 41.1 (Склад, или Отдел запасов), но внизу подпись Склад Наркотики!!!!

    3. В 1С е-фарма за выгрузку отвечает внешний обработчик в нем о прописано след

    Код:
    	//----	Создаем проводки операции	----------------------------------------
    
    Таб.ВыбратьСтроки();
    Пока Таб.ПолучитьСтроку() = 1 Цикл
    
    СчетДт	=	СокрЛП(Таб.СчетД);
    Если СчетДт = "41.14" Тогда
    СубконтоД2 = СокрЛП(Таб.СубконтоД2.Наименование);
    Если (СубконтоД2 = "Отдел запасов") <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/или')">или			</span>(СубконтоД2 = "Склад") Тогда
    Продолжить;
    ИначеЕсли (СубконтоД2 = "а/п ""Дежурный""") или (СубконтоД2 = "а/п ""Дежурный"" (Н)") или (СубконтоД2 = "Аптека ""Отдел готовых лекарственных форм""") Тогда
    СчетДт	=	"41.11";
    ИначеЕсли СубконтоД2 = "а/п ""Приокский""" Тогда
    СчетДт	=	"41.12";
    ИначеЕсли СубконтоД2 = "а/п ""Татарская""" Тогда
    СчетДт	=	"41.13";
    ИначеЕсли СубконтоД2 = "Аптека ""Парацельс-II""" Тогда
    //СчетДт	=	"41.14";
    ИначеЕсли СубконтоД2 = "а/п ""Черемушки""" Тогда
    СчетДт	=	"41.15";
    ИначеЕсли СубконтоД2 = "Аптека ""АГЛФ Рязань""" Тогда
    СчетДт	=	"41.16";
    ИначеЕсли СубконтоД2 = "а/п ""Сиверка""" Тогда
    СчетДт	=	"41.17";
    ИначеЕсли СубконтоД2 = "а/п ""Загородная-1""" Тогда
    СчетДт	=	"41.18";
    ИначеЕсли СубконтоД2 = "Магазин ""Канцтовары""" Тогда
    СчетДт	=	"41.19";
    ИначеЕсли СубконтоД2 = "Магазин ""Радуга""" Тогда
    СчетДт	=	"41.20";
    ИначеЕсли СубконтоД2 = "Столовая ""Радуга""" Тогда
    СчетДт	=	"41.21";
    ИначеЕсли СубконтоД2 = "а/п ""Загородная-2""" Тогда
    СчетДт	=	"41.22";
    ИначеЕсли СубконтоД2 = "СКЛАД ОПС" Тогда
    СчетДт	=	"41.2";
    ИначеЕсли СубконтоД2 = "Склад Продуктов" Тогда
    СчетДт	=	"41.1";
    ИначеЕсли СубконтоД2 = "ООО Парацельс" Тогда
    СчетДт	=	"44.1.2";
    ИначеЕсли СубконтоД2 = "Аптека ""ПАРАФАРМАЦИЯ""" Тогда
    СчетДт	=	"41.23";
    ИначеЕсли СубконтоД2 = "Склад ВЕТ.ПРЕПАРАТЫ" Тогда
    СчетДт	=	"41.24";
    ИначеЕсли СубконтоД2 = "Склад Администрации" Тогда
    СчетДт	=	"41.25";
    ИначеЕсли СубконтоД2 = "Аптека ""Гавань""Советская 16/2" Тогда
    СчетДт	=	"41.26";
    ИначеЕсли СубконтоД2 = "Аптека ""Гавань""( ПАРАФАРМАЦИЯ )" Тогда
    СчетДт	=	"41.27";
    ИначеЕсли СубконтоД2 = "а/п ""Гостиница""" Тогда
    СчетДт	=	"41.28";
    ИначеЕсли СубконтоД2 = "Склад Наркотики" Тогда
    СчетДт	=	"41.29";
    Иначе
    Сообщить("Отдел не найден: " + СубконтоД2);
    КонецЕсли;
    ИначеЕсли (СчетДт	=	"41.1") Тогда
    СубконтоД2 = Таб.СубконтоД2;
    Если ПустоеЗначение(СубконтоД2) = 0 Тогда
    Если СокрЛП(СубконтоД2.Наименование) = "СКЛАД ОПС" Тогда
    СчетДт	=	"41.2";
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    СчетКт	=	СокрЛП(Таб.СчетК);
    Если СчетКт = "41.14" Тогда
    СубконтоК2 = СокрЛП(Таб.СубконтоК2.Наименование);
    Если (СубконтоК2 = "Отдел запасов") или (СубконтоК2 = "Склад") Тогда
    Продолжить;
    ИначеЕсли (СубконтоК2 = "а/п ""Дежурный""") или 
    //(СубконтоК2 = "а/п ""Дежурный"" (Н)") или 
    (СубконтоК2 = "Аптека ""Отдел готовых лекарственных форм""") Тогда
    СчетКт	=	"41.11";
    ИначеЕсли СубконтоК2 = "а/п ""Приокский""" Тогда
    СчетКт	=	"41.12";
    ИначеЕсли СубконтоК2 = "а/п ""Татарская""" Тогда
    СчетКт	=	"41.13";
    ИначеЕсли СубконтоК2 = "Аптека ""Парацельс-II""" Тогда
    СчетКт	=	"41.14";
    ИначеЕсли СубконтоК2 = "а/п ""Черемушки""" Тогда
    СчетКт	=	"41.15";
    ИначеЕсли СубконтоК2 = "Аптека ""АГЛФ Рязань""" Тогда
    СчетКт	=	"41.16";
    ИначеЕсли СубконтоК2 = "а/п ""Сиверка""" Тогда
    СчетКт	=	"41.17";
    ИначеЕсли СубконтоК2 = "а/п ""Загородная-1""" Тогда
    СчетКт	=	"41.18";
    ИначеЕсли СубконтоК2 = "Магазин ""Канцтовары""" Тогда
    СчетКт	=	"41.19";
    ИначеЕсли СубконтоК2 = "Магазин ""Радуга""" Тогда
    СчетКт	=	"41.20";
    ИначеЕсли СубконтоК2 = "Столовая ""Радуга""" Тогда
    СчетКт	=	"41.21";
    ИначеЕсли СубконтоК2 = "а/п ""Загородная-2""" Тогда
    СчетКт	=	"41.22";
    ИначеЕсли СубконтоК2 = "Аптека ""ПАРАФАРМАЦИЯ""" Тогда
    СчетКт	=	"41.23";
    ИначеЕсли СубконтоК2 = "Склад ВЕТ.ПРЕПАРАТЫ" Тогда
    СчетКт	=	"41.24";
    ИначеЕсли СубконтоК2 = "Склад Администрации" Тогда
    СчетКт	=	"41.25";
    ИначеЕсли СубконтоК2 = "Аптека ""Гавань""Советская 16/2" Тогда
    СчетКт	=	"41.26";
    ИначеЕсли СубконтоК2 = "Аптека ""Гавань""( ПАРАФАРМАЦИЯ )" Тогда
    СчетКт	=	"41.27";
    ИначеЕсли СубконтоК2 = "а/п ""Гостиница""" Тогда
    СчетКт	=	"41.28";
    ИначеЕсли СубконтоК2 = "Склад Наркотики" Тогда
    СчетКт	=	"41.29";
    Иначе
    Сообщить("Отдел не найден: " + СубконтоК2);
    КонецЕсли;
    ИначеЕсли (СчетКт	=	"41.1") Тогда
    СубконтоК2 = Таб.СубконтоК2;
    Если ПустоеЗначение(СубконтоК2) = 0 Тогда
    Если СокрЛП(СубконтоК2.Наименование) = "СКЛАД ОПС" Тогда
    СчетКт	=	"41.2";
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    
    Думаю здесь суть, но могу ошибаться.
    Один интересный момент в справочнике по хоз.операциям (рис.3)
    Посмотреть вложение 8111
    где за дебет 41.14, а кредит 41.1?
    Менял на дебет 41.14, а кредит 41.14, получислось, почти нормально, но стала не отображаться в 1С проводка кредит 41.1 (Склад, отдел запасов) дебит 41.29 (любая другая точка).
    Очень прошу ПОМОГИТЕ найти суть проблемы!
    Выкладываю МД, файл выгрузки
    Заранее Спасибо

    вот

    Вложения:

  2. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    на рис 1
    дт41.14 кт 41.1
    исправь
    дт41.14 кт 41.14

    и ваще такая логика это бред

    ИначеЕсли СубконтоК2 = "Магазин ""Радуга""" Тогда
    СчетКт = "41.20";
    ИначеЕсли СубконтоК2 = "Столовая ""Радуга""" Тогда
    СчетКт = "41.21";

    ИначеЕсли СубконтоК2 = "а/п ""Загородная-2""" Тогда
    СчетКт = "41.22";

    добавьте реквизит в скалады и пишите счет туда
  3. TopicStarter Overlay
    egorkin
    Offline

    egorkin Опытный в 1С

    Регистрация:
    28 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Баллы:
    26
    Подскажите как? В общих чертах...

    При такой расстановке, в 1С бух в проводках почему то не фигурирует такая хоз операция
    дт 41.29 (точки) кт 41.1 (склад) (рис 4)
    А она играет большую роль
    Посмотреть вложение 8129

    Вложения:

    • рис_4.JPG
      рис_4.JPG
      Размер файла:
      109,9 КБ
      Просмотров:
      35
  4. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    трудно что-либо посоветовать, так как скорее всего в программе изначально была заложена логика проведения хоз.операций и счета Дт и Кт задавались бухом. Но потом логика была изменена в угоду хотелок того же буха. В рез-те имеете то что имеете. Логику переписывать надо. Пройдись отладчиком, думаю увидишь условие неформирования проводки.
  5. TopicStarter Overlay
    egorkin
    Offline

    egorkin Опытный в 1С

    Регистрация:
    28 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Баллы:
    26
    А в 1С бух 7.7 , какой внешний обработчик отвечает за загрузку данных?
    Знать бы как((((
  6. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Ну дЫк тогда пригласите спеца на месте
  7. TopicStarter Overlay
    egorkin
    Offline

    egorkin Опытный в 1С

    Регистрация:
    28 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Баллы:
    26
    У нас в районе один спец на всех, цены лупит, если только удаленно с кем-нибудь договорится...

    подскажите, или он встроен в конфигурацию?
  8. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Обработчик внешний... Причем здесь "встроенный в конфигурацию"?
  9. TopicStarter Overlay
    egorkin
    Offline

    egorkin Опытный в 1С

    Регистрация:
    28 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Баллы:
    26
    извините, все нашел уже
  10. TopicStarter Overlay
    egorkin
    Offline

    egorkin Опытный в 1С

    Регистрация:
    28 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Баллы:
    26
    Просмотрев процедуру выгрузки отладчиком показала следующие:

    1) Если у нас дт41.14 кт 41.1 то проводки формируются все, но при перемещении товара с точки в др. за кт всегда идет 41.1, а субконтоД2 формируется правильно.

    2) Если у нас дт41.14 кт 41.14 то не формируется проводка дт41.29(точка) кт 41.1(склад), в отладчике видно было что при формировании этой проводки происходит след:
    а) Сначала формир СчетДт = "41.29" и СубконтоД2 = "Склад Наркотики" (все верно)
    б) Далее доходит до СчетКт = "41.14" (дальше должна пойти выборка)
    Код:
    СчетКт	=	СокрЛП(Таб.СчетК);
    Если СчетКт = "41.14" Тогда
    СубконтоК2 = СокрЛП(Таб.СубконтоК2.Наименование);
    Если (СубконтоК2 = "Отдел запасов") или 
    
    (СубконтоК2 = "Склад") Тогда
    
    но выборка не проходит на строке (СубконтоК2 = "Склад") нажав F8 курсор уходит в
    Код:
    Таб.ВыбратьСтроки();
    Пока Таб.ПолучитьСтроку() = 1 Цикл
    
    вобщем в самый вверх процедуру
    в) Далее нажав F8 курсор на
    Код:
    Для Сч = 1 По 3 Цикл ВыгрузитьСубконто(УзелПроводки, Таб, "К", Сч) КонецЦикла;
    
    КонецЦикла;
    
    при этом в табло след значения
    СчетДт = "41.29"
    СчетКт = "41.14"
    СубконтоД2 = "Склад Наркотики"
    СубконтоК2 = "Отдел запасов"
    где вместо СчетКт = "41.14" по идеи должен СчетКт = "41.1", но выборка почеме то не прошла.
    г) Далее нажав F8 курсор на
    Код:
    Процедура ЗаписатьОбъектВФайл(XML_DOM);
    
    гСчетчикВыгруженныхОбъектов	=	гСчетчикВыгруженныхОбъектов + 1;
    
    XML_DOM.УстановитьАтрибут("Нпп", гСчетчикВыгруженныхОбъектов);
    
    гФайлДанных.ВключитьЭлемент(XML_DOM);
    
    
    Если гСчетчикВыгруженныхОбъектов % ФормКолвоБуферизуемыхОбъектов = 0 Тогда
    гФайлДанных.Сбросить();
    КонецЕсли;
    
    Если гСчетчикВыгруженныхОбъектов % 10 = 0 Тогда	Состояние("Выгружено объектов:    " + гСчетчикВыгруженныхОбъектов) КонецЕсли;
    
    КонецПроцедуры
    
    при этом в табло след значения
    СчетДт = Ошибка в выражении!
    СчетКт = Ошибка в выражении!
    СубконтоД2 = Ошибка в выражении!
    СубконтоК2 = Ошибка в выражении!

    И далее идут ошибки, будьте добры подскажите не ученому как быть дальше. Заранее спасибо.
  11. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    судя по описанию не выполнилось условие
    Код:
    Если СчетКт = "41.14" Тогда
    
    
    ну или справа от этой строки (за пределами экрана) есть еще код.
    Сталкивался я на днях с такой шуткой
  12. TopicStarter Overlay
    egorkin
    Offline

    egorkin Опытный в 1С

    Регистрация:
    28 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Баллы:
    26
    Справа точно ничего лишнего нет, просмотрел все внимательно)

    Самое интересное что это условие выполняется если допустим идет так: дт41.11(точка) кт 41.29(точка) проводка формируется в выгрузке, а если дт41.29(точка) кт 41.1(склад) то условие обходит стороной!!! Что модет быть то не так?
  13. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Правильно... У вас же четкое сравнение.
    Т.е. по локике прграммы
    41.1(склад)<>41.1

    Нужно ставить условие так
    Код:
    НашСчет= "41.1(склад)";//ну тут ваше присвоение
    Если Лев(НашСчет,4)="41.1" Тогда
    
    
    но учтите, что если будет НашСчет=41.11 - тоже сработает
  14. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    не, добавьте условие
    Если (СубконтоК2 = "Отдел запасов") или (СубконтоК2 = "Склад") или (СубконтоК2 = "Наркотики") Тогда
  15. TopicStarter Overlay
    egorkin
    Offline

    egorkin Опытный в 1С

    Регистрация:
    28 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Баллы:
    26
    простите за неграмоность,
    1) а куда вставить
    Код:
    НашСчет= "41.1(склад)";//ну тут ваше присвоение
    Если Лев(НашСчет,4)="41.1" Тогда
    
    
    2) Смысл этого выражения
    Код:
    Если (СубконтоК2 = "Отдел запасов") или (СубконтоК2 = "Склад") или (СубконтоК2 = "Наркотики") Тогда
    
    
  16. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    желательно все же увидеть полный код обработки....
    Чтобы определить путь решения
  17. TopicStarter Overlay
    egorkin
    Offline

    egorkin Опытный в 1С

    Регистрация:
    28 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Баллы:
    26
    Эт без проблем

    Вложения:

  18. TopicStarter Overlay
    egorkin
    Offline

    egorkin Опытный в 1С

    Регистрация:
    28 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Баллы:
    26
    такой вариант не проходит, та же самая ошибка
  19. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    ставь скайп и тимвьювер, см.надо по месту, конфа больно специфичная да и не оч. понятно какая конкретно логика должна быть.
  20. TopicStarter Overlay
    egorkin
    Offline

    egorkin Опытный в 1С

    Регистрация:
    28 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Баллы:
    26
    Спасибо всем за ответы и предложения. Решение проблемы нашел, кое-что переделал в обработчике и заработало, а именно:
    1. было так
    Код:
    СчетДт = СокрЛП(Таб.СчетД);		
    Если СчетДт = "41.14" <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/тогда')">Тогда			</span>
    СубконтоД2 = СокрЛП(Таб.СубконтоД2.Наименование);
    Если (СубконтоД2 = "Отдел запасов") или (СубконтоД2 = "Склад") Тогда
    Продолжить;
    ИначеЕсли (СубконтоД2 = "а/п ""Дежурный""") или (СубконтоД2 = "а/п ""Дежурный"" (Н)") 
    или (СубконтоД2 = "Аптека ""Отдел готовых лекарственных форм""") Тогда
    СчетДт = "41.11";
    
    2. стало
    Код:
    	СчетДт	=	СокрЛП(Таб.СчетД);
    Если СчетДт = "41.14" Тогда
    СубконтоД2 = СокрЛП(Таб.СубконтоД2.Наименование);
    
    Если (СубконтоД2 = "а/п ""Дежурный""") или (СубконтоД2 = "а/п ""Дежурный"" (Н)") 
    или (СубконтоД2 = "Аптека ""Отдел готовых лекарственных форм""") Тогда
    СчетДт	=	"41.11";
    
    ИначеЕсли (СубконтоД2 = "Отдел запасов") или (СубконтоД2 = "Склад") Тогда
    СчетДт	=	"41.1";
    
    получилось случайно, т.к программист я не какой по сути.
    Спасибо за внимание.

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